updated some printfs, added comment about sched_yield
[mesa.git] / src / mesa / shader / slang / MachineIndependent / localintermediate.h
1 //
2 //Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
3 //All rights reserved.
4 //
5 //Redistribution and use in source and binary forms, with or without
6 //modification, are permitted provided that the following conditions
7 //are met:
8 //
9 // Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //
12 // Redistributions in binary form must reproduce the above
13 // copyright notice, this list of conditions and the following
14 // disclaimer in the documentation and/or other materials provided
15 // with the distribution.
16 //
17 // Neither the name of 3Dlabs Inc. Ltd. nor the names of its
18 // contributors may be used to endorse or promote products derived
19 // from this software without specific prior written permission.
20 //
21 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 //"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 //FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 //COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 //INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 //BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 //CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 //POSSIBILITY OF SUCH DAMAGE.
33 //
34
35 #ifndef _LOCAL_INTERMEDIATE_INCLUDED_
36 #define _LOCAL_INTERMEDIATE_INCLUDED_
37
38 #include "../Include/intermediate.h"
39 #include "../Public/ShaderLang.h"
40 #include "SymbolTable.h"
41
42 struct TVectorFields {
43 int offsets[4];
44 int num;
45 };
46
47 //
48 // Set of helper functions to help parse and build the tree.
49 //
50 class TInfoSink;
51 class TIntermediate {
52 public:
53 POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator)
54
55 TIntermediate(TInfoSink& i) : infoSink(i) { }
56 TIntermSymbol* addSymbol(int Id, const TString&, const TType&, TSourceLoc);
57 TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*);
58 TIntermTyped* addBinaryMath(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc, TSymbolTable&);
59 TIntermTyped* addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc);
60 TIntermTyped* addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc);
61 TIntermTyped* addUnaryMath(TOperator op, TIntermNode* child, TSourceLoc, TSymbolTable&);
62 TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, TSourceLoc);
63 TIntermAggregate* makeAggregate(TIntermNode* node, TSourceLoc);
64 TIntermAggregate* setAggregateOperator(TIntermNode*, TOperator, TSourceLoc);
65 TIntermNode* addSelection(TIntermTyped* cond, TIntermNodePair code, TSourceLoc);
66 TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, TSourceLoc);
67 TIntermTyped* addComma(TIntermTyped* left, TIntermTyped* right, TSourceLoc);
68 TIntermConstantUnion* addConstantUnion(constUnion*, const TType&, TSourceLoc);
69 TIntermTyped* promoteConstantUnion(TBasicType, TIntermConstantUnion*) ;
70 TIntermTyped* copyConstUnion(TIntermConstantUnion*) ;
71 TIntermConstantUnion* changeAggrToTempConst(TIntermAggregate*, TSymbolTable&, TSourceLoc );
72 bool parseConstTree(TSourceLoc, TIntermNode*, constUnion*, TOperator, TSymbolTable&, TType, bool singleConstantParam = false);
73 TIntermNode* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, TSourceLoc);
74 TIntermBranch* addBranch(TOperator, TSourceLoc);
75 TIntermBranch* addBranch(TOperator, TIntermTyped*, TSourceLoc);
76 TIntermTyped* addSwizzle(TVectorFields&, TSourceLoc);
77 bool postProcess(TIntermNode*, EShLanguage);
78 void remove(TIntermNode*);
79 void outputTree(TIntermNode*);
80 void removeChildNode(TIntermSequence&, TType&, int&, TIntermSequence::iterator&, TIntermAggregate*);
81 TIntermTyped* removeChildNode(TIntermTyped*, TType*, TIntermAggregate*);
82 bool removeMatrixConstNode(TIntermSequence&, TType&, TIntermAggregate*, int);
83
84 protected:
85 TInfoSink& infoSink;
86
87 private:
88 void operator=(TIntermediate&); // prevent assignments
89 };
90
91 #endif // _LOCAL_INTERMEDIATE_INCLUDED_