Edit

kc3-lang/angle/src/compiler/translator/tree_ops/RemoveInvariantDeclaration.cpp

Branch :

  • Show log

    Commit

  • Author : Shahbaz Youssefi
    Date : 2019-12-03 11:31:18
    Hash : 795a3559
    Message : Vulkan: EXT_gpu_shader5 support: precise The precise keyword is used in tessellation shaders but introduced in this extension. EXT_gpu_shader5 introduces a handful of features to shaders. This change only implements the `precise` keyword. Bug: angleproject:3569 Change-Id: I2252b79098eb8ba2d2faa040d7eaed7548b7051e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1939851 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/compiler/translator/tree_ops/RemoveInvariantDeclaration.cpp
  • //
    // Copyright 2016 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include "compiler/translator/tree_ops/RemoveInvariantDeclaration.h"
    
    #include "compiler/translator/tree_util/IntermTraverse.h"
    
    namespace sh
    {
    
    namespace
    {
    
    // An AST traverser that removes invariant declaration for input in fragment shader
    // when GLSL >= 4.20 and for output in vertex shader when GLSL < 4.2.
    class RemoveInvariantDeclarationTraverser : public TIntermTraverser
    {
      public:
        RemoveInvariantDeclarationTraverser() : TIntermTraverser(true, false, false) {}
    
      private:
        bool visitGlobalQualifierDeclaration(Visit visit,
                                             TIntermGlobalQualifierDeclaration *node) override
        {
            if (node->isInvariant())
            {
                TIntermSequence emptyReplacement;
                mMultiReplacements.push_back(NodeReplaceWithMultipleEntry(getParentNode()->getAsBlock(),
                                                                          node, emptyReplacement));
            }
            return false;
        }
    };
    
    }  // anonymous namespace
    
    bool RemoveInvariantDeclaration(TCompiler *compiler, TIntermNode *root)
    {
        RemoveInvariantDeclarationTraverser traverser;
        root->traverse(&traverser);
        return traverser.updateTree(compiler, root);
    }
    
    }  // namespace sh