1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_builtin_symbols.py using data from builtin_function_declarations.txt.
3 //
4 // Copyright 2021 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // Operator_autogen.h:
9 // Operators used by the high-level (parse tree) representation.
10
11 #ifndef COMPILER_TRANSLATOR_OPERATOR_AUTOGEN_H_
12 #define COMPILER_TRANSLATOR_OPERATOR_AUTOGEN_H_
13
14 #include <stdint.h>
15
16 namespace sh
17 {
18
19 enum TOperator : uint16_t
20 {
21 EOpNull, // if in a node, should only mean a node is still being built
22
23 // Call a function defined in the AST. This might be a user-defined function or a function
24 // inserted by an AST transformation.
25 EOpCallFunctionInAST,
26
27 // Call an internal helper function with a raw implementation - the implementation can't be
28 // subject to AST transformations. Raw functions have a few constraints to keep them compatible
29 // with AST traversers:
30 // * They should not return arrays.
31 // * They should not have out parameters.
32 // TODO: remove this. http://anglebug.com/6059
33 EOpCallInternalRawFunction,
34
35 //
36 // Branch (TIntermBranch)
37 //
38
39 EOpKill, // Fragment only
40 EOpReturn,
41 EOpBreak,
42 EOpContinue,
43
44 //
45 // Constructor (TIntermAggregate)
46 //
47
48 EOpConstruct,
49
50 //
51 // Unary operators with special GLSL syntax (TIntermUnary).
52 //
53
54 EOpNegative,
55 EOpPositive,
56 EOpLogicalNot,
57 EOpBitwiseNot,
58
59 EOpPostIncrement,
60 EOpPostDecrement,
61 EOpPreIncrement,
62 EOpPreDecrement,
63
64 EOpArrayLength,
65
66 //
67 // Binary operators with special GLSL syntax (TIntermBinary).
68 //
69
70 EOpAdd,
71 EOpSub,
72 EOpMul,
73 EOpDiv,
74 EOpIMod,
75
76 EOpEqual,
77 EOpNotEqual,
78 EOpLessThan,
79 EOpGreaterThan,
80 EOpLessThanEqual,
81 EOpGreaterThanEqual,
82
83 EOpComma,
84
85 EOpVectorTimesScalar,
86 EOpVectorTimesMatrix,
87 EOpMatrixTimesVector,
88 EOpMatrixTimesScalar,
89 EOpMatrixTimesMatrix,
90
91 EOpLogicalOr,
92 EOpLogicalXor,
93 EOpLogicalAnd,
94
95 EOpBitShiftLeft,
96 EOpBitShiftRight,
97
98 EOpBitwiseAnd,
99 EOpBitwiseXor,
100 EOpBitwiseOr,
101
102 EOpIndexDirect,
103 EOpIndexIndirect,
104 EOpIndexDirectStruct,
105 EOpIndexDirectInterfaceBlock,
106
107 //
108 // Moves (TIntermBinary)
109 //
110
111 EOpAssign,
112 EOpInitialize,
113 EOpAddAssign,
114 EOpSubAssign,
115
116 EOpMulAssign,
117 EOpVectorTimesMatrixAssign,
118 EOpVectorTimesScalarAssign,
119 EOpMatrixTimesScalarAssign,
120 EOpMatrixTimesMatrixAssign,
121
122 EOpDivAssign,
123 EOpIModAssign,
124 EOpBitShiftLeftAssign,
125 EOpBitShiftRightAssign,
126 EOpBitwiseAndAssign,
127 EOpBitwiseXorAssign,
128 EOpBitwiseOrAssign,
129
130 // Not an op, but a marker for the start of built-in ops.
131 EOpLastNonBuiltIn = EOpBitwiseOrAssign,
132
133 //
134 // Built-in functions mapped to operators (either unary (TIntermUnary) or with multiple
135 // parameters (TIntermAggregate))
136 //
137
138 // Group Math
139
140 // Group MathTrigonometric
141 EOpRadians, // Unary
142 EOpDegrees, // Unary
143 EOpSin, // Unary
144 EOpCos, // Unary
145 EOpTan, // Unary
146 EOpAsin, // Unary
147 EOpAcos, // Unary
148 EOpAtan,
149 EOpSinh, // Unary
150 EOpCosh, // Unary
151 EOpTanh, // Unary
152 EOpAsinh, // Unary
153 EOpAcosh, // Unary
154 EOpAtanh, // Unary
155
156 // Group MathExponential
157 EOpPow,
158 EOpExp, // Unary
159 EOpLog, // Unary
160 EOpExp2, // Unary
161 EOpLog2, // Unary
162 EOpSqrt, // Unary
163 EOpInversesqrt, // Unary
164
165 // Group MathCommon
166 EOpAbs, // Unary
167 EOpSign, // Unary
168 EOpFloor, // Unary
169 EOpTrunc, // Unary
170 EOpRound, // Unary
171 EOpRoundEven, // Unary
172 EOpCeil, // Unary
173 EOpFract, // Unary
174 EOpMod,
175 EOpMin,
176 EOpMax,
177 EOpClamp,
178 EOpMix,
179 EOpStep,
180 EOpSmoothstep,
181 EOpModf,
182 EOpIsnan, // Unary
183 EOpIsinf, // Unary
184 EOpFloatBitsToInt, // Unary
185 EOpFloatBitsToUint, // Unary
186 EOpIntBitsToFloat, // Unary
187 EOpUintBitsToFloat, // Unary
188 EOpFma,
189 EOpFrexp,
190 EOpLdexp,
191 EOpPackSnorm2x16, // Unary
192 EOpPackHalf2x16, // Unary
193 EOpUnpackSnorm2x16, // Unary
194 EOpUnpackHalf2x16, // Unary
195 EOpPackUnorm2x16, // Unary
196 EOpUnpackUnorm2x16, // Unary
197 EOpPackUnorm4x8, // Unary
198 EOpPackSnorm4x8, // Unary
199 EOpUnpackUnorm4x8, // Unary
200 EOpUnpackSnorm4x8, // Unary
201 EOpPackDouble2x32, // Unary
202 EOpUnpackDouble2x32, // Unary
203
204 // Group MathGeometric
205 EOpLength, // Unary
206 EOpDistance,
207 EOpDot,
208 EOpCross,
209 EOpNormalize, // Unary
210 EOpFaceforward,
211 EOpReflect,
212 EOpRefract,
213
214 // Group MathGeometricVS
215 EOpFtransform,
216
217 // Group MathMatrix
218 EOpMatrixCompMult,
219 EOpOuterProduct,
220 EOpTranspose, // Unary
221 EOpDeterminant, // Unary
222 EOpInverse, // Unary
223
224 // Group MathVector
225 EOpLessThanComponentWise,
226 EOpLessThanEqualComponentWise,
227 EOpGreaterThanComponentWise,
228 EOpGreaterThanEqualComponentWise,
229 EOpEqualComponentWise,
230 EOpNotEqualComponentWise,
231 EOpAny, // Unary
232 EOpAll, // Unary
233 EOpNotComponentWise, // Unary
234
235 // Group MathInteger
236 EOpBitfieldExtract,
237 EOpBitfieldInsert,
238 EOpBitfieldReverse, // Unary
239 EOpBitCount, // Unary
240 EOpFindLSB, // Unary
241 EOpFindMSB, // Unary
242 EOpUaddCarry,
243 EOpUsubBorrow,
244 EOpUmulExtended,
245 EOpImulExtended,
246
247 // Group Texture
248
249 // Group TextureFirstVersions
250 EOpTexture2D,
251 EOpTexture2DProj,
252 EOpTextureCube,
253 EOpTexture1D,
254 EOpTexture1DProj,
255 EOpTexture3D,
256 EOpTexture3DProj,
257 EOpShadow1D,
258 EOpShadow1DProj,
259 EOpShadow2D,
260 EOpShadow2DProj,
261 EOpShadow2DEXT,
262 EOpShadow2DProjEXT,
263 EOpTexture2DRect,
264 EOpTexture2DRectProj,
265 EOpTexture2DGradEXT,
266 EOpTexture2DProjGradEXT,
267 EOpTextureCubeGradEXT,
268 EOpTextureVideoWEBGL,
269
270 // Group TextureFirstVersionsBias
271 EOpTexture2DBias,
272 EOpTexture2DProjBias,
273 EOpTextureCubeBias,
274 EOpTexture3DBias,
275 EOpTexture3DProjBias,
276 EOpTexture1DBias,
277 EOpTexture1DProjBias,
278 EOpShadow1DBias,
279 EOpShadow1DProjBias,
280 EOpShadow2DBias,
281 EOpShadow2DProjBias,
282
283 // Group TextureFirstVersionsLod
284 EOpTexture2DLod,
285 EOpTexture2DProjLod,
286 EOpTextureCubeLod,
287 EOpTexture1DLod,
288 EOpTexture1DProjLod,
289 EOpShadow1DLod,
290 EOpShadow1DProjLod,
291 EOpShadow2DLod,
292 EOpShadow2DProjLod,
293 EOpTexture3DLod,
294 EOpTexture3DProjLod,
295
296 // Group TextureFirstVersionsLodVS
297 EOpTexture2DLodVS,
298 EOpTexture2DProjLodVS,
299 EOpTextureCubeLodVS,
300
301 // Group TextureFirstVersionsLodFS
302 EOpTexture2DLodEXTFS,
303 EOpTexture2DProjLodEXTFS,
304 EOpTextureCubeLodEXTFS,
305
306 // Group TextureNoBias
307 EOpTexture,
308 EOpTextureProj,
309 EOpTextureLod,
310 EOpTextureSize,
311 EOpTextureProjLod,
312 EOpTexelFetch,
313 EOpTextureGrad,
314 EOpTextureProjGrad,
315 EOpTextureQueryLevels,
316 EOpTextureSamples,
317
318 // Group TextureBias
319 EOpTextureBias,
320 EOpTextureProjBias,
321
322 // Group TextureQueryLod
323 EOpTextureQueryLod,
324
325 // Group TextureOffsetNoBias
326 EOpTextureOffset,
327 EOpTextureProjOffset,
328 EOpTextureLodOffset,
329 EOpTextureProjLodOffset,
330 EOpTexelFetchOffset,
331 EOpTextureGradOffset,
332 EOpTextureProjGradOffset,
333
334 // Group TextureOffsetBias
335 EOpTextureOffsetBias,
336 EOpTextureProjOffsetBias,
337
338 // Group TextureGather
339 EOpTextureGather,
340
341 // Group TextureGatherOffset
342
343 // Group TextureGatherOffsetNoComp
344 EOpTextureGatherOffset,
345
346 // Group TextureGatherOffsetComp
347 EOpTextureGatherOffsetComp,
348
349 // Group TextureGatherOffsets
350
351 // Group TextureGatherOffsetsNoComp
352 EOpTextureGatherOffsets,
353
354 // Group TextureGatherOffsetsComp
355 EOpTextureGatherOffsetsComp,
356
357 // Group EXT_YUV_target
358 EOpRgb_2_yuv,
359 EOpYuv_2_rgb,
360
361 // Group DerivativesFS
362 EOpDFdx,
363 EOpDFdy,
364 EOpFwidth,
365 EOpDFdxFine,
366 EOpDFdyFine,
367 EOpDFdxCoarse,
368 EOpDFdyCoarse,
369 EOpFwidthFine,
370 EOpFwidthCoarse,
371
372 // Group InterpolationFS
373 EOpInterpolateAtCentroid,
374 EOpInterpolateAtSample,
375 EOpInterpolateAtOffset,
376
377 // Group AtomicCounter
378 EOpAtomicCounter,
379 EOpAtomicCounterIncrement,
380 EOpAtomicCounterDecrement,
381 EOpAtomicCounterAdd,
382 EOpAtomicCounterSubtract,
383 EOpAtomicCounterMin,
384 EOpAtomicCounterMax,
385 EOpAtomicCounterAnd,
386 EOpAtomicCounterOr,
387 EOpAtomicCounterXor,
388 EOpAtomicCounterExchange,
389 EOpAtomicCounterCompSwap,
390
391 // Group AtomicMemory
392 EOpAtomicAdd,
393 EOpAtomicMin,
394 EOpAtomicMax,
395 EOpAtomicAnd,
396 EOpAtomicOr,
397 EOpAtomicXor,
398 EOpAtomicExchange,
399 EOpAtomicCompSwap,
400
401 // Group Image
402 EOpImageSize,
403 EOpImageSamples,
404
405 // Group ImageStore
406 EOpImageStore,
407
408 // Group ImageLoad
409 EOpImageLoad,
410
411 // Group ImageAtomic
412 EOpImageAtomicAdd,
413 EOpImageAtomicMin,
414 EOpImageAtomicMax,
415 EOpImageAtomicAnd,
416 EOpImageAtomicOr,
417 EOpImageAtomicXor,
418 EOpImageAtomicExchange,
419 EOpImageAtomicCompSwap,
420
421 // Group Noise
422 EOpNoise1,
423 EOpNoise2,
424 EOpNoise3,
425 EOpNoise4,
426
427 // Group Barrier
428 EOpMemoryBarrier,
429 EOpMemoryBarrierAtomicCounter,
430 EOpMemoryBarrierBuffer,
431 EOpMemoryBarrierImage,
432
433 // Group ESSL310CS
434 EOpBarrier,
435 EOpMemoryBarrierShared,
436 EOpGroupMemoryBarrier,
437
438 // Group ESSL310TCS
439 EOpBarrierTCS,
440
441 // Group GS
442 EOpEmitVertex,
443 EOpEndPrimitive,
444 EOpEmitStreamVertex,
445 EOpEndStreamPrimitive,
446
447 // Group SubpassInput
448 EOpSubpassLoad,
449
450 // Group ShaderInvocationGroup
451 EOpAnyInvocation,
452 EOpAllInvocations,
453 EOpAllInvocationsEqual,
454 };
455
456 // Returns the string corresponding to the operator in GLSL. For built-in functions use the
457 // function name directly.
458 const char *GetOperatorString(TOperator op);
459
460 // Say whether or not a binary or unary operation changes the value of a variable.
461 bool IsAssignment(TOperator op);
462
463 namespace BuiltInGroup
464 {
IsBuiltIn(TOperator op)465 static inline bool IsBuiltIn(TOperator op)
466 {
467 return op > EOpLastNonBuiltIn;
468 }
IsMath(TOperator op)469 static inline bool IsMath(TOperator op)
470 {
471 return op >= EOpRadians && op <= EOpImulExtended;
472 }
IsTextureOffsetNoBias(TOperator op)473 static inline bool IsTextureOffsetNoBias(TOperator op)
474 {
475 return op >= EOpTextureOffset && op <= EOpTextureProjGradOffset;
476 }
IsTextureOffsetBias(TOperator op)477 static inline bool IsTextureOffsetBias(TOperator op)
478 {
479 return op >= EOpTextureOffsetBias && op <= EOpTextureProjOffsetBias;
480 }
IsTextureGatherOffsetNoComp(TOperator op)481 static inline bool IsTextureGatherOffsetNoComp(TOperator op)
482 {
483 return op >= EOpTextureGatherOffset && op <= EOpTextureGatherOffset;
484 }
IsTextureGatherOffsetComp(TOperator op)485 static inline bool IsTextureGatherOffsetComp(TOperator op)
486 {
487 return op >= EOpTextureGatherOffsetComp && op <= EOpTextureGatherOffsetComp;
488 }
IsTextureGatherOffset(TOperator op)489 static inline bool IsTextureGatherOffset(TOperator op)
490 {
491 return op >= EOpTextureGatherOffset && op <= EOpTextureGatherOffsetComp;
492 }
IsTextureGatherOffsetsNoComp(TOperator op)493 static inline bool IsTextureGatherOffsetsNoComp(TOperator op)
494 {
495 return op >= EOpTextureGatherOffsets && op <= EOpTextureGatherOffsets;
496 }
IsTextureGatherOffsetsComp(TOperator op)497 static inline bool IsTextureGatherOffsetsComp(TOperator op)
498 {
499 return op >= EOpTextureGatherOffsetsComp && op <= EOpTextureGatherOffsetsComp;
500 }
IsTextureGatherOffsets(TOperator op)501 static inline bool IsTextureGatherOffsets(TOperator op)
502 {
503 return op >= EOpTextureGatherOffsets && op <= EOpTextureGatherOffsetsComp;
504 }
IsTextureGather(TOperator op)505 static inline bool IsTextureGather(TOperator op)
506 {
507 return op >= EOpTextureGather && op <= EOpTextureGatherOffsetsComp;
508 }
IsTexture(TOperator op)509 static inline bool IsTexture(TOperator op)
510 {
511 return op >= EOpTexture2D && op <= EOpTextureGatherOffsetsComp;
512 }
IsInterpolationFS(TOperator op)513 static inline bool IsInterpolationFS(TOperator op)
514 {
515 return op >= EOpInterpolateAtCentroid && op <= EOpInterpolateAtOffset;
516 }
IsAtomicMemory(TOperator op)517 static inline bool IsAtomicMemory(TOperator op)
518 {
519 return op >= EOpAtomicAdd && op <= EOpAtomicCompSwap;
520 }
IsImageStore(TOperator op)521 static inline bool IsImageStore(TOperator op)
522 {
523 return op >= EOpImageStore && op <= EOpImageStore;
524 }
IsImageLoad(TOperator op)525 static inline bool IsImageLoad(TOperator op)
526 {
527 return op >= EOpImageLoad && op <= EOpImageLoad;
528 }
IsImageAtomic(TOperator op)529 static inline bool IsImageAtomic(TOperator op)
530 {
531 return op >= EOpImageAtomicAdd && op <= EOpImageAtomicCompSwap;
532 }
IsImage(TOperator op)533 static inline bool IsImage(TOperator op)
534 {
535 return op >= EOpImageSize && op <= EOpImageAtomicCompSwap;
536 }
537 } // namespace BuiltInGroup
538
539 } // namespace sh
540
541 #endif // COMPILER_TRANSLATOR_OPERATOR_AUTOGEN_H_
542