Home | History | Annotate | Download | only in compiler
      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_VARIABLE_INFO_H_
      8 #define COMPILER_VARIABLE_INFO_H_
      9 
     10 #include "GLSLANG/ShaderLang.h"
     11 #include "compiler/intermediate.h"
     12 
     13 // Provides information about a variable.
     14 // It is currently being used to store info about active attribs and uniforms.
     15 struct TVariableInfo {
     16     TVariableInfo(ShDataType type, int size);
     17     TVariableInfo();
     18 
     19     TPersistString name;
     20     TPersistString mappedName;
     21     ShDataType type;
     22     int size;
     23 };
     24 typedef std::vector<TVariableInfo> TVariableInfoList;
     25 
     26 // Traverses intermediate tree to collect all attributes and uniforms.
     27 class CollectAttribsUniforms : public TIntermTraverser {
     28 public:
     29     CollectAttribsUniforms(TVariableInfoList& attribs,
     30                            TVariableInfoList& uniforms,
     31                            ShHashFunction64 hashFunction);
     32 
     33     virtual void visitSymbol(TIntermSymbol*);
     34     virtual void visitConstantUnion(TIntermConstantUnion*);
     35     virtual bool visitBinary(Visit, TIntermBinary*);
     36     virtual bool visitUnary(Visit, TIntermUnary*);
     37     virtual bool visitSelection(Visit, TIntermSelection*);
     38     virtual bool visitAggregate(Visit, TIntermAggregate*);
     39     virtual bool visitLoop(Visit, TIntermLoop*);
     40     virtual bool visitBranch(Visit, TIntermBranch*);
     41 
     42 private:
     43     TVariableInfoList& mAttribs;
     44     TVariableInfoList& mUniforms;
     45 
     46     ShHashFunction64 mHashFunction;
     47 };
     48 
     49 #endif  // COMPILER_VARIABLE_INFO_H_
     50