Line data Source code
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_TRANSLATOR_FLAGSTD140STRUCTS_H_
8 : #define COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_
9 :
10 : #include "compiler/translator/IntermNode.h"
11 :
12 : namespace 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.
18 0 : class FlagStd140Structs : public TIntermTraverser
19 : {
20 : public:
21 :
22 0 : FlagStd140Structs()
23 0 : : TIntermTraverser(true, false, false)
24 : {
25 0 : }
26 :
27 0 : const std::vector<TIntermTyped *> getFlaggedNodes() const { return mFlaggedNodes; }
28 :
29 : protected:
30 : bool visitBinary(Visit visit, TIntermBinary *binaryNode) override;
31 : void visitSymbol(TIntermSymbol *symbol) override;
32 :
33 : private:
34 : bool isInStd140InterfaceBlock(TIntermTyped *node) const;
35 :
36 : std::vector<TIntermTyped *> mFlaggedNodes;
37 : };
38 :
39 : std::vector<TIntermTyped *> FlagStd140ValueStructs(TIntermNode *node);
40 :
41 : }
42 :
43 : #endif // COMPILER_TRANSLATOR_FLAGSTD140STRUCTS_H_
|