14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 216004fca1a4c2addaaed17f5746039a622057b2aNicolas Capens// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill#ifndef COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_ 8b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill#define COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_ 958e54298613fdba6967399a66c453385e44c7db2alokp@chromium.org 10b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill#include "compiler/translator/IntermNode.h" 113c9eeb979f4b2431e2303d4a74cd1498d474f6a3Jamie Madill 12b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madillstruct TVectorFields 13e40d1e9c70f1d1d5d0d92f24f8868fcf0b610639Zhenyao Mo{ 14b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill int offsets[4]; 15b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill int num; 164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 19b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill// Set of helper functions to help parse and build the tree. 204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 21b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madillclass TInfoSink; 22b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madillclass TIntermediate 236654bc93f1ca30c2a5d7403f56c94d668c650ca0Jamie Madill{ 24e40d1e9c70f1d1d5d0d92f24f8868fcf0b610639Zhenyao Mo public: 256654bc93f1ca30c2a5d7403f56c94d668c650ca0Jamie Madill POOL_ALLOCATOR_NEW_DELETE(); 26b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermediate(TInfoSink &i) 27b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill : mInfoSink(i) { } 28b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill 29b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermSymbol *addSymbol( 30b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill int id, const TString &, const TType &, const TSourceLoc &); 31b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addBinaryMath( 32b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &); 33b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addAssign( 34b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &); 35b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addIndex( 36b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TOperator op, TIntermTyped *base, TIntermTyped *index, const TSourceLoc &); 37b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addUnaryMath( 38b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TOperator op, TIntermNode *child, const TSourceLoc &); 39b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermAggregate *growAggregate( 40b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermNode *left, TIntermNode *right, const TSourceLoc &); 41b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermAggregate *makeAggregate(TIntermNode *node, const TSourceLoc &); 42b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermAggregate *setAggregateOperator(TIntermNode *, TOperator, const TSourceLoc &); 43b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermNode *addSelection(TIntermTyped *cond, TIntermNodePair code, const TSourceLoc &); 44b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addSelection( 45b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock, const TSourceLoc &); 46b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addComma( 47b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *left, TIntermTyped *right, const TSourceLoc &); 48b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermConstantUnion *addConstantUnion(ConstantUnion *, const TType &, const TSourceLoc &); 49b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill // TODO(zmo): Get rid of default value. 50b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill bool parseConstTree(const TSourceLoc &, TIntermNode *, ConstantUnion *, 51b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TOperator, TType, bool singleConstantParam = false); 52b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermNode *addLoop(TLoopType, TIntermNode *, TIntermTyped *, TIntermTyped *, 53b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermNode *, const TSourceLoc &); 54b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermBranch *addBranch(TOperator, const TSourceLoc &); 55b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermBranch *addBranch(TOperator, TIntermTyped *, const TSourceLoc &); 56b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TIntermTyped *addSwizzle(TVectorFields &, const TSourceLoc &); 57b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill bool postProcess(TIntermNode *); 58b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill void remove(TIntermNode *); 59b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill void outputTree(TIntermNode *); 60b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill 61b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill private: 62b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill void operator=(TIntermediate &); // prevent assignments 63b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill 64b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill TInfoSink & mInfoSink; 65b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill}; 66b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill 67b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill#endif // COMPILER_TRANSLATOR_LOCAL_INTERMEDIATE_H_ 68