• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (c) 2002-2010 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 #include "GLSLANG/ShaderLang.h"
8 #include "compiler/intermediate.h"
9 
10 // Provides information about a variable.
11 // It is currently being used to store info about active attribs and uniforms.
12 struct TVariableInfo {
13     TPersistString name;
14     ShDataType type;
15     int size;
16 };
17 typedef std::vector<TVariableInfo> TVariableInfoList;
18 
19 // Traverses intermediate tree to collect all attributes and uniforms.
20 class CollectAttribsUniforms : public TIntermTraverser {
21 public:
22     CollectAttribsUniforms(TVariableInfoList& attribs,
23                            TVariableInfoList& uniforms);
24 
25     virtual void visitSymbol(TIntermSymbol*);
26     virtual void visitConstantUnion(TIntermConstantUnion*);
27     virtual bool visitBinary(Visit, TIntermBinary*);
28     virtual bool visitUnary(Visit, TIntermUnary*);
29     virtual bool visitSelection(Visit, TIntermSelection*);
30     virtual bool visitAggregate(Visit, TIntermAggregate*);
31     virtual bool visitLoop(Visit, TIntermLoop*);
32     virtual bool visitBranch(Visit, TIntermBranch*);
33 
34 private:
35     TVariableInfoList& mAttribs;
36     TVariableInfoList& mUniforms;
37 };
38 
39