// // Copyright (c) 2013 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. // #ifndef COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_ #define COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_ #include "compiler/translator/IntermNode.h" namespace sh { // This class finds references to nested structs of std140 blocks that access // the nested struct "by value", where the padding added in the translator // conflicts with the "natural" unpadded type. class FlagStd140Structs : public TIntermTraverser { public: FlagStd140Structs() : TIntermTraverser(true, false, false) { } const std::vector getFlaggedNodes() const { return mFlaggedNodes; } protected: bool visitBinary(Visit visit, TIntermBinary *binaryNode) override; void visitSymbol(TIntermSymbol *symbol) override; private: bool isInStd140InterfaceBlock(TIntermTyped *node) const; std::vector mFlaggedNodes; }; std::vector FlagStd140ValueStructs(TIntermNode *node); } #endif // COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_