Line data Source code
1 : //
2 : // Copyright (c) 2002-2011 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_VARIABLEINFO_H_
8 : #define COMPILER_TRANSLATOR_VARIABLEINFO_H_
9 :
10 : #include <GLSLANG/ShaderLang.h>
11 :
12 : #include "compiler/translator/ExtensionBehavior.h"
13 : #include "compiler/translator/IntermNode.h"
14 :
15 : class TSymbolTable;
16 :
17 : namespace sh
18 : {
19 :
20 : // Traverses intermediate tree to collect all attributes, uniforms, varyings.
21 0 : class CollectVariables : public TIntermTraverser
22 : {
23 : public:
24 : CollectVariables(std::vector<Attribute> *attribs,
25 : std::vector<OutputVariable> *outputVariables,
26 : std::vector<Uniform> *uniforms,
27 : std::vector<Varying> *varyings,
28 : std::vector<InterfaceBlock> *interfaceBlocks,
29 : ShHashFunction64 hashFunction,
30 : const TSymbolTable &symbolTable,
31 : const TExtensionBehavior &extensionBehavior);
32 :
33 : void visitSymbol(TIntermSymbol *symbol) override;
34 : bool visitDeclaration(Visit, TIntermDeclaration *node) override;
35 : bool visitBinary(Visit visit, TIntermBinary *binaryNode) override;
36 :
37 : private:
38 : template <typename VarT>
39 : void visitVariable(const TIntermSymbol *variable, std::vector<VarT> *infoList) const;
40 :
41 : template <typename VarT>
42 : void visitInfoList(const TIntermSequence &sequence, std::vector<VarT> *infoList) const;
43 :
44 : std::vector<Attribute> *mAttribs;
45 : std::vector<OutputVariable> *mOutputVariables;
46 : std::vector<Uniform> *mUniforms;
47 : std::vector<Varying> *mVaryings;
48 : std::vector<InterfaceBlock> *mInterfaceBlocks;
49 :
50 : std::map<std::string, InterfaceBlockField *> mInterfaceBlockFields;
51 :
52 : bool mDepthRangeAdded;
53 : bool mPointCoordAdded;
54 : bool mFrontFacingAdded;
55 : bool mFragCoordAdded;
56 :
57 : bool mInstanceIDAdded;
58 : bool mVertexIDAdded;
59 : bool mPositionAdded;
60 : bool mPointSizeAdded;
61 : bool mLastFragDataAdded;
62 : bool mFragColorAdded;
63 : bool mFragDataAdded;
64 : bool mFragDepthEXTAdded;
65 : bool mFragDepthAdded;
66 : bool mSecondaryFragColorEXTAdded;
67 : bool mSecondaryFragDataEXTAdded;
68 :
69 : ShHashFunction64 mHashFunction;
70 :
71 : const TSymbolTable &mSymbolTable;
72 : const TExtensionBehavior &mExtensionBehavior;
73 : };
74 :
75 : void ExpandVariable(const ShaderVariable &variable,
76 : const std::string &name,
77 : const std::string &mappedName,
78 : bool markStaticUse,
79 : std::vector<ShaderVariable> *expanded);
80 :
81 : // Expand struct uniforms to flattened lists of split variables
82 : void ExpandUniforms(const std::vector<Uniform> &compact,
83 : std::vector<ShaderVariable> *expanded);
84 :
85 : }
86 :
87 : #endif // COMPILER_TRANSLATOR_VARIABLEINFO_H_
|