alokp@chromium.org | 07620a5 | 2010-09-23 17:53:56 +0000 | [diff] [blame] | 1 | // |
zmo@google.com | fd747b8 | 2011-04-23 01:30:07 +0000 | [diff] [blame] | 2 | // Copyright (c) 2002-2011 The ANGLE Project Authors. All rights reserved. |
alokp@chromium.org | 07620a5 | 2010-09-23 17:53:56 +0000 | [diff] [blame] | 3 | // Use of this source code is governed by a BSD-style license that can be |
| 4 | // found in the LICENSE file. |
| 5 | // |
| 6 | |
Geoff Lang | 0a73dd8 | 2014-11-19 16:18:08 -0500 | [diff] [blame] | 7 | #ifndef COMPILER_TRANSLATOR_VARIABLEINFO_H_ |
| 8 | #define COMPILER_TRANSLATOR_VARIABLEINFO_H_ |
zmo@google.com | fd747b8 | 2011-04-23 01:30:07 +0000 | [diff] [blame] | 9 | |
Jamie Madill | e294bb8 | 2014-07-17 14:16:26 -0400 | [diff] [blame] | 10 | #include <GLSLANG/ShaderLang.h> |
Jamie Madill | 13cfd27 | 2014-07-17 14:16:28 -0400 | [diff] [blame] | 11 | |
Jamie Madill | b1a85f4 | 2014-08-19 15:23:24 -0400 | [diff] [blame] | 12 | #include "compiler/translator/IntermNode.h" |
alokp@chromium.org | 07620a5 | 2010-09-23 17:53:56 +0000 | [diff] [blame] | 13 | |
Zhenyao Mo | 94ac7b7 | 2014-10-15 18:22:08 -0700 | [diff] [blame] | 14 | class TSymbolTable; |
| 15 | |
Jamie Madill | a2fbb84 | 2014-09-03 09:40:47 -0400 | [diff] [blame] | 16 | namespace sh |
| 17 | { |
| 18 | |
Zhenyao Mo | 74da9f2 | 2013-09-23 14:57:01 -0400 | [diff] [blame] | 19 | // Traverses intermediate tree to collect all attributes, uniforms, varyings. |
Jamie Madill | 23a8a43 | 2014-07-09 13:27:42 -0400 | [diff] [blame] | 20 | class CollectVariables : public TIntermTraverser |
| 21 | { |
| 22 | public: |
Jamie Madill | a2fbb84 | 2014-09-03 09:40:47 -0400 | [diff] [blame] | 23 | CollectVariables(std::vector<Attribute> *attribs, |
| 24 | std::vector<Attribute> *outputVariables, |
| 25 | std::vector<Uniform> *uniforms, |
| 26 | std::vector<Varying> *varyings, |
| 27 | std::vector<InterfaceBlock> *interfaceBlocks, |
Zhenyao Mo | 94ac7b7 | 2014-10-15 18:22:08 -0700 | [diff] [blame] | 28 | ShHashFunction64 hashFunction, |
| 29 | const TSymbolTable &symbolTable); |
alokp@chromium.org | 07620a5 | 2010-09-23 17:53:56 +0000 | [diff] [blame] | 30 | |
Jamie Madill | 4667c45 | 2014-07-08 15:02:36 -0400 | [diff] [blame] | 31 | virtual void visitSymbol(TIntermSymbol *symbol); |
| 32 | virtual bool visitAggregate(Visit, TIntermAggregate *node); |
Jamie Madill | b547ddf | 2014-08-25 16:20:46 -0400 | [diff] [blame] | 33 | virtual bool visitBinary(Visit visit, TIntermBinary *binaryNode); |
alokp@chromium.org | 07620a5 | 2010-09-23 17:53:56 +0000 | [diff] [blame] | 34 | |
Jamie Madill | 23a8a43 | 2014-07-09 13:27:42 -0400 | [diff] [blame] | 35 | private: |
Jamie Madill | d5512cd | 2014-07-10 17:50:08 -0400 | [diff] [blame] | 36 | template <typename VarT> |
| 37 | void visitVariable(const TIntermSymbol *variable, std::vector<VarT> *infoList) const; |
| 38 | |
| 39 | template <typename VarT> |
| 40 | void visitInfoList(const TIntermSequence &sequence, std::vector<VarT> *infoList) const; |
| 41 | |
Jamie Madill | a2fbb84 | 2014-09-03 09:40:47 -0400 | [diff] [blame] | 42 | std::vector<Attribute> *mAttribs; |
| 43 | std::vector<Attribute> *mOutputVariables; |
| 44 | std::vector<Uniform> *mUniforms; |
| 45 | std::vector<Varying> *mVaryings; |
| 46 | std::vector<InterfaceBlock> *mInterfaceBlocks; |
Jamie Madill | d5512cd | 2014-07-10 17:50:08 -0400 | [diff] [blame] | 47 | |
Jamie Madill | a2fbb84 | 2014-09-03 09:40:47 -0400 | [diff] [blame] | 48 | std::map<std::string, InterfaceBlockField *> mInterfaceBlockFields; |
daniel@transgaming.com | 0aa3b5a | 2012-11-28 19:43:24 +0000 | [diff] [blame] | 49 | |
Jamie Madill | 55def58 | 2015-05-04 11:24:57 -0400 | [diff] [blame] | 50 | bool mDepthRangeAdded; |
Zhenyao Mo | d2d340b | 2013-09-23 14:57:05 -0400 | [diff] [blame] | 51 | bool mPointCoordAdded; |
| 52 | bool mFrontFacingAdded; |
| 53 | bool mFragCoordAdded; |
| 54 | |
Gregoire Payen de La Garanderie | b3dced2 | 2015-01-12 14:54:55 +0000 | [diff] [blame] | 55 | bool mInstanceIDAdded; |
Zhenyao Mo | 94ac7b7 | 2014-10-15 18:22:08 -0700 | [diff] [blame] | 56 | bool mPositionAdded; |
| 57 | bool mPointSizeAdded; |
Erik Dahlström | ea7a212 | 2014-11-17 16:15:57 +0100 | [diff] [blame] | 58 | bool mLastFragDataAdded; |
Zhenyao Mo | 94ac7b7 | 2014-10-15 18:22:08 -0700 | [diff] [blame] | 59 | |
daniel@transgaming.com | 0aa3b5a | 2012-11-28 19:43:24 +0000 | [diff] [blame] | 60 | ShHashFunction64 mHashFunction; |
Zhenyao Mo | 94ac7b7 | 2014-10-15 18:22:08 -0700 | [diff] [blame] | 61 | |
| 62 | const TSymbolTable &mSymbolTable; |
alokp@chromium.org | 07620a5 | 2010-09-23 17:53:56 +0000 | [diff] [blame] | 63 | }; |
| 64 | |
Zhenyao Mo | 409078f | 2014-10-28 13:23:18 -0700 | [diff] [blame] | 65 | // Expand struct uniforms to flattened lists of split variables |
| 66 | void ExpandUniforms(const std::vector<Uniform> &compact, |
| 67 | std::vector<ShaderVariable> *expanded); |
Jamie Madill | a2fbb84 | 2014-09-03 09:40:47 -0400 | [diff] [blame] | 68 | |
| 69 | } |
Jamie Madill | 23a8a43 | 2014-07-09 13:27:42 -0400 | [diff] [blame] | 70 | |
Geoff Lang | 0a73dd8 | 2014-11-19 16:18:08 -0500 | [diff] [blame] | 71 | #endif // COMPILER_TRANSLATOR_VARIABLEINFO_H_ |