blob: c54ece4ccd75d0bc98c2885a3b1a561cdd4577d6 [file] [log] [blame]
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_builtin_symbols.py using data from builtin_function_declarations.txt.
//
// Copyright 2021 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Operator_autogen.h:
// Operators used by the high-level (parse tree) representation.
#ifndef COMPILER_TRANSLATOR_OPERATOR_AUTOGEN_H_
#define COMPILER_TRANSLATOR_OPERATOR_AUTOGEN_H_
#include <stdint.h>
namespace sh
{
enum TOperator : uint16_t
{
EOpNull, // if in a node, should only mean a node is still being built
// Call a function defined in the AST. This might be a user-defined function or a function
// inserted by an AST transformation.
EOpCallFunctionInAST,
// Call an internal helper function with a raw implementation - the implementation can't be
// subject to AST transformations. Raw functions have a few constraints to keep them compatible
// with AST traversers:
// * They should not return arrays.
// * They should not have out parameters.
// TODO: remove this. http://anglebug.com/6059
EOpCallInternalRawFunction,
//
// Branch (TIntermBranch)
//
EOpKill, // Fragment only
EOpReturn,
EOpBreak,
EOpContinue,
//
// Constructor (TIntermAggregate)
//
EOpConstruct,
//
// Unary operators with special GLSL syntax (TIntermUnary).
//
EOpNegative,
EOpPositive,
EOpLogicalNot,
EOpBitwiseNot,
EOpPostIncrement,
EOpPostDecrement,
EOpPreIncrement,
EOpPreDecrement,
EOpArrayLength,
//
// Binary operators with special GLSL syntax (TIntermBinary).
//
EOpAdd,
EOpSub,
EOpMul,
EOpDiv,
EOpIMod,
EOpEqual,
EOpNotEqual,
EOpLessThan,
EOpGreaterThan,
EOpLessThanEqual,
EOpGreaterThanEqual,
EOpComma,
EOpVectorTimesScalar,
EOpVectorTimesMatrix,
EOpMatrixTimesVector,
EOpMatrixTimesScalar,
EOpMatrixTimesMatrix,
EOpLogicalOr,
EOpLogicalXor,
EOpLogicalAnd,
EOpBitShiftLeft,
EOpBitShiftRight,
EOpBitwiseAnd,
EOpBitwiseXor,
EOpBitwiseOr,
EOpIndexDirect,
EOpIndexIndirect,
EOpIndexDirectStruct,
EOpIndexDirectInterfaceBlock,
//
// Moves (TIntermBinary)
//
EOpAssign,
EOpInitialize,
EOpAddAssign,
EOpSubAssign,
EOpMulAssign,
EOpVectorTimesMatrixAssign,
EOpVectorTimesScalarAssign,
EOpMatrixTimesScalarAssign,
EOpMatrixTimesMatrixAssign,
EOpDivAssign,
EOpIModAssign,
EOpBitShiftLeftAssign,
EOpBitShiftRightAssign,
EOpBitwiseAndAssign,
EOpBitwiseXorAssign,
EOpBitwiseOrAssign,
// Not an op, but a marker for the start of built-in ops.
EOpLastNonBuiltIn = EOpBitwiseOrAssign,
//
// Built-in functions mapped to operators (either unary (TIntermUnary) or with multiple
// parameters (TIntermAggregate))
//
// Group Math
// Group MathTrigonometric
EOpRadians, // Unary
EOpDegrees, // Unary
EOpSin, // Unary
EOpCos, // Unary
EOpTan, // Unary
EOpAsin, // Unary
EOpAcos, // Unary
EOpAtan,
EOpSinh, // Unary
EOpCosh, // Unary
EOpTanh, // Unary
EOpAsinh, // Unary
EOpAcosh, // Unary
EOpAtanh, // Unary
// Group MathExponential
EOpPow,
EOpExp, // Unary
EOpLog, // Unary
EOpExp2, // Unary
EOpLog2, // Unary
EOpSqrt, // Unary
EOpInversesqrt, // Unary
// Group MathCommon
EOpAbs, // Unary
EOpSign, // Unary
EOpFloor, // Unary
EOpTrunc, // Unary
EOpRound, // Unary
EOpRoundEven, // Unary
EOpCeil, // Unary
EOpFract, // Unary
EOpMod,
EOpMin,
EOpMax,
EOpClamp,
EOpMix,
EOpStep,
EOpSmoothstep,
EOpModf,
EOpIsnan, // Unary
EOpIsinf, // Unary
EOpFloatBitsToInt, // Unary
EOpFloatBitsToUint, // Unary
EOpIntBitsToFloat, // Unary
EOpUintBitsToFloat, // Unary
EOpFma,
EOpFrexp,
EOpLdexp,
EOpPackSnorm2x16, // Unary
EOpPackHalf2x16, // Unary
EOpUnpackSnorm2x16, // Unary
EOpUnpackHalf2x16, // Unary
EOpPackUnorm2x16, // Unary
EOpUnpackUnorm2x16, // Unary
EOpPackUnorm4x8, // Unary
EOpPackSnorm4x8, // Unary
EOpUnpackUnorm4x8, // Unary
EOpUnpackSnorm4x8, // Unary
EOpPackDouble2x32, // Unary
EOpUnpackDouble2x32, // Unary
// Group MathGeometric
EOpLength, // Unary
EOpDistance,
EOpDot,
EOpCross,
EOpNormalize, // Unary
EOpFaceforward,
EOpReflect,
EOpRefract,
// Group MathGeometricVS
EOpFtransform,
// Group MathMatrix
EOpMatrixCompMult,
EOpOuterProduct,
EOpTranspose, // Unary
EOpDeterminant, // Unary
EOpInverse, // Unary
// Group MathVector
EOpLessThanComponentWise,
EOpLessThanEqualComponentWise,
EOpGreaterThanComponentWise,
EOpGreaterThanEqualComponentWise,
EOpEqualComponentWise,
EOpNotEqualComponentWise,
EOpAny, // Unary
EOpAll, // Unary
EOpNotComponentWise, // Unary
// Group MathInteger
EOpBitfieldExtract,
EOpBitfieldInsert,
EOpBitfieldReverse, // Unary
EOpBitCount, // Unary
EOpFindLSB, // Unary
EOpFindMSB, // Unary
EOpUaddCarry,
EOpUsubBorrow,
EOpUmulExtended,
EOpImulExtended,
// Group Texture
// Group TextureFirstVersions
EOpTexture2D,
EOpTexture2DProj,
EOpTextureCube,
EOpTexture1D,
EOpTexture1DProj,
EOpTexture3D,
EOpTexture3DProj,
EOpShadow1D,
EOpShadow1DProj,
EOpShadow2D,
EOpShadow2DProj,
EOpShadow2DEXT,
EOpShadow2DProjEXT,
EOpTexture2DRect,
EOpTexture2DRectProj,
EOpTexture2DGradEXT,
EOpTexture2DProjGradEXT,
EOpTextureCubeGradEXT,
EOpTextureVideoWEBGL,
// Group TextureFirstVersionsBias
EOpTexture2DBias,
EOpTexture2DProjBias,
EOpTextureCubeBias,
EOpTexture3DBias,
EOpTexture3DProjBias,
EOpTexture1DBias,
EOpTexture1DProjBias,
EOpShadow1DBias,
EOpShadow1DProjBias,
EOpShadow2DBias,
EOpShadow2DProjBias,
// Group TextureFirstVersionsLod
EOpTexture2DLod,
EOpTexture2DProjLod,
EOpTextureCubeLod,
EOpTexture1DLod,
EOpTexture1DProjLod,
EOpShadow1DLod,
EOpShadow1DProjLod,
EOpShadow2DLod,
EOpShadow2DProjLod,
EOpTexture3DLod,
EOpTexture3DProjLod,
// Group TextureFirstVersionsLodVS
EOpTexture2DLodVS,
EOpTexture2DProjLodVS,
EOpTextureCubeLodVS,
// Group TextureFirstVersionsLodFS
EOpTexture2DLodEXTFS,
EOpTexture2DProjLodEXTFS,
EOpTextureCubeLodEXTFS,
// Group TextureNoBias
EOpTexture,
EOpTextureProj,
EOpTextureLod,
EOpTextureSize,
EOpTextureProjLod,
EOpTexelFetch,
EOpTextureGrad,
EOpTextureProjGrad,
EOpTextureQueryLevels,
EOpTextureSamples,
// Group TextureBias
EOpTextureBias,
EOpTextureProjBias,
// Group TextureQueryLod
EOpTextureQueryLod,
// Group TextureOffsetNoBias
EOpTextureOffset,
EOpTextureProjOffset,
EOpTextureLodOffset,
EOpTextureProjLodOffset,
EOpTexelFetchOffset,
EOpTextureGradOffset,
EOpTextureProjGradOffset,
// Group TextureOffsetBias
EOpTextureOffsetBias,
EOpTextureProjOffsetBias,
// Group TextureGather
EOpTextureGather,
// Group TextureGatherOffset
// Group TextureGatherOffsetNoComp
EOpTextureGatherOffset,
// Group TextureGatherOffsetComp
EOpTextureGatherOffsetComp,
// Group TextureGatherOffsets
// Group TextureGatherOffsetsNoComp
EOpTextureGatherOffsets,
// Group TextureGatherOffsetsComp
EOpTextureGatherOffsetsComp,
// Group EXT_YUV_target
EOpRgb_2_yuv,
EOpYuv_2_rgb,
// Group DerivativesFS
EOpDFdx,
EOpDFdy,
EOpFwidth,
EOpDFdxFine,
EOpDFdyFine,
EOpDFdxCoarse,
EOpDFdyCoarse,
EOpFwidthFine,
EOpFwidthCoarse,
// Group InterpolationFS
EOpInterpolateAtCentroid,
EOpInterpolateAtSample,
EOpInterpolateAtOffset,
// Group AtomicCounter
EOpAtomicCounter,
EOpAtomicCounterIncrement,
EOpAtomicCounterDecrement,
EOpAtomicCounterAdd,
EOpAtomicCounterSubtract,
EOpAtomicCounterMin,
EOpAtomicCounterMax,
EOpAtomicCounterAnd,
EOpAtomicCounterOr,
EOpAtomicCounterXor,
EOpAtomicCounterExchange,
EOpAtomicCounterCompSwap,
// Group AtomicMemory
EOpAtomicAdd,
EOpAtomicMin,
EOpAtomicMax,
EOpAtomicAnd,
EOpAtomicOr,
EOpAtomicXor,
EOpAtomicExchange,
EOpAtomicCompSwap,
// Group Image
EOpImageSize,
EOpImageSamples,
// Group ImageStore
EOpImageStore,
// Group ImageLoad
EOpImageLoad,
// Group ImageAtomic
EOpImageAtomicAdd,
EOpImageAtomicMin,
EOpImageAtomicMax,
EOpImageAtomicAnd,
EOpImageAtomicOr,
EOpImageAtomicXor,
EOpImageAtomicExchange,
EOpImageAtomicCompSwap,
// Group Noise
EOpNoise1,
EOpNoise2,
EOpNoise3,
EOpNoise4,
// Group Barrier
EOpMemoryBarrier,
EOpMemoryBarrierAtomicCounter,
EOpMemoryBarrierBuffer,
EOpMemoryBarrierImage,
// Group ESSL310CS
EOpBarrier,
EOpMemoryBarrierShared,
EOpGroupMemoryBarrier,
// Group ESSL310TCS
EOpBarrierTCS,
// Group GS
EOpEmitVertex,
EOpEndPrimitive,
EOpEmitStreamVertex,
EOpEndStreamPrimitive,
// Group SubpassInput
EOpSubpassLoad,
// Group ShaderInvocationGroup
EOpAnyInvocation,
EOpAllInvocations,
EOpAllInvocationsEqual,
};
// Returns the string corresponding to the operator in GLSL. For built-in functions use the
// function name directly.
const char *GetOperatorString(TOperator op);
// Say whether or not a binary or unary operation changes the value of a variable.
bool IsAssignment(TOperator op);
namespace BuiltInGroup
{
static inline bool IsBuiltIn(TOperator op)
{
return op > EOpLastNonBuiltIn;
}
static inline bool IsMath(TOperator op)
{
return op >= EOpRadians && op <= EOpImulExtended;
}
static inline bool IsTextureOffsetNoBias(TOperator op)
{
return op >= EOpTextureOffset && op <= EOpTextureProjGradOffset;
}
static inline bool IsTextureOffsetBias(TOperator op)
{
return op >= EOpTextureOffsetBias && op <= EOpTextureProjOffsetBias;
}
static inline bool IsTextureGatherOffsetNoComp(TOperator op)
{
return op >= EOpTextureGatherOffset && op <= EOpTextureGatherOffset;
}
static inline bool IsTextureGatherOffsetComp(TOperator op)
{
return op >= EOpTextureGatherOffsetComp && op <= EOpTextureGatherOffsetComp;
}
static inline bool IsTextureGatherOffset(TOperator op)
{
return op >= EOpTextureGatherOffset && op <= EOpTextureGatherOffsetComp;
}
static inline bool IsTextureGatherOffsetsNoComp(TOperator op)
{
return op >= EOpTextureGatherOffsets && op <= EOpTextureGatherOffsets;
}
static inline bool IsTextureGatherOffsetsComp(TOperator op)
{
return op >= EOpTextureGatherOffsetsComp && op <= EOpTextureGatherOffsetsComp;
}
static inline bool IsTextureGatherOffsets(TOperator op)
{
return op >= EOpTextureGatherOffsets && op <= EOpTextureGatherOffsetsComp;
}
static inline bool IsTextureGather(TOperator op)
{
return op >= EOpTextureGather && op <= EOpTextureGatherOffsetsComp;
}
static inline bool IsTexture(TOperator op)
{
return op >= EOpTexture2D && op <= EOpTextureGatherOffsetsComp;
}
static inline bool IsInterpolationFS(TOperator op)
{
return op >= EOpInterpolateAtCentroid && op <= EOpInterpolateAtOffset;
}
static inline bool IsAtomicMemory(TOperator op)
{
return op >= EOpAtomicAdd && op <= EOpAtomicCompSwap;
}
static inline bool IsImageStore(TOperator op)
{
return op >= EOpImageStore && op <= EOpImageStore;
}
static inline bool IsImageLoad(TOperator op)
{
return op >= EOpImageLoad && op <= EOpImageLoad;
}
static inline bool IsImageAtomic(TOperator op)
{
return op >= EOpImageAtomicAdd && op <= EOpImageAtomicCompSwap;
}
static inline bool IsImage(TOperator op)
{
return op >= EOpImageSize && op <= EOpImageAtomicCompSwap;
}
} // namespace BuiltInGroup
} // namespace sh
#endif // COMPILER_TRANSLATOR_OPERATOR_AUTOGEN_H_