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