summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/compiler/translator/Operator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/Operator.cpp')
-rw-r--r--src/3rdparty/angle/src/compiler/translator/Operator.cpp554
1 files changed, 369 insertions, 185 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/Operator.cpp b/src/3rdparty/angle/src/compiler/translator/Operator.cpp
index 20e47f290e..7a2156611a 100644
--- a/src/3rdparty/angle/src/compiler/translator/Operator.cpp
+++ b/src/3rdparty/angle/src/compiler/translator/Operator.cpp
@@ -10,192 +10,376 @@ const char *GetOperatorString(TOperator op)
{
switch (op)
{
- // Note: ops from EOpNull to EOpPrototype can't be handled here.
-
- case EOpNegative: return "-";
- case EOpPositive: return "+";
- case EOpLogicalNot: return "!";
- case EOpVectorLogicalNot: return "not";
- case EOpBitwiseNot: return "~";
-
- case EOpPostIncrement: return "++";
- case EOpPostDecrement: return "--";
- case EOpPreIncrement: return "++";
- case EOpPreDecrement: return "--";
-
- case EOpAdd: return "+";
- case EOpSub: return "-";
- case EOpMul: return "*";
- case EOpDiv: return "/";
- case EOpIMod: return "%";
- case EOpEqual: return "==";
- case EOpNotEqual: return "!=";
- case EOpVectorEqual: return "equal";
- case EOpVectorNotEqual: return "notEqual";
- case EOpLessThan: return "<";
- case EOpGreaterThan: return ">";
- case EOpLessThanEqual: return "<=";
- case EOpGreaterThanEqual: return ">=";
- case EOpComma: return ",";
-
- // Fall-through.
- case EOpVectorTimesScalar:
- case EOpVectorTimesMatrix:
- case EOpMatrixTimesVector:
- case EOpMatrixTimesScalar: return "*";
-
- case EOpLogicalOr: return "||";
- case EOpLogicalXor: return "^^";
- case EOpLogicalAnd: return "&&";
-
- case EOpBitShiftLeft: return "<<";
- case EOpBitShiftRight: return ">>";
-
- case EOpBitwiseAnd: return "&";
- case EOpBitwiseXor: return "^";
- case EOpBitwiseOr: return "|";
-
- // Fall-through.
- case EOpIndexDirect:
- case EOpIndexIndirect: return "[]";
-
- case EOpIndexDirectStruct:
- case EOpIndexDirectInterfaceBlock: return ".";
-
- case EOpVectorSwizzle: return ".";
-
- case EOpRadians: return "radians";
- case EOpDegrees: return "degrees";
- case EOpSin: return "sin";
- case EOpCos: return "cos";
- case EOpTan: return "tan";
- case EOpAsin: return "asin";
- case EOpAcos: return "acos";
- case EOpAtan: return "atan";
-
- case EOpSinh: return "sinh";
- case EOpCosh: return "cosh";
- case EOpTanh: return "tanh";
- case EOpAsinh: return "asinh";
- case EOpAcosh: return "acosh";
- case EOpAtanh: return "atanh";
-
- case EOpPow: return "pow";
- case EOpExp: return "exp";
- case EOpLog: return "log";
- case EOpExp2: return "exp2";
- case EOpLog2: return "log2";
- case EOpSqrt: return "sqrt";
- case EOpInverseSqrt: return "inversesqrt";
-
- case EOpAbs: return "abs";
- case EOpSign: return "sign";
- case EOpFloor: return "floor";
- case EOpTrunc: return "trunc";
- case EOpRound: return "round";
- case EOpRoundEven: return "roundEven";
- case EOpCeil: return "ceil";
- case EOpFract: return "fract";
- case EOpMod: return "mod";
- case EOpModf: return "modf";
- case EOpMin: return "min";
- case EOpMax: return "max";
- case EOpClamp: return "clamp";
- case EOpMix: return "mix";
- case EOpStep: return "step";
- case EOpSmoothStep: return "smoothstep";
- case EOpIsNan: return "isnan";
- case EOpIsInf: return "isinf";
-
- case EOpFloatBitsToInt: return "floatBitsToInt";
- case EOpFloatBitsToUint: return "floatBitsToUint";
- case EOpIntBitsToFloat: return "intBitsToFloat";
- case EOpUintBitsToFloat: return "uintBitsToFloat";
-
- case EOpPackSnorm2x16: return "packSnorm2x16";
- case EOpPackUnorm2x16: return "packUnorm2x16";
- case EOpPackHalf2x16: return "packHalf2x16";
- case EOpUnpackSnorm2x16: return "unpackSnorm2x16";
- case EOpUnpackUnorm2x16: return "unpackUnorm2x16";
- case EOpUnpackHalf2x16: return "unpackHalf2x16";
-
- case EOpLength: return "length";
- case EOpDistance: return "distance";
- case EOpDot: return "dot";
- case EOpCross: return "cross";
- case EOpNormalize: return "normalize";
- case EOpFaceForward: return "faceforward";
- case EOpReflect: return "reflect";
- case EOpRefract: return "refract";
-
- case EOpDFdx: return "dFdx";
- case EOpDFdy: return "dFdy";
- case EOpFwidth: return "fwidth";
-
- case EOpMatrixTimesMatrix: return "*";
-
- case EOpOuterProduct: return "outerProduct";
- case EOpTranspose: return "transpose";
- case EOpDeterminant: return "determinant";
- case EOpInverse: return "inverse";
-
- case EOpAny: return "any";
- case EOpAll: return "all";
-
- case EOpKill: return "kill";
- case EOpReturn: return "return";
- case EOpBreak: return "break";
- case EOpContinue: return "continue";
-
- case EOpConstructInt: return "int";
- case EOpConstructUInt: return "uint";
- case EOpConstructBool: return "bool";
- case EOpConstructFloat: return "float";
- case EOpConstructVec2: return "vec2";
- case EOpConstructVec3: return "vec3";
- case EOpConstructVec4: return "vec4";
- case EOpConstructBVec2: return "bvec2";
- case EOpConstructBVec3: return "bvec3";
- case EOpConstructBVec4: return "bvec4";
- case EOpConstructIVec2: return "ivec2";
- case EOpConstructIVec3: return "ivec3";
- case EOpConstructIVec4: return "ivec4";
- case EOpConstructUVec2: return "uvec2";
- case EOpConstructUVec3: return "uvec3";
- case EOpConstructUVec4: return "uvec4";
- case EOpConstructMat2: return "mat2";
- case EOpConstructMat2x3: return "mat2x3";
- case EOpConstructMat2x4: return "mat2x4";
- case EOpConstructMat3x2: return "mat3x2";
- case EOpConstructMat3: return "mat3";
- case EOpConstructMat3x4: return "mat3x4";
- case EOpConstructMat4x2: return "mat4x2";
- case EOpConstructMat4x3: return "mat4x3";
- case EOpConstructMat4: return "mat4";
- // Note: EOpConstructStruct can't be handled here
-
- case EOpAssign: return "=";
- case EOpInitialize: return "=";
- case EOpAddAssign: return "+=";
- case EOpSubAssign: return "-=";
-
- // Fall-through.
- case EOpMulAssign:
- case EOpVectorTimesMatrixAssign:
- case EOpVectorTimesScalarAssign:
- case EOpMatrixTimesScalarAssign:
- case EOpMatrixTimesMatrixAssign: return "*=";
-
- case EOpDivAssign: return "/=";
- case EOpIModAssign: return "%=";
- case EOpBitShiftLeftAssign: return "<<=";
- case EOpBitShiftRightAssign: return ">>=";
- case EOpBitwiseAndAssign: return "&=";
- case EOpBitwiseXorAssign: return "^=";
- case EOpBitwiseOrAssign: return "|=";
-
- default: break;
+ // Note: EOpNull and EOpCall* can't be handled here.
+
+ case EOpNegative:
+ return "-";
+ case EOpPositive:
+ return "+";
+ case EOpLogicalNot:
+ return "!";
+ case EOpBitwiseNot:
+ return "~";
+
+ case EOpPostIncrement:
+ return "++";
+ case EOpPostDecrement:
+ return "--";
+ case EOpPreIncrement:
+ return "++";
+ case EOpPreDecrement:
+ return "--";
+
+ case EOpArrayLength:
+ return ".length()";
+
+ case EOpAdd:
+ return "+";
+ case EOpSub:
+ return "-";
+ case EOpMul:
+ return "*";
+ case EOpDiv:
+ return "/";
+ case EOpIMod:
+ return "%";
+
+ case EOpEqual:
+ return "==";
+ case EOpNotEqual:
+ return "!=";
+ case EOpLessThan:
+ return "<";
+ case EOpGreaterThan:
+ return ">";
+ case EOpLessThanEqual:
+ return "<=";
+ case EOpGreaterThanEqual:
+ return ">=";
+
+ case EOpEqualComponentWise:
+ return "equal";
+ case EOpNotEqualComponentWise:
+ return "notEqual";
+ case EOpLessThanComponentWise:
+ return "lessThan";
+ case EOpGreaterThanComponentWise:
+ return "greaterThan";
+ case EOpLessThanEqualComponentWise:
+ return "lessThanEqual";
+ case EOpGreaterThanEqualComponentWise:
+ return "greaterThanEqual";
+
+ case EOpComma:
+ return ",";
+
+ // Fall-through.
+ case EOpVectorTimesScalar:
+ case EOpVectorTimesMatrix:
+ case EOpMatrixTimesVector:
+ case EOpMatrixTimesScalar:
+ case EOpMatrixTimesMatrix:
+ return "*";
+
+ case EOpLogicalOr:
+ return "||";
+ case EOpLogicalXor:
+ return "^^";
+ case EOpLogicalAnd:
+ return "&&";
+
+ case EOpBitShiftLeft:
+ return "<<";
+ case EOpBitShiftRight:
+ return ">>";
+
+ case EOpBitwiseAnd:
+ return "&";
+ case EOpBitwiseXor:
+ return "^";
+ case EOpBitwiseOr:
+ return "|";
+
+ // Fall-through.
+ case EOpIndexDirect:
+ case EOpIndexIndirect:
+ return "[]";
+
+ case EOpIndexDirectStruct:
+ case EOpIndexDirectInterfaceBlock:
+ return ".";
+
+ case EOpRadians:
+ return "radians";
+ case EOpDegrees:
+ return "degrees";
+ case EOpSin:
+ return "sin";
+ case EOpCos:
+ return "cos";
+ case EOpTan:
+ return "tan";
+ case EOpAsin:
+ return "asin";
+ case EOpAcos:
+ return "acos";
+ case EOpAtan:
+ return "atan";
+
+ case EOpSinh:
+ return "sinh";
+ case EOpCosh:
+ return "cosh";
+ case EOpTanh:
+ return "tanh";
+ case EOpAsinh:
+ return "asinh";
+ case EOpAcosh:
+ return "acosh";
+ case EOpAtanh:
+ return "atanh";
+
+ case EOpPow:
+ return "pow";
+ case EOpExp:
+ return "exp";
+ case EOpLog:
+ return "log";
+ case EOpExp2:
+ return "exp2";
+ case EOpLog2:
+ return "log2";
+ case EOpSqrt:
+ return "sqrt";
+ case EOpInverseSqrt:
+ return "inversesqrt";
+
+ case EOpAbs:
+ return "abs";
+ case EOpSign:
+ return "sign";
+ case EOpFloor:
+ return "floor";
+ case EOpTrunc:
+ return "trunc";
+ case EOpRound:
+ return "round";
+ case EOpRoundEven:
+ return "roundEven";
+ case EOpCeil:
+ return "ceil";
+ case EOpFract:
+ return "fract";
+ case EOpMod:
+ return "mod";
+ case EOpModf:
+ return "modf";
+ case EOpMin:
+ return "min";
+ case EOpMax:
+ return "max";
+ case EOpClamp:
+ return "clamp";
+ case EOpMix:
+ return "mix";
+ case EOpStep:
+ return "step";
+ case EOpSmoothStep:
+ return "smoothstep";
+ case EOpIsNan:
+ return "isnan";
+ case EOpIsInf:
+ return "isinf";
+
+ case EOpFloatBitsToInt:
+ return "floatBitsToInt";
+ case EOpFloatBitsToUint:
+ return "floatBitsToUint";
+ case EOpIntBitsToFloat:
+ return "intBitsToFloat";
+ case EOpUintBitsToFloat:
+ return "uintBitsToFloat";
+
+ case EOpFrexp:
+ return "frexp";
+ case EOpLdexp:
+ return "ldexp";
+
+ case EOpPackSnorm2x16:
+ return "packSnorm2x16";
+ case EOpPackUnorm2x16:
+ return "packUnorm2x16";
+ case EOpPackHalf2x16:
+ return "packHalf2x16";
+ case EOpUnpackSnorm2x16:
+ return "unpackSnorm2x16";
+ case EOpUnpackUnorm2x16:
+ return "unpackUnorm2x16";
+ case EOpUnpackHalf2x16:
+ return "unpackHalf2x16";
+
+ case EOpPackUnorm4x8:
+ return "packUnorm4x8";
+ case EOpPackSnorm4x8:
+ return "packSnorm4x8";
+ case EOpUnpackUnorm4x8:
+ return "unpackUnorm4x8";
+ case EOpUnpackSnorm4x8:
+ return "unpackSnorm4x8";
+
+ case EOpLength:
+ return "length";
+ case EOpDistance:
+ return "distance";
+ case EOpDot:
+ return "dot";
+ case EOpCross:
+ return "cross";
+ case EOpNormalize:
+ return "normalize";
+ case EOpFaceforward:
+ return "faceforward";
+ case EOpReflect:
+ return "reflect";
+ case EOpRefract:
+ return "refract";
+
+ case EOpDFdx:
+ return "dFdx";
+ case EOpDFdy:
+ return "dFdy";
+ case EOpFwidth:
+ return "fwidth";
+
+ case EOpMulMatrixComponentWise:
+ return "matrixCompMult";
+ case EOpOuterProduct:
+ return "outerProduct";
+ case EOpTranspose:
+ return "transpose";
+ case EOpDeterminant:
+ return "determinant";
+ case EOpInverse:
+ return "inverse";
+
+ case EOpAny:
+ return "any";
+ case EOpAll:
+ return "all";
+ case EOpLogicalNotComponentWise:
+ return "not";
+
+ case EOpBitfieldExtract:
+ return "bitfieldExtract";
+ case EOpBitfieldInsert:
+ return "bitfieldInsert";
+ case EOpBitfieldReverse:
+ return "bitfieldReverse";
+ case EOpBitCount:
+ return "bitCount";
+ case EOpFindLSB:
+ return "findLSB";
+ case EOpFindMSB:
+ return "findMSB";
+ case EOpUaddCarry:
+ return "uaddCarry";
+ case EOpUsubBorrow:
+ return "usubBorrow";
+ case EOpUmulExtended:
+ return "umulExtended";
+ case EOpImulExtended:
+ return "imulExtended";
+
+ case EOpKill:
+ return "kill";
+ case EOpReturn:
+ return "return";
+ case EOpBreak:
+ return "break";
+ case EOpContinue:
+ return "continue";
+
+ case EOpAssign:
+ return "=";
+ case EOpInitialize:
+ return "=";
+ case EOpAddAssign:
+ return "+=";
+ case EOpSubAssign:
+ return "-=";
+
+ // Fall-through.
+ case EOpMulAssign:
+ case EOpVectorTimesMatrixAssign:
+ case EOpVectorTimesScalarAssign:
+ case EOpMatrixTimesScalarAssign:
+ case EOpMatrixTimesMatrixAssign:
+ return "*=";
+
+ case EOpDivAssign:
+ return "/=";
+ case EOpIModAssign:
+ return "%=";
+ case EOpBitShiftLeftAssign:
+ return "<<=";
+ case EOpBitShiftRightAssign:
+ return ">>=";
+ case EOpBitwiseAndAssign:
+ return "&=";
+ case EOpBitwiseXorAssign:
+ return "^=";
+ case EOpBitwiseOrAssign:
+ return "|=";
+ case EOpBarrier:
+ return "barrier";
+ case EOpMemoryBarrier:
+ return "memoryBarrier";
+ case EOpMemoryBarrierAtomicCounter:
+ return "memoryBarrierAtomicCounter";
+ case EOpMemoryBarrierBuffer:
+ return "memoryBarrierBuffer";
+ case EOpMemoryBarrierImage:
+ return "memoryBarrierImage";
+ case EOpMemoryBarrierShared:
+ return "memoryBarrierShared";
+ case EOpGroupMemoryBarrier:
+ return "groupMemoryBarrier";
+
+ case EOpEmitVertex:
+ return "EmitVertex";
+ case EOpEndPrimitive:
+ return "EndPrimitive";
+ default:
+ break;
}
return "";
}
+bool IsAssignment(TOperator op)
+{
+ switch (op)
+ {
+ case EOpPostIncrement:
+ case EOpPostDecrement:
+ case EOpPreIncrement:
+ case EOpPreDecrement:
+ case EOpAssign:
+ case EOpAddAssign:
+ case EOpSubAssign:
+ case EOpMulAssign:
+ case EOpVectorTimesMatrixAssign:
+ case EOpVectorTimesScalarAssign:
+ case EOpMatrixTimesScalarAssign:
+ case EOpMatrixTimesMatrixAssign:
+ case EOpDivAssign:
+ case EOpIModAssign:
+ case EOpBitShiftLeftAssign:
+ case EOpBitShiftRightAssign:
+ case EOpBitwiseAndAssign:
+ case EOpBitwiseXorAssign:
+ case EOpBitwiseOrAssign:
+ return true;
+ default:
+ return false;
+ }
+} \ No newline at end of file