RetroArch
intermediate.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
3 // Copyright (C) 2012-2016 LunarG, Inc.
4 // Copyright (C) 2017 ARM Limited.
5 //
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions
10 // are met:
11 //
12 // Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 //
15 // Redistributions in binary form must reproduce the above
16 // copyright notice, this list of conditions and the following
17 // disclaimer in the documentation and/or other materials provided
18 // with the distribution.
19 //
20 // Neither the name of 3Dlabs Inc. Ltd. nor the names of its
21 // contributors may be used to endorse or promote products derived
22 // from this software without specific prior written permission.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 // POSSIBILITY OF SUCH DAMAGE.
36 //
37 
38 //
39 // Definition of the in-memory high-level intermediate representation
40 // of shaders. This is a tree that parser creates.
41 //
42 // Nodes in the tree are defined as a hierarchy of classes derived from
43 // TIntermNode. Each is a node in a tree. There is no preset branching factor;
44 // each node can have it's own type of list of children.
45 //
46 
47 #ifndef __INTERMEDIATE_H
48 #define __INTERMEDIATE_H
49 
50 #if defined(_MSC_VER) && _MSC_VER >= 1900
51  #pragma warning(disable : 4464) // relative include path contains '..'
52  #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted
53 #endif
54 
55 #include "../Include/Common.h"
56 #include "../Include/Types.h"
57 #include "../Include/ConstantUnion.h"
58 
59 namespace glslang {
60 
61 class TIntermediate;
62 
63 //
64 // Operators used by the high-level (parse tree) representation.
65 //
66 enum TOperator {
67  EOpNull, // if in a node, should only mean a node is still being built
68  EOpSequence, // denotes a list of statements, or parameters, etc.
69  EOpLinkerObjects, // for aggregate node of objects the linker may need, if not reference by the rest of the AST
71  EOpFunction, // For function definition
72  EOpParameters, // an aggregate listing the parameters to a function
73 
74  //
75  // Unary operators
76  //
77 
82 
87 
88  // (u)int* -> bool
97 
98  // float* -> bool
102 
103  // bool -> (u)int*
112 
113  // bool -> float*
117 
118  // int8_t -> (u)int*
126 
127  // uint8_t -> (u)int*
135 
136  // int8_t -> float*
140 
141  // uint8_t -> float*
145 
146  // int16_t -> (u)int*
154 
155  // uint16_t -> (u)int*
163 
164  // int16_t -> float*
168 
169  // uint16_t -> float*
173 
174  // int32_t -> (u)int*
182 
183  // uint32_t -> (u)int*
191 
192  // int32_t -> float*
196 
197  // uint32_t -> float*
201 
202  // int64_t -> (u)int*
210 
211  // uint64_t -> (u)int*
219 
220  // int64_t -> float*
224 
225  // uint64_t -> float*
229 
230  // float16_t -> (u)int*
239 
240  // float16_t -> float*
243 
244  // float -> (u)int*
253 
254  // float -> float*
257 
258  // float64 _t-> (u)int*
267 
268  // float64_t -> float*
271 
272  //
273  // binary operations
274  //
275 
295 
300 
304 
308 
310 
313 
314  //
315  // Built-in functions mapped to operators
316  //
317 
332 
340 
356 
359 
361 
364 
409 
418 
419 #ifdef AMD_EXTENSIONS
420  EOpMin3,
421  EOpMax3,
422  EOpMid3,
423 #endif
424 
425  EOpDPdx, // Fragment only
426  EOpDPdy, // Fragment only
427  EOpFwidth, // Fragment only
428  EOpDPdxFine, // Fragment only
429  EOpDPdyFine, // Fragment only
430  EOpFwidthFine, // Fragment only
431  EOpDPdxCoarse, // Fragment only
432  EOpDPdyCoarse, // Fragment only
433  EOpFwidthCoarse, // Fragment only
434 
435  EOpInterpolateAtCentroid, // Fragment only
436  EOpInterpolateAtSample, // Fragment only
437  EOpInterpolateAtOffset, // Fragment only
438 
439 #ifdef AMD_EXTENSIONS
440  EOpInterpolateAtVertex,
441 #endif
442 
448 
450 
452 
453  EOpEmitVertex, // geometry only
454  EOpEndPrimitive, // geometry only
455  EOpEmitStreamVertex, // geometry only
456  EOpEndStreamPrimitive, // geometry only
457 
463  EOpMemoryBarrierShared, // compute only
464  EOpGroupMemoryBarrier, // compute only
465 
469 
473 
530 
531 #ifdef NV_EXTENSIONS
532  EOpSubgroupPartition,
533  EOpSubgroupPartitionedAdd,
534  EOpSubgroupPartitionedMul,
535  EOpSubgroupPartitionedMin,
536  EOpSubgroupPartitionedMax,
537  EOpSubgroupPartitionedAnd,
538  EOpSubgroupPartitionedOr,
539  EOpSubgroupPartitionedXor,
540  EOpSubgroupPartitionedInclusiveAdd,
541  EOpSubgroupPartitionedInclusiveMul,
542  EOpSubgroupPartitionedInclusiveMin,
543  EOpSubgroupPartitionedInclusiveMax,
544  EOpSubgroupPartitionedInclusiveAnd,
545  EOpSubgroupPartitionedInclusiveOr,
546  EOpSubgroupPartitionedInclusiveXor,
547  EOpSubgroupPartitionedExclusiveAdd,
548  EOpSubgroupPartitionedExclusiveMul,
549  EOpSubgroupPartitionedExclusiveMin,
550  EOpSubgroupPartitionedExclusiveMax,
551  EOpSubgroupPartitionedExclusiveAnd,
552  EOpSubgroupPartitionedExclusiveOr,
553  EOpSubgroupPartitionedExclusiveXor,
554 #endif
555 
557 
558 #ifdef AMD_EXTENSIONS
559  EOpMinInvocations,
560  EOpMaxInvocations,
561  EOpAddInvocations,
562  EOpMinInvocationsNonUniform,
563  EOpMaxInvocationsNonUniform,
564  EOpAddInvocationsNonUniform,
565  EOpMinInvocationsInclusiveScan,
566  EOpMaxInvocationsInclusiveScan,
567  EOpAddInvocationsInclusiveScan,
568  EOpMinInvocationsInclusiveScanNonUniform,
569  EOpMaxInvocationsInclusiveScanNonUniform,
570  EOpAddInvocationsInclusiveScanNonUniform,
571  EOpMinInvocationsExclusiveScan,
572  EOpMaxInvocationsExclusiveScan,
573  EOpAddInvocationsExclusiveScan,
574  EOpMinInvocationsExclusiveScanNonUniform,
575  EOpMaxInvocationsExclusiveScanNonUniform,
576  EOpAddInvocationsExclusiveScanNonUniform,
577  EOpSwizzleInvocations,
578  EOpSwizzleInvocationsMasked,
579  EOpWriteInvocation,
580  EOpMbcnt,
581 
582  EOpCubeFaceIndex,
583  EOpCubeFaceCoord,
584  EOpTime,
585 #endif
586 
595 
596  EOpAtomicCounterIncrement, // results in pre-increment value
597  EOpAtomicCounterDecrement, // results in post-decrement value
608 
611 
612  //
613  // Branch
614  //
615 
616  EOpKill, // Fragment only
622 
623  //
624  // Constructors
625  //
626 
628  EOpConstructInt, // these first scalar forms also identify what implicit conversion is needed
732  EOpConstructNonuniform, // expected to be transformed away, not present in final AST
734 
735  //
736  // moves
737  //
738 
754 
755  //
756  // Array operators
757  //
758 
759  // Can apply to arrays, vectors, or matrices.
760  // Can be decomposed to a constant at compile time, but this does not always happen,
761  // due to link-time effects. So, consumer can expect either a link-time sized or
762  // run-time sized array.
764 
765  //
766  // Image operations
767  //
768 
770 
775 #ifdef AMD_EXTENSIONS
776  EOpImageLoadLod,
777  EOpImageStoreLod,
778 #endif
787 
791 #ifdef AMD_EXTENSIONS
792  EOpSparseImageLoadLod,
793 #endif
794 
796 
797  //
798  // Texture operations
799  //
800 
802 
807 
809 
831 #ifdef AMD_EXTENSIONS
832  EOpTextureGatherLod,
833  EOpTextureGatherLodOffset,
834  EOpTextureGatherLodOffsets,
835  EOpFragmentMaskFetch,
836  EOpFragmentFetch,
837 #endif
838 
840 
857 #ifdef AMD_EXTENSIONS
858  EOpSparseTextureGatherLod,
859  EOpSparseTextureGatherLodOffset,
860  EOpSparseTextureGatherLodOffsets,
861 #endif
862 
866 
867  //
868  // Integer operations
869  //
870 
881 
882  //
883  // HLSL operations
884  //
885 
886  EOpClip, // discard if input value < 0
888  EOpLog10, // base 10 log
889  EOpRcp, // 1/x
890  EOpSaturate, // clamp from 0 to 1
891  EOpSinCos, // sin and cos in out parameters
892  EOpGenMul, // mul(x,y) on any of mat/vec/scalars
893  EOpDst, // x = 1, y=src0.y * src1.y, z=src0.z, w=src1.w
894  EOpInterlockedAdd, // atomic ops, but uses [optional] out arg instead of return
903  EOpAllMemoryBarrierWithGroupSync, // memory barriers without non-hlsl AST equivalents
908  EOpEvaluateAttributeSnapped, // InterpolateAtOffset with int position on 16x16 grid
909  EOpF32tof16, // HLSL conversion: half of a PackHalf2x16
910  EOpF16tof32, // HLSL conversion: half of an UnpackHalf2x16
911  EOpLit, // HLSL lighting coefficient vector
912  EOpTextureBias, // HLSL texture bias: will be lowered to EOpTexture
913  EOpAsDouble, // slightly different from EOpUint64BitsToDouble
914  EOpD3DCOLORtoUBYTE4, // convert and swizzle 4-component color to UBYTE4 range
915 
916  EOpMethodSample, // Texture object methods. These are translated to existing
917  EOpMethodSampleBias, // AST methods, and exist to represent HLSL semantics until that
918  EOpMethodSampleCmp, // translation is performed. See HlslParseContext::decomposeSampleMethods().
928 
929  // Load already defined above for textures
930  EOpMethodLoad2, // Structure buffer object methods. These are translated to existing
931  EOpMethodLoad3, // AST methods, and exist to represent HLSL semantics until that
932  EOpMethodLoad4, // translation is performed. See HlslParseContext::decomposeSampleMethods().
939  // EOpMethodAppend is defined for geo shaders below
941 
942  // SM5 texture methods
943  EOpMethodGatherRed, // These are covered under the above EOpMethodSample comment about
944  EOpMethodGatherGreen, // translation to existing AST opcodes. They exist temporarily
945  EOpMethodGatherBlue, // because HLSL arguments are slightly different.
952 
953  // geometry methods
954  EOpMethodAppend, // Geometry shader methods
956 
957  // matrix
958  EOpMatrixSwizzle, // select multiple matrix components (non-column)
959 
960  // SM6 wave ops
961  EOpWaveGetLaneCount, // Will decompose to gl_SubgroupSize.
962  EOpWaveGetLaneIndex, // Will decompose to gl_SubgroupInvocationID.
963  EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()).
964  EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
965 };
966 
967 class TIntermTraverser;
968 class TIntermOperator;
969 class TIntermAggregate;
970 class TIntermUnary;
971 class TIntermBinary;
972 class TIntermConstantUnion;
973 class TIntermSelection;
974 class TIntermSwitch;
975 class TIntermBranch;
976 class TIntermTyped;
977 class TIntermMethod;
978 class TIntermSymbol;
979 class TIntermLoop;
980 
981 } // end namespace glslang
982 
983 //
984 // Base class for the tree nodes
985 //
986 // (Put outside the glslang namespace, as it's used as part of the external interface.)
987 //
988 class TIntermNode {
989 public:
991 
993  virtual const glslang::TSourceLoc& getLoc() const { return loc; }
994  virtual void setLoc(const glslang::TSourceLoc& l) { loc = l; }
995  virtual void traverse(glslang::TIntermTraverser*) = 0;
996  virtual glslang::TIntermTyped* getAsTyped() { return 0; }
997  virtual glslang::TIntermOperator* getAsOperator() { return 0; }
999  virtual glslang::TIntermAggregate* getAsAggregate() { return 0; }
1000  virtual glslang::TIntermUnary* getAsUnaryNode() { return 0; }
1001  virtual glslang::TIntermBinary* getAsBinaryNode() { return 0; }
1003  virtual glslang::TIntermSwitch* getAsSwitchNode() { return 0; }
1004  virtual glslang::TIntermMethod* getAsMethodNode() { return 0; }
1005  virtual glslang::TIntermSymbol* getAsSymbolNode() { return 0; }
1006  virtual glslang::TIntermBranch* getAsBranchNode() { return 0; }
1007  virtual glslang::TIntermLoop* getAsLoopNode() { return 0; }
1008 
1009  virtual const glslang::TIntermTyped* getAsTyped() const { return 0; }
1010  virtual const glslang::TIntermOperator* getAsOperator() const { return 0; }
1011  virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return 0; }
1012  virtual const glslang::TIntermAggregate* getAsAggregate() const { return 0; }
1013  virtual const glslang::TIntermUnary* getAsUnaryNode() const { return 0; }
1014  virtual const glslang::TIntermBinary* getAsBinaryNode() const { return 0; }
1015  virtual const glslang::TIntermSelection* getAsSelectionNode() const { return 0; }
1016  virtual const glslang::TIntermSwitch* getAsSwitchNode() const { return 0; }
1017  virtual const glslang::TIntermMethod* getAsMethodNode() const { return 0; }
1018  virtual const glslang::TIntermSymbol* getAsSymbolNode() const { return 0; }
1019  virtual const glslang::TIntermBranch* getAsBranchNode() const { return 0; }
1020  virtual const glslang::TIntermLoop* getAsLoopNode() const { return 0; }
1021  virtual ~TIntermNode() { }
1022 
1023 protected:
1024  TIntermNode(const TIntermNode&);
1027 };
1028 
1029 namespace glslang {
1030 
1031 //
1032 // This is just to help yacc.
1033 //
1037 };
1038 
1039 //
1040 // Intermediate class for nodes that have a type.
1041 //
1042 class TIntermTyped : public TIntermNode {
1043 public:
1044  TIntermTyped(const TType& t) { type.shallowCopy(t); }
1045  TIntermTyped(TBasicType basicType) { TType bt(basicType); type.shallowCopy(bt); }
1046  virtual TIntermTyped* getAsTyped() { return this; }
1047  virtual const TIntermTyped* getAsTyped() const { return this; }
1048  virtual void setType(const TType& t) { type.shallowCopy(t); }
1049  virtual const TType& getType() const { return type; }
1050  virtual TType& getWritableType() { return type; }
1051 
1052  virtual TBasicType getBasicType() const { return type.getBasicType(); }
1053  virtual TQualifier& getQualifier() { return type.getQualifier(); }
1054  virtual const TQualifier& getQualifier() const { return type.getQualifier(); }
1056  virtual int getVectorSize() const { return type.getVectorSize(); }
1057  virtual int getMatrixCols() const { return type.getMatrixCols(); }
1058  virtual int getMatrixRows() const { return type.getMatrixRows(); }
1059  virtual bool isMatrix() const { return type.isMatrix(); }
1060  virtual bool isArray() const { return type.isArray(); }
1061  virtual bool isVector() const { return type.isVector(); }
1062  virtual bool isScalar() const { return type.isScalar(); }
1063  virtual bool isStruct() const { return type.isStruct(); }
1064  virtual bool isFloatingDomain() const { return type.isFloatingDomain(); }
1065  virtual bool isIntegerDomain() const { return type.isIntegerDomain(); }
1066  TString getCompleteString() const { return type.getCompleteString(); }
1067 
1068 protected:
1071 };
1072 
1073 //
1074 // Handle for, do-while, and while loops.
1075 //
1076 class TIntermLoop : public TIntermNode {
1077 public:
1078  TIntermLoop(TIntermNode* aBody, TIntermTyped* aTest, TIntermTyped* aTerminal, bool testFirst) :
1079  body(aBody),
1080  test(aTest),
1081  terminal(aTerminal),
1082  first(testFirst),
1083  unroll(false),
1084  dontUnroll(false),
1085  dependency(0)
1086  { }
1087 
1088  virtual TIntermLoop* getAsLoopNode() { return this; }
1089  virtual const TIntermLoop* getAsLoopNode() const { return this; }
1090  virtual void traverse(TIntermTraverser*);
1091  TIntermNode* getBody() const { return body; }
1092  TIntermTyped* getTest() const { return test; }
1093  TIntermTyped* getTerminal() const { return terminal; }
1094  bool testFirst() const { return first; }
1095 
1096  void setUnroll() { unroll = true; }
1097  void setDontUnroll() { dontUnroll = true; }
1098  bool getUnroll() const { return unroll; }
1099  bool getDontUnroll() const { return dontUnroll; }
1100 
1101  static const unsigned int dependencyInfinite = 0xFFFFFFFF;
1102  void setLoopDependency(int d) { dependency = d; }
1103  int getLoopDependency() const { return dependency; }
1104 
1105 protected:
1106  TIntermNode* body; // code to loop over
1107  TIntermTyped* test; // exit condition associated with loop, could be 0 for 'for' loops
1108  TIntermTyped* terminal; // exists for for-loops
1109  bool first; // true for while and for, not for do-while
1110  bool unroll; // true if unroll requested
1111  bool dontUnroll; // true if request to not unroll
1112  unsigned int dependency; // loop dependency hint; 0 means not set or unknown
1113 };
1114 
1115 //
1116 // Handle case, break, continue, return, and kill.
1117 //
1118 class TIntermBranch : public TIntermNode {
1119 public:
1121  flowOp(op),
1122  expression(e) { }
1123  virtual TIntermBranch* getAsBranchNode() { return this; }
1124  virtual const TIntermBranch* getAsBranchNode() const { return this; }
1125  virtual void traverse(TIntermTraverser*);
1126  TOperator getFlowOp() const { return flowOp; }
1128 protected:
1131 };
1132 
1133 //
1134 // Represent method names before seeing their calling signature
1135 // or resolving them to operations. Just an expression as the base object
1136 // and a textural name.
1137 //
1138 class TIntermMethod : public TIntermTyped {
1139 public:
1141  virtual TIntermMethod* getAsMethodNode() { return this; }
1142  virtual const TIntermMethod* getAsMethodNode() const { return this; }
1143  virtual const TString& getMethodName() const { return method; }
1144  virtual TIntermTyped* getObject() const { return object; }
1145  virtual void traverse(TIntermTraverser*);
1146 protected:
1149 };
1150 
1151 //
1152 // Nodes that correspond to symbols or constants in the source code.
1153 //
1154 class TIntermSymbol : public TIntermTyped {
1155 public:
1156  // if symbol is initialized as symbol(sym), the memory comes from the pool allocator of sym. If sym comes from
1157  // per process threadPoolAllocator, then it causes increased memory usage per compile
1158  // it is essential to use "symbol = sym" to assign to symbol
1159  TIntermSymbol(int i, const TString& n, const TType& t)
1160  : TIntermTyped(t), id(i),
1161 #ifdef ENABLE_HLSL
1162  flattenSubset(-1),
1163 #endif
1164  constSubtree(nullptr)
1165  { name = n; }
1166  virtual int getId() const { return id; }
1167  virtual const TString& getName() const { return name; }
1168  virtual void traverse(TIntermTraverser*);
1169  virtual TIntermSymbol* getAsSymbolNode() { return this; }
1170  virtual const TIntermSymbol* getAsSymbolNode() const { return this; }
1172  const TConstUnionArray& getConstArray() const { return constArray; }
1173  void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
1175 #ifdef ENABLE_HLSL
1176  void setFlattenSubset(int subset) { flattenSubset = subset; }
1177  int getFlattenSubset() const { return flattenSubset; } // -1 means full object
1178 #endif
1179 
1180  // This is meant for cases where a node has already been constructed, and
1181  // later on, it becomes necessary to switch to a different symbol.
1182  virtual void switchId(int newId) { id = newId; }
1183 
1184 protected:
1185  int id; // the unique id of the symbol this node represents
1186 #ifdef ENABLE_HLSL
1187  int flattenSubset; // how deeply the flattened object rooted at id has been dereferenced
1188 #endif
1189  TString name; // the name of the symbol this node represents
1190  TConstUnionArray constArray; // if the symbol is a front-end compile-time constant, this is its value
1192 };
1193 
1195 public:
1197  const TConstUnionArray& getConstArray() const { return constArray; }
1198  virtual TIntermConstantUnion* getAsConstantUnion() { return this; }
1199  virtual const TIntermConstantUnion* getAsConstantUnion() const { return this; }
1200  virtual void traverse(TIntermTraverser*);
1201  virtual TIntermTyped* fold(TOperator, const TIntermTyped*) const;
1202  virtual TIntermTyped* fold(TOperator, const TType&) const;
1203  void setLiteral() { literal = true; }
1204  void setExpression() { literal = false; }
1205  bool isLiteral() const { return literal; }
1206 
1207 protected:
1209 
1211  bool literal; // true if node represents a literal in the source code
1212 };
1213 
1214 // Represent the independent aspects of a texturing TOperator
1216  bool query;
1217  bool proj;
1218  bool lod;
1219  bool fetch;
1220  bool offset;
1221  bool offsets;
1222  bool gather;
1223  bool grad;
1224  bool subpass;
1225  bool lodClamp;
1226 #ifdef AMD_EXTENSIONS
1227  bool fragMask;
1228 #endif
1229 };
1230 
1231 //
1232 // Intermediate class for node types that hold operators.
1233 //
1235 public:
1236  virtual TIntermOperator* getAsOperator() { return this; }
1237  virtual const TIntermOperator* getAsOperator() const { return this; }
1238  TOperator getOp() const { return op; }
1239  void setOp(TOperator newOp) { op = newOp; }
1240  bool modifiesState() const;
1241  bool isConstructor() const;
1242  bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; }
1244  bool isImage() const { return op > EOpImageGuardBegin && op < EOpImageGuardEnd; }
1246  bool isSparseImage() const { return op == EOpSparseImageLoad; }
1247 
1251  type.getQualifier().precision; }
1253  {
1254  TString cs = type.getCompleteString();
1255  if (getOperationPrecision() != type.getQualifier().precision) {
1256  cs += ", operation at ";
1258  }
1259 
1260  return cs;
1261  }
1262 
1263  // Crack the op into the individual dimensions of texturing operation.
1265  {
1266  cracked.query = false;
1267  cracked.proj = false;
1268  cracked.lod = false;
1269  cracked.fetch = false;
1270  cracked.offset = false;
1271  cracked.offsets = false;
1272  cracked.gather = false;
1273  cracked.grad = false;
1274  cracked.subpass = false;
1275  cracked.lodClamp = false;
1276 #ifdef AMD_EXTENSIONS
1277  cracked.fragMask = false;
1278 #endif
1279 
1280  switch (op) {
1281  case EOpImageQuerySize:
1282  case EOpImageQuerySamples:
1283  case EOpTextureQuerySize:
1284  case EOpTextureQueryLod:
1285  case EOpTextureQueryLevels:
1288  cracked.query = true;
1289  break;
1290  case EOpTexture:
1291  case EOpSparseTexture:
1292  break;
1293  case EOpTextureClamp:
1294  case EOpSparseTextureClamp:
1295  cracked.lodClamp = true;
1296  break;
1297  case EOpTextureProj:
1298  cracked.proj = true;
1299  break;
1300  case EOpTextureLod:
1301  case EOpSparseTextureLod:
1302  cracked.lod = true;
1303  break;
1304  case EOpTextureOffset:
1306  cracked.offset = true;
1307  break;
1308  case EOpTextureOffsetClamp:
1310  cracked.offset = true;
1311  cracked.lodClamp = true;
1312  break;
1313  case EOpTextureFetch:
1314  case EOpSparseTextureFetch:
1315  cracked.fetch = true;
1316  if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
1317  cracked.lod = true;
1318  break;
1319  case EOpTextureFetchOffset:
1321  cracked.fetch = true;
1322  cracked.offset = true;
1323  if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
1324  cracked.lod = true;
1325  break;
1326  case EOpTextureProjOffset:
1327  cracked.offset = true;
1328  cracked.proj = true;
1329  break;
1330  case EOpTextureLodOffset:
1332  cracked.offset = true;
1333  cracked.lod = true;
1334  break;
1335  case EOpTextureProjLod:
1336  cracked.lod = true;
1337  cracked.proj = true;
1338  break;
1340  cracked.offset = true;
1341  cracked.lod = true;
1342  cracked.proj = true;
1343  break;
1344  case EOpTextureGrad:
1345  case EOpSparseTextureGrad:
1346  cracked.grad = true;
1347  break;
1348  case EOpTextureGradClamp:
1350  cracked.grad = true;
1351  cracked.lodClamp = true;
1352  break;
1353  case EOpTextureGradOffset:
1355  cracked.grad = true;
1356  cracked.offset = true;
1357  break;
1358  case EOpTextureProjGrad:
1359  cracked.grad = true;
1360  cracked.proj = true;
1361  break;
1363  cracked.grad = true;
1364  cracked.offset = true;
1365  cracked.proj = true;
1366  break;
1369  cracked.grad = true;
1370  cracked.offset = true;
1371  cracked.lodClamp = true;
1372  break;
1373  case EOpTextureGather:
1375  cracked.gather = true;
1376  break;
1379  cracked.gather = true;
1380  cracked.offset = true;
1381  break;
1384  cracked.gather = true;
1385  cracked.offsets = true;
1386  break;
1387 #ifdef AMD_EXTENSIONS
1388  case EOpTextureGatherLod:
1389  case EOpSparseTextureGatherLod:
1390  cracked.gather = true;
1391  cracked.lod = true;
1392  break;
1393  case EOpTextureGatherLodOffset:
1394  case EOpSparseTextureGatherLodOffset:
1395  cracked.gather = true;
1396  cracked.offset = true;
1397  cracked.lod = true;
1398  break;
1399  case EOpTextureGatherLodOffsets:
1400  case EOpSparseTextureGatherLodOffsets:
1401  cracked.gather = true;
1402  cracked.offsets = true;
1403  cracked.lod = true;
1404  break;
1405  case EOpImageLoadLod:
1406  case EOpImageStoreLod:
1407  case EOpSparseImageLoadLod:
1408  cracked.lod = true;
1409  break;
1410  case EOpFragmentMaskFetch:
1411  cracked.subpass = sampler.dim == EsdSubpass;
1412  cracked.fragMask = true;
1413  break;
1414  case EOpFragmentFetch:
1415  cracked.subpass = sampler.dim == EsdSubpass;
1416  cracked.fragMask = true;
1417  break;
1418 #endif
1419  case EOpSubpassLoad:
1420  case EOpSubpassLoadMS:
1421  cracked.subpass = true;
1422  break;
1423  default:
1424  break;
1425  }
1426  }
1427 
1428 protected:
1432  // The result precision is in the inherited TType, and is usually meant to be both
1433  // the operation precision and the result precision. However, some more complex things,
1434  // like built-in function calls, distinguish between the two, in which case non-EqpNone
1435  // 'operationPrecision' overrides the result precision as far as operation precision
1436  // is concerned.
1438 };
1439 
1440 //
1441 // Nodes for all the basic binary math operators.
1442 //
1444 public:
1446  virtual void traverse(TIntermTraverser*);
1447  virtual void setLeft(TIntermTyped* n) { left = n; }
1448  virtual void setRight(TIntermTyped* n) { right = n; }
1449  virtual TIntermTyped* getLeft() const { return left; }
1450  virtual TIntermTyped* getRight() const { return right; }
1451  virtual TIntermBinary* getAsBinaryNode() { return this; }
1452  virtual const TIntermBinary* getAsBinaryNode() const { return this; }
1453  virtual void updatePrecision();
1454 protected:
1457 };
1458 
1459 //
1460 // Nodes for unary math operators.
1461 //
1463 public:
1466  virtual void traverse(TIntermTraverser*);
1467  virtual void setOperand(TIntermTyped* o) { operand = o; }
1468  virtual TIntermTyped* getOperand() { return operand; }
1469  virtual const TIntermTyped* getOperand() const { return operand; }
1470  virtual TIntermUnary* getAsUnaryNode() { return this; }
1471  virtual const TIntermUnary* getAsUnaryNode() const { return this; }
1472  virtual void updatePrecision();
1473 protected:
1475 };
1476 
1479 //
1480 // Nodes that operate on an arbitrary sized set of children.
1481 //
1483 public:
1487  virtual TIntermAggregate* getAsAggregate() { return this; }
1488  virtual const TIntermAggregate* getAsAggregate() const { return this; }
1489  virtual void setOperator(TOperator o) { op = o; }
1490  virtual TIntermSequence& getSequence() { return sequence; }
1491  virtual const TIntermSequence& getSequence() const { return sequence; }
1492  virtual void setName(const TString& n) { name = n; }
1493  virtual const TString& getName() const { return name; }
1494  virtual void traverse(TIntermTraverser*);
1495  virtual void setUserDefined() { userDefined = true; }
1496  virtual bool isUserDefined() { return userDefined; }
1498  virtual const TQualifierList& getQualifierList() const { return qualifier; }
1499  void setOptimize(bool o) { optimize = o; }
1500  void setDebug(bool d) { debug = d; }
1501  bool getOptimize() const { return optimize; }
1502  bool getDebug() const { return debug; }
1503  void setPragmaTable(const TPragmaTable& pTable);
1504  const TPragmaTable& getPragmaTable() const { return *pragmaTable; }
1505 protected:
1506  TIntermAggregate(const TIntermAggregate&); // disallow copy constructor
1507  TIntermAggregate& operator=(const TIntermAggregate&); // disallow assignment operator
1511  bool userDefined; // used for user defined function names
1512  bool optimize;
1513  bool debug;
1515 };
1516 
1517 //
1518 // For if tests.
1519 //
1521 public:
1523  TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB),
1524  shortCircuit(true),
1527  TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB),
1528  shortCircuit(true),
1530  virtual void traverse(TIntermTraverser*);
1531  virtual TIntermTyped* getCondition() const { return condition; }
1532  virtual TIntermNode* getTrueBlock() const { return trueBlock; }
1533  virtual TIntermNode* getFalseBlock() const { return falseBlock; }
1534  virtual TIntermSelection* getAsSelectionNode() { return this; }
1535  virtual const TIntermSelection* getAsSelectionNode() const { return this; }
1536 
1537  void setNoShortCircuit() { shortCircuit = false; }
1538  bool getShortCircuit() const { return shortCircuit; }
1539 
1540  void setFlatten() { flatten = true; }
1541  void setDontFlatten() { dontFlatten = true; }
1542  bool getFlatten() const { return flatten; }
1543  bool getDontFlatten() const { return dontFlatten; }
1544 
1545 protected:
1549  bool shortCircuit; // normally all if-then-else and all GLSL ?: short-circuit, but HLSL ?: does not
1550  bool flatten; // true if flatten requested
1551  bool dontFlatten; // true if requested to not flatten
1552 };
1553 
1554 //
1555 // For switch statements. Designed use is that a switch will have sequence of nodes
1556 // that are either case/default nodes or a *single* node that represents all the code
1557 // in between (if any) consecutive case/defaults. So, a traversal need only deal with
1558 // 0 or 1 nodes per case/default statement.
1559 //
1560 class TIntermSwitch : public TIntermNode {
1561 public:
1564  virtual void traverse(TIntermTraverser*);
1565  virtual TIntermNode* getCondition() const { return condition; }
1566  virtual TIntermAggregate* getBody() const { return body; }
1567  virtual TIntermSwitch* getAsSwitchNode() { return this; }
1568  virtual const TIntermSwitch* getAsSwitchNode() const { return this; }
1569 
1570  void setFlatten() { flatten = true; }
1571  void setDontFlatten() { dontFlatten = true; }
1572  bool getFlatten() const { return flatten; }
1573  bool getDontFlatten() const { return dontFlatten; }
1574 
1575 protected:
1578  bool flatten; // true if flatten requested
1579  bool dontFlatten; // true if requested to not flatten
1580 };
1581 
1583 {
1587 };
1588 
1589 //
1590 // For traversing the tree. User should derive from this,
1591 // put their traversal specific data in it, and then pass
1592 // it to a Traverse method.
1593 //
1594 // When using this, just fill in the methods for nodes you want visited.
1595 // Return false from a pre-visit to skip visiting that node's subtree.
1596 //
1597 // Explicitly set postVisit to true if you want post visiting, otherwise,
1598 // filled in methods will only be called at pre-visit time (before processing
1599 // the subtree). Similarly for inVisit for in-order visiting of nodes with
1600 // multiple children.
1601 //
1602 // If you only want post-visits, explicitly turn off preVisit (and inVisit)
1603 // and turn on postVisit.
1604 //
1605 // In general, for the visit*() methods, return true from interior nodes
1606 // to have the traversal continue on to children.
1607 //
1608 // If you process children yourself, or don't want them processed, return false.
1609 //
1611 public:
1614  preVisit(preVisit),
1615  inVisit(inVisit),
1618  depth(0),
1619  maxDepth(0) { }
1620  virtual ~TIntermTraverser() { }
1621 
1622  virtual void visitSymbol(TIntermSymbol*) { }
1624  virtual bool visitBinary(TVisit, TIntermBinary*) { return true; }
1625  virtual bool visitUnary(TVisit, TIntermUnary*) { return true; }
1626  virtual bool visitSelection(TVisit, TIntermSelection*) { return true; }
1627  virtual bool visitAggregate(TVisit, TIntermAggregate*) { return true; }
1628  virtual bool visitLoop(TVisit, TIntermLoop*) { return true; }
1629  virtual bool visitBranch(TVisit, TIntermBranch*) { return true; }
1630  virtual bool visitSwitch(TVisit, TIntermSwitch*) { return true; }
1631 
1632  int getMaxDepth() const { return maxDepth; }
1633 
1635  {
1636  depth++;
1637  maxDepth = (std::max)(maxDepth, depth);
1638  path.push_back(current);
1639  }
1640 
1642  {
1643  depth--;
1644  path.pop_back();
1645  }
1646 
1648  {
1649  return path.size() == 0 ? NULL : path.back();
1650  }
1651 
1652  const bool preVisit;
1653  const bool inVisit;
1654  const bool postVisit;
1655  const bool rightToLeft;
1656 
1657 protected:
1659 
1660  int depth;
1662 
1663  // All the nodes from root to the current node's parent during traversing.
1665 };
1666 
1667 // KHR_vulkan_glsl says "Two arrays sized with specialization constants are the same type only if
1668 // sized with the same symbol, involving no operations"
1670 {
1671  return node1->getAsSymbolNode() && node2->getAsSymbolNode() &&
1672  node1->getAsSymbolNode()->getId() == node2->getAsSymbolNode()->getId();
1673 }
1674 
1675 } // end namespace glslang
1676 
1677 #endif // __INTERMEDIATE_H
bool dontFlatten
Definition: intermediate.h:1579
Definition: intermediate.h:589
Definition: intermediate.h:410
Definition: intermediate.h:352
Definition: intermediate.h:281
Definition: intermediate.h:128
Definition: intermediate.h:676
Definition: intermediate.h:214
Definition: intermediate.h:637
Definition: intermediate.h:408
Definition: intermediate.h:170
Definition: intermediate.h:1194
TIntermTyped * condition
Definition: intermediate.h:1546
virtual const TIntermSwitch * getAsSwitchNode() const
Definition: intermediate.h:1568
Definition: intermediate.h:897
Definition: intermediate.h:850
Definition: intermediate.h:347
Definition: intermediate.h:297
Definition: intermediate.h:264
Definition: intermediate.h:94
TIntermUnary(TOperator o)
Definition: intermediate.h:1465
bool unroll
Definition: intermediate.h:1110
Definition: intermediate.h:684
virtual void switchId(int newId)
Definition: intermediate.h:1182
GLuint const GLchar * name
Definition: glext.h:6671
Definition: intermediate.h:468
bool shortCircuit
Definition: intermediate.h:1549
Definition: intermediate.h:1520
Definition: intermediate.h:293
virtual const TIntermConstantUnion * getAsConstantUnion() const
Definition: intermediate.h:1199
const bool inVisit
Definition: intermediate.h:1653
Definition: intermediate.h:677
const TPragmaTable & getPragmaTable() const
Definition: intermediate.h:1504
Definition: intermediate.h:641
const GLint * first
Definition: glext.h:6478
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:64
Definition: intermediate.h:662
Definition: intermediate.h:428
TOperator
Definition: intermediate.h:66
Definition: intermediate.h:864
Definition: intermediate.h:808
Definition: intermediate.h:751
TString name
Definition: intermediate.h:1189
virtual const TIntermUnary * getAsUnaryNode() const
Definition: intermediate.h:1471
Definition: intermediate.h:1443
const bool preVisit
Definition: intermediate.h:1652
Definition: intermediate.h:528
Definition: intermediate.h:427
Definition: intermediate.h:508
Definition: intermediate.h:877
Definition: intermediate.h:284
Definition: intermediate.h:830
Definition: intermediate.h:895
Definition: intermediate.h:702
Definition: intermediate.h:846
set set set set set set set macro pixldst1 op
Definition: pixman-arm-neon-asm.h:54
virtual const glslang::TIntermTyped * getAsTyped() const
Definition: intermediate.h:1009
TPrecisionQualifier operationPrecision
Definition: intermediate.h:1437
Definition: intermediate.h:627
virtual TIntermBranch * getAsBranchNode()
Definition: intermediate.h:1123
Definition: intermediate.h:502
TIntermOperator(TOperator o, TType &t)
Definition: intermediate.h:1430
Definition: intermediate.h:486
Definition: intermediate.h:467
Definition: intermediate.h:142
Definition: intermediate.h:474
Definition: intermediate.h:69
Definition: intermediate.h:931
Definition: intermediate.h:299
TIntermUnary(TOperator o, TType &t)
Definition: intermediate.h:1464
virtual TIntermTyped * getRight() const
Definition: intermediate.h:1450
bool optimize
Definition: intermediate.h:1512
Definition: intermediate.h:705
Definition: intermediate.h:739
Definition: intermediate.h:923
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:279
Definition: intermediate.h:918
Definition: intermediate.h:588
Definition: intermediate.h:381
Definition: intermediate.h:715
Definition: intermediate.h:123
Definition: intermediate.h:590
TOperator flowOp
Definition: intermediate.h:1129
Definition: intermediate.h:505
Definition: intermediate.h:455
virtual TIntermNode * getTrueBlock() const
Definition: intermediate.h:1532
bool dontUnroll
Definition: intermediate.h:1111
virtual bool visitSelection(TVisit, TIntermSelection *)
Definition: intermediate.h:1626
virtual glslang::TIntermSymbol * getAsSymbolNode()
Definition: intermediate.h:1005
virtual bool isStruct() const
Definition: intermediate.h:1063
Definition: intermediate.h:694
virtual const TIntermSequence & getSequence() const
Definition: intermediate.h:1491
virtual const glslang::TIntermMethod * getAsMethodNode() const
Definition: intermediate.h:1017
TString name
Definition: intermediate.h:1510
virtual glslang::TIntermBranch * getAsBranchNode()
Definition: intermediate.h:1006
virtual const TString & getMethodName() const
Definition: intermediate.h:1143
Definition: intermediate.h:498
Definition: intermediate.h:401
Definition: intermediate.h:150
Definition: intermediate.h:788
Definition: intermediate.h:678
virtual const TQualifierList & getQualifierList() const
Definition: intermediate.h:1498
virtual const TIntermMethod * getAsMethodNode() const
Definition: intermediate.h:1142
TIntermTyped * getTest() const
Definition: intermediate.h:1092
Definition: intermediate.h:872
TIntermNode * getParentNode()
Definition: intermediate.h:1647
bool flatten
Definition: intermediate.h:1578
Definition: intermediate.h:437
Definition: intermediate.h:917
Definition: intermediate.h:646
Definition: intermediate.h:101
virtual const TIntermSymbol * getAsSymbolNode() const
Definition: intermediate.h:1170
Definition: intermediate.h:914
Definition: intermediate.h:733
Definition: intermediate.h:937
Definition: intermediate.h:342
Definition: Common.h:231
Definition: intermediate.h:828
Definition: intermediate.h:668
Definition: intermediate.h:331
Definition: intermediate.h:114
Definition: intermediate.h:682
Definition: intermediate.h:405
Definition: intermediate.h:696
Definition: intermediate.h:629
Definition: intermediate.h:115
virtual void setType(const TType &t)
Definition: intermediate.h:1048
virtual glslang::TIntermSelection * getAsSelectionNode()
Definition: intermediate.h:1002
Definition: intermediate.h:235
Definition: intermediate.h:821
Definition: intermediate.h:863
Definition: intermediate.h:783
Definition: intermediate.h:645
bool getDontUnroll() const
Definition: intermediate.h:1099
Definition: intermediate.h:597
Definition: intermediate.h:748
Definition: intermediate.h:216
Definition: intermediate.h:504
Definition: intermediate.h:208
Definition: intermediate.h:599
Definition: intermediate.h:107
Definition: intermediate.h:218
Definition: intermediate.h:1610
Definition: intermediate.h:657
Definition: intermediate.h:301
virtual bool isScalar() const
Definition: intermediate.h:1062
bool getFlatten() const
Definition: intermediate.h:1542
Definition: intermediate.h:601
Definition: intermediate.h:79
Definition: intermediate.h:287
Definition: intermediate.h:236
bool getUnroll() const
Definition: intermediate.h:1098
Definition: intermediate.h:849
Definition: intermediate.h:137
Definition: intermediate.h:618
Definition: intermediate.h:813
Definition: intermediate.h:925
void setExpression()
Definition: intermediate.h:1204
Definition: intermediate.h:592
Definition: intermediate.h:425
Definition: intermediate.h:296
Definition: intermediate.h:412
TIntermTyped * right
Definition: intermediate.h:1456
Definition: intermediate.h:446
GLsizei const GLchar ** path
Definition: glext.h:7901
Definition: intermediate.h:199
Definition: intermediate.h:520
unsigned int dependency
Definition: intermediate.h:1112
void setOperationPrecision(TPrecisionQualifier p)
Definition: intermediate.h:1248
Definition: intermediate.h:263
void setLiteral()
Definition: intermediate.h:1203
GLdouble GLdouble t
Definition: glext.h:6398
Definition: intermediate.h:266
Definition: intermediate.h:652
Definition: intermediate.h:180
bool isSparseImage() const
Definition: intermediate.h:1246
Definition: intermediate.h:681
Definition: intermediate.h:889
Definition: intermediate.h:691
Definition: intermediate.h:921
Definition: intermediate.h:205
Definition: intermediate.h:887
bool proj
Definition: intermediate.h:1217
Definition: BaseTypes.h:47
Definition: intermediate.h:695
Definition: intermediate.h:854
Definition: intermediate.h:824
Definition: intermediate.h:175
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:219
Definition: intermediate.h:1118
Definition: intermediate.h:399
Definition: intermediate.h:947
TIntermOperator(TOperator o)
Definition: intermediate.h:1429
Definition: intermediate.h:292
Definition: intermediate.h:104
Definition: intermediate.h:203
Definition: intermediate.h:524
Definition: intermediate.h:280
Definition: intermediate.h:728
Definition: intermediate.h:876
Definition: intermediate.h:899
virtual const glslang::TIntermLoop * getAsLoopNode() const
Definition: intermediate.h:1020
Definition: intermediate.h:445
Definition: intermediate.h:772
Definition: intermediate.h:212
Definition: intermediate.h:1034
Definition: intermediate.h:129
void setConstArray(const TConstUnionArray &c)
Definition: intermediate.h:1171
virtual ~TIntermTraverser()
Definition: intermediate.h:1620
bool isImage() const
Definition: intermediate.h:1244
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro pixld1_s mem_operand if asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl elseif asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl else error unsupported endif endm macro pixld2_s mem_operand if mov asr add asl add asl mov asr sub UNIT_X add asl mov asr add asl add asl mov asr add UNIT_X add asl else pixld1_s mem_operand pixld1_s mem_operand endif endm macro pixld0_s mem_operand if asr adds SRC_WIDTH_FIXED bpl add asl elseif asr adds SRC_WIDTH_FIXED bpl add asl endif endm macro pixld_s_internal mem_operand if mem_operand pixld2_s mem_operand pixdeinterleave basereg elseif mem_operand elseif mem_operand elseif mem_operand elseif mem_operand pixld0_s mem_operand else pixld0_s mem_operand pixld0_s mem_operand pixld0_s mem_operand pixld0_s mem_operand endif elseif mem_operand else pixld0_s mem_operand pixld0_s mem_operand endif elseif mem_operand else error unsupported mem_operand if bpp mem_operand endif endm macro vuzp8 reg2 vuzp d d &reg2 endm macro vzip8 reg2 vzip d d &reg2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld [DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld endif[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro fetch_mask_pixblock pixld mask_basereg pixblock_size MASK endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp local skip1 beq endif SRC MASK if dst_r_bpp DST_R else add endif PF add sub src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head pixblock_size cache_preload_simple process_pixblock_tail pixinterleave dst_w_basereg irp beq endif process_pixblock_tail_head tst beq irp if pixblock_size chunk_size tst beq pixld_src SRC pixld MASK if DST_R else pixld DST_R endif if
Definition: pixman-arm-neon-asm.h:543
virtual const glslang::TIntermConstantUnion * getAsConstantUnion() const
Definition: intermediate.h:1011
virtual bool visitSwitch(TVisit, TIntermSwitch *)
Definition: intermediate.h:1630
Definition: intermediate.h:964
virtual TIntermAggregate * getAsAggregate()
Definition: intermediate.h:1487
Definition: intermediate.h:147
GLenum GLuint id
Definition: glext.h:6233
Definition: intermediate.h:404
Definition: intermediate.h:454
virtual glslang::TIntermSwitch * getAsSwitchNode()
Definition: intermediate.h:1003
Definition: intermediate.h:252
Definition: intermediate.h:207
Definition: intermediate.h:749
static int cond(LexState *ls)
Definition: lparser.c:1177
bool getShortCircuit() const
Definition: intermediate.h:1538
Definition: intermediate.h:396
glslang::TSourceLoc loc
Definition: intermediate.h:1026
Definition: intermediate.h:663
Definition: intermediate.h:686
Definition: intermediate.h:874
Definition: intermediate.h:485
void decrementDepth()
Definition: intermediate.h:1641
Definition: intermediate.h:160
Definition: intermediate.h:328
Definition: intermediate.h:514
void setDebug(bool d)
Definition: intermediate.h:1500
Definition: intermediate.h:926
virtual TType & getWritableType()
Definition: intermediate.h:1050
const TConstUnionArray & getConstArray() const
Definition: intermediate.h:1172
virtual const glslang::TIntermSymbol * getAsSymbolNode() const
Definition: intermediate.h:1018
virtual const TIntermOperator * getAsOperator() const
Definition: intermediate.h:1237
virtual const glslang::TIntermAggregate * getAsAggregate() const
Definition: intermediate.h:1012
Definition: intermediate.h:148
Definition: intermediate.h:365
Definition: intermediate.h:226
Definition: intermediate.h:402
TIntermMethod(TIntermTyped *o, const TType &t, const TString &m)
Definition: intermediate.h:1140
const bool postVisit
Definition: intermediate.h:1654
Definition: intermediate.h:943
bool getFlatten() const
Definition: intermediate.h:1572
Definition: intermediate.h:930
bool getDontFlatten() const
Definition: intermediate.h:1543
Definition: intermediate.h:139
Definition: intermediate.h:178
Definition: intermediate.h:949
TIntermTyped * test
Definition: intermediate.h:1107
Definition: intermediate.h:721
Definition: intermediate.h:905
Definition: intermediate.h:463
Definition: intermediate.h:78
Definition: intermediate.h:488
Definition: intermediate.h:309
Definition: intermediate.h:290
Definition: intermediate.h:648
Definition: intermediate.h:351
TIntermNode * node2
Definition: intermediate.h:1036
Definition: intermediate.h:697
Definition: intermediate.h:643
Definition: intermediate.h:306
void setFlatten()
Definition: intermediate.h:1540
Definition: intermediate.h:699
Definition: intermediate.h:521
Definition: Types.h:65
virtual void setOperand(TIntermTyped *o)
Definition: intermediate.h:1467
bool isConstructor() const
Definition: Intermediate.cpp:2916
Definition: intermediate.h:909
Definition: intermediate.h:346
Definition: intermediate.h:413
TPrecisionQualifier getOperationPrecision() const
Definition: intermediate.h:1249
Definition: intermediate.h:814
Definition: intermediate.h:655
Definition: intermediate.h:162
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:259
Definition: intermediate.h:167
bool literal
Definition: intermediate.h:1211
Definition: intermediate.h:1234
Definition: intermediate.h:600
Definition: intermediate.h:744
Definition: intermediate.h:633
void setFlatten()
Definition: intermediate.h:1570
virtual TIntermNode * getCondition() const
Definition: intermediate.h:1565
TIntermNode()
Definition: intermediate.h:992
TOperator getFlowOp() const
Definition: intermediate.h:1126
virtual const TIntermSelection * getAsSelectionNode() const
Definition: intermediate.h:1535
bool SameSpecializationConstants(TIntermTyped *, TIntermTyped *)
Definition: intermediate.h:1669
Definition: intermediate.h:789
Definition: intermediate.h:729
virtual const TIntermBinary * getAsBinaryNode() const
Definition: intermediate.h:1452
bool lodClamp
Definition: intermediate.h:1225
Definition: intermediate.h:495
GLdouble GLdouble right
Definition: glext.h:11766
virtual const TIntermTyped * getAsTyped() const
Definition: intermediate.h:1047
virtual TIntermAggregate * getBody() const
Definition: intermediate.h:1566
Definition: intermediate.h:206
Definition: intermediate.h:1154
Definition: intermediate.h:886
Definition: intermediate.h:819
virtual bool visitLoop(TVisit, TIntermLoop *)
Definition: intermediate.h:1628
Definition: intermediate.h:660
Definition: intermediate.h:951
virtual bool visitBinary(TVisit, TIntermBinary *)
Definition: intermediate.h:1624
Definition: intermediate.h:619
Definition: intermediate.h:372
const GLubyte * c
Definition: glext.h:9812
const TConstUnionArray & getConstArray() const
Definition: intermediate.h:1197
GLboolean GLboolean GLboolean b
Definition: glext.h:6844
Definition: intermediate.h:902
Definition: intermediate.h:630
Definition: intermediate.h:900
bool userDefined
Definition: intermediate.h:1511
Definition: intermediate.h:245
Definition: intermediate.h:393
Definition: Types.h:74
virtual bool visitBranch(TVisit, TIntermBranch *)
Definition: intermediate.h:1629
Definition: intermediate.h:1076
Definition: intermediate.h:322
Definition: intermediate.h:810
Definition: intermediate.h:801
Definition: intermediate.h:395
Definition: intermediate.h:912
Definition: intermediate.h:247
Definition: intermediate.h:650
Definition: intermediate.h:556
Definition: intermediate.h:494
virtual TIntermTyped * getObject() const
Definition: intermediate.h:1144
Definition: intermediate.h:671
Definition: intermediate.h:988
Definition: intermediate.h:938
Definition: intermediate.h:908
Definition: intermediate.h:620
TIntermAggregate(TOperator o)
Definition: intermediate.h:1485
Definition: intermediate.h:279
Definition: intermediate.h:99
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:147
Definition: intermediate.h:131
virtual void updatePrecision()
Definition: Intermediate.cpp:2995
void setLoopDependency(int d)
Definition: intermediate.h:1102
Definition: intermediate.h:89
Definition: intermediate.h:187
int maxDepth
Definition: intermediate.h:1661
Definition: intermediate.h:479
bool modifiesState() const
Definition: Intermediate.cpp:2885
Definition: intermediate.h:375
Definition: intermediate.h:68
virtual bool isFloatingDomain() const
Definition: intermediate.h:1064
Definition: intermediate.h:732
Definition: intermediate.h:948
Definition: intermediate.h:392
Definition: intermediate.h:92
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:69
Definition: intermediate.h:363
Definition: intermediate.h:415
Definition: intermediate.h:707
virtual glslang::TIntermUnary * getAsUnaryNode()
Definition: intermediate.h:1000
Definition: intermediate.h:710
Definition: intermediate.h:241
Definition: intermediate.h:525
Definition: intermediate.h:337
Definition: intermediate.h:335
virtual const TString & getName() const
Definition: intermediate.h:1493
TPoolAllocator & GetThreadPoolAllocator()
Definition: PoolAlloc.cpp:47
Definition: intermediate.h:490
Definition: intermediate.h:389
Definition: intermediate.h:773
Definition: intermediate.h:368
Definition: intermediate.h:400
Definition: intermediate.h:745
Definition: intermediate.h:193
virtual TQualifierList & getQualifierList()
Definition: intermediate.h:1497
Definition: intermediate.h:398
Definition: intermediate.h:282
Definition: intermediate.h:716
virtual TIntermTyped * getOperand()
Definition: intermediate.h:1468
Definition: intermediate.h:701
#define NULL
Pointer to 0.
Definition: gctypes.h:65
Definition: intermediate.h:124
Definition: intermediate.h:177
Definition: intermediate.h:669
GLenum type
Definition: glext.h:6233
bool getOptimize() const
Definition: intermediate.h:1501
Definition: intermediate.h:403
Definition: intermediate.h:149
Definition: intermediate.h:763
TPragmaTable * pragmaTable
Definition: intermediate.h:1514
Definition: intermediate.h:706
Definition: intermediate.h:779
Definition: intermediate.h:741
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:59
Definition: intermediate.h:221
bool l
Definition: connect_wiiupro.c:37
Definition: Types.h:1169
virtual const TQualifier & getQualifier() const
Definition: intermediate.h:1054
Definition: intermediate.h:1215
Definition: intermediate.h:647
Definition: intermediate.h:843
Definition: intermediate.h:161
TIntermTyped * getTerminal() const
Definition: intermediate.h:1093
Definition: intermediate.h:487
Definition: intermediate.h:873
Definition: intermediate.h:130
Definition: intermediate.h:466
Definition: intermediate.h:963
Definition: intermediate.h:387
Definition: intermediate.h:725
Definition: intermediate.h:289
Definition: intermediate.h:344
Definition: intermediate.h:497
Definition: intermediate.h:726
int getLoopDependency() const
Definition: intermediate.h:1103
Definition: intermediate.h:382
Definition: intermediate.h:262
TIntermTyped * terminal
Definition: intermediate.h:1108
Definition: Types.h:418
Definition: intermediate.h:812
static const unsigned int dependencyInfinite
Definition: intermediate.h:1101
virtual bool isIntegerDomain() const
Definition: intermediate.h:1065
Definition: intermediate.h:913
Definition: intermediate.h:1138
Definition: intermediate.h:366
bool fetch
Definition: intermediate.h:1219
Definition: intermediate.h:181
Definition: intermediate.h:251
Definition: intermediate.h:704
virtual const TIntermBranch * getAsBranchNode() const
Definition: intermediate.h:1124
Definition: intermediate.h:111
Definition: intermediate.h:119
Definition: intermediate.h:383
Definition: intermediate.h:593
Definition: intermediate.h:673
TVector< TIntermNode * > TIntermSequence
Definition: intermediate.h:1477
Definition: intermediate.h:80
Definition: intermediate.h:345
Definition: intermediate.h:496
virtual const glslang::TIntermSwitch * getAsSwitchNode() const
Definition: intermediate.h:1016
Definition: intermediate.h:122
Definition: intermediate.h:806
virtual TIntermTyped * fold(TOperator, const TIntermTyped *) const
Definition: Constant.cpp:100
__inline const char * GetPrecisionQualifierString(TPrecisionQualifier p)
Definition: BaseTypes.h:382
Definition: intermediate.h:596
Definition: intermediate.h:904
void setDontUnroll()
Definition: intermediate.h:1097
Definition: intermediate.h:86
Definition: intermediate.h:845
Definition: intermediate.h:839
Definition: intermediate.h:456
virtual glslang::TIntermAggregate * getAsAggregate()
Definition: intermediate.h:999
Definition: intermediate.h:189
virtual bool isMatrix() const
Definition: intermediate.h:1059
Definition: intermediate.h:444
Definition: intermediate.h:700
Definition: BaseTypes.h:376
virtual void propagatePrecision(TPrecisionQualifier)
Definition: Intermediate.cpp:3470
Definition: intermediate.h:414
virtual glslang::TIntermLoop * getAsLoopNode()
Definition: intermediate.h:1007
TIntermTyped & operator=(const TIntermTyped &)
Definition: intermediate.h:489
TIntermLoop(TIntermNode *aBody, TIntermTyped *aTest, TIntermTyped *aTerminal, bool testFirst)
Definition: intermediate.h:1078
Definition: intermediate.h:213
Definition: intermediate.h:476
Definition: intermediate.h:506
Definition: intermediate.h:518
Definition: intermediate.h:294
Definition: intermediate.h:179
Definition: intermediate.h:856
const bool rightToLeft
Definition: intermediate.h:1655
Definition: intermediate.h:249
Definition: intermediate.h:507
#define POOL_ALLOCATOR_NEW_DELETE(A)
Definition: Common.h:112
Definition: intermediate.h:746
Definition: intermediate.h:83
Definition: intermediate.h:237
Definition: intermediate.h:176
virtual glslang::TIntermMethod * getAsMethodNode()
Definition: intermediate.h:1004
virtual glslang::TIntermConstantUnion * getAsConstantUnion()
Definition: intermediate.h:998
Definition: intermediate.h:370
virtual TIntermBinary * getAsBinaryNode()
Definition: intermediate.h:1451
Definition: intermediate.h:348
virtual void setRight(TIntermTyped *n)
Definition: intermediate.h:1448
bool testFirst() const
Definition: intermediate.h:1094
Definition: intermediate.h:278
Definition: intermediate.h:924
TString getCompleteString() const
Definition: intermediate.h:1252
virtual const glslang::TSourceLoc & getLoc() const
Definition: intermediate.h:993
Definition: intermediate.h:916
virtual const glslang::TIntermBinary * getAsBinaryNode() const
Definition: intermediate.h:1014
virtual const TString & getName() const
Definition: intermediate.h:1167
Definition: intermediate.h:307
Definition: intermediate.h:311
Definition: intermediate.h:323
TIntermAggregate()
Definition: intermediate.h:1484
Definition: intermediate.h:159
Definition: intermediate.h:330
Definition: intermediate.h:265
Definition: intermediate.h:740
TIntermAggregate * body
Definition: intermediate.h:1577
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:77
void setPragmaTable(const TPragmaTable &pTable)
Definition: Intermediate.cpp:3747
Definition: intermediate.h:880
Definition: intermediate.h:85
Definition: intermediate.h:714
Definition: intermediate.h:642
Definition: intermediate.h:95
virtual const glslang::TIntermSelection * getAsSelectionNode() const
Definition: intermediate.h:1015
Definition: intermediate.h:285
Definition: intermediate.h:499
Definition: intermediate.h:132
Definition: intermediate.h:166
Definition: intermediate.h:519
Definition: intermediate.h:782
virtual void visitConstantUnion(TIntermConstantUnion *)
Definition: intermediate.h:1623
Definition: intermediate.h:312
virtual void setLeft(TIntermTyped *n)
Definition: intermediate.h:1447
virtual void setOperator(TOperator o)
Definition: intermediate.h:1489
Definition: intermediate.h:961
virtual void setLoc(const glslang::TSourceLoc &l)
Definition: intermediate.h:994
Definition: Types.h:66
Definition: intermediate.h:248
virtual TIntermTyped * getAsTyped()
Definition: intermediate.h:1046
Definition: intermediate.h:407
Definition: intermediate.h:743
TVector< TIntermNode * > path
Definition: intermediate.h:1664
virtual int getMatrixCols() const
Definition: intermediate.h:1057
Definition: intermediate.h:501
Definition: intermediate.h:156
Definition: intermediate.h:138
Definition: intermediate.h:683
Definition: intermediate.h:325
Definition: intermediate.h:388
virtual void setUserDefined()
Definition: intermediate.h:1495
Definition: intermediate.h:888
Definition: intermediate.h:954
void crackTexture(TSampler sampler, TCrackedTextureOp &cracked) const
Definition: intermediate.h:1264
Definition: intermediate.h:679
virtual bool isArray() const
Definition: intermediate.h:1060
Definition: intermediate.h:481
Definition: intermediate.h:674
virtual TIntermOperator * getAsOperator()
Definition: intermediate.h:1236
virtual void setName(const TString &n)
Definition: intermediate.h:1492
Definition: intermediate.h:852
Definition: intermediate.h:703
Definition: intermediate.h:527
Definition: intermediate.h:355
Definition: intermediate.h:610
Definition: intermediate.h:449
Definition: intermediate.h:255
Definition: intermediate.h:151
void setNoShortCircuit()
Definition: intermediate.h:1537
Definition: intermediate.h:920
bool lod
Definition: intermediate.h:1218
Definition: intermediate.h:461
TIntermTyped * object
Definition: intermediate.h:1147
GLint GLint GLsizei GLsizei GLsizei depth
Definition: glext.h:6293
Definition: intermediate.h:302
Definition: intermediate.h:689
Definition: intermediate.h:955
Definition: intermediate.h:901
Definition: intermediate.h:435
Definition: intermediate.h:587
Definition: intermediate.h:261
Definition: intermediate.h:785
Definition: intermediate.h:190
Definition: intermediate.h:962
Definition: intermediate.h:640
virtual void updatePrecision()
Definition: Intermediate.cpp:3459
Definition: intermediate.h:878
Definition: intermediate.h:475
Definition: intermediate.h:327
Definition: intermediate.h:353
Definition: intermediate.h:234
Definition: intermediate.h:513
Definition: intermediate.h:341
TString getCompleteString() const
Definition: intermediate.h:1066
GLfloat GLfloat p
Definition: glext.h:9809
Definition: intermediate.h:747
Definition: intermediate.h:464
Definition: intermediate.h:680
Definition: intermediate.h:607
Definition: intermediate.h:143
Definition: intermediate.h:649
Definition: intermediate.h:893
bool isTexture() const
Definition: intermediate.h:1242
virtual TIntermTyped * getCondition() const
Definition: intermediate.h:1531
void setOp(TOperator newOp)
Definition: intermediate.h:1239
Definition: intermediate.h:935
Definition: intermediate.h:133
Definition: intermediate.h:288
Definition: intermediate.h:380
Definition: intermediate.h:666
Definition: intermediate.h:357
Definition: intermediate.h:523
Definition: intermediate.h:509
Definition: intermediate.h:1482
Definition: intermediate.h:320
Definition: intermediate.h:93
virtual glslang::TIntermBinary * getAsBinaryNode()
Definition: intermediate.h:1001
Definition: intermediate.h:334
Definition: intermediate.h:803
Definition: intermediate.h:950
Definition: intermediate.h:522
Definition: intermediate.h:675
Definition: intermediate.h:693
Definition: intermediate.h:906
Definition: intermediate.h:890
Definition: intermediate.h:291
Definition: arrays.h:46
Definition: intermediate.h:277
Definition: intermediate.h:510
void setOptimize(bool o)
Definition: intermediate.h:1499
Definition: intermediate.h:223
Definition: intermediate.h:606
Definition: intermediate.h:227
Definition: intermediate.h:283
Definition: intermediate.h:233
bool gather
Definition: intermediate.h:1222
Definition: intermediate.h:818
Definition: intermediate.h:349
virtual const TIntermAggregate * getAsAggregate() const
Definition: intermediate.h:1488
Definition: intermediate.h:256
virtual bool visitUnary(TVisit, TIntermUnary *)
Definition: intermediate.h:1625
bool isSparseTexture() const
Definition: intermediate.h:1245
virtual const glslang::TIntermUnary * getAsUnaryNode() const
Definition: intermediate.h:1013
Definition: intermediate.h:605
Definition: intermediate.h:430
Definition: intermediate.h:685
Definition: intermediate.h:384
Definition: intermediate.h:661
TVisit
Definition: intermediate.h:1582
Definition: intermediate.h:242
Definition: intermediate.h:144
Definition: intermediate.h:698
bool query
Definition: intermediate.h:1216
Definition: intermediate.h:378
Definition: intermediate.h:184
Definition: intermediate.h:604
virtual TIntermMethod * getAsMethodNode()
Definition: intermediate.h:1141
Definition: intermediate.h:602
virtual TIntermSwitch * getAsSwitchNode()
Definition: intermediate.h:1567
Definition: intermediate.h:713
Definition: intermediate.h:639
Definition: intermediate.h:771
Definition: intermediate.h:451
Definition: intermediate.h:688
~TIntermAggregate()
Definition: intermediate.h:1486
Definition: intermediate.h:373
TIntermAggregate & operator=(const TIntermAggregate &)
virtual TIntermSelection * getAsSelectionNode()
Definition: intermediate.h:1534
virtual int getId() const
Definition: intermediate.h:1166
virtual TBasicType getBasicType() const
Definition: intermediate.h:1052
Definition: intermediate.h:724
Definition: intermediate.h:844
Definition: intermediate.h:817
TIntermBinary(TOperator o)
Definition: intermediate.h:1445
Definition: intermediate.h:932
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:187
TIntermTyped * left
Definition: intermediate.h:1455
Definition: intermediate.h:958
TIntermTyped(const TType &t)
Definition: intermediate.h:1044
Definition: intermediate.h:477
virtual const TIntermTyped * getOperand() const
Definition: intermediate.h:1469
TIntermTyped * expression
Definition: intermediate.h:1130
virtual const TType & getType() const
Definition: intermediate.h:1049
Definition: intermediate.h:742
virtual int getMatrixRows() const
Definition: intermediate.h:1058
Definition: intermediate.h:903
bool getDontFlatten() const
Definition: intermediate.h:1573
virtual const glslang::TIntermOperator * getAsOperator() const
Definition: intermediate.h:1010
Definition: intermediate.h:653
Definition: intermediate.h:116
Definition: intermediate.h:121
Definition: intermediate.h:934
Definition: intermediate.h:215
Definition: intermediate.h:636
TIntermNode * falseBlock
Definition: intermediate.h:1548
Definition: intermediate.h:217
Definition: intermediate.h:717
Definition: intermediate.h:512
Definition: intermediate.h:708
TIntermSymbol(int i, const TString &n, const TType &t)
Definition: intermediate.h:1159
Definition: intermediate.h:246
Definition: intermediate.h:238
virtual TQualifier & getQualifier()
Definition: intermediate.h:1053
Definition: intermediate.h:96
Definition: intermediate.h:108
bool flatten
Definition: intermediate.h:1550
void setUnroll()
Definition: intermediate.h:1096
Definition: intermediate.h:472
Definition: intermediate.h:910
Definition: intermediate.h:390
Definition: intermediate.h:125
Definition: intermediate.h:719
Definition: intermediate.h:397
Definition: intermediate.h:120
Definition: intermediate.h:616
Definition: intermediate.h:829
Definition: intermediate.h:879
Definition: intermediate.h:892
void setDontFlatten()
Definition: intermediate.h:1541
Definition: intermediate.h:781
Definition: intermediate.h:158
TVector< TStorageQualifier > TQualifierList
Definition: intermediate.h:1478
Definition: intermediate.h:371
virtual glslang::TIntermOperator * getAsOperator()
Definition: intermediate.h:997
Definition: intermediate.h:338
Definition: intermediate.h:360
Definition: intermediate.h:822
Definition: intermediate.h:305
Definition: intermediate.h:1584
Definition: intermediate.h:1586
virtual const glslang::TIntermBranch * getAsBranchNode() const
Definition: intermediate.h:1019
Definition: intermediate.h:100
Definition: intermediate.h:727
Definition: intermediate.h:165
Definition: intermediate.h:826
Definition: intermediate.h:709
bool dontFlatten
Definition: intermediate.h:1551
virtual void visitSymbol(TIntermSymbol *)
Definition: intermediate.h:1622
Definition: intermediate.h:228
Definition: intermediate.h:110
Definition: intermediate.h:209
virtual TIntermLoop * getAsLoopNode()
Definition: intermediate.h:1088
Definition: intermediate.h:172
Definition: intermediate.h:379
Definition: intermediate.h:134
Definition: intermediate.h:67
Definition: intermediate.h:670
Definition: intermediate.h:231
Definition: intermediate.h:731
Definition: intermediate.h:321
Definition: intermediate.h:152
Definition: intermediate.h:81
Definition: intermediate.h:712
Definition: intermediate.h:416
Definition: intermediate.h:723
bool debug
Definition: intermediate.h:1513
Definition: intermediate.h:919
Definition: intermediate.h:664
virtual TIntermConstantUnion * getAsConstantUnion()
Definition: intermediate.h:1198
virtual bool visitAggregate(TVisit, TIntermAggregate *)
Definition: intermediate.h:1627
Definition: intermediate.h:656
Definition: intermediate.h:769
TPrecisionQualifier
Definition: BaseTypes.h:375
Definition: intermediate.h:526
TIntermTyped * getConstSubtree() const
Definition: intermediate.h:1174
Definition: intermediate.h:855
Definition: intermediate.h:898
Definition: intermediate.h:805
bool subpass
Definition: intermediate.h:1224
TBasicType
Definition: BaseTypes.h:46
Definition: intermediate.h:339
Definition: intermediate.h:374
Definition: intermediate.h:358
TIntermNode & operator=(const TIntermNode &)
Definition: intermediate.h:459
TIntermTyped * constSubtree
Definition: intermediate.h:1191
void setConstSubtree(TIntermTyped *subtree)
Definition: intermediate.h:1173
Definition: intermediate.h:922
Definition: intermediate.h:816
Definition: intermediate.h:303
GLenum condition
Definition: glext.h:10162
Definition: intermediate.h:842
virtual TIntermTyped * getLeft() const
Definition: intermediate.h:1449
Definition: intermediate.h:324
Definition: intermediate.h:153
Definition: intermediate.h:936
Definition: intermediate.h:516
Definition: intermediate.h:871
virtual const TIntermLoop * getAsLoopNode() const
Definition: intermediate.h:1089
Definition: intermediate.h:790
Definition: intermediate.h:750
virtual TIntermSequence & getSequence()
Definition: intermediate.h:1490
virtual ~TIntermNode()
Definition: intermediate.h:1021
Definition: intermediate.h:185
Definition: intermediate.h:417
Definition: intermediate.h:157
TIntermConstantUnion(const TConstUnionArray &ua, const TType &t)
Definition: intermediate.h:1196
Definition: intermediate.h:896
TIntermSwitch(TIntermTyped *cond, TIntermAggregate *b)
Definition: intermediate.h:1562
Definition: intermediate.h:232
Definition: ConstantUnion.h:874
Definition: intermediate.h:198
Definition: intermediate.h:493
Definition: intermediate.h:515
virtual bool isUserDefined()
Definition: intermediate.h:1496
Definition: intermediate.h:1585
Definition: intermediate.h:891
Definition: intermediate.h:634
TQualifierList qualifier
Definition: intermediate.h:1509
Definition: intermediate.h:72
Definition: intermediate.h:354
Definition: intermediate.h:672
virtual TIntermSymbol * getAsSymbolNode()
Definition: intermediate.h:1169
Definition: intermediate.h:270
Definition: intermediate.h:319
Definition: intermediate.h:875
Definition: intermediate.h:462
TIntermSelection(TIntermTyped *cond, TIntermNode *trueB, TIntermNode *falseB, const TType &type)
Definition: intermediate.h:1526
Definition: intermediate.h:200
virtual TIntermUnary * getAsUnaryNode()
Definition: intermediate.h:1470
Definition: intermediate.h:406
Definition: intermediate.h:865
Definition: intermediate.h:659
void incrementDepth(TIntermNode *current)
Definition: intermediate.h:1634
Definition: intermediate.h:70
Definition: intermediate.h:484
Definition: intermediate.h:711
int getMaxDepth() const
Definition: intermediate.h:1632
Definition: intermediate.h:784
Definition: intermediate.h:594
Definition: intermediate.h:933
Definition: intermediate.h:298
Definition: intermediate.h:91
Definition: intermediate.h:350
virtual TIntermNode * getFalseBlock() const
Definition: intermediate.h:1533
Definition: intermediate.h:329
Definition: intermediate.h:811
TIntermTraverser & operator=(TIntermTraverser &)
Definition: intermediate.h:106
Definition: intermediate.h:426
Definition: intermediate.h:667
Definition: intermediate.h:109
TIntermTyped * operand
Definition: intermediate.h:1474
Definition: intermediate.h:815
Definition: intermediate.h:644
bool offsets
Definition: intermediate.h:1221
TType type
Definition: intermediate.h:1070
TString method
Definition: intermediate.h:1148
Definition: intermediate.h:718
Definition: intermediate.h:367
Definition: intermediate.h:940
int id
Definition: intermediate.h:1185
Definition: intermediate.h:386
TIntermSelection(TIntermTyped *cond, TIntermNode *trueB, TIntermNode *falseB)
Definition: intermediate.h:1522
Definition: intermediate.h:71
Definition: intermediate.h:336
Definition: intermediate.h:269
Definition: intermediate.h:511
Definition: intermediate.h:635
#define false
Definition: ordinals.h:83
Definition: intermediate.h:851
Definition: intermediate.h:90
Definition: intermediate.h:827
Definition: intermediate.h:503
const TConstUnionArray constArray
Definition: intermediate.h:1210
Definition: intermediate.h:286
Definition: intermediate.h:500
Definition: intermediate.h:690
TConstUnionArray constArray
Definition: intermediate.h:1190
Definition: intermediate.h:654
virtual void traverse(TIntermTraverser *)
Definition: IntermTraverse.cpp:127
Definition: intermediate.h:894
Definition: intermediate.h:825
GLuint sampler
Definition: glext.h:7950
Definition: intermediate.h:847
bool grad
Definition: intermediate.h:1223
Definition: intermediate.h:377
Definition: intermediate.h:658
Definition: intermediate.h:471
Definition: intermediate.h:621
#define true
Definition: ordinals.h:82
GLint left
Definition: glext.h:8393
Definition: intermediate.h:753
Definition: intermediate.h:617
TIntermBranch(TOperator op, TIntermTyped *e)
Definition: intermediate.h:1120
Definition: intermediate.h:1560
Definition: intermediate.h:651
Definition: intermediate.h:780
Definition: intermediate.h:804
Definition: intermediate.h:774
Definition: intermediate.h:786
Definition: Types.h:64
Definition: intermediate.h:945
TIntermTyped * getExpression() const
Definition: intermediate.h:1127
int depth
Definition: intermediate.h:1660
Definition: intermediate.h:603
Definition: intermediate.h:195
Definition: intermediate.h:492
Definition: intermediate.h:433
Definition: intermediate.h:394
Definition: intermediate.h:362
Definition: intermediate.h:460
Definition: intermediate.h:411
Definition: intermediate.h:431
Definition: intermediate.h:432
Definition: intermediate.h:1042
Definition: intermediate.h:720
Definition: intermediate.h:318
Definition: intermediate.h:687
Definition: intermediate.h:1462
void setDontFlatten()
Definition: intermediate.h:1571
Definition: intermediate.h:391
Definition: intermediate.h:482
Definition: Types.h:70
Definition: intermediate.h:529
Definition: intermediate.h:730
Definition: intermediate.h:105
Definition: intermediate.h:841
Definition: intermediate.h:194
virtual glslang::TIntermTyped * getAsTyped()
Definition: intermediate.h:996
bool getDebug() const
Definition: intermediate.h:1502
Definition: intermediate.h:204
Definition: intermediate.h:591
bool isSampling() const
Definition: intermediate.h:1243
virtual void traverse(glslang::TIntermTraverser *)=0
TOperator op
Definition: intermediate.h:1431
TIntermSequence sequence
Definition: intermediate.h:1508
Definition: intermediate.h:609
Definition: intermediate.h:84
TOperator getOp() const
Definition: intermediate.h:1238
TIntermConstantUnion & operator=(const TIntermConstantUnion &)
TIntermNode * body
Definition: intermediate.h:1106
GLdouble n
Definition: glext.h:8396
virtual int getVectorSize() const
Definition: intermediate.h:1056
bool first
Definition: intermediate.h:1109
bool isLiteral() const
Definition: intermediate.h:1205
Definition: intermediate.h:447
Definition: intermediate.h:638
Definition: intermediate.h:369
Definition: intermediate.h:260
const GLfloat * m
Definition: glext.h:11755
Definition: intermediate.h:911
Definition: intermediate.h:443
TIntermNode * getBody() const
Definition: intermediate.h:1091
Definition: intermediate.h:429
Definition: intermediate.h:333
Definition: intermediate.h:598
Definition: intermediate.h:631
TIntermTyped * condition
Definition: intermediate.h:1576
Definition: intermediate.h:276
Definition: intermediate.h:628
Definition: lobject.h:303
Definition: intermediate.h:436
Definition: intermediate.h:343
Definition: intermediate.h:188
Definition: intermediate.h:853
Definition: intermediate.h:823
Definition: intermediate.h:453
bool offset
Definition: intermediate.h:1220
GLuint object
Definition: glsym_es2.h:109
Definition: intermediate.h:795
Definition: intermediate.h:385
Definition: intermediate.h:820
Definition: intermediate.h:480
TIntermNode * node1
Definition: intermediate.h:1035
Definition: intermediate.h:752
Definition: intermediate.h:722
Definition: intermediate.h:171
Definition: intermediate.h:483
Definition: intermediate.h:376
Definition: intermediate.h:478
Definition: intermediate.h:470
Definition: BaseTypes.h:48
virtual bool isVector() const
Definition: intermediate.h:1061
TIntermTyped(TBasicType basicType)
Definition: intermediate.h:1045
Definition: intermediate.h:222
Definition: intermediate.h:491
TIntermNode * trueBlock
Definition: intermediate.h:1547
Definition: intermediate.h:326
Definition: intermediate.h:458
Definition: intermediate.h:632
Definition: intermediate.h:259
Definition: intermediate.h:946
Definition: intermediate.h:250
Definition: intermediate.h:517
Definition: intermediate.h:665
Definition: Common.h:247
Definition: intermediate.h:692
void init()
Definition: Common.h:232
Definition: intermediate.h:944
Definition: intermediate.h:186
Definition: intermediate.h:848