diff --git a/libs/glslkomi/include/glslkomi/Komi.h b/libs/glslkomi/include/glslkomi/Komi.h index debd9c0431..4eb8c6e281 100644 --- a/libs/glslkomi/include/glslkomi/Komi.h +++ b/libs/glslkomi/include/glslkomi/Komi.h @@ -41,7 +41,7 @@ enum class BranchOperator : uint8_t { // Represents an operation whose syntax differs from a function call. For example, addition, // equality. GLSL is not Lisp, unfortunately. -enum class RValueOperator : uint16_t { +enum class RValueOperator : uint8_t { // Unary Negative, LogicalNot, @@ -83,10 +83,6 @@ enum class RValueOperator : uint16_t { AddAssign, SubAssign, MulAssign, - VectorTimesMatrixAssign, - VectorTimesScalarAssign, - MatrixTimesScalarAssign, - MatrixTimesMatrixAssign, DivAssign, ModAssign, AndAssign, @@ -206,21 +202,11 @@ struct LValue { } }; -struct FunctionCallRValue { - FunctionId function; +struct EvaluableRValue { + std::variant op; std::vector args; - bool operator==(const FunctionCallRValue& o) const { - return function == o.function - && args == o.args; - } -}; - -struct OperatorRValue { - RValueOperator op; - std::vector args; - - bool operator==(const OperatorRValue& o) const { + bool operator==(const EvaluableRValue& o) const { return op == o.op && args == o.args; } @@ -234,8 +220,7 @@ struct LiteralRValue { }; using RValue = std::variant< - FunctionCallRValue, - OperatorRValue, + EvaluableRValue, LiteralRValue>; // TODO: annotation @@ -354,20 +339,8 @@ struct ::std::hash { }; template<> -struct ::std::hash { - std::size_t operator()(const glslkomi::FunctionCallRValue& o) const { - std::size_t result = 0; - glslkomi::hashCombine(result, o.function, o.args.size()); - for (const auto& arg : o.args) { - glslkomi::hashCombine(result, arg); - } - return result; - } -}; - -template<> -struct ::std::hash { - std::size_t operator()(const glslkomi::OperatorRValue& o) const { +struct ::std::hash { + std::size_t operator()(const glslkomi::EvaluableRValue& o) const { std::size_t result = 0; glslkomi::hashCombine(result, o.op, o.args.size()); for (const auto& arg : o.args) { diff --git a/libs/glslkomi/src/Debug.cpp b/libs/glslkomi/src/Debug.cpp index 7dd958ebe0..e29caaac19 100644 --- a/libs/glslkomi/src/Debug.cpp +++ b/libs/glslkomi/src/Debug.cpp @@ -922,155 +922,13 @@ std::string glslangNodeToStringWithLoc(const TIntermNode* node) { const char* rValueOperatorToString(RValueOperator op) { switch(op) { - case RValueOperator::Ternary: return "Ternary"; case RValueOperator::Negative: return "Negative"; case RValueOperator::LogicalNot: return "LogicalNot"; - case RValueOperator::VectorLogicalNot: return "VectorLogicalNot"; case RValueOperator::BitwiseNot: return "BitwiseNot"; case RValueOperator::PostIncrement: return "PostIncrement"; case RValueOperator::PostDecrement: return "PostDecrement"; case RValueOperator::PreIncrement: return "PreIncrement"; case RValueOperator::PreDecrement: return "PreDecrement"; - case RValueOperator::CopyObject: return "CopyObject"; - case RValueOperator::Declare: return "Declare"; - case RValueOperator::ConvInt8ToBool: return "ConvInt8ToBool"; - case RValueOperator::ConvUint8ToBool: return "ConvUint8ToBool"; - case RValueOperator::ConvInt16ToBool: return "ConvInt16ToBool"; - case RValueOperator::ConvUint16ToBool: return "ConvUint16ToBool"; - case RValueOperator::ConvIntToBool: return "ConvIntToBool"; - case RValueOperator::ConvUintToBool: return "ConvUintToBool"; - case RValueOperator::ConvInt64ToBool: return "ConvInt64ToBool"; - case RValueOperator::ConvUint64ToBool: return "ConvUint64ToBool"; - case RValueOperator::ConvFloat16ToBool: return "ConvFloat16ToBool"; - case RValueOperator::ConvFloatToBool: return "ConvFloatToBool"; - case RValueOperator::ConvDoubleToBool: return "ConvDoubleToBool"; - case RValueOperator::ConvBoolToInt8: return "ConvBoolToInt8"; - case RValueOperator::ConvBoolToUint8: return "ConvBoolToUint8"; - case RValueOperator::ConvBoolToInt16: return "ConvBoolToInt16"; - case RValueOperator::ConvBoolToUint16: return "ConvBoolToUint16"; - case RValueOperator::ConvBoolToInt: return "ConvBoolToInt"; - case RValueOperator::ConvBoolToUint: return "ConvBoolToUint"; - case RValueOperator::ConvBoolToInt64: return "ConvBoolToInt64"; - case RValueOperator::ConvBoolToUint64: return "ConvBoolToUint64"; - case RValueOperator::ConvBoolToFloat16: return "ConvBoolToFloat16"; - case RValueOperator::ConvBoolToFloat: return "ConvBoolToFloat"; - case RValueOperator::ConvBoolToDouble: return "ConvBoolToDouble"; - case RValueOperator::ConvInt8ToInt16: return "ConvInt8ToInt16"; - case RValueOperator::ConvInt8ToInt: return "ConvInt8ToInt"; - case RValueOperator::ConvInt8ToInt64: return "ConvInt8ToInt64"; - case RValueOperator::ConvInt8ToUint8: return "ConvInt8ToUint8"; - case RValueOperator::ConvInt8ToUint16: return "ConvInt8ToUint16"; - case RValueOperator::ConvInt8ToUint: return "ConvInt8ToUint"; - case RValueOperator::ConvInt8ToUint64: return "ConvInt8ToUint64"; - case RValueOperator::ConvUint8ToInt8: return "ConvUint8ToInt8"; - case RValueOperator::ConvUint8ToInt16: return "ConvUint8ToInt16"; - case RValueOperator::ConvUint8ToInt: return "ConvUint8ToInt"; - case RValueOperator::ConvUint8ToInt64: return "ConvUint8ToInt64"; - case RValueOperator::ConvUint8ToUint16: return "ConvUint8ToUint16"; - case RValueOperator::ConvUint8ToUint: return "ConvUint8ToUint"; - case RValueOperator::ConvUint8ToUint64: return "ConvUint8ToUint64"; - case RValueOperator::ConvInt8ToFloat16: return "ConvInt8ToFloat16"; - case RValueOperator::ConvInt8ToFloat: return "ConvInt8ToFloat"; - case RValueOperator::ConvInt8ToDouble: return "ConvInt8ToDouble"; - case RValueOperator::ConvUint8ToFloat16: return "ConvUint8ToFloat16"; - case RValueOperator::ConvUint8ToFloat: return "ConvUint8ToFloat"; - case RValueOperator::ConvUint8ToDouble: return "ConvUint8ToDouble"; - case RValueOperator::ConvInt16ToInt8: return "ConvInt16ToInt8"; - case RValueOperator::ConvInt16ToInt: return "ConvInt16ToInt"; - case RValueOperator::ConvInt16ToInt64: return "ConvInt16ToInt64"; - case RValueOperator::ConvInt16ToUint8: return "ConvInt16ToUint8"; - case RValueOperator::ConvInt16ToUint16: return "ConvInt16ToUint16"; - case RValueOperator::ConvInt16ToUint: return "ConvInt16ToUint"; - case RValueOperator::ConvInt16ToUint64: return "ConvInt16ToUint64"; - case RValueOperator::ConvUint16ToInt8: return "ConvUint16ToInt8"; - case RValueOperator::ConvUint16ToInt16: return "ConvUint16ToInt16"; - case RValueOperator::ConvUint16ToInt: return "ConvUint16ToInt"; - case RValueOperator::ConvUint16ToInt64: return "ConvUint16ToInt64"; - case RValueOperator::ConvUint16ToUint8: return "ConvUint16ToUint8"; - case RValueOperator::ConvUint16ToUint: return "ConvUint16ToUint"; - case RValueOperator::ConvUint16ToUint64: return "ConvUint16ToUint64"; - case RValueOperator::ConvInt16ToFloat16: return "ConvInt16ToFloat16"; - case RValueOperator::ConvInt16ToFloat: return "ConvInt16ToFloat"; - case RValueOperator::ConvInt16ToDouble: return "ConvInt16ToDouble"; - case RValueOperator::ConvUint16ToFloat16: return "ConvUint16ToFloat16"; - case RValueOperator::ConvUint16ToFloat: return "ConvUint16ToFloat"; - case RValueOperator::ConvUint16ToDouble: return "ConvUint16ToDouble"; - case RValueOperator::ConvIntToInt8: return "ConvIntToInt8"; - case RValueOperator::ConvIntToInt16: return "ConvIntToInt16"; - case RValueOperator::ConvIntToInt64: return "ConvIntToInt64"; - case RValueOperator::ConvIntToUint8: return "ConvIntToUint8"; - case RValueOperator::ConvIntToUint16: return "ConvIntToUint16"; - case RValueOperator::ConvIntToUint: return "ConvIntToUint"; - case RValueOperator::ConvIntToUint64: return "ConvIntToUint64"; - case RValueOperator::ConvUintToInt8: return "ConvUintToInt8"; - case RValueOperator::ConvUintToInt16: return "ConvUintToInt16"; - case RValueOperator::ConvUintToInt: return "ConvUintToInt"; - case RValueOperator::ConvUintToInt64: return "ConvUintToInt64"; - case RValueOperator::ConvUintToUint8: return "ConvUintToUint8"; - case RValueOperator::ConvUintToUint16: return "ConvUintToUint16"; - case RValueOperator::ConvUintToUint64: return "ConvUintToUint64"; - case RValueOperator::ConvIntToFloat16: return "ConvIntToFloat16"; - case RValueOperator::ConvIntToFloat: return "ConvIntToFloat"; - case RValueOperator::ConvIntToDouble: return "ConvIntToDouble"; - case RValueOperator::ConvUintToFloat16: return "ConvUintToFloat16"; - case RValueOperator::ConvUintToFloat: return "ConvUintToFloat"; - case RValueOperator::ConvUintToDouble: return "ConvUintToDouble"; - case RValueOperator::ConvInt64ToInt8: return "ConvInt64ToInt8"; - case RValueOperator::ConvInt64ToInt16: return "ConvInt64ToInt16"; - case RValueOperator::ConvInt64ToInt: return "ConvInt64ToInt"; - case RValueOperator::ConvInt64ToUint8: return "ConvInt64ToUint8"; - case RValueOperator::ConvInt64ToUint16: return "ConvInt64ToUint16"; - case RValueOperator::ConvInt64ToUint: return "ConvInt64ToUint"; - case RValueOperator::ConvInt64ToUint64: return "ConvInt64ToUint64"; - case RValueOperator::ConvUint64ToInt8: return "ConvUint64ToInt8"; - case RValueOperator::ConvUint64ToInt16: return "ConvUint64ToInt16"; - case RValueOperator::ConvUint64ToInt: return "ConvUint64ToInt"; - case RValueOperator::ConvUint64ToInt64: return "ConvUint64ToInt64"; - case RValueOperator::ConvUint64ToUint8: return "ConvUint64ToUint8"; - case RValueOperator::ConvUint64ToUint16: return "ConvUint64ToUint16"; - case RValueOperator::ConvUint64ToUint: return "ConvUint64ToUint"; - case RValueOperator::ConvInt64ToFloat16: return "ConvInt64ToFloat16"; - case RValueOperator::ConvInt64ToFloat: return "ConvInt64ToFloat"; - case RValueOperator::ConvInt64ToDouble: return "ConvInt64ToDouble"; - case RValueOperator::ConvUint64ToFloat16: return "ConvUint64ToFloat16"; - case RValueOperator::ConvUint64ToFloat: return "ConvUint64ToFloat"; - case RValueOperator::ConvUint64ToDouble: return "ConvUint64ToDouble"; - case RValueOperator::ConvFloat16ToInt8: return "ConvFloat16ToInt8"; - case RValueOperator::ConvFloat16ToInt16: return "ConvFloat16ToInt16"; - case RValueOperator::ConvFloat16ToInt: return "ConvFloat16ToInt"; - case RValueOperator::ConvFloat16ToInt64: return "ConvFloat16ToInt64"; - case RValueOperator::ConvFloat16ToUint8: return "ConvFloat16ToUint8"; - case RValueOperator::ConvFloat16ToUint16: return "ConvFloat16ToUint16"; - case RValueOperator::ConvFloat16ToUint: return "ConvFloat16ToUint"; - case RValueOperator::ConvFloat16ToUint64: return "ConvFloat16ToUint64"; - case RValueOperator::ConvFloat16ToFloat: return "ConvFloat16ToFloat"; - case RValueOperator::ConvFloat16ToDouble: return "ConvFloat16ToDouble"; - case RValueOperator::ConvFloatToInt8: return "ConvFloatToInt8"; - case RValueOperator::ConvFloatToInt16: return "ConvFloatToInt16"; - case RValueOperator::ConvFloatToInt: return "ConvFloatToInt"; - case RValueOperator::ConvFloatToInt64: return "ConvFloatToInt64"; - case RValueOperator::ConvFloatToUint8: return "ConvFloatToUint8"; - case RValueOperator::ConvFloatToUint16: return "ConvFloatToUint16"; - case RValueOperator::ConvFloatToUint: return "ConvFloatToUint"; - case RValueOperator::ConvFloatToUint64: return "ConvFloatToUint64"; - case RValueOperator::ConvFloatToFloat16: return "ConvFloatToFloat16"; - case RValueOperator::ConvFloatToDouble: return "ConvFloatToDouble"; - case RValueOperator::ConvDoubleToInt8: return "ConvDoubleToInt8"; - case RValueOperator::ConvDoubleToInt16: return "ConvDoubleToInt16"; - case RValueOperator::ConvDoubleToInt: return "ConvDoubleToInt"; - case RValueOperator::ConvDoubleToInt64: return "ConvDoubleToInt64"; - case RValueOperator::ConvDoubleToUint8: return "ConvDoubleToUint8"; - case RValueOperator::ConvDoubleToUint16: return "ConvDoubleToUint16"; - case RValueOperator::ConvDoubleToUint: return "ConvDoubleToUint"; - case RValueOperator::ConvDoubleToUint64: return "ConvDoubleToUint64"; - case RValueOperator::ConvDoubleToFloat16: return "ConvDoubleToFloat16"; - case RValueOperator::ConvDoubleToFloat: return "ConvDoubleToFloat"; - case RValueOperator::ConvUint64ToPtr: return "ConvUint64ToPtr"; - case RValueOperator::ConvPtrToUint64: return "ConvPtrToUint64"; - case RValueOperator::ConvUvec2ToPtr: return "ConvUvec2ToPtr"; - case RValueOperator::ConvPtrToUvec2: return "ConvPtrToUvec2"; - case RValueOperator::ConvUint64ToAccStruct: return "ConvUint64ToAccStruct"; - case RValueOperator::ConvUvec2ToAccStruct: return "ConvUvec2ToAccStruct"; case RValueOperator::Add: return "Add"; case RValueOperator::Sub: return "Sub"; case RValueOperator::Mul: return "Mul"; @@ -1090,10 +948,6 @@ const char* rValueOperatorToString(RValueOperator op) { case RValueOperator::LessThanEqual: return "LessThanEqual"; case RValueOperator::GreaterThanEqual: return "GreaterThanEqual"; case RValueOperator::Comma: return "Comma"; - case RValueOperator::VectorTimesScalar: return "VectorTimesScalar"; - case RValueOperator::VectorTimesMatrix: return "VectorTimesMatrix"; - case RValueOperator::MatrixTimesVector: return "MatrixTimesVector"; - case RValueOperator::MatrixTimesScalar: return "MatrixTimesScalar"; case RValueOperator::LogicalOr: return "LogicalOr"; case RValueOperator::LogicalXor: return "LogicalXor"; case RValueOperator::LogicalAnd: return "LogicalAnd"; @@ -1101,399 +955,10 @@ const char* rValueOperatorToString(RValueOperator op) { case RValueOperator::IndexIndirect: return "IndexIndirect"; case RValueOperator::IndexDirectStruct: return "IndexDirectStruct"; case RValueOperator::VectorSwizzle: return "VectorSwizzle"; - case RValueOperator::Method: return "Method"; - case RValueOperator::Scoping: return "Scoping"; - case RValueOperator::Radians: return "Radians"; - case RValueOperator::Degrees: return "Degrees"; - case RValueOperator::Sin: return "Sin"; - case RValueOperator::Cos: return "Cos"; - case RValueOperator::Tan: return "Tan"; - case RValueOperator::Asin: return "Asin"; - case RValueOperator::Acos: return "Acos"; - case RValueOperator::Atan: return "Atan"; - case RValueOperator::Sinh: return "Sinh"; - case RValueOperator::Cosh: return "Cosh"; - case RValueOperator::Tanh: return "Tanh"; - case RValueOperator::Asinh: return "Asinh"; - case RValueOperator::Acosh: return "Acosh"; - case RValueOperator::Atanh: return "Atanh"; - case RValueOperator::Pow: return "Pow"; - case RValueOperator::Exp: return "Exp"; - case RValueOperator::Log: return "Log"; - case RValueOperator::Exp2: return "Exp2"; - case RValueOperator::Log2: return "Log2"; - case RValueOperator::Sqrt: return "Sqrt"; - case RValueOperator::InverseSqrt: return "InverseSqrt"; - case RValueOperator::Abs: return "Abs"; - case RValueOperator::Sign: return "Sign"; - case RValueOperator::Floor: return "Floor"; - case RValueOperator::Trunc: return "Trunc"; - case RValueOperator::Round: return "Round"; - case RValueOperator::RoundEven: return "RoundEven"; - case RValueOperator::Ceil: return "Ceil"; - case RValueOperator::Fract: return "Fract"; - case RValueOperator::Modf: return "Modf"; - case RValueOperator::Min: return "Min"; - case RValueOperator::Max: return "Max"; - case RValueOperator::Clamp: return "Clamp"; - case RValueOperator::Mix: return "Mix"; - case RValueOperator::Step: return "Step"; - case RValueOperator::SmoothStep: return "SmoothStep"; - case RValueOperator::IsNan: return "IsNan"; - case RValueOperator::IsInf: return "IsInf"; - case RValueOperator::Fma: return "Fma"; - case RValueOperator::Frexp: return "Frexp"; - case RValueOperator::Ldexp: return "Ldexp"; - case RValueOperator::FloatBitsToInt: return "FloatBitsToInt"; - case RValueOperator::FloatBitsToUint: return "FloatBitsToUint"; - case RValueOperator::IntBitsToFloat: return "IntBitsToFloat"; - case RValueOperator::UintBitsToFloat: return "UintBitsToFloat"; - case RValueOperator::DoubleBitsToInt64: return "DoubleBitsToInt64"; - case RValueOperator::DoubleBitsToUint64: return "DoubleBitsToUint64"; - case RValueOperator::Int64BitsToDouble: return "Int64BitsToDouble"; - case RValueOperator::Uint64BitsToDouble: return "Uint64BitsToDouble"; - case RValueOperator::Float16BitsToInt16: return "Float16BitsToInt16"; - case RValueOperator::Float16BitsToUint16: return "Float16BitsToUint16"; - case RValueOperator::Int16BitsToFloat16: return "Int16BitsToFloat16"; - case RValueOperator::Uint16BitsToFloat16: return "Uint16BitsToFloat16"; - case RValueOperator::PackSnorm2x16: return "PackSnorm2x16"; - case RValueOperator::UnpackSnorm2x16: return "UnpackSnorm2x16"; - case RValueOperator::PackUnorm2x16: return "PackUnorm2x16"; - case RValueOperator::UnpackUnorm2x16: return "UnpackUnorm2x16"; - case RValueOperator::PackSnorm4x8: return "PackSnorm4x8"; - case RValueOperator::UnpackSnorm4x8: return "UnpackSnorm4x8"; - case RValueOperator::PackUnorm4x8: return "PackUnorm4x8"; - case RValueOperator::UnpackUnorm4x8: return "UnpackUnorm4x8"; - case RValueOperator::PackHalf2x16: return "PackHalf2x16"; - case RValueOperator::UnpackHalf2x16: return "UnpackHalf2x16"; - case RValueOperator::PackDouble2x32: return "PackDouble2x32"; - case RValueOperator::UnpackDouble2x32: return "UnpackDouble2x32"; - case RValueOperator::PackInt2x32: return "PackInt2x32"; - case RValueOperator::UnpackInt2x32: return "UnpackInt2x32"; - case RValueOperator::PackUint2x32: return "PackUint2x32"; - case RValueOperator::UnpackUint2x32: return "UnpackUint2x32"; - case RValueOperator::PackFloat2x16: return "PackFloat2x16"; - case RValueOperator::UnpackFloat2x16: return "UnpackFloat2x16"; - case RValueOperator::PackInt2x16: return "PackInt2x16"; - case RValueOperator::UnpackInt2x16: return "UnpackInt2x16"; - case RValueOperator::PackUint2x16: return "PackUint2x16"; - case RValueOperator::UnpackUint2x16: return "UnpackUint2x16"; - case RValueOperator::PackInt4x16: return "PackInt4x16"; - case RValueOperator::UnpackInt4x16: return "UnpackInt4x16"; - case RValueOperator::PackUint4x16: return "PackUint4x16"; - case RValueOperator::UnpackUint4x16: return "UnpackUint4x16"; - case RValueOperator::Pack16: return "Pack16"; - case RValueOperator::Pack32: return "Pack32"; - case RValueOperator::Pack64: return "Pack64"; - case RValueOperator::Unpack32: return "Unpack32"; - case RValueOperator::Unpack16: return "Unpack16"; - case RValueOperator::Unpack8: return "Unpack8"; - case RValueOperator::Length: return "Length"; - case RValueOperator::Distance: return "Distance"; - case RValueOperator::Dot: return "Dot"; - case RValueOperator::Cross: return "Cross"; - case RValueOperator::Normalize: return "Normalize"; - case RValueOperator::FaceForward: return "FaceForward"; - case RValueOperator::Reflect: return "Reflect"; - case RValueOperator::Refract: return "Refract"; - case RValueOperator::Min3: return "Min3"; - case RValueOperator::Max3: return "Max3"; - case RValueOperator::Mid3: return "Mid3"; - case RValueOperator::DPdx: return "DPdx"; - case RValueOperator::DPdy: return "DPdy"; - case RValueOperator::Fwidth: return "Fwidth"; - case RValueOperator::DPdxFine: return "DPdxFine"; - case RValueOperator::DPdyFine: return "DPdyFine"; - case RValueOperator::FwidthFine: return "FwidthFine"; - case RValueOperator::DPdxCoarse: return "DPdxCoarse"; - case RValueOperator::DPdyCoarse: return "DPdyCoarse"; - case RValueOperator::FwidthCoarse: return "FwidthCoarse"; - case RValueOperator::InterpolateAtCentroid: return "InterpolateAtCentroid"; - case RValueOperator::InterpolateAtSample: return "InterpolateAtSample"; - case RValueOperator::InterpolateAtOffset: return "InterpolateAtOffset"; - case RValueOperator::InterpolateAtVertex: return "InterpolateAtVertex"; - case RValueOperator::MatrixTimesMatrix: return "MatrixTimesMatrix"; - case RValueOperator::OuterProduct: return "OuterProduct"; - case RValueOperator::Determinant: return "Determinant"; - case RValueOperator::MatrixInverse: return "MatrixInverse"; - case RValueOperator::Transpose: return "Transpose"; - case RValueOperator::Ftransform: return "Ftransform"; - case RValueOperator::Noise: return "Noise"; - case RValueOperator::EmitVertex: return "EmitVertex"; - case RValueOperator::EndPrimitive: return "EndPrimitive"; - case RValueOperator::EmitStreamVertex: return "EmitStreamVertex"; - case RValueOperator::EndStreamPrimitive: return "EndStreamPrimitive"; - case RValueOperator::Barrier: return "Barrier"; - case RValueOperator::MemoryBarrier: return "MemoryBarrier"; - case RValueOperator::MemoryBarrierAtomicCounter: return "MemoryBarrierAtomicCounter"; - case RValueOperator::MemoryBarrierBuffer: return "MemoryBarrierBuffer"; - case RValueOperator::MemoryBarrierImage: return "MemoryBarrierImage"; - case RValueOperator::MemoryBarrierShared: return "MemoryBarrierShared"; - case RValueOperator::GroupMemoryBarrier: return "GroupMemoryBarrier"; - case RValueOperator::Ballot: return "Ballot"; - case RValueOperator::ReadInvocation: return "ReadInvocation"; - case RValueOperator::ReadFirstInvocation: return "ReadFirstInvocation"; - case RValueOperator::AnyInvocation: return "AnyInvocation"; - case RValueOperator::AllInvocations: return "AllInvocations"; - case RValueOperator::AllInvocationsEqual: return "AllInvocationsEqual"; - case RValueOperator::SubgroupGuardStart: return "SubgroupGuardStart"; - case RValueOperator::SubgroupBarrier: return "SubgroupBarrier"; - case RValueOperator::SubgroupMemoryBarrier: return "SubgroupMemoryBarrier"; - case RValueOperator::SubgroupMemoryBarrierBuffer: return "SubgroupMemoryBarrierBuffer"; - case RValueOperator::SubgroupMemoryBarrierImage: return "SubgroupMemoryBarrierImage"; - case RValueOperator::SubgroupMemoryBarrierShared: return "SubgroupMemoryBarrierShared"; - case RValueOperator::SubgroupElect: return "SubgroupElect"; - case RValueOperator::SubgroupAll: return "SubgroupAll"; - case RValueOperator::SubgroupAny: return "SubgroupAny"; - case RValueOperator::SubgroupAllEqual: return "SubgroupAllEqual"; - case RValueOperator::SubgroupBroadcast: return "SubgroupBroadcast"; - case RValueOperator::SubgroupBroadcastFirst: return "SubgroupBroadcastFirst"; - case RValueOperator::SubgroupBallot: return "SubgroupBallot"; - case RValueOperator::SubgroupInverseBallot: return "SubgroupInverseBallot"; - case RValueOperator::SubgroupBallotBitExtract: return "SubgroupBallotBitExtract"; - case RValueOperator::SubgroupBallotBitCount: return "SubgroupBallotBitCount"; - case RValueOperator::SubgroupBallotInclusiveBitCount: return "SubgroupBallotInclusiveBitCount"; - case RValueOperator::SubgroupBallotExclusiveBitCount: return "SubgroupBallotExclusiveBitCount"; - case RValueOperator::SubgroupBallotFindLSB: return "SubgroupBallotFindLSB"; - case RValueOperator::SubgroupBallotFindMSB: return "SubgroupBallotFindMSB"; - case RValueOperator::SubgroupShuffle: return "SubgroupShuffle"; - case RValueOperator::SubgroupShuffleXor: return "SubgroupShuffleXor"; - case RValueOperator::SubgroupShuffleUp: return "SubgroupShuffleUp"; - case RValueOperator::SubgroupShuffleDown: return "SubgroupShuffleDown"; - case RValueOperator::SubgroupAdd: return "SubgroupAdd"; - case RValueOperator::SubgroupMul: return "SubgroupMul"; - case RValueOperator::SubgroupMin: return "SubgroupMin"; - case RValueOperator::SubgroupMax: return "SubgroupMax"; - case RValueOperator::SubgroupAnd: return "SubgroupAnd"; - case RValueOperator::SubgroupOr: return "SubgroupOr"; - case RValueOperator::SubgroupXor: return "SubgroupXor"; - case RValueOperator::SubgroupInclusiveAdd: return "SubgroupInclusiveAdd"; - case RValueOperator::SubgroupInclusiveMul: return "SubgroupInclusiveMul"; - case RValueOperator::SubgroupInclusiveMin: return "SubgroupInclusiveMin"; - case RValueOperator::SubgroupInclusiveMax: return "SubgroupInclusiveMax"; - case RValueOperator::SubgroupInclusiveAnd: return "SubgroupInclusiveAnd"; - case RValueOperator::SubgroupInclusiveOr: return "SubgroupInclusiveOr"; - case RValueOperator::SubgroupInclusiveXor: return "SubgroupInclusiveXor"; - case RValueOperator::SubgroupExclusiveAdd: return "SubgroupExclusiveAdd"; - case RValueOperator::SubgroupExclusiveMul: return "SubgroupExclusiveMul"; - case RValueOperator::SubgroupExclusiveMin: return "SubgroupExclusiveMin"; - case RValueOperator::SubgroupExclusiveMax: return "SubgroupExclusiveMax"; - case RValueOperator::SubgroupExclusiveAnd: return "SubgroupExclusiveAnd"; - case RValueOperator::SubgroupExclusiveOr: return "SubgroupExclusiveOr"; - case RValueOperator::SubgroupExclusiveXor: return "SubgroupExclusiveXor"; - case RValueOperator::SubgroupClusteredAdd: return "SubgroupClusteredAdd"; - case RValueOperator::SubgroupClusteredMul: return "SubgroupClusteredMul"; - case RValueOperator::SubgroupClusteredMin: return "SubgroupClusteredMin"; - case RValueOperator::SubgroupClusteredMax: return "SubgroupClusteredMax"; - case RValueOperator::SubgroupClusteredAnd: return "SubgroupClusteredAnd"; - case RValueOperator::SubgroupClusteredOr: return "SubgroupClusteredOr"; - case RValueOperator::SubgroupClusteredXor: return "SubgroupClusteredXor"; - case RValueOperator::SubgroupQuadBroadcast: return "SubgroupQuadBroadcast"; - case RValueOperator::SubgroupQuadSwapHorizontal: return "SubgroupQuadSwapHorizontal"; - case RValueOperator::SubgroupQuadSwapVertical: return "SubgroupQuadSwapVertical"; - case RValueOperator::SubgroupQuadSwapDiagonal: return "SubgroupQuadSwapDiagonal"; - case RValueOperator::SubgroupPartition: return "SubgroupPartition"; - case RValueOperator::SubgroupPartitionedAdd: return "SubgroupPartitionedAdd"; - case RValueOperator::SubgroupPartitionedMul: return "SubgroupPartitionedMul"; - case RValueOperator::SubgroupPartitionedMin: return "SubgroupPartitionedMin"; - case RValueOperator::SubgroupPartitionedMax: return "SubgroupPartitionedMax"; - case RValueOperator::SubgroupPartitionedAnd: return "SubgroupPartitionedAnd"; - case RValueOperator::SubgroupPartitionedOr: return "SubgroupPartitionedOr"; - case RValueOperator::SubgroupPartitionedXor: return "SubgroupPartitionedXor"; - case RValueOperator::SubgroupPartitionedInclusiveAdd: return "SubgroupPartitionedInclusiveAdd"; - case RValueOperator::SubgroupPartitionedInclusiveMul: return "SubgroupPartitionedInclusiveMul"; - case RValueOperator::SubgroupPartitionedInclusiveMin: return "SubgroupPartitionedInclusiveMin"; - case RValueOperator::SubgroupPartitionedInclusiveMax: return "SubgroupPartitionedInclusiveMax"; - case RValueOperator::SubgroupPartitionedInclusiveAnd: return "SubgroupPartitionedInclusiveAnd"; - case RValueOperator::SubgroupPartitionedInclusiveOr: return "SubgroupPartitionedInclusiveOr"; - case RValueOperator::SubgroupPartitionedInclusiveXor: return "SubgroupPartitionedInclusiveXor"; - case RValueOperator::SubgroupPartitionedExclusiveAdd: return "SubgroupPartitionedExclusiveAdd"; - case RValueOperator::SubgroupPartitionedExclusiveMul: return "SubgroupPartitionedExclusiveMul"; - case RValueOperator::SubgroupPartitionedExclusiveMin: return "SubgroupPartitionedExclusiveMin"; - case RValueOperator::SubgroupPartitionedExclusiveMax: return "SubgroupPartitionedExclusiveMax"; - case RValueOperator::SubgroupPartitionedExclusiveAnd: return "SubgroupPartitionedExclusiveAnd"; - case RValueOperator::SubgroupPartitionedExclusiveOr: return "SubgroupPartitionedExclusiveOr"; - case RValueOperator::SubgroupPartitionedExclusiveXor: return "SubgroupPartitionedExclusiveXor"; - case RValueOperator::SubgroupGuardStop: return "SubgroupGuardStop"; - case RValueOperator::MinInvocations: return "MinInvocations"; - case RValueOperator::MaxInvocations: return "MaxInvocations"; - case RValueOperator::AddInvocations: return "AddInvocations"; - case RValueOperator::MinInvocationsNonUniform: return "MinInvocationsNonUniform"; - case RValueOperator::MaxInvocationsNonUniform: return "MaxInvocationsNonUniform"; - case RValueOperator::AddInvocationsNonUniform: return "AddInvocationsNonUniform"; - case RValueOperator::MinInvocationsInclusiveScan: return "MinInvocationsInclusiveScan"; - case RValueOperator::MaxInvocationsInclusiveScan: return "MaxInvocationsInclusiveScan"; - case RValueOperator::AddInvocationsInclusiveScan: return "AddInvocationsInclusiveScan"; - case RValueOperator::MinInvocationsInclusiveScanNonUniform: return "MinInvocationsInclusiveScanNonUniform"; - case RValueOperator::MaxInvocationsInclusiveScanNonUniform: return "MaxInvocationsInclusiveScanNonUniform"; - case RValueOperator::AddInvocationsInclusiveScanNonUniform: return "AddInvocationsInclusiveScanNonUniform"; - case RValueOperator::MinInvocationsExclusiveScan: return "MinInvocationsExclusiveScan"; - case RValueOperator::MaxInvocationsExclusiveScan: return "MaxInvocationsExclusiveScan"; - case RValueOperator::AddInvocationsExclusiveScan: return "AddInvocationsExclusiveScan"; - case RValueOperator::MinInvocationsExclusiveScanNonUniform: return "MinInvocationsExclusiveScanNonUniform"; - case RValueOperator::MaxInvocationsExclusiveScanNonUniform: return "MaxInvocationsExclusiveScanNonUniform"; - case RValueOperator::AddInvocationsExclusiveScanNonUniform: return "AddInvocationsExclusiveScanNonUniform"; - case RValueOperator::SwizzleInvocations: return "SwizzleInvocations"; - case RValueOperator::SwizzleInvocationsMasked: return "SwizzleInvocationsMasked"; - case RValueOperator::WriteInvocation: return "WriteInvocation"; - case RValueOperator::Mbcnt: return "Mbcnt"; - case RValueOperator::CubeFaceIndex: return "CubeFaceIndex"; - case RValueOperator::CubeFaceCoord: return "CubeFaceCoord"; - case RValueOperator::Time: return "Time"; - case RValueOperator::AtomicAdd: return "AtomicAdd"; - case RValueOperator::AtomicSubtract: return "AtomicSubtract"; - case RValueOperator::AtomicMin: return "AtomicMin"; - case RValueOperator::AtomicMax: return "AtomicMax"; - case RValueOperator::AtomicAnd: return "AtomicAnd"; - case RValueOperator::AtomicOr: return "AtomicOr"; - case RValueOperator::AtomicXor: return "AtomicXor"; - case RValueOperator::AtomicExchange: return "AtomicExchange"; - case RValueOperator::AtomicCompSwap: return "AtomicCompSwap"; - case RValueOperator::AtomicLoad: return "AtomicLoad"; - case RValueOperator::AtomicStore: return "AtomicStore"; - case RValueOperator::AtomicCounterIncrement: return "AtomicCounterIncrement"; - case RValueOperator::AtomicCounterDecrement: return "AtomicCounterDecrement"; - case RValueOperator::AtomicCounter: return "AtomicCounter"; - case RValueOperator::AtomicCounterAdd: return "AtomicCounterAdd"; - case RValueOperator::AtomicCounterSubtract: return "AtomicCounterSubtract"; - case RValueOperator::AtomicCounterMin: return "AtomicCounterMin"; - case RValueOperator::AtomicCounterMax: return "AtomicCounterMax"; - case RValueOperator::AtomicCounterAnd: return "AtomicCounterAnd"; - case RValueOperator::AtomicCounterOr: return "AtomicCounterOr"; - case RValueOperator::AtomicCounterXor: return "AtomicCounterXor"; - case RValueOperator::AtomicCounterExchange: return "AtomicCounterExchange"; - case RValueOperator::AtomicCounterCompSwap: return "AtomicCounterCompSwap"; - case RValueOperator::Any: return "Any"; - case RValueOperator::All: return "All"; - case RValueOperator::CooperativeMatrixLoad: return "CooperativeMatrixLoad"; - case RValueOperator::CooperativeMatrixStore: return "CooperativeMatrixStore"; - case RValueOperator::CooperativeMatrixMulAdd: return "CooperativeMatrixMulAdd"; - case RValueOperator::CooperativeMatrixLoadNV: return "CooperativeMatrixLoadNV"; - case RValueOperator::CooperativeMatrixStoreNV: return "CooperativeMatrixStoreNV"; - case RValueOperator::CooperativeMatrixMulAddNV: return "CooperativeMatrixMulAddNV"; - case RValueOperator::BeginInvocationInterlock: return "BeginInvocationInterlock"; - case RValueOperator::EndInvocationInterlock: return "EndInvocationInterlock"; - case RValueOperator::IsHelperInvocation: return "IsHelperInvocation"; - case RValueOperator::DebugPrintf: return "DebugPrintf"; - case RValueOperator::ConstructGuardStart: return "ConstructGuardStart"; - case RValueOperator::ConstructInt: return "ConstructInt"; - case RValueOperator::ConstructUint: return "ConstructUint"; - case RValueOperator::ConstructInt8: return "ConstructInt8"; - case RValueOperator::ConstructUint8: return "ConstructUint8"; - case RValueOperator::ConstructInt16: return "ConstructInt16"; - case RValueOperator::ConstructUint16: return "ConstructUint16"; - case RValueOperator::ConstructInt64: return "ConstructInt64"; - case RValueOperator::ConstructUint64: return "ConstructUint64"; - case RValueOperator::ConstructBool: return "ConstructBool"; - case RValueOperator::ConstructFloat: return "ConstructFloat"; - case RValueOperator::ConstructDouble: return "ConstructDouble"; - case RValueOperator::ConstructVec2: return "ConstructVec2"; - case RValueOperator::ConstructVec3: return "ConstructVec3"; - case RValueOperator::ConstructVec4: return "ConstructVec4"; - case RValueOperator::ConstructMat2x2: return "ConstructMat2x2"; - case RValueOperator::ConstructMat2x3: return "ConstructMat2x3"; - case RValueOperator::ConstructMat2x4: return "ConstructMat2x4"; - case RValueOperator::ConstructMat3x2: return "ConstructMat3x2"; - case RValueOperator::ConstructMat3x3: return "ConstructMat3x3"; - case RValueOperator::ConstructMat3x4: return "ConstructMat3x4"; - case RValueOperator::ConstructMat4x2: return "ConstructMat4x2"; - case RValueOperator::ConstructMat4x3: return "ConstructMat4x3"; - case RValueOperator::ConstructMat4x4: return "ConstructMat4x4"; - case RValueOperator::ConstructDVec2: return "ConstructDVec2"; - case RValueOperator::ConstructDVec3: return "ConstructDVec3"; - case RValueOperator::ConstructDVec4: return "ConstructDVec4"; - case RValueOperator::ConstructBVec2: return "ConstructBVec2"; - case RValueOperator::ConstructBVec3: return "ConstructBVec3"; - case RValueOperator::ConstructBVec4: return "ConstructBVec4"; - case RValueOperator::ConstructI8Vec2: return "ConstructI8Vec2"; - case RValueOperator::ConstructI8Vec3: return "ConstructI8Vec3"; - case RValueOperator::ConstructI8Vec4: return "ConstructI8Vec4"; - case RValueOperator::ConstructU8Vec2: return "ConstructU8Vec2"; - case RValueOperator::ConstructU8Vec3: return "ConstructU8Vec3"; - case RValueOperator::ConstructU8Vec4: return "ConstructU8Vec4"; - case RValueOperator::ConstructI16Vec2: return "ConstructI16Vec2"; - case RValueOperator::ConstructI16Vec3: return "ConstructI16Vec3"; - case RValueOperator::ConstructI16Vec4: return "ConstructI16Vec4"; - case RValueOperator::ConstructU16Vec2: return "ConstructU16Vec2"; - case RValueOperator::ConstructU16Vec3: return "ConstructU16Vec3"; - case RValueOperator::ConstructU16Vec4: return "ConstructU16Vec4"; - case RValueOperator::ConstructIVec2: return "ConstructIVec2"; - case RValueOperator::ConstructIVec3: return "ConstructIVec3"; - case RValueOperator::ConstructIVec4: return "ConstructIVec4"; - case RValueOperator::ConstructUVec2: return "ConstructUVec2"; - case RValueOperator::ConstructUVec3: return "ConstructUVec3"; - case RValueOperator::ConstructUVec4: return "ConstructUVec4"; - case RValueOperator::ConstructI64Vec2: return "ConstructI64Vec2"; - case RValueOperator::ConstructI64Vec3: return "ConstructI64Vec3"; - case RValueOperator::ConstructI64Vec4: return "ConstructI64Vec4"; - case RValueOperator::ConstructU64Vec2: return "ConstructU64Vec2"; - case RValueOperator::ConstructU64Vec3: return "ConstructU64Vec3"; - case RValueOperator::ConstructU64Vec4: return "ConstructU64Vec4"; - case RValueOperator::ConstructDMat2x2: return "ConstructDMat2x2"; - case RValueOperator::ConstructDMat2x3: return "ConstructDMat2x3"; - case RValueOperator::ConstructDMat2x4: return "ConstructDMat2x4"; - case RValueOperator::ConstructDMat3x2: return "ConstructDMat3x2"; - case RValueOperator::ConstructDMat3x3: return "ConstructDMat3x3"; - case RValueOperator::ConstructDMat3x4: return "ConstructDMat3x4"; - case RValueOperator::ConstructDMat4x2: return "ConstructDMat4x2"; - case RValueOperator::ConstructDMat4x3: return "ConstructDMat4x3"; - case RValueOperator::ConstructDMat4x4: return "ConstructDMat4x4"; - case RValueOperator::ConstructIMat2x2: return "ConstructIMat2x2"; - case RValueOperator::ConstructIMat2x3: return "ConstructIMat2x3"; - case RValueOperator::ConstructIMat2x4: return "ConstructIMat2x4"; - case RValueOperator::ConstructIMat3x2: return "ConstructIMat3x2"; - case RValueOperator::ConstructIMat3x3: return "ConstructIMat3x3"; - case RValueOperator::ConstructIMat3x4: return "ConstructIMat3x4"; - case RValueOperator::ConstructIMat4x2: return "ConstructIMat4x2"; - case RValueOperator::ConstructIMat4x3: return "ConstructIMat4x3"; - case RValueOperator::ConstructIMat4x4: return "ConstructIMat4x4"; - case RValueOperator::ConstructUMat2x2: return "ConstructUMat2x2"; - case RValueOperator::ConstructUMat2x3: return "ConstructUMat2x3"; - case RValueOperator::ConstructUMat2x4: return "ConstructUMat2x4"; - case RValueOperator::ConstructUMat3x2: return "ConstructUMat3x2"; - case RValueOperator::ConstructUMat3x3: return "ConstructUMat3x3"; - case RValueOperator::ConstructUMat3x4: return "ConstructUMat3x4"; - case RValueOperator::ConstructUMat4x2: return "ConstructUMat4x2"; - case RValueOperator::ConstructUMat4x3: return "ConstructUMat4x3"; - case RValueOperator::ConstructUMat4x4: return "ConstructUMat4x4"; - case RValueOperator::ConstructBMat2x2: return "ConstructBMat2x2"; - case RValueOperator::ConstructBMat2x3: return "ConstructBMat2x3"; - case RValueOperator::ConstructBMat2x4: return "ConstructBMat2x4"; - case RValueOperator::ConstructBMat3x2: return "ConstructBMat3x2"; - case RValueOperator::ConstructBMat3x3: return "ConstructBMat3x3"; - case RValueOperator::ConstructBMat3x4: return "ConstructBMat3x4"; - case RValueOperator::ConstructBMat4x2: return "ConstructBMat4x2"; - case RValueOperator::ConstructBMat4x3: return "ConstructBMat4x3"; - case RValueOperator::ConstructBMat4x4: return "ConstructBMat4x4"; - case RValueOperator::ConstructFloat16: return "ConstructFloat16"; - case RValueOperator::ConstructF16Vec2: return "ConstructF16Vec2"; - case RValueOperator::ConstructF16Vec3: return "ConstructF16Vec3"; - case RValueOperator::ConstructF16Vec4: return "ConstructF16Vec4"; - case RValueOperator::ConstructF16Mat2x2: return "ConstructF16Mat2x2"; - case RValueOperator::ConstructF16Mat2x3: return "ConstructF16Mat2x3"; - case RValueOperator::ConstructF16Mat2x4: return "ConstructF16Mat2x4"; - case RValueOperator::ConstructF16Mat3x2: return "ConstructF16Mat3x2"; - case RValueOperator::ConstructF16Mat3x3: return "ConstructF16Mat3x3"; - case RValueOperator::ConstructF16Mat3x4: return "ConstructF16Mat3x4"; - case RValueOperator::ConstructF16Mat4x2: return "ConstructF16Mat4x2"; - case RValueOperator::ConstructF16Mat4x3: return "ConstructF16Mat4x3"; - case RValueOperator::ConstructF16Mat4x4: return "ConstructF16Mat4x4"; - case RValueOperator::ConstructStruct: return "ConstructStruct"; - case RValueOperator::ConstructTextureSampler: return "ConstructTextureSampler"; - case RValueOperator::ConstructNonuniform: return "ConstructNonuniform"; - case RValueOperator::ConstructReference: return "ConstructReference"; - case RValueOperator::ConstructCooperativeMatrixNV: return "ConstructCooperativeMatrixNV"; - case RValueOperator::ConstructCooperativeMatrixKHR: return "ConstructCooperativeMatrixKHR"; - case RValueOperator::ConstructAccStruct: return "ConstructAccStruct"; - case RValueOperator::ConstructGuardEnd: return "ConstructGuardEnd"; case RValueOperator::Assign: return "Assign"; case RValueOperator::AddAssign: return "AddAssign"; case RValueOperator::SubAssign: return "SubAssign"; case RValueOperator::MulAssign: return "MulAssign"; - case RValueOperator::VectorTimesMatrixAssign: return "VectorTimesMatrixAssign"; - case RValueOperator::VectorTimesScalarAssign: return "VectorTimesScalarAssign"; - case RValueOperator::MatrixTimesScalarAssign: return "MatrixTimesScalarAssign"; - case RValueOperator::MatrixTimesMatrixAssign: return "MatrixTimesMatrixAssign"; case RValueOperator::DivAssign: return "DivAssign"; case RValueOperator::ModAssign: return "ModAssign"; case RValueOperator::AndAssign: return "AndAssign"; @@ -1502,176 +967,8 @@ const char* rValueOperatorToString(RValueOperator op) { case RValueOperator::LeftShiftAssign: return "LeftShiftAssign"; case RValueOperator::RightShiftAssign: return "RightShiftAssign"; case RValueOperator::ArrayLength: return "ArrayLength"; - case RValueOperator::ImageGuardBegin: return "ImageGuardBegin"; - case RValueOperator::ImageQuerySize: return "ImageQuerySize"; - case RValueOperator::ImageQuerySamples: return "ImageQuerySamples"; - case RValueOperator::ImageLoad: return "ImageLoad"; - case RValueOperator::ImageStore: return "ImageStore"; - case RValueOperator::ImageLoadLod: return "ImageLoadLod"; - case RValueOperator::ImageStoreLod: return "ImageStoreLod"; - case RValueOperator::ImageAtomicAdd: return "ImageAtomicAdd"; - case RValueOperator::ImageAtomicMin: return "ImageAtomicMin"; - case RValueOperator::ImageAtomicMax: return "ImageAtomicMax"; - case RValueOperator::ImageAtomicAnd: return "ImageAtomicAnd"; - case RValueOperator::ImageAtomicOr: return "ImageAtomicOr"; - case RValueOperator::ImageAtomicXor: return "ImageAtomicXor"; - case RValueOperator::ImageAtomicExchange: return "ImageAtomicExchange"; - case RValueOperator::ImageAtomicCompSwap: return "ImageAtomicCompSwap"; - case RValueOperator::ImageAtomicLoad: return "ImageAtomicLoad"; - case RValueOperator::ImageAtomicStore: return "ImageAtomicStore"; - case RValueOperator::SubpassLoad: return "SubpassLoad"; - case RValueOperator::SubpassLoadMS: return "SubpassLoadMS"; - case RValueOperator::SparseImageLoad: return "SparseImageLoad"; - case RValueOperator::SparseImageLoadLod: return "SparseImageLoadLod"; - case RValueOperator::ColorAttachmentReadEXT: return "ColorAttachmentReadEXT"; - case RValueOperator::ImageGuardEnd: return "ImageGuardEnd"; - case RValueOperator::TextureGuardBegin: return "TextureGuardBegin"; - case RValueOperator::TextureQuerySize: return "TextureQuerySize"; - case RValueOperator::TextureQueryLod: return "TextureQueryLod"; - case RValueOperator::TextureQueryLevels: return "TextureQueryLevels"; - case RValueOperator::TextureQuerySamples: return "TextureQuerySamples"; - case RValueOperator::SamplingGuardBegin: return "SamplingGuardBegin"; - case RValueOperator::Texture: return "Texture"; - case RValueOperator::TextureProj: return "TextureProj"; - case RValueOperator::TextureLod: return "TextureLod"; - case RValueOperator::TextureOffset: return "TextureOffset"; - case RValueOperator::TextureFetch: return "TextureFetch"; - case RValueOperator::TextureFetchOffset: return "TextureFetchOffset"; - case RValueOperator::TextureProjOffset: return "TextureProjOffset"; - case RValueOperator::TextureLodOffset: return "TextureLodOffset"; - case RValueOperator::TextureProjLod: return "TextureProjLod"; - case RValueOperator::TextureProjLodOffset: return "TextureProjLodOffset"; - case RValueOperator::TextureGrad: return "TextureGrad"; - case RValueOperator::TextureGradOffset: return "TextureGradOffset"; - case RValueOperator::TextureProjGrad: return "TextureProjGrad"; - case RValueOperator::TextureProjGradOffset: return "TextureProjGradOffset"; - case RValueOperator::TextureGather: return "TextureGather"; - case RValueOperator::TextureGatherOffset: return "TextureGatherOffset"; - case RValueOperator::TextureGatherOffsets: return "TextureGatherOffsets"; - case RValueOperator::TextureClamp: return "TextureClamp"; - case RValueOperator::TextureOffsetClamp: return "TextureOffsetClamp"; - case RValueOperator::TextureGradClamp: return "TextureGradClamp"; - case RValueOperator::TextureGradOffsetClamp: return "TextureGradOffsetClamp"; - case RValueOperator::TextureGatherLod: return "TextureGatherLod"; - case RValueOperator::TextureGatherLodOffset: return "TextureGatherLodOffset"; - case RValueOperator::TextureGatherLodOffsets: return "TextureGatherLodOffsets"; - case RValueOperator::FragmentMaskFetch: return "FragmentMaskFetch"; - case RValueOperator::FragmentFetch: return "FragmentFetch"; - case RValueOperator::SparseTextureGuardBegin: return "SparseTextureGuardBegin"; - case RValueOperator::SparseTexture: return "SparseTexture"; - case RValueOperator::SparseTextureLod: return "SparseTextureLod"; - case RValueOperator::SparseTextureOffset: return "SparseTextureOffset"; - case RValueOperator::SparseTextureFetch: return "SparseTextureFetch"; - case RValueOperator::SparseTextureFetchOffset: return "SparseTextureFetchOffset"; - case RValueOperator::SparseTextureLodOffset: return "SparseTextureLodOffset"; - case RValueOperator::SparseTextureGrad: return "SparseTextureGrad"; - case RValueOperator::SparseTextureGradOffset: return "SparseTextureGradOffset"; - case RValueOperator::SparseTextureGather: return "SparseTextureGather"; - case RValueOperator::SparseTextureGatherOffset: return "SparseTextureGatherOffset"; - case RValueOperator::SparseTextureGatherOffsets: return "SparseTextureGatherOffsets"; - case RValueOperator::SparseTexelsResident: return "SparseTexelsResident"; - case RValueOperator::SparseTextureClamp: return "SparseTextureClamp"; - case RValueOperator::SparseTextureOffsetClamp: return "SparseTextureOffsetClamp"; - case RValueOperator::SparseTextureGradClamp: return "SparseTextureGradClamp"; - case RValueOperator::SparseTextureGradOffsetClamp: return "SparseTextureGradOffsetClamp"; - case RValueOperator::SparseTextureGatherLod: return "SparseTextureGatherLod"; - case RValueOperator::SparseTextureGatherLodOffset: return "SparseTextureGatherLodOffset"; - case RValueOperator::SparseTextureGatherLodOffsets: return "SparseTextureGatherLodOffsets"; - case RValueOperator::SparseTextureGuardEnd: return "SparseTextureGuardEnd"; - case RValueOperator::ImageFootprintGuardBegin: return "ImageFootprintGuardBegin"; - case RValueOperator::ImageSampleFootprintNV: return "ImageSampleFootprintNV"; - case RValueOperator::ImageSampleFootprintClampNV: return "ImageSampleFootprintClampNV"; - case RValueOperator::ImageSampleFootprintLodNV: return "ImageSampleFootprintLodNV"; - case RValueOperator::ImageSampleFootprintGradNV: return "ImageSampleFootprintGradNV"; - case RValueOperator::ImageSampleFootprintGradClampNV: return "ImageSampleFootprintGradClampNV"; - case RValueOperator::ImageFootprintGuardEnd: return "ImageFootprintGuardEnd"; - case RValueOperator::SamplingGuardEnd: return "SamplingGuardEnd"; - case RValueOperator::TextureGuardEnd: return "TextureGuardEnd"; - case RValueOperator::AddCarry: return "AddCarry"; - case RValueOperator::SubBorrow: return "SubBorrow"; - case RValueOperator::UMulExtended: return "UMulExtended"; - case RValueOperator::IMulExtended: return "IMulExtended"; - case RValueOperator::BitfieldExtract: return "BitfieldExtract"; - case RValueOperator::BitfieldInsert: return "BitfieldInsert"; - case RValueOperator::BitFieldReverse: return "BitFieldReverse"; - case RValueOperator::BitCount: return "BitCount"; - case RValueOperator::FindLSB: return "FindLSB"; - case RValueOperator::FindMSB: return "FindMSB"; - case RValueOperator::CountLeadingZeros: return "CountLeadingZeros"; - case RValueOperator::CountTrailingZeros: return "CountTrailingZeros"; - case RValueOperator::AbsDifference: return "AbsDifference"; - case RValueOperator::AddSaturate: return "AddSaturate"; - case RValueOperator::SubSaturate: return "SubSaturate"; - case RValueOperator::Average: return "Average"; - case RValueOperator::AverageRounded: return "AverageRounded"; - case RValueOperator::Mul32x16: return "Mul32x16"; - case RValueOperator::TraceNV: return "TraceNV"; - case RValueOperator::TraceRayMotionNV: return "TraceRayMotionNV"; - case RValueOperator::TraceKHR: return "TraceKHR"; - case RValueOperator::ReportIntersection: return "ReportIntersection"; - case RValueOperator::IgnoreIntersectionNV: return "IgnoreIntersectionNV"; - case RValueOperator::TerminateRayNV: return "TerminateRayNV"; - case RValueOperator::ExecuteCallableNV: return "ExecuteCallableNV"; - case RValueOperator::ExecuteCallableKHR: return "ExecuteCallableKHR"; - case RValueOperator::WritePackedPrimitiveIndices4x8NV: return "WritePackedPrimitiveIndices4x8NV"; - case RValueOperator::EmitMeshTasksEXT: return "EmitMeshTasksEXT"; - case RValueOperator::SetMeshOutputsEXT: return "SetMeshOutputsEXT"; - case RValueOperator::RayQueryInitialize: return "RayQueryInitialize"; - case RValueOperator::RayQueryTerminate: return "RayQueryTerminate"; - case RValueOperator::RayQueryGenerateIntersection: return "RayQueryGenerateIntersection"; - case RValueOperator::RayQueryConfirmIntersection: return "RayQueryConfirmIntersection"; - case RValueOperator::RayQueryProceed: return "RayQueryProceed"; - case RValueOperator::RayQueryGetIntersectionType: return "RayQueryGetIntersectionType"; - case RValueOperator::RayQueryGetRayTMin: return "RayQueryGetRayTMin"; - case RValueOperator::RayQueryGetRayFlags: return "RayQueryGetRayFlags"; - case RValueOperator::RayQueryGetIntersectionT: return "RayQueryGetIntersectionT"; - case RValueOperator::RayQueryGetIntersectionInstanceCustomIndex: return "RayQueryGetIntersectionInstanceCustomIndex"; - case RValueOperator::RayQueryGetIntersectionInstanceId: return "RayQueryGetIntersectionInstanceId"; - case RValueOperator::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: return "RayQueryGetIntersectionInstanceShaderBindingTableRecordOffset"; - case RValueOperator::RayQueryGetIntersectionGeometryIndex: return "RayQueryGetIntersectionGeometryIndex"; - case RValueOperator::RayQueryGetIntersectionPrimitiveIndex: return "RayQueryGetIntersectionPrimitiveIndex"; - case RValueOperator::RayQueryGetIntersectionBarycentrics: return "RayQueryGetIntersectionBarycentrics"; - case RValueOperator::RayQueryGetIntersectionFrontFace: return "RayQueryGetIntersectionFrontFace"; - case RValueOperator::RayQueryGetIntersectionCandidateAABBOpaque: return "RayQueryGetIntersectionCandidateAABBOpaque"; - case RValueOperator::RayQueryGetIntersectionObjectRayDirection: return "RayQueryGetIntersectionObjectRayDirection"; - case RValueOperator::RayQueryGetIntersectionObjectRayOrigin: return "RayQueryGetIntersectionObjectRayOrigin"; - case RValueOperator::RayQueryGetWorldRayDirection: return "RayQueryGetWorldRayDirection"; - case RValueOperator::RayQueryGetWorldRayOrigin: return "RayQueryGetWorldRayOrigin"; - case RValueOperator::RayQueryGetIntersectionObjectToWorld: return "RayQueryGetIntersectionObjectToWorld"; - case RValueOperator::RayQueryGetIntersectionWorldToObject: return "RayQueryGetIntersectionWorldToObject"; - case RValueOperator::HitObjectTraceRayNV: return "HitObjectTraceRayNV"; - case RValueOperator::HitObjectTraceRayMotionNV: return "HitObjectTraceRayMotionNV"; - case RValueOperator::HitObjectRecordHitNV: return "HitObjectRecordHitNV"; - case RValueOperator::HitObjectRecordHitMotionNV: return "HitObjectRecordHitMotionNV"; - case RValueOperator::HitObjectRecordHitWithIndexNV: return "HitObjectRecordHitWithIndexNV"; - case RValueOperator::HitObjectRecordHitWithIndexMotionNV: return "HitObjectRecordHitWithIndexMotionNV"; - case RValueOperator::HitObjectRecordMissNV: return "HitObjectRecordMissNV"; - case RValueOperator::HitObjectRecordMissMotionNV: return "HitObjectRecordMissMotionNV"; - case RValueOperator::HitObjectRecordEmptyNV: return "HitObjectRecordEmptyNV"; - case RValueOperator::HitObjectExecuteShaderNV: return "HitObjectExecuteShaderNV"; - case RValueOperator::HitObjectIsEmptyNV: return "HitObjectIsEmptyNV"; - case RValueOperator::HitObjectIsMissNV: return "HitObjectIsMissNV"; - case RValueOperator::HitObjectIsHitNV: return "HitObjectIsHitNV"; - case RValueOperator::HitObjectGetRayTMinNV: return "HitObjectGetRayTMinNV"; - case RValueOperator::HitObjectGetRayTMaxNV: return "HitObjectGetRayTMaxNV"; - case RValueOperator::HitObjectGetObjectRayOriginNV: return "HitObjectGetObjectRayOriginNV"; - case RValueOperator::HitObjectGetObjectRayDirectionNV: return "HitObjectGetObjectRayDirectionNV"; - case RValueOperator::HitObjectGetWorldRayOriginNV: return "HitObjectGetWorldRayOriginNV"; - case RValueOperator::HitObjectGetWorldRayDirectionNV: return "HitObjectGetWorldRayDirectionNV"; - case RValueOperator::HitObjectGetWorldToObjectNV: return "HitObjectGetWorldToObjectNV"; - case RValueOperator::HitObjectGetObjectToWorldNV: return "HitObjectGetObjectToWorldNV"; - case RValueOperator::HitObjectGetInstanceCustomIndexNV: return "HitObjectGetInstanceCustomIndexNV"; - case RValueOperator::HitObjectGetInstanceIdNV: return "HitObjectGetInstanceIdNV"; - case RValueOperator::HitObjectGetGeometryIndexNV: return "HitObjectGetGeometryIndexNV"; - case RValueOperator::HitObjectGetPrimitiveIndexNV: return "HitObjectGetPrimitiveIndexNV"; - case RValueOperator::HitObjectGetHitKindNV: return "HitObjectGetHitKindNV"; - case RValueOperator::HitObjectGetShaderBindingTableRecordIndexNV: return "HitObjectGetShaderBindingTableRecordIndexNV"; - case RValueOperator::HitObjectGetShaderRecordBufferHandleNV: return "HitObjectGetShaderRecordBufferHandleNV"; - case RValueOperator::HitObjectGetAttributesNV: return "HitObjectGetAttributesNV"; - case RValueOperator::HitObjectGetCurrentTimeNV: return "HitObjectGetCurrentTimeNV"; - case RValueOperator::ReorderThreadNV: return "ReorderThreadNV"; - case RValueOperator::FetchMicroTriangleVertexPositionNV: return "FetchMicroTriangleVertexPositionNV"; - case RValueOperator::FetchMicroTriangleVertexBarycentricNV: return "FetchMicroTriangleVertexBarycentricNV"; + case RValueOperator::Ternary: return "Ternary"; + case RValueOperator::ConstructStruct: return "ConstructStruct"; } } diff --git a/libs/glslkomi/src/Komi.cpp b/libs/glslkomi/src/Komi.cpp index 41396a77bf..6c320fab47 100644 --- a/libs/glslkomi/src/Komi.cpp +++ b/libs/glslkomi/src/Komi.cpp @@ -25,7 +25,8 @@ namespace glslkomi { -std::variant glslangOperatorToRValueOperator(glslang::TOperator op) { +std::variant glslangOperatorToRValueOperator( + glslang::TOperator op, int version, Type returnType, std::optional arg1Type) { using namespace glslang; switch (op) { case EOpNegative: return RValueOperator::Negative; @@ -137,18 +138,6 @@ std::variant glslangOperatorToRValueOperator(g case EOpFloatBitsToUint: return "floatBitsToUint"; case EOpIntBitsToFloat: return "intBitsToFloat"; case EOpUintBitsToFloat: return "uintBitsToFloat"; - case EOpDoubleBitsToInt64: return "doubleBitsToInt64"; - case EOpDoubleBitsToUint64: return "doubleBitsToUint64"; - case EOpInt64BitsToDouble: return "int64BitsToDouble"; - case EOpUint64BitsToDouble: return "uint64BitsToDouble"; - case EOpFloat16BitsToInt16: return "float16BitsToInt16"; - case EOpFloat16BitsToInt16: return "halfBitsToInt16"; - case EOpFloat16BitsToUint16: return "float16BitsToUint16"; - case EOpFloat16BitsToUint16: return "halfBitsToUint16"; - case EOpInt16BitsToFloat16: return "int16BitsToFloat16"; - case EOpInt16BitsToFloat16: return "int16BitsToHalf"; - case EOpUint16BitsToFloat16: return "uint16BitsToFloat16"; - case EOpUint16BitsToFloat16: return "uint16BitsToHalf"; case EOpPackSnorm2x16: return "packSnorm2x16"; case EOpUnpackSnorm2x16: return "unpackSnorm2x16"; case EOpPackUnorm2x16: return "packUnorm2x16"; @@ -210,19 +199,13 @@ std::variant glslangOperatorToRValueOperator(g case EOpMatrixInverse: return "inverse"; case EOpTranspose: return "transpose"; case EOpFtransform: return "ftransform"; - case EOpNoise: return "noise1"; - case EOpNoise: return "noise2"; - case EOpNoise: return "noise3"; - case EOpNoise: return "noise4"; case EOpEmitVertex: return "EmitVertex"; case EOpEndPrimitive: return "EndPrimitive"; case EOpEmitStreamVertex: return "EmitStreamVertex"; case EOpEndStreamPrimitive: return "EndStreamPrimitive"; case EOpBarrier: return "barrier"; - case EOpBarrier: return "controlBarrier"; case EOpMemoryBarrier: return "memoryBarrier"; case EOpMemoryBarrierAtomicCounter: return "memoryBarrierAtomicCounter"; - case EOpMemoryBarrierBuffer: return "memoryBarrierAtomicCounter"; case EOpMemoryBarrierBuffer: return "memoryBarrierBuffer"; case EOpMemoryBarrierImage: return "memoryBarrierImage"; case EOpMemoryBarrierShared: return "memoryBarrierShared"; @@ -230,12 +213,9 @@ std::variant glslangOperatorToRValueOperator(g case EOpBallot: return "ballotARB"; case EOpReadInvocation: return "readInvocationARB"; case EOpReadFirstInvocation: return "readFirstInvocationARB"; - case EOpAnyInvocation: return "anyInvocation"; - case EOpAnyInvocation: return "anyInvocationARB"; - case EOpAllInvocations: return "allInvocations"; - case EOpAllInvocations: return "allInvocationsARB"; - case EOpAllInvocationsEqual: return "allInvocationsEqual"; - case EOpAllInvocationsEqual: return "allInvocationsEqualARB"; + case EOpAnyInvocation: return version >= 460 ? "anyInvocation" : "anyInvocationARB"; + case EOpAllInvocations: return version >= 460 ? "allInvocations" : "allInvocationsARB"; + case EOpAllInvocationsEqual: return version >= 460 ? "allInvocationsEqual" : "allInvocationsEqualARB"; case EOpSubgroupBarrier: return "subgroupBarrier"; case EOpSubgroupMemoryBarrier: return "subgroupMemoryBarrier"; case EOpSubgroupMemoryBarrierBuffer: return "subgroupMemoryBarrierBuffer"; @@ -339,45 +319,27 @@ std::variant glslangOperatorToRValueOperator(g case EOpCubeFaceCoord: return "cubeFaceCoordAMD"; case EOpTime: return "timeAMD"; case EOpAtomicAdd: return "atomicAdd"; - case EOpAtomicAdd: return "atomicCounterAdd"; - case EOpAtomicSubtract: return "atomicCounterSubtract"; - case EOpAtomicMin: return "atomicCounterMin"; case EOpAtomicMin: return "atomicMin"; - case EOpAtomicMax: return "atomicCounterMax"; case EOpAtomicMax: return "atomicMax"; case EOpAtomicAnd: return "atomicAnd"; - case EOpAtomicAnd: return "atomicCounterAnd"; - case EOpAtomicOr: return "atomicCounterOr"; case EOpAtomicOr: return "atomicOr"; - case EOpAtomicXor: return "atomicCounterXor"; case EOpAtomicXor: return "atomicXor"; - case EOpAtomicExchange: return "atomicCounterExchange"; case EOpAtomicExchange: return "atomicExchange"; case EOpAtomicCompSwap: return "atomicCompSwap"; - case EOpAtomicCompSwap: return "atomicCounterCompSwap"; case EOpAtomicLoad: return "atomicLoad"; case EOpAtomicStore: return "atomicStore"; case EOpAtomicCounterIncrement: return "atomicCounterIncrement"; case EOpAtomicCounterDecrement: return "atomicCounterDecrement"; case EOpAtomicCounter: return "atomicCounter"; - case EOpAtomicCounterAdd: return "atomicCounterAdd"; - case EOpAtomicCounterAdd: return "atomicCounterAddARB"; - case EOpAtomicCounterSubtract: return "atomicCounterSubtract"; - case EOpAtomicCounterSubtract: return "atomicCounterSubtractARB"; - case EOpAtomicCounterMin: return "atomicCounterMin"; - case EOpAtomicCounterMin: return "atomicCounterMinARB"; - case EOpAtomicCounterMax: return "atomicCounterMax"; - case EOpAtomicCounterMax: return "atomicCounterMaxARB"; - case EOpAtomicCounterAnd: return "atomicCounterAnd"; - case EOpAtomicCounterAnd: return "atomicCounterAndARB"; - case EOpAtomicCounterOr: return "atomicCounterOr"; - case EOpAtomicCounterOr: return "atomicCounterOrARB"; - case EOpAtomicCounterXor: return "atomicCounterXor"; - case EOpAtomicCounterXor: return "atomicCounterXorARB"; - case EOpAtomicCounterExchange: return "atomicCounterExchange"; - case EOpAtomicCounterExchange: return "atomicCounterExchangeARB"; - case EOpAtomicCounterCompSwap: return "atomicCounterCompSwap"; - case EOpAtomicCounterCompSwap: return "atomicCounterCompSwapARB"; + case EOpAtomicCounterAdd: return version >= 460 ? "atomicCounterAdd" : "atomicCounterAddARB"; + case EOpAtomicCounterSubtract: return version >= 460 ? "atomicCounterSubtract" : "atomicCounterSubtractARB"; + case EOpAtomicCounterMin: return version >= 460 ? "atomicCounterMin" : "atomicCounterMinARB"; + case EOpAtomicCounterMax: return version >= 460 ? "atomicCounterMax" : "atomicCounterMaxARB"; + case EOpAtomicCounterAnd: return version >= 460 ? "atomicCounterAnd" : "atomicCounterAndARB"; + case EOpAtomicCounterOr: return version >= 460 ? "atomicCounterOr" : "atomicCounterOrARB"; + case EOpAtomicCounterXor: return version >= 460 ? "atomicCounterXor" : "atomicCounterXorARB"; + case EOpAtomicCounterExchange: return version >= 460 ? "atomicCounterExchange" : "atomicCounterExchangeARB"; + case EOpAtomicCounterCompSwap: return version >= 460 ? "atomicCounterCompSwap" : "atomicCounterCompSwapARB"; case EOpAny: return "any"; case EOpAll: return "all"; case EOpCooperativeMatrixLoad: return "coopMatLoad"; @@ -501,11 +463,12 @@ std::variant glslangOperatorToRValueOperator(g case EOpAssign: return RValueOperator::Assign; case EOpAddAssign: return RValueOperator::AddAssign; case EOpSubAssign: return RValueOperator::SubAssign; - case EOpMulAssign: return RValueOperator::MulAssign; - case EOpVectorTimesMatrixAssign: return RValueOperator::VectorTimesMatrixAssign; - case EOpVectorTimesScalarAssign: return RValueOperator::VectorTimesScalarAssign; - case EOpMatrixTimesScalarAssign: return RValueOperator::MatrixTimesScalarAssign; - case EOpMatrixTimesMatrixAssign: return RValueOperator::MatrixTimesMatrixAssign; + case EOpMulAssign: + case EOpVectorTimesMatrixAssign: + case EOpVectorTimesScalarAssign: + case EOpMatrixTimesScalarAssign: + case EOpMatrixTimesMatrixAssign: + return RValueOperator::MulAssign; case EOpDivAssign: return RValueOperator::DivAssign; case EOpModAssign: return RValueOperator::ModAssign; case EOpAndAssign: return RValueOperator::AndAssign; @@ -536,72 +499,71 @@ std::variant glslangOperatorToRValueOperator(g case EOpSparseImageLoadLod: return "sparseImageLoadLodAMD"; case EOpColorAttachmentReadEXT: return "colorAttachmentReadEXT"; case EOpTextureQuerySize: return "textureSize"; - case EOpTextureQueryLod: return "textureQueryLOD"; - case EOpTextureQueryLod: return "textureQueryLod"; + case EOpTextureQueryLod: return version >= 400 ? "textureQueryLod" : "textureQueryLOD"; case EOpTextureQueryLevels: return "textureQueryLevels"; case EOpTextureQuerySamples: return "textureSamples"; - case EOpTexture: return "shadow1D"; - case EOpTexture: return "shadow2D"; - case EOpTexture: return "shadow2DEXT"; - case EOpTexture: return "shadow2DRect"; - case EOpTexture: return "texture"; - case EOpTexture: return "texture1D"; - case EOpTexture: return "texture2D"; - case EOpTexture: return "texture2DRect"; - case EOpTexture: return "texture3D"; - case EOpTexture: return "textureCube"; - case EOpTextureProj: return "shadow1DProj"; - case EOpTextureProj: return "shadow2DProj"; - case EOpTextureProj: return "shadow2DProjEXT"; - case EOpTextureProj: return "shadow2DRectProj"; - case EOpTextureProj: return "texture1DProj"; - case EOpTextureProj: return "texture2DProj"; - case EOpTextureProj: return "texture2DRectProj"; - case EOpTextureProj: return "texture3DProj"; - case EOpTextureProj: return "textureProj"; - case EOpTextureLod: return "shadow1DLod"; - case EOpTextureLod: return "shadow2DLod"; - case EOpTextureLod: return "texture1DLod"; - case EOpTextureLod: return "texture2DLod"; - case EOpTextureLod: return "texture2DLodEXT"; - case EOpTextureLod: return "texture3DLod"; - case EOpTextureLod: return "textureCubeLod"; - case EOpTextureLod: return "textureCubeLodEXT"; - case EOpTextureLod: return "textureLod"; + // case EOpTexture: return "shadow1D"; + // case EOpTexture: return "shadow2D"; + // case EOpTexture: return "shadow2DEXT"; + // case EOpTexture: return "shadow2DRect"; + // case EOpTexture: return "texture"; + // case EOpTexture: return "texture1D"; + // case EOpTexture: return "texture2D"; + // case EOpTexture: return "texture2DRect"; + // case EOpTexture: return "texture3D"; + // case EOpTexture: return "textureCube"; + // case EOpTextureProj: return "shadow1DProj"; + // case EOpTextureProj: return "shadow2DProj"; + // case EOpTextureProj: return "shadow2DProjEXT"; + // case EOpTextureProj: return "shadow2DRectProj"; + // case EOpTextureProj: return "texture1DProj"; + // case EOpTextureProj: return "texture2DProj"; + // case EOpTextureProj: return "texture2DRectProj"; + // case EOpTextureProj: return "texture3DProj"; + // case EOpTextureProj: return "textureProj"; + // case EOpTextureLod: return "shadow1DLod"; + // case EOpTextureLod: return "shadow2DLod"; + // case EOpTextureLod: return "texture1DLod"; + // case EOpTextureLod: return "texture2DLod"; + // case EOpTextureLod: return "texture2DLodEXT"; + // case EOpTextureLod: return "texture3DLod"; + // case EOpTextureLod: return "textureCubeLod"; + // case EOpTextureLod: return "textureCubeLodEXT"; + // case EOpTextureLod: return "textureLod"; case EOpTextureOffset: return "textureOffset"; case EOpTextureFetch: return "texelFetch"; case EOpTextureFetchOffset: return "texelFetchOffset"; case EOpTextureProjOffset: return "textureProjOffset"; case EOpTextureLodOffset: return "textureLodOffset"; - case EOpTextureProjLod: return "shadow1DProjLod"; - case EOpTextureProjLod: return "shadow2DProjLod"; - case EOpTextureProjLod: return "texture1DProjLod"; - case EOpTextureProjLod: return "texture2DProjLod"; - case EOpTextureProjLod: return "texture2DProjLodEXT"; - case EOpTextureProjLod: return "texture3DProjLod"; - case EOpTextureProjLod: return "textureProjLod"; + // case EOpTextureProjLod: return "shadow1DProjLod"; + // case EOpTextureProjLod: return "shadow2DProjLod"; + // case EOpTextureProjLod: return "texture1DProjLod"; + // case EOpTextureProjLod: return "texture2DProjLod"; + // case EOpTextureProjLod: return "texture2DProjLodEXT"; + // case EOpTextureProjLod: return "texture3DProjLod"; + // case EOpTextureProjLod: return "textureProjLod"; case EOpTextureProjLodOffset: return "textureProjLodOffset"; - case EOpTextureGrad: return "shadow1DGradARB"; - case EOpTextureGrad: return "shadow2DGradARB"; - case EOpTextureGrad: return "shadow2DRectGradARB"; - case EOpTextureGrad: return "texture1DGradARB"; - case EOpTextureGrad: return "texture2DGradARB"; - case EOpTextureGrad: return "texture2DGradEXT"; - case EOpTextureGrad: return "texture2DRectGradARB"; - case EOpTextureGrad: return "texture3DGradARB"; - case EOpTextureGrad: return "textureCubeGradARB"; - case EOpTextureGrad: return "textureCubeGradEXT"; - case EOpTextureGrad: return "textureGrad"; + // case EOpTextureGrad: return "shadow1DGradARB"; + // case EOpTextureGrad: return "shadow2DGradARB"; + // case EOpTextureGrad: return "shadow2DRectGradARB"; + // case EOpTextureGrad: return "texture1DGradARB"; + // case EOpTextureGrad: return "texture2DGradARB"; + // case EOpTextureGrad: return "texture2DGradEXT"; + // case EOpTextureGrad: return "texture2DRectGradARB"; + // case EOpTextureGrad: return "texture3DGradARB"; + // case EOpTextureGrad: return "textureCubeGradARB"; + // case EOpTextureGrad: return "textureCubeGradEXT"; + // case EOpTextureGrad: return "textureGrad"; case EOpTextureGradOffset: return "textureGradOffset"; - case EOpTextureProjGrad: return "shadow1DProjGradARB"; - case EOpTextureProjGrad: return "shadow2DProjGradARB"; - case EOpTextureProjGrad: return "shadow2DRectProjGradARB"; - case EOpTextureProjGrad: return "texture1DProjGradARB"; - case EOpTextureProjGrad: return "texture2DProjGradARB"; - case EOpTextureProjGrad: return "texture2DProjGradEXT"; - case EOpTextureProjGrad: return "texture2DRectProjGradARB"; - case EOpTextureProjGrad: return "texture3DProjGradARB"; - case EOpTextureProjGrad: return "textureProjGrad"; + // case EOpTextureProjGrad: return "shadow1DProjGradARB"; + // case EOpTextureProjGrad: return "shadow2DProjGradARB"; + // case EOpTextureProjGrad: return "shadow2DRectProjGradARB"; + // case EOpTextureProjGrad: return "texture1DProjGradARB"; + // case EOpTextureProjGrad: return "texture2DProjGradARB"; + // case EOpTextureProjGrad: return "texture2DProjGradEXT"; + // case EOpTextureProjGrad: return "texture2DRectProjGradARB"; + // case EOpTextureProjGrad: return "texture3DProjGradARB"; + // case EOpTextureProjGrad: return "textureProjGrad"; case EOpTextureProjGradOffset: return "textureProjGradOffset"; case EOpTextureGather: return "textureGather"; case EOpTextureGatherOffset: return "textureGatherOffset"; @@ -661,7 +623,6 @@ std::variant glslangOperatorToRValueOperator(g case EOpTraceRayMotionNV: return "traceRayMotionNV"; case EOpTraceKHR: return "traceRayEXT"; case EOpReportIntersection: return "reportIntersectionEXT"; - case EOpReportIntersection: return "reportIntersectionNV"; case EOpIgnoreIntersectionNV: return "ignoreIntersectionNV"; case EOpTerminateRayNV: return "terminateRayNV"; case EOpExecuteCallableNV: return "executeCallableNV"; @@ -725,10 +686,10 @@ std::variant glslangOperatorToRValueOperator(g case EOpReorderThreadNV: return "reorderThreadNV"; case EOpFetchMicroTriangleVertexPositionNV: return "fetchMicroTriangleVertexPositionNV"; case EOpFetchMicroTriangleVertexBarycentricNV: return "fetchMicroTriangleVertexBarycentricNV"; - case EOpReadClockSubgroupKHR: return "clock2x32ARB"; - case EOpReadClockSubgroupKHR: return "clockARB"; - case EOpReadClockDeviceKHR: return "clockRealtime2x32EXT"; - case EOpReadClockDeviceKHR: return "clockRealtimeEXT"; + // case EOpReadClockSubgroupKHR: return "clock2x32ARB"; + // case EOpReadClockSubgroupKHR: return "clockARB"; + // case EOpReadClockDeviceKHR: return "clockRealtime2x32EXT"; + // case EOpReadClockDeviceKHR: return "clockRealtimeEXT"; case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: return "rayQueryGetIntersectionTriangleVertexPositionsEXT"; case EOpStencilAttachmentReadEXT: return "stencilAttachmentReadEXT"; case EOpDepthAttachmentReadEXT: return "depthAttachmentReadEXT"; @@ -934,6 +895,11 @@ private: class Slurper { public: + Slurper(const glslang::TIntermediate& intermediate) { + mVersion = intermediate.getVersion(); + slurpFromRoot(intermediate.getTreeRoot()->getAsAggregate()); + } + void slurpFromRoot(glslang::TIntermAggregate* node) { ASSERT_PRECONDITION(node != nullptr, "Node must not be null"); ASSERT_PRECONDITION(node->getOp() == glslang::EOpSequence, "Node must be a sequence"); @@ -989,6 +955,7 @@ public: } private: + int mVersion; IdStore mTypes; IdStore mLValues; IdStore mRValues; @@ -1130,6 +1097,19 @@ private: glslangNodeToStringWithLoc(parent).c_str()); } + std::variant slurpOperator( + glslang::TOperator op, Type returnType, std::optional arg1Type) { + auto opOrFunctionName = glslangOperatorToRValueOperator(op, mVersion, returnType, arg1Type); + if (auto* rValueOperator = std::get_if(&opOrFunctionName)) { + return *rValueOperator; + } + if (auto* functionName = std::get_if(&opOrFunctionName)) { + return mFunctionNames.getOrInsertByValue(*functionName); + } + PANIC_POSTCONDITION("Unreachable"); + } + + ValueId slurpValue(glslang::TIntermTyped* node, TIntermNode* parent) { auto typeId = mTypes.getOrInsertByValue(glslangTypeToType(node->getType())); if (auto nodeAsSymbol = node->getAsSymbolNode()) { @@ -1139,8 +1119,12 @@ private: return mRValues.getOrInsertByValue(LiteralRValue{}); } if (auto nodeAsUnary = node->getAsUnaryNode()) { - auto operand = slurpValue(nodeAsUnary->getOperand(), node); - return mRValues.getOrInsertByValue(OperatorRValue{glslangOperatorToRValueOperator(nodeAsUnary->getOp()), {operand}}); + auto operandId = slurpValue(nodeAsUnary->getOperand(), node); + auto op = slurpOperator( + nodeAsUnary->getOp(), + glslangTypeToType(node->getType()), + glslangTypeToType(nodeAsUnary->getOperand()->getType())); + return mRValues.getOrInsertByValue(EvaluableRValue{op, {operandId}}); } if (auto nodeAsBinary = node->getAsBinaryNode()) { switch (nodeAsBinary->getOp()) { @@ -1149,12 +1133,16 @@ private: auto swizzle = nodeAsBinary->getRight()->getAsAggregate(); ASSERT_PRECONDITION(swizzle != nullptr, "Swizzle node must be an aggregate"); ASSERT_PRECONDITION(swizzle->getOp() == glslang::EOpSequence, "Swizzle node must be a sequence"); - return mRValues.getOrInsertByValue(OperatorRValue{RValueOperator::VectorSwizzle}); + return mRValues.getOrInsertByValue(EvaluableRValue{RValueOperator::VectorSwizzle}); } default: { auto lhsId = slurpValue(nodeAsBinary->getLeft(), node); auto rhsId = slurpValue(nodeAsBinary->getRight(), node); - return mRValues.getOrInsertByValue(OperatorRValue{glslangOperatorToRValueOperator(nodeAsBinary->getOp()), {lhsId, rhsId}}); + auto op = slurpOperator( + nodeAsBinary->getOp(), + glslangTypeToType(node->getType()), + glslangTypeToType(nodeAsBinary->getLeft()->getType())); + return mRValues.getOrInsertByValue(EvaluableRValue{op, {lhsId, rhsId}}); } } } @@ -1166,7 +1154,7 @@ private: if (trueNodeAsTyped && falseNodeAsTyped) { auto trueId = slurpValue(trueNodeAsTyped, parent); auto falseId = slurpValue(falseNodeAsTyped, parent); - return mRValues.getOrInsertByValue(OperatorRValue{RValueOperator::Ternary, {conditionId, trueId, falseId}}); + return mRValues.getOrInsertByValue(EvaluableRValue{RValueOperator::Ternary, {conditionId, trueId, falseId}}); } else { PANIC_PRECONDITION("A selection node branch was not typed: true = %s, false = %s, parent = %s %s", glslangNodeToStringWithLoc(nodeAsSelection->getTrueBlock()).c_str(), @@ -1198,7 +1186,7 @@ private: } } return mRValues.getOrInsertByValue( - FunctionCallRValue{functionId, std::move(args)}); + EvaluableRValue{functionId, std::move(args)}); } default: { std::vector args; @@ -1212,8 +1200,16 @@ private: glslangNodeToStringWithLoc(parent).c_str()); } } + std::optional firstArgType; + if (!sequence.empty()) { + firstArgType = glslangTypeToType(sequence[0]->getAsTyped()->getType()); + } + auto op = slurpOperator( + nodeAsAggregate->getOp(), + glslangTypeToType(node->getType()), + std::move(firstArgType)); return mRValues.getOrInsertByValue( - OperatorRValue{glslangOperatorToRValueOperator(nodeAsAggregate->getOp()), std::move(args)}); + EvaluableRValue{op, std::move(args)}); } } } @@ -1341,17 +1337,16 @@ private: return; } auto rValue = mRValues.getById(rValueId); - if (auto* functionCall = std::get_if(&rValue)) { - auto name = mFunctionNames.getById(functionCall->function); - out << "(" << name; - for (auto& arg : functionCall->args) { - out << " "; - dumpValue(arg, out); + if (auto* evaluable = std::get_if(&rValue)) { + if (auto* op = std::get_if(&evaluable->op)) { + out << "(" << rValueOperatorToString(*op); + } else if (auto* function = std::get_if(&evaluable->op)) { + auto name = mFunctionNames.getById(*function); + out << name << "("; + } else { + PANIC_PRECONDITION("Unreachable"); } - out << ")"; - } else if (auto* op = std::get_if(&rValue)) { - out << "(" << rValueOperatorToString(op->op); - for (auto& arg : op->args) { + for (auto& arg : evaluable->args) { out << " "; dumpValue(arg, out); } @@ -1385,8 +1380,7 @@ private: }; void Komi::slurp(const glslang::TIntermediate& intermediate) { - Slurper slurper; - slurper.slurpFromRoot(intermediate.getTreeRoot()->getAsAggregate()); + Slurper slurper(intermediate); std::stringstream glsl; slurper.dumpAll(glsl); utils::slog.i << std::move(glsl.str()) << utils::io::endl;