Home | History | Annotate | Download | only in translator
      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