1// 2// Copyright (c) 2013 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#ifndef COMPILER_FLAGSTD140STRUCTS_H_ 8#define COMPILER_FLAGSTD140STRUCTS_H_ 9 10#include "compiler/translator/IntermNode.h" 11 12namespace sh 13{ 14 15// This class finds references to nested structs of std140 blocks that access 16// the nested struct "by value", where the padding added in the translator 17// conflicts with the "natural" unpadded type. 18class FlagStd140Structs : public TIntermTraverser 19{ 20 public: 21 const std::vector<TIntermTyped *> getFlaggedNodes() const { return mFlaggedNodes; } 22 23 protected: 24 virtual bool visitBinary(Visit visit, TIntermBinary *binaryNode); 25 virtual void visitSymbol(TIntermSymbol *symbol); 26 27 private: 28 bool isInStd140InterfaceBlock(TIntermTyped *node) const; 29 30 std::vector<TIntermTyped *> mFlaggedNodes; 31}; 32 33std::vector<TIntermTyped *> FlagStd140ValueStructs(TIntermNode *node); 34 35} 36 37#endif // COMPILER_FLAGSTD140STRUCTS_H_ 38