1 // 2 // Copyright (c) 2002-2014 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_LOCAL_INTERMEDIATE_H_ 8 #define COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_ 9 10 #include "compiler/translator/IntermNode.h" 11 12 struct TVectorFields 13 { 14 int offsets[4]; 15 int num; 16 }; 17 18 // 19 // Set of helper functions to help parse and build the tree. 20 // 21 class TInfoSink; 22 class TIntermediate 23 { 24 public: 25 POOL_ALLOCATOR_NEW_DELETE(); 26 TIntermediate(TInfoSink &i) 27 : mInfoSink(i) { } 28 29 TIntermSymbol *addSymbol( 30 int id, const TString &, const TType &, const TSourceLoc &); 31 TIntermTyped *addBinaryMath( 32 TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &); 33 TIntermTyped *addAssign( 34 TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &); 35 TIntermTyped *addIndex( 36 TOperator op, TIntermTyped *base, TIntermTyped *index, const TSourceLoc &); 37 TIntermTyped *addUnaryMath( 38 TOperator op, TIntermNode *child, const TSourceLoc &); 39 TIntermAggregate *growAggregate( 40 TIntermNode *left, TIntermNode *right, const TSourceLoc &); 41 TIntermAggregate *makeAggregate(TIntermNode *node, const TSourceLoc &); 42 TIntermAggregate *setAggregateOperator(TIntermNode *, TOperator, const TSourceLoc &); 43 TIntermNode *addSelection(TIntermTyped *cond, TIntermNodePair code, const TSourceLoc &); 44 TIntermTyped *addSelection( 45 TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock, const TSourceLoc &); 46 TIntermTyped *addComma( 47 TIntermTyped *left, TIntermTyped *right, const TSourceLoc &); 48 TIntermConstantUnion *addConstantUnion(ConstantUnion *, const TType &, const TSourceLoc &); 49 // TODO(zmo): Get rid of default value. 50 bool parseConstTree(const TSourceLoc &, TIntermNode *, ConstantUnion *, 51 TOperator, TType, bool singleConstantParam = false); 52 TIntermNode *addLoop(TLoopType, TIntermNode *, TIntermTyped *, TIntermTyped *, 53 TIntermNode *, const TSourceLoc &); 54 TIntermBranch *addBranch(TOperator, const TSourceLoc &); 55 TIntermBranch *addBranch(TOperator, TIntermTyped *, const TSourceLoc &); 56 TIntermTyped *addSwizzle(TVectorFields &, const TSourceLoc &); 57 bool postProcess(TIntermNode *); 58 void remove(TIntermNode *); 59 void outputTree(TIntermNode *); 60 61 private: 62 void operator=(TIntermediate &); // prevent assignments 63 64 TInfoSink & mInfoSink; 65 }; 66 67 #endif // COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_ 68