// // Copyright (c) 2002-2011 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // #ifndef COMPILER_VARIABLE_INFO_H_ #define COMPILER_VARIABLE_INFO_H_ #include #include "compiler/translator/IntermNode.h" class TSymbolTable; namespace sh { // Traverses intermediate tree to collect all attributes, uniforms, varyings. class CollectVariables : public TIntermTraverser { public: CollectVariables(std::vector *attribs, std::vector *outputVariables, std::vector *uniforms, std::vector *varyings, std::vector *interfaceBlocks, ShHashFunction64 hashFunction, const TSymbolTable &symbolTable); virtual void visitSymbol(TIntermSymbol *symbol); virtual bool visitAggregate(Visit, TIntermAggregate *node); virtual bool visitBinary(Visit visit, TIntermBinary *binaryNode); private: template void visitVariable(const TIntermSymbol *variable, std::vector *infoList) const; template void visitInfoList(const TIntermSequence &sequence, std::vector *infoList) const; std::vector *mAttribs; std::vector *mOutputVariables; std::vector *mUniforms; std::vector *mVaryings; std::vector *mInterfaceBlocks; std::map mInterfaceBlockFields; bool mPointCoordAdded; bool mFrontFacingAdded; bool mFragCoordAdded; bool mPositionAdded; bool mPointSizeAdded; ShHashFunction64 mHashFunction; const TSymbolTable &mSymbolTable; }; // Expand struct uniforms to flattened lists of split variables void ExpandUniforms(const std::vector &compact, std::vector *expanded); } #endif // COMPILER_VARIABLE_INFO_H_