stuff
This commit is contained in:
@@ -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<RValueOperator, FunctionId> op;
|
||||
std::vector<ValueId> args;
|
||||
|
||||
bool operator==(const FunctionCallRValue& o) const {
|
||||
return function == o.function
|
||||
&& args == o.args;
|
||||
}
|
||||
};
|
||||
|
||||
struct OperatorRValue {
|
||||
RValueOperator op;
|
||||
std::vector<ValueId> 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<glslkomi::LValue> {
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ::std::hash<glslkomi::FunctionCallRValue> {
|
||||
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<glslkomi::OperatorRValue> {
|
||||
std::size_t operator()(const glslkomi::OperatorRValue& o) const {
|
||||
struct ::std::hash<glslkomi::EvaluableRValue> {
|
||||
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) {
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
|
||||
namespace glslkomi {
|
||||
|
||||
std::variant<RValueOperator, std::string_view> glslangOperatorToRValueOperator(glslang::TOperator op) {
|
||||
std::variant<RValueOperator, std::string_view> glslangOperatorToRValueOperator(
|
||||
glslang::TOperator op, int version, Type returnType, std::optional<Type> arg1Type) {
|
||||
using namespace glslang;
|
||||
switch (op) {
|
||||
case EOpNegative: return RValueOperator::Negative;
|
||||
@@ -137,18 +138,6 @@ std::variant<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<RValueOperator, std::string_view> 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<TypeId, Type> mTypes;
|
||||
IdStore<LValueId, LValue> mLValues;
|
||||
IdStore<RValueId, RValue> mRValues;
|
||||
@@ -1130,6 +1097,19 @@ private:
|
||||
glslangNodeToStringWithLoc(parent).c_str());
|
||||
}
|
||||
|
||||
std::variant<RValueOperator, FunctionId> slurpOperator(
|
||||
glslang::TOperator op, Type returnType, std::optional<Type> arg1Type) {
|
||||
auto opOrFunctionName = glslangOperatorToRValueOperator(op, mVersion, returnType, arg1Type);
|
||||
if (auto* rValueOperator = std::get_if<RValueOperator>(&opOrFunctionName)) {
|
||||
return *rValueOperator;
|
||||
}
|
||||
if (auto* functionName = std::get_if<std::string_view>(&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<ValueId> args;
|
||||
@@ -1212,8 +1200,16 @@ private:
|
||||
glslangNodeToStringWithLoc(parent).c_str());
|
||||
}
|
||||
}
|
||||
std::optional<Type> 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<FunctionCallRValue>(&rValue)) {
|
||||
auto name = mFunctionNames.getById(functionCall->function);
|
||||
out << "(" << name;
|
||||
for (auto& arg : functionCall->args) {
|
||||
out << " ";
|
||||
dumpValue(arg, out);
|
||||
if (auto* evaluable = std::get_if<EvaluableRValue>(&rValue)) {
|
||||
if (auto* op = std::get_if<RValueOperator>(&evaluable->op)) {
|
||||
out << "(" << rValueOperatorToString(*op);
|
||||
} else if (auto* function = std::get_if<FunctionId>(&evaluable->op)) {
|
||||
auto name = mFunctionNames.getById(*function);
|
||||
out << name << "(";
|
||||
} else {
|
||||
PANIC_PRECONDITION("Unreachable");
|
||||
}
|
||||
out << ")";
|
||||
} else if (auto* op = std::get_if<OperatorRValue>(&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;
|
||||
|
||||
Reference in New Issue
Block a user