tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

RemoveInvariantDeclaration.cpp (1357B)


      1 //
      2 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 #include "compiler/translator/tree_ops/RemoveInvariantDeclaration.h"
      8 
      9 #include "compiler/translator/tree_util/IntermTraverse.h"
     10 
     11 namespace sh
     12 {
     13 
     14 namespace
     15 {
     16 
     17 // An AST traverser that removes invariant declaration for input in fragment shader
     18 // when GLSL >= 4.20 and for output in vertex shader when GLSL < 4.2.
     19 class RemoveInvariantDeclarationTraverser : public TIntermTraverser
     20 {
     21  public:
     22    RemoveInvariantDeclarationTraverser() : TIntermTraverser(true, false, false) {}
     23 
     24  private:
     25    bool visitGlobalQualifierDeclaration(Visit visit,
     26                                         TIntermGlobalQualifierDeclaration *node) override
     27    {
     28        if (node->isInvariant())
     29        {
     30            TIntermSequence emptyReplacement;
     31            mMultiReplacements.emplace_back(getParentNode()->getAsBlock(), node,
     32                                            std::move(emptyReplacement));
     33        }
     34        return false;
     35    }
     36 };
     37 
     38 }  // anonymous namespace
     39 
     40 bool RemoveInvariantDeclaration(TCompiler *compiler, TIntermNode *root)
     41 {
     42    RemoveInvariantDeclarationTraverser traverser;
     43    root->traverse(&traverser);
     44    return traverser.updateTree(compiler, root);
     45 }
     46 
     47 }  // namespace sh