From 57a9b8e80baed2feb4394389c0cade5f033f9025 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Feb 2025 11:28:41 +0000 Subject: [PATCH] Update SPIR-V headers * Also update generator script to add new edge cases --- .../driver/shaders/spirv/gen_spirv_code.py | 17 +- renderdoc/driver/shaders/spirv/spir-v.xml | 18 +- .../shaders/spirv/spirv.core.grammar.json | 2332 ++++++++++------ .../driver/shaders/spirv/spirv_debug.cpp | 79 +- .../shaders/spirv/spirv_debug_setup.cpp | 57 +- renderdoc/driver/shaders/spirv/spirv_gen.cpp | 1544 ++++++++++- renderdoc/driver/shaders/spirv/spirv_gen.h | 362 ++- .../driver/shaders/spirv/spirv_op_helpers.h | 2425 ++++++++++++++++- .../driver/shaders/spirv/spirv_processor.cpp | 2 +- .../driver/shaders/spirv/spirv_reflect.cpp | 1 + 10 files changed, 5871 insertions(+), 966 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/gen_spirv_code.py b/renderdoc/driver/shaders/spirv/gen_spirv_code.py index abf3d1211..8dffb8332 100644 --- a/renderdoc/driver/shaders/spirv/gen_spirv_code.py +++ b/renderdoc/driver/shaders/spirv/gen_spirv_code.py @@ -355,7 +355,10 @@ for operand_kind in spirv['operand_kinds']: '''.format(name = name, values = decl.rstrip())) - cpp.write('''template <> + if stringise.strip() == '': + cpp.write(f"template <>\nrdcstr DoStringise(const rdcspv::{name} &el) {{ return \"?\"; }}\n\n") + else: + cpp.write('''template <> rdcstr DoStringise(const rdcspv::{name} &el) {{ BEGIN_ENUM_STRINGISE(rdcspv::{name}); @@ -385,7 +388,10 @@ rdcstr DoStringise(const rdcspv::{name} &el) decl = '' stringise = '' for value in operand_kind['enumerants']: - decl += ' {} = {},\n'.format(value['enumerant'], value['value']) + value_name = value['enumerant'] + if value_name[0].isdigit(): + value_name = '_' + value_name + decl += ' {} = {},\n'.format(value_name, value['value']) if value['value'] in used: continue @@ -395,7 +401,7 @@ rdcstr DoStringise(const rdcspv::{name} &el) if value['enumerant'] == none: stringise += ' STRINGISE_BITFIELD_CLASS_VALUE({});\n\n'.format(none) else: - stringise += ' STRINGISE_BITFIELD_CLASS_BIT({});\n'.format(value['enumerant']) + stringise += ' STRINGISE_BITFIELD_CLASS_BIT({});\n'.format(value_name) header.write('''enum class {name} : uint32_t {{ @@ -408,7 +414,10 @@ BITMASK_OPERATORS({name}); '''.format(name = name, values = decl.rstrip())) - cpp.write('''template <> + if stringise.strip() == '': + cpp.write(f"template <>\nrdcstr DoStringise(const rdcspv::{name} &el) {{ return \"?\"; }}\n\n") + else: + cpp.write('''template <> rdcstr DoStringise(const rdcspv::{name} &el) {{ BEGIN_BITFIELD_STRINGISE(rdcspv::{name}); diff --git a/renderdoc/driver/shaders/spirv/spir-v.xml b/renderdoc/driver/shaders/spirv/spir-v.xml index f9b23ac41..01d1512e8 100644 --- a/renderdoc/driver/shaders/spirv/spir-v.xml +++ b/renderdoc/driver/shaders/spirv/spir-v.xml @@ -64,7 +64,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -94,7 +94,10 @@ - + + + + @@ -151,13 +154,14 @@ + - + @@ -184,13 +188,14 @@ + - + @@ -272,7 +277,8 @@ - + + diff --git a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json index 980b5dc3a..f839eaf82 100644 --- a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json +++ b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json @@ -27,7 +27,7 @@ "magic_number" : "0x07230203", "major_version" : 1, "minor_version" : 6, - "revision" : 1, + "revision" : 4, "instruction_printing_class" : [ { "tag" : "@exclude" @@ -330,7 +330,8 @@ "opcode" : 22, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralInteger", "name" : "'Width'" } + { "kind" : "LiteralInteger", "name" : "'Width'" }, + { "kind" : "FPEncoding", "quantifier" : "?", "name" : "'Floating Point Encoding'" } ], "version": "1.0" }, @@ -753,7 +754,10 @@ { "kind" : "MemoryAccess", "quantifier" : "?" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], - "capabilities" : [ "Addresses" ], + "capabilities" : [ + "Addresses", + "UntypedPointersKHR" + ], "version": "1.0" }, { @@ -4439,6 +4443,65 @@ "capabilities" : [ "Shader" ], "version" : "1.6" }, + { + "opname" : "OpTypeUntypedPointerKHR", + "class" : "Type-Declaration", + "opcode" : 4417, + "capabilities" : [ + "UntypedPointersKHR" + ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "StorageClass" } + ] + }, + { + "opname" : "OpUntypedVariableKHR", + "class" : "Memory", + "opcode" : 4418, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "StorageClass" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'Data Type'" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'Initializer'" } + ] + }, + { + "opname" : "OpUntypedAccessChainKHR", + "class" : "Memory", + "opcode" : 4419, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Base Type'" }, + { "kind" : "IdRef", "name" : "'Base'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + ] + }, + { + "opname" : "OpUntypedInBoundsAccessChainKHR", + "class" : "Memory", + "opcode" : 4420, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Base Type'" }, + { "kind" : "IdRef", "name" : "'Base'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + ] + }, { "opname" : "OpSubgroupBallotKHR", "class" : "Group", @@ -4465,6 +4528,68 @@ "extensions" : [ "SPV_KHR_shader_ballot" ], "version" : "None" }, + { + "opname" : "OpUntypedPtrAccessChainKHR", + "class" : "Memory", + "opcode" : 4423, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Base Type'" }, + { "kind" : "IdRef", "name" : "'Base'" }, + { "kind" : "IdRef", "name" : "'Element'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + ] + }, + { + "opname" : "OpUntypedInBoundsPtrAccessChainKHR", + "class" : "Memory", + "opcode" : 4424, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Base Type'" }, + { "kind" : "IdRef", "name" : "'Base'" }, + { "kind" : "IdRef", "name" : "'Element'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + ] + }, + { + "opname" : "OpUntypedArrayLengthKHR", + "class" : "Memory", + "opcode" : 4425, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Structure'" }, + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "LiteralInteger", "name" : "'Array member'" } + ] + }, + { + "opname" : "OpUntypedPrefetchKHR", + "class" : "Memory", + "opcode" : 4426, + "capabilities" : [ "UntypedPointersKHR" ], + "provisional" : true, + "version" : "None", + "operands" : [ + { "kind" : "IdRef", "name" : "'Pointer Type'" }, + { "kind" : "IdRef", "name" : "'Num Bytes'" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'RW'" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'Locality'" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'Cache Type'" } + ] + }, { "opname" : "OpSubgroupAllKHR", "class" : "Group", @@ -4620,6 +4745,7 @@ { "opname" : "OpSDot", "class" : "Arithmetic", + "aliases" : ["OpSDotKHR"], "opcode" : 4450, "operands" : [ { "kind" : "IdResultType" }, @@ -4629,26 +4755,13 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], - "version" : "1.6" - }, - { - "opname" : "OpSDotKHR", - "class" : "Arithmetic", - "opcode" : 4450, - "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } - ], - "capabilities" : [ "DotProductKHR" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "opname" : "OpUDot", "class" : "Arithmetic", + "aliases" : ["OpUDotKHR"], "opcode" : 4451, "operands" : [ { "kind" : "IdResultType" }, @@ -4658,26 +4771,13 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], - "version" : "1.6" - }, - { - "opname" : "OpUDotKHR", - "class" : "Arithmetic", - "opcode" : 4451, - "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } - ], - "capabilities" : [ "DotProductKHR" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "opname" : "OpSUDot", "class" : "Arithmetic", + "aliases" : ["OpSUDotKHR"], "opcode" : 4452, "operands" : [ { "kind" : "IdResultType" }, @@ -4687,26 +4787,13 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], - "version" : "1.6" - }, - { - "opname" : "OpSUDotKHR", - "class" : "Arithmetic", - "opcode" : 4452, - "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } - ], - "capabilities" : [ "DotProductKHR" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "opname" : "OpSDotAccSat", "class" : "Arithmetic", + "aliases" : ["OpSDotAccSatKHR"], "opcode" : 4453, "operands" : [ { "kind" : "IdResultType" }, @@ -4717,27 +4804,13 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], - "version" : "1.6" - }, - { - "opname" : "OpSDotAccSatKHR", - "class" : "Arithmetic", - "opcode" : 4453, - "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "IdRef", "name" : "'Accumulator'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } - ], - "capabilities" : [ "DotProductKHR" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "opname" : "OpUDotAccSat", "class" : "Arithmetic", + "aliases" : ["OpUDotAccSatKHR"], "opcode" : 4454, "operands" : [ { "kind" : "IdResultType" }, @@ -4748,27 +4821,13 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], - "version" : "1.6" - }, - { - "opname" : "OpUDotAccSatKHR", - "class" : "Arithmetic", - "opcode" : 4454, - "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "IdRef", "name" : "'Accumulator'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } - ], - "capabilities" : [ "DotProductKHR" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "opname" : "OpSUDotAccSat", "class" : "Arithmetic", + "aliases" : ["OpSUDotAccSatKHR"], "opcode" : 4455, "operands" : [ { "kind" : "IdResultType" }, @@ -4779,21 +4838,6 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], - "version" : "1.6" - }, - { - "opname" : "OpSUDotAccSatKHR", - "class" : "Arithmetic", - "opcode" : 4455, - "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "IdRef", "name" : "'Accumulator'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } - ], - "capabilities" : [ "DotProductKHR" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, @@ -5326,13 +5370,41 @@ "version" : "None" }, { - "opname" : "OpFinalizeNodePayloadsAMDX", + "opname" : "OpAllocateNodePayloadsAMDX", + "class" : "Reserved", + "opcode" : 5074, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdScope", "name" : "'Visibility'" }, + { "kind" : "IdRef", "name": "'Payload Count'" }, + { "kind" : "IdRef", "name": "'Node Index'" } + ], + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version" : "None" + }, + { + "opname" : "OpEnqueueNodePayloadsAMDX", "class" : "Reserved", "opcode" : 5075, "operands" : [ { "kind" : "IdRef", "name": "'Payload Array'" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version" : "None" + }, + { + "opname" : "OpTypeNodePayloadArrayAMDX", + "class" : "Reserved", + "opcode" : 5076, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name": "'Payload Type'" } + ], + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { @@ -5345,20 +5417,59 @@ { "kind" : "IdRef", "name": "'Payload'" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { - "opname" : "OpInitializeNodePayloadsAMDX", + "opname" : "OpNodePayloadArrayLengthAMDX", "class" : "Reserved", "opcode" : 5090, "operands" : [ - { "kind" : "IdRef", "name": "'Payload Array'" }, - { "kind" : "IdScope", "name": "'Visibility'" }, - { "kind" : "IdRef", "name": "'Payload Count'" }, + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name": "'Payload Array'" } + ], + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version" : "None" + }, + { + "opname" : "OpIsNodePayloadValidAMDX", + "class" : "Reserved", + "opcode" : 5101, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name": "'Payload Type'" }, { "kind" : "IdRef", "name": "'Node Index'" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], - "version" : "None" + "provisional" : true, + "version": "None" + }, + { + "opname" : "OpConstantStringAMDX", + "class" : "Reserved", + "opcode" : 5103, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "LiteralString", "name": "'Literal String'" } + ], + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version": "None" + }, + { + "opname" : "OpSpecConstantStringAMDX", + "class" : "Reserved", + "opcode" : 5104, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "LiteralString", "name": "'Literal String'" } + ], + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version": "None" }, { "opname" : "OpGroupNonUniformQuadAllKHR", @@ -5856,6 +5967,105 @@ "extensions" : [ "SPV_NV_shader_image_footprint" ], "version" : "None" }, + { + "opname" : "OpTypeCooperativeVectorNV", + "class" : "Type-Declaration", + "opcode" : 5288, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Component Type'" }, + { "kind" : "IdRef", "name" : "'Component Count'" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorMatrixMulNV", + "class" : "Reserved", + "opcode" : 5289, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Input'" }, + { "kind" : "IdRef", "name" : "'InputInterpretation'" }, + { "kind" : "IdRef", "name" : "'Matrix'" }, + { "kind" : "IdRef", "name" : "'MatrixOffset'" }, + { "kind" : "IdRef", "name" : "'MatrixInterpretation'" }, + { "kind" : "IdRef", "name" : "'M'" }, + { "kind" : "IdRef", "name" : "'K'" }, + { "kind" : "IdRef", "name" : "'MemoryLayout'" }, + { "kind" : "IdRef", "name" : "'Transpose'" }, + { "kind" : "IdRef", "name" : "'MatrixStride'", "quantifier": "?" }, + { "kind" : "CooperativeMatrixOperands", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorOuterProductAccumulateNV", + "class" : "Reserved", + "opcode" : 5290, + "operands" : [ + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "'Offset'" }, + { "kind" : "IdRef", "name" : "'A'" }, + { "kind" : "IdRef", "name" : "'B'" }, + { "kind" : "IdRef", "name" : "'MemoryLayout'" }, + { "kind" : "IdRef", "name" : "'MatrixInterpretation'" }, + { "kind" : "IdRef", "name" : "'MatrixStride'", "quantifier": "?" } + ], + "capabilities" : [ "CooperativeVectorTrainingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorReduceSumAccumulateNV", + "class" : "Reserved", + "opcode" : 5291, + "operands" : [ + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "'Offset'" }, + { "kind" : "IdRef", "name" : "'V'" } + ], + "capabilities" : [ "CooperativeVectorTrainingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorMatrixMulAddNV", + "class" : "Reserved", + "opcode" : 5292, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Input'" }, + { "kind" : "IdRef", "name" : "'InputInterpretation'" }, + { "kind" : "IdRef", "name" : "'Matrix'" }, + { "kind" : "IdRef", "name" : "'MatrixOffset'" }, + { "kind" : "IdRef", "name" : "'MatrixInterpretation'" }, + { "kind" : "IdRef", "name" : "'Bias'" }, + { "kind" : "IdRef", "name" : "'BiasOffset'" }, + { "kind" : "IdRef", "name" : "'BiasInterpretation'" }, + { "kind" : "IdRef", "name" : "'M'" }, + { "kind" : "IdRef", "name" : "'K'" }, + { "kind" : "IdRef", "name" : "'MemoryLayout'" }, + { "kind" : "IdRef", "name" : "'Transpose'" }, + { "kind" : "IdRef", "name" : "'MatrixStride'", "quantifier": "?" }, + { "kind" : "CooperativeMatrixOperands", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeMatrixConvertNV", + "class" : "Conversion", + "opcode" : 5293, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Matrix'" } + ], + "capabilities" : [ "CooperativeMatrixConversionsNV" ], + "version" : "None" + }, { "opname" : "OpEmitMeshTasksEXT", "class" : "Reserved", @@ -5938,22 +6148,36 @@ "version" : "None" }, { - "opname" : "OpReportIntersectionKHR", - "class" : "Reserved", - "opcode" : 5334, + "opname" : "OpCooperativeVectorLoadNV", + "class" : "Memory", + "opcode" : 5302, "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Hit'" }, - { "kind" : "IdRef", "name" : "'HitKind'" } + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "'Offset'" }, + { "kind" : "MemoryAccess", "quantifier" : "?" } ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "CooperativeVectorNV" ], "version" : "None" }, { - "opname" : "OpReportIntersectionNV", + "opname" : "OpCooperativeVectorStoreNV", + "class" : "Memory", + "opcode" : 5303, + "operands" : [ + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "'Offset'" }, + { "kind" : "IdRef", "name" : "'Object'" }, + { "kind" : "MemoryAccess", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpReportIntersectionKHR", "class" : "Reserved", + "aliases" : ["OpReportIntersectionNV"], "opcode" : 5334, "operands" : [ { "kind" : "IdResultType" }, @@ -6071,17 +6295,7 @@ { "opname" : "OpTypeAccelerationStructureKHR", "class" : "Type-Declaration", - "opcode" : 5341, - "operands" : [ - { "kind" : "IdResult" } - ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR", "RayQueryKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing", "SPV_KHR_ray_query" ], - "version" : "None" - }, - { - "opname" : "OpTypeAccelerationStructureNV", - "class" : "Type-Declaration", + "aliases" : ["OpTypeAccelerationStructureNV"], "opcode" : 5341, "operands" : [ { "kind" : "IdResult" } @@ -6103,6 +6317,37 @@ "extensions" : [ "SPV_NV_ray_tracing" ], "version" : "None" }, + { + "opname" : "OpRayQueryGetClusterIdNV", + "class" : "Reserved", + "opcode" : 5345, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingClusterAccelerationStructureNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetClusterIdNV", + "class" : "Reserved", + "opcode" : 5346, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingClusterAccelerationStructureNV" ], + "version" : "None" + }, { "opname" : "OpTypeCooperativeMatrixNV", "class" : "Type-Declaration", @@ -6194,17 +6439,200 @@ "version" : "None" }, { - "opname" : "OpDemoteToHelperInvocation", - "class" : "Control-Flow", - "opcode" : 5380, - "capabilities" : [ "DemoteToHelperInvocation" ], - "version" : "1.6" + "opname" : "OpCooperativeMatrixReduceNV", + "class" : "Arithmetic", + "opcode" : 5366, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Matrix'" }, + { "kind" : "CooperativeMatrixReduce", "name" : "'Reduce'" }, + { "kind" : "IdRef", "name" : "'CombineFunc'" } + ], + "capabilities" : [ "CooperativeMatrixReductionsNV" ], + "version" : "None" }, { - "opname" : "OpDemoteToHelperInvocationEXT", + "opname" : "OpCooperativeMatrixLoadTensorNV", + "class" : "Memory", + "opcode" : 5367, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "'Object'" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "MemoryAccess", "name" : "'Memory Operand'"}, + { "kind" : "TensorAddressingOperands", "name" : "'Tensor Addressing Operands'"} + ], + "capabilities" : [ "CooperativeMatrixTensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeMatrixStoreTensorNV", + "class" : "Memory", + "opcode" : 5368, + "operands" : [ + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "'Object'" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "MemoryAccess", "name" : "'Memory Operand'"}, + { "kind" : "TensorAddressingOperands", "name" : "'Tensor Addressing Operands'"} + ], + "capabilities" : [ "CooperativeMatrixTensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeMatrixPerElementOpNV", + "class" : "Function", + "opcode" : 5369, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Matrix'" }, + { "kind" : "IdRef", "name" : "'Func'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operands'" } + ], + "capabilities" : [ "CooperativeMatrixPerElementOperationsNV" ], + "version" : "None" + }, + { + "opname" : "OpTypeTensorLayoutNV", + "class" : "Type-Declaration", + "opcode" : 5370, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Dim'" }, + { "kind" : "IdRef", "name" : "'ClampMode'" } + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTypeTensorViewNV", + "class" : "Type-Declaration", + "opcode" : 5371, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Dim'" }, + { "kind" : "IdRef", "name" : "'HasDimensions'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'p'" } + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpCreateTensorLayoutNV", + "class" : "Reserved", + "opcode" : 5372, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" } + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorLayoutSetDimensionNV", + "class" : "Reserved", + "opcode" : 5373, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Dim'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorLayoutSetStrideNV", + "class" : "Reserved", + "opcode" : 5374, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Stride'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorLayoutSliceNV", + "class" : "Reserved", + "opcode" : 5375, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operands'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorLayoutSetClampValueNV", + "class" : "Reserved", + "opcode" : 5376, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "IdRef", "name" : "'Value'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpCreateTensorViewNV", + "class" : "Reserved", + "opcode" : 5377, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" } + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorViewSetDimensionNV", + "class" : "Reserved", + "opcode" : 5378, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorView'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Dim'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorViewSetStrideNV", + "class" : "Reserved", + "opcode" : 5379, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorView'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Stride'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpDemoteToHelperInvocation", "class" : "Control-Flow", + "aliases" : ["OpDemoteToHelperInvocationEXT"], "opcode" : 5380, - "capabilities" : [ "DemoteToHelperInvocationEXT" ], + "capabilities" : [ "DemoteToHelperInvocation" ], "version" : "1.6" }, { @@ -6215,10 +6643,52 @@ { "kind" : "IdResultType" }, { "kind" : "IdResult" } ], - "capabilities" : [ "DemoteToHelperInvocationEXT" ], + "capabilities" : [ "DemoteToHelperInvocation" ], "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ], "version" : "None" }, + { + "opname" : "OpTensorViewSetClipNV", + "class" : "Reserved", + "opcode" : 5382, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorView'" }, + { "kind" : "IdRef", "name" : "'ClipRowOffset'" }, + { "kind" : "IdRef", "name" : "'ClipRowSpan'" }, + { "kind" : "IdRef", "name" : "'ClipColOffset'" }, + { "kind" : "IdRef", "name" : "'ClipColSpan'" } + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpTensorLayoutSetBlockSizeNV", + "class" : "Reserved", + "opcode" : 5384, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'TensorLayout'" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'BlockSize'" } + + ], + "capabilities" : [ "TensorAddressingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeMatrixTransposeNV", + "class" : "Conversion", + "opcode" : 5390, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Matrix'" } + ], + "capabilities" : [ "CooperativeMatrixConversionsNV" ], + "version" : "None" + }, { "opname" : "OpConvertUToImageNV", "class" : "Reserved", @@ -6319,6 +6789,211 @@ ], "version" : "None" }, + { + "opname" : "OpRayQueryGetIntersectionSpherePositionNV", + "class" : "Reserved", + "opcode" : 5427, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionSphereRadiusNV", + "class" : "Reserved", + "opcode" : 5428, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionLSSPositionsNV", + "class" : "Reserved", + "opcode" : 5429, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionLSSRadiiNV", + "class" : "Reserved", + "opcode" : 5430, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV"], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionLSSHitValueNV", + "class" : "Reserved", + "opcode" : 5431, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetSpherePositionNV", + "class" : "Reserved", + "opcode" : 5432, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetSphereRadiusNV", + "class" : "Reserved", + "opcode" : 5433, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetLSSPositionsNV", + "class" : "Reserved", + "opcode" : 5434, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetLSSRadiiNV", + "class" : "Reserved", + "opcode" : 5435, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsSphereHitNV", + "class" : "Reserved", + "opcode" : 5436, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsLSSHitNV", + "class" : "Reserved", + "opcode" : 5437, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryIsSphereHitNV", + "class" : "Reserved", + "opcode" : 5438, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryIsLSSHitNV", + "class" : "Reserved", + "opcode" : 5439, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, { "opname" : "OpSubgroupShuffleINTEL", "class" : "Group", @@ -6661,7 +7336,6 @@ "class" : "@exclude", "opcode" : 5609, "operands" : [ - { "kind" : "IdResultType" }, { "kind" : "IdResult" }, { "kind" : "LiteralString", "name" : "'Asm target'" } ], @@ -6754,17 +7428,7 @@ { "opname" : "OpDecorateString", "class" : "Annotation", - "opcode" : 5632, - "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "Decoration" } - ], - "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ], - "version" : "1.4" - }, - { - "opname" : "OpDecorateStringGOOGLE", - "class" : "Annotation", + "aliases" : ["OpDecorateStringGOOGLE"], "opcode" : 5632, "operands" : [ { "kind" : "IdRef", "name" : "'Target'" }, @@ -6776,18 +7440,7 @@ { "opname" : "OpMemberDecorateString", "class" : "Annotation", - "opcode" : 5633, - "operands" : [ - { "kind" : "IdRef", "name" : "'Struct Type'" }, - { "kind" : "LiteralInteger", "name" : "'Member'" }, - { "kind" : "Decoration" } - ], - "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ], - "version" : "1.4" - }, - { - "opname" : "OpMemberDecorateStringGOOGLE", - "class" : "Annotation", + "aliases" : ["OpMemberDecorateStringGOOGLE"], "opcode" : 5633, "operands" : [ { "kind" : "IdRef", "name" : "'Struct Type'" }, @@ -9803,6 +10456,140 @@ "capabilities" : [ "SplitBarrierINTEL" ], "version" : "None" }, + { + "opname" : "OpArithmeticFenceEXT", + "class" : "Miscellaneous", + "opcode" : 6145, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Target'" } + ], + "capabilities" : [ "ArithmeticFenceEXT" ], + "version" : "None" + }, + { + "opname" : "OpSubgroupBlockPrefetchINTEL", + "class" : "Group", + "opcode" : 6221, + "operands" : [ + { "kind" : "IdRef", "name" : "'Ptr'" }, + { "kind" : "IdRef", "name" : "'NumBytes'" }, + { "kind" : "MemoryAccess", "quantifier" : "?" } + ], + "capabilities" : [ "SubgroupBufferPrefetchINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockLoadINTEL", + "class" : "Group", + "opcode" : 6231, + "operands" : [ + { "kind" : "IdRef", "name" : "'Element Size'" }, + { "kind" : "IdRef", "name" : "'Block Width'" }, + { "kind" : "IdRef", "name" : "'Block Height'" }, + { "kind" : "IdRef", "name" : "'Block Count'" }, + { "kind" : "IdRef", "name" : "'Src Base Pointer'" }, + { "kind" : "IdRef", "name" : "'Memory Width'" }, + { "kind" : "IdRef", "name" : "'Memory Height'" }, + { "kind" : "IdRef", "name" : "'Memory Pitch'" }, + { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "'Dst Pointer'" } + ], + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockLoadTransformINTEL", + "class" : "Group", + "opcode" : 6232, + "operands" : [ + { "kind" : "IdRef", "name" : "'Element Size'" }, + { "kind" : "IdRef", "name" : "'Block Width'" }, + { "kind" : "IdRef", "name" : "'Block Height'" }, + { "kind" : "IdRef", "name" : "'Block Count'" }, + { "kind" : "IdRef", "name" : "'Src Base Pointer'" }, + { "kind" : "IdRef", "name" : "'Memory Width'" }, + { "kind" : "IdRef", "name" : "'Memory Height'" }, + { "kind" : "IdRef", "name" : "'Memory Pitch'" }, + { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "'Dst Pointer'" } + ], + "capabilities" : [ "Subgroup2DBlockTransformINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockLoadTransposeINTEL", + "class" : "Group", + "opcode" : 6233, + "operands" : [ + { "kind" : "IdRef", "name" : "'Element Size'" }, + { "kind" : "IdRef", "name" : "'Block Width'" }, + { "kind" : "IdRef", "name" : "'Block Height'" }, + { "kind" : "IdRef", "name" : "'Block Count'" }, + { "kind" : "IdRef", "name" : "'Src Base Pointer'" }, + { "kind" : "IdRef", "name" : "'Memory Width'" }, + { "kind" : "IdRef", "name" : "'Memory Height'" }, + { "kind" : "IdRef", "name" : "'Memory Pitch'" }, + { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "'Dst Pointer'" } + ], + "capabilities" : [ "Subgroup2DBlockTransposeINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockPrefetchINTEL", + "class" : "Group", + "opcode" : 6234, + "operands" : [ + { "kind" : "IdRef", "name" : "'Element Size'" }, + { "kind" : "IdRef", "name" : "'Block Width'" }, + { "kind" : "IdRef", "name" : "'Block Height'" }, + { "kind" : "IdRef", "name" : "'Block Count'" }, + { "kind" : "IdRef", "name" : "'Src Base Pointer'" }, + { "kind" : "IdRef", "name" : "'Memory Width'" }, + { "kind" : "IdRef", "name" : "'Memory Height'" }, + { "kind" : "IdRef", "name" : "'Memory Pitch'" }, + { "kind" : "IdRef", "name" : "'Coordinate'" } + ], + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockStoreINTEL", + "class" : "Group", + "opcode" : 6235, + "operands" : [ + { "kind" : "IdRef", "name" : "'Element Size'" }, + { "kind" : "IdRef", "name" : "'Block Width'" }, + { "kind" : "IdRef", "name" : "'Block Height'" }, + { "kind" : "IdRef", "name" : "'Block Count'" }, + { "kind" : "IdRef", "name" : "'Src Pointer'" }, + { "kind" : "IdRef", "name" : "'Dst Base Pointer'" }, + { "kind" : "IdRef", "name" : "'Memory Width'" }, + { "kind" : "IdRef", "name" : "'Memory Height'" }, + { "kind" : "IdRef", "name" : "'Memory Pitch'" }, + { "kind" : "IdRef", "name" : "'Coordinate'" } + ], + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroupMatrixMultiplyAccumulateINTEL", + "class" : "Group", + "opcode" : 6237, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'K Dim'" }, + { "kind" : "IdRef", "name" : "'Matrix A'" }, + { "kind" : "IdRef", "name" : "'Matrix B'" }, + { "kind" : "IdRef", "name" : "'Matrix C'" }, + { "kind" : "MatrixMultiplyAccumulateOperands", "quantifier" : "?" } + ], + "capabilities" : [ "SubgroupMatrixMultiplyAccumulateINTEL" ], + "version" : "None" + }, { "opname" : "OpGroupIMulKHR", "class" : "Group", @@ -10024,15 +10811,7 @@ }, { "enumerant" : "MakeTexelAvailable", - "value" : "0x0100", - "capabilities" : [ "VulkanMemoryModel" ], - "parameters" : [ - { "kind" : "IdScope" } - ], - "version" : "1.5" - }, - { - "enumerant" : "MakeTexelAvailableKHR", + "aliases" : [ "MakeTexelAvailableKHR" ], "value" : "0x0100", "capabilities" : [ "VulkanMemoryModel" ], "parameters" : [ @@ -10043,15 +10822,7 @@ }, { "enumerant" : "MakeTexelVisible", - "value" : "0x0200", - "capabilities" : [ "VulkanMemoryModel" ], - "parameters" : [ - { "kind" : "IdScope" } - ], - "version" : "1.5" - }, - { - "enumerant" : "MakeTexelVisibleKHR", + "aliases" : [ "MakeTexelVisibleKHR" ], "value" : "0x0200", "capabilities" : [ "VulkanMemoryModel" ], "parameters" : [ @@ -10062,12 +10833,7 @@ }, { "enumerant" : "NonPrivateTexel", - "value" : "0x0400", - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "NonPrivateTexelKHR", + "aliases" : [ "NonPrivateTexelKHR" ], "value" : "0x0400", "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -10075,12 +10841,7 @@ }, { "enumerant" : "VolatileTexel", - "value" : "0x0800", - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "VolatileTexelKHR", + "aliases" : [ "VolatileTexelKHR" ], "value" : "0x0800", "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -10147,24 +10908,14 @@ }, { "enumerant" : "AllowContract", - "value" : "0x10000", - "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ], - "version" : "None" - }, - { - "enumerant" : "AllowContractFastINTEL", + "aliases" : ["AllowContractFastINTEL"], "value" : "0x10000", "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ], "version" : "None" }, { "enumerant" : "AllowReassoc", - "value" : "0x20000", - "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ], - "version" : "None" - }, - { - "enumerant" : "AllowReassocINTEL", + "aliases" : ["AllowReassocINTEL"], "value" : "0x20000", "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ], "version" : "None" @@ -10389,9 +11140,10 @@ "version" : "1.0" }, { - "enumerant" : "OptNoneINTEL", + "enumerant" : "OptNoneEXT", + "aliases" : ["OptNoneINTEL"], "value" : "0x10000", - "capabilities" : [ "OptNoneINTEL" ], + "capabilities" : [ "OptNoneEXT" ], "version" : "None" } ] @@ -10402,11 +11154,7 @@ "enumerants" : [ { "enumerant" : "Relaxed", - "value" : "0x0000", - "version" : "1.0" - }, - { - "enumerant" : "None", + "aliases" : ["None"], "value" : "0x0000", "version" : "1.0" }, @@ -10464,12 +11212,7 @@ }, { "enumerant" : "OutputMemory", - "value" : "0x1000", - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "OutputMemoryKHR", + "aliases" : ["OutputMemoryKHR"], "value" : "0x1000", "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -10477,12 +11220,7 @@ }, { "enumerant" : "MakeAvailable", - "value" : "0x2000", - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "MakeAvailableKHR", + "aliases" : ["MakeAvailableKHR"], "value" : "0x2000", "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -10490,12 +11228,7 @@ }, { "enumerant" : "MakeVisible", - "value" : "0x4000", - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "MakeVisibleKHR", + "aliases" : ["MakeVisibleKHR"], "value" : "0x4000", "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -10539,15 +11272,7 @@ }, { "enumerant" : "MakePointerAvailable", - "value" : "0x0008", - "parameters" : [ - { "kind" : "IdScope" } - ], - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "MakePointerAvailableKHR", + "aliases" : ["MakePointerAvailableKHR"], "value" : "0x0008", "parameters" : [ { "kind" : "IdScope" } @@ -10558,15 +11283,7 @@ }, { "enumerant" : "MakePointerVisible", - "value" : "0x0010", - "parameters" : [ - { "kind" : "IdScope" } - ], - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "MakePointerVisibleKHR", + "aliases" : ["MakePointerVisibleKHR"], "value" : "0x0010", "parameters" : [ { "kind" : "IdScope" } @@ -10577,12 +11294,7 @@ }, { "enumerant" : "NonPrivatePointer", - "value" : "0x0020", - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "NonPrivatePointerKHR", + "aliases" : ["NonPrivatePointerKHR"], "value" : "0x0020", "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -10687,6 +11399,7 @@ }, { "enumerant" : "SkipTrianglesKHR", + "aliases" : ["SkipBuiltinPrimitivesNV"], "value" : "0x0100", "capabilities" : [ "RayTraversalPrimitiveCullingKHR" ], "version" : "None" @@ -10825,6 +11538,11 @@ "enumerant" : "Zig", "value" : 12, "version" : "1.0" + }, + { + "enumerant" : "Rust", + "value" : 13, + "version" : "1.0" } ] }, @@ -10888,72 +11606,42 @@ }, { "enumerant" : "RayGenerationKHR", - "value" : 5313, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "RayGenerationNV", + "aliases" : ["RayGenerationNV"], "value" : 5313, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "version" : "None" }, { "enumerant" : "IntersectionKHR", - "value" : 5314, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "IntersectionNV", + "aliases" : ["IntersectionNV"], "value" : 5314, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "version" : "None" }, { "enumerant" : "AnyHitKHR", - "value" : 5315, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "AnyHitNV", + "aliases" : ["AnyHitNV"], "value" : 5315, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "version" : "None" }, { "enumerant" : "ClosestHitKHR", - "value" : 5316, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "ClosestHitNV", + "aliases" : ["ClosestHitNV"], "value" : 5316, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "version" : "None" }, { "enumerant" : "MissKHR", - "value" : 5317, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "MissNV", + "aliases" : ["MissNV"], "value" : 5317, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "version" : "None" }, { "enumerant" : "CallableKHR", - "value" : 5318, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "CallableNV", + "aliases" : ["CallableNV"], "value" : 5318, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "version" : "None" @@ -10995,17 +11683,11 @@ }, { "enumerant" : "PhysicalStorageBuffer64", + "aliases" : ["PhysicalStorageBuffer64EXT"], "value" : 5348, "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ], "capabilities" : [ "PhysicalStorageBufferAddresses" ], "version" : "1.5" - }, - { - "enumerant" : "PhysicalStorageBuffer64EXT", - "value" : 5348, - "extensions" : [ "SPV_EXT_physical_storage_buffer" ], - "capabilities" : [ "PhysicalStorageBufferAddresses" ], - "version" : "1.5" } ] }, @@ -11033,12 +11715,7 @@ }, { "enumerant" : "Vulkan", - "value" : 3, - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "VulkanKHR", + "aliases" : ["VulkanKHR"], "value" : 3, "capabilities" : [ "VulkanMemoryModel" ], "extensions" : [ "SPV_KHR_vulkan_memory_model" ], @@ -11414,6 +12091,17 @@ "enumerant" : "CoalescingAMDX", "value" : 5069, "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version" : "None" + }, + { + "enumerant" : "IsApiEntryAMDX", + "value" : 5070, + "capabilities" : [ "ShaderEnqueueAMDX" ], + "parameters" : [ + { "kind" : "IdRef", "name" : "'Is Entry'" } + ], + "provisional" : true, "version" : "None" }, { @@ -11423,6 +12111,7 @@ "parameters" : [ { "kind" : "IdRef", "name" : "'Number of recursions'" } ], + "provisional" : true, "version" : "None" }, { @@ -11434,6 +12123,7 @@ { "kind" : "IdRef", "name" : "'y size'" }, { "kind" : "IdRef", "name" : "'z size'" } ], + "provisional" : true, "version" : "None" }, { @@ -11443,6 +12133,7 @@ "parameters" : [ { "kind" : "IdRef", "name" : "'Shader Index'" } ], + "provisional" : true, "version" : "None" }, { @@ -11454,6 +12145,7 @@ { "kind" : "IdRef", "name" : "'y size'" }, { "kind" : "IdRef", "name" : "'z size'" } ], + "provisional" : true, "version" : "None" }, { @@ -11511,14 +12203,19 @@ "version" : "None" }, { - "enumerant" : "OutputLinesEXT", - "value" : 5269, - "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], - "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], + "enumerant" : "SharesInputWithAMDX", + "value" : 5102, + "capabilities" : [ "ShaderEnqueueAMDX" ], + "parameters" : [ + { "kind" : "IdRef", "name" : "'Node Name'" }, + { "kind" : "IdRef", "name" : "'Shader Index'" } + ], + "provisional" : true, "version" : "None" }, { - "enumerant" : "OutputLinesNV", + "enumerant" : "OutputLinesEXT", + "aliases" : ["OutputLinesNV"], "value" : 5269, "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], @@ -11526,6 +12223,7 @@ }, { "enumerant" : "OutputPrimitivesEXT", + "aliases" : ["OutputPrimitivesNV"], "value" : 5270, "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], "parameters" : [ @@ -11535,38 +12233,24 @@ "version" : "None" }, { - "enumerant" : "OutputPrimitivesNV", - "value" : 5270, - "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], - "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Primitive count'" } - ], - "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], - "version" : "None" - }, - { - "enumerant" : "DerivativeGroupQuadsNV", + "enumerant" : "DerivativeGroupQuadsKHR", + "aliases" : ["DerivativeGroupQuadsNV"], "value" : 5289, - "capabilities" : [ "ComputeDerivativeGroupQuadsNV" ], - "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "capabilities" : [ "ComputeDerivativeGroupQuadsNV", "ComputeDerivativeGroupQuadsKHR" ], + "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ], "version" : "None" }, { - "enumerant" : "DerivativeGroupLinearNV", + "enumerant" : "DerivativeGroupLinearKHR", + "aliases" : ["DerivativeGroupLinearNV"], "value" : 5290, - "capabilities" : [ "ComputeDerivativeGroupLinearNV" ], - "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "capabilities" : [ "ComputeDerivativeGroupLinearNV", "ComputeDerivativeGroupLinearKHR" ], + "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ], "version" : "None" }, { "enumerant" : "OutputTrianglesEXT", - "value" : 5298, - "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], - "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], - "version" : "None" - }, - { - "enumerant" : "OutputTrianglesNV", + "aliases" : ["OutputTrianglesNV"], "value" : 5298, "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], @@ -11870,23 +12554,12 @@ "enumerant" : "NodePayloadAMDX", "value" : 5068, "capabilities" : [ "ShaderEnqueueAMDX" ], - "version" : "None" - }, - { - "enumerant" : "NodeOutputPayloadAMDX", - "value" : 5076, - "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { "enumerant" : "CallableDataKHR", - "value" : 5328, - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "CallableDataNV", + "aliases" : ["CallableDataNV"], "value" : 5328, "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], @@ -11894,13 +12567,7 @@ }, { "enumerant" : "IncomingCallableDataKHR", - "value" : 5329, - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "IncomingCallableDataNV", + "aliases" : ["IncomingCallableDataNV"], "value" : 5329, "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], @@ -11908,13 +12575,7 @@ }, { "enumerant" : "RayPayloadKHR", - "value" : 5338, - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "RayPayloadNV", + "aliases" : ["RayPayloadNV"], "value" : 5338, "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], @@ -11922,13 +12583,7 @@ }, { "enumerant" : "HitAttributeKHR", - "value" : 5339, - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "HitAttributeNV", + "aliases" : ["HitAttributeNV"], "value" : 5339, "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], @@ -11936,13 +12591,7 @@ }, { "enumerant" : "IncomingRayPayloadKHR", - "value" : 5342, - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "IncomingRayPayloadNV", + "aliases" : ["IncomingRayPayloadNV"], "value" : 5342, "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], @@ -11950,13 +12599,7 @@ }, { "enumerant" : "ShaderRecordBufferKHR", - "value" : 5343, - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "version" : "None" - }, - { - "enumerant" : "ShaderRecordBufferNV", + "aliases" : ["ShaderRecordBufferNV"], "value" : 5343, "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], @@ -11964,18 +12607,12 @@ }, { "enumerant" : "PhysicalStorageBuffer", + "aliases" : ["PhysicalStorageBufferEXT"], "value" : 5349, "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ], "capabilities" : [ "PhysicalStorageBufferAddresses" ], "version" : "1.5" }, - { - "enumerant" : "PhysicalStorageBufferEXT", - "value" : 5349, - "extensions" : [ "SPV_EXT_physical_storage_buffer" ], - "capabilities" : [ "PhysicalStorageBufferAddresses" ], - "version" : "1.5" - }, { "enumerant" : "HitObjectAttributeNV", "value" : 5385, @@ -12576,6 +13213,11 @@ "enumerant" : "UnsignedIntRaw12EXT", "value" : 20, "version": "1.0" + }, + { + "enumerant" : "UnormInt2_101010EXT", + "value" : 21, + "version": "1.0" } ] }, @@ -13254,8 +13896,9 @@ "value" : 5019, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Payload Array'" } + { "kind" : "IdRef", "name" : "'Payload Type'" } ], + "provisional" : true, "version" : "None" }, { @@ -13265,12 +13908,14 @@ "parameters" : [ { "kind" : "IdRef", "name" : "'Max number of payloads'" } ], + "provisional" : true, "version" : "None" }, { "enumerant" : "TrackFinishWritingAMDX", "value" : 5078, "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { @@ -13278,8 +13923,43 @@ "value" : 5091, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "LiteralString", "name" : "'Node Name'" } + { "kind" : "IdRef", "name" : "'Node Name'" } ], + "provisional" : true, + "version" : "None" + }, + { + "enumerant" : "PayloadNodeBaseIndexAMDX", + "value" : 5098, + "capabilities" : [ "ShaderEnqueueAMDX" ], + "parameters" : [ + { "kind" : "IdRef", "name" : "'Base Index'" } + ], + "provisional" : true, + "version" : "None" + }, + { + "enumerant" : "PayloadNodeSparseArrayAMDX", + "value" : 5099, + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, + "version" : "None" + }, + { + "enumerant" : "PayloadNodeArraySizeAMDX", + "value" : 5100, + "capabilities" : [ "ShaderEnqueueAMDX" ], + "parameters" : [ + { "kind" : "IdRef", "name" : "'Array Size'" } + ], + "provisional" : true, + "version" : "None" + }, + { + "enumerant" : "PayloadDispatchIndirectAMDX", + "value" : 5105, + "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { @@ -13314,13 +13994,7 @@ }, { "enumerant" : "PerPrimitiveEXT", - "value" : 5271, - "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], - "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], - "version" : "None" - }, - { - "enumerant" : "PerPrimitiveNV", + "aliases" : ["PerPrimitiveNV"], "value" : 5271, "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], @@ -13342,26 +14016,15 @@ }, { "enumerant" : "PerVertexKHR", + "aliases" : ["PerVertexNV"], "value" : 5285, - "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], - "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], - "version" : "None" - }, - { - "enumerant" : "PerVertexNV", - "value" : 5285, - "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "capabilities" : [ "FragmentBarycentricKHR" ], "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { "enumerant" : "NonUniform", - "value" : 5300, - "capabilities" : [ "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "NonUniformEXT", + "aliases" : ["NonUniformEXT"], "value" : 5300, "capabilities" : [ "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -13369,32 +14032,20 @@ }, { "enumerant" : "RestrictPointer", + "aliases" : ["RestrictPointerEXT"], "value" : 5355, "capabilities" : [ "PhysicalStorageBufferAddresses" ], "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ], "version" : "1.5" }, - { - "enumerant" : "RestrictPointerEXT", - "value" : 5355, - "capabilities" : [ "PhysicalStorageBufferAddresses" ], - "extensions" : [ "SPV_EXT_physical_storage_buffer" ], - "version" : "1.5" - }, { "enumerant" : "AliasedPointer", + "aliases" : ["AliasedPointerEXT"], "value" : 5356, "capabilities" : [ "PhysicalStorageBufferAddresses" ], "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ], "version" : "1.5" }, - { - "enumerant" : "AliasedPointerEXT", - "value" : 5356, - "capabilities" : [ "PhysicalStorageBufferAddresses" ], - "extensions" : [ "SPV_EXT_physical_storage_buffer" ], - "version" : "1.5" - }, { "enumerant" : "HitObjectShaderRecordBufferNV", "value" : 5386, @@ -13494,37 +14145,23 @@ }, { "enumerant" : "CounterBuffer", - "value" : 5634, - "parameters" : [ - { "kind" : "IdRef", "name" : "'Counter Buffer'" } - ], - "version" : "1.4" - }, - { - "enumerant" : "HlslCounterBufferGOOGLE", + "aliases" : ["HlslCounterBufferGOOGLE"], "value" : 5634, "parameters" : [ { "kind" : "IdRef", "name" : "'Counter Buffer'" } ], "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ], - "version" : "None" + "version" : "1.4" }, { "enumerant" : "UserSemantic", - "value" : 5635, - "parameters" : [ - { "kind" : "LiteralString", "name" : "'Semantic'" } - ], - "version" : "1.4" - }, - { - "enumerant" : "HlslSemanticGOOGLE", + "aliases" : ["HlslSemanticGOOGLE"], "value" : 5635, "parameters" : [ { "kind" : "LiteralString", "name" : "'Semantic'" } ], "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ], - "version" : "None" + "version" : "1.4" }, { "enumerant" : "UserTypeGOOGLE", @@ -14264,12 +14901,7 @@ }, { "enumerant" : "SubgroupEqMask", - "value" : 4416, - "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], - "version" : "1.3" - }, - { - "enumerant" : "SubgroupEqMaskKHR", + "aliases" : ["SubgroupEqMaskKHR"], "value" : 4416, "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -14277,12 +14909,7 @@ }, { "enumerant" : "SubgroupGeMask", - "value" : 4417, - "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], - "version" : "1.3" - }, - { - "enumerant" : "SubgroupGeMaskKHR", + "aliases" : ["SubgroupGeMaskKHR"], "value" : 4417, "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -14290,12 +14917,7 @@ }, { "enumerant" : "SubgroupGtMask", - "value" : 4418, - "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], - "version" : "1.3" - }, - { - "enumerant" : "SubgroupGtMaskKHR", + "aliases" : ["SubgroupGtMaskKHR"], "value" : 4418, "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -14303,12 +14925,7 @@ }, { "enumerant" : "SubgroupLeMask", - "value" : 4419, - "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], - "version" : "1.3" - }, - { - "enumerant" : "SubgroupLeMaskKHR", + "aliases" : ["SubgroupLeMaskKHR"], "value" : 4419, "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -14316,12 +14933,7 @@ }, { "enumerant" : "SubgroupLtMask", - "value" : 4420, - "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], - "version" : "1.3" - }, - { - "enumerant" : "SubgroupLtMaskKHR", + "aliases" : ["SubgroupLtMaskKHR"], "value" : 4420, "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -14426,15 +15038,17 @@ "version" : "None" }, { - "enumerant" : "CoalescedInputCountAMDX", + "enumerant" : "RemainingRecursionLevelsAMDX", "value" : 5021, "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { "enumerant" : "ShaderIndexAMDX", "value" : 5073, "capabilities" : [ "ShaderEnqueueAMDX" ], + "provisional" : true, "version" : "None" }, { @@ -14537,60 +15151,36 @@ }, { "enumerant" : "BaryCoordKHR", + "aliases" : ["BaryCoordNV"], "value" : 5286, - "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], - "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], - "version" : "None" - }, - { - "enumerant" : "BaryCoordNV", - "value" : 5286, - "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "capabilities" : [ "FragmentBarycentricKHR" ], "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { "enumerant" : "BaryCoordNoPerspKHR", + "aliases" : ["BaryCoordNoPerspNV"], "value" : 5287, - "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], - "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], - "version" : "None" - }, - { - "enumerant" : "BaryCoordNoPerspNV", - "value" : 5287, - "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "capabilities" : [ "FragmentBarycentricKHR" ], "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { "enumerant" : "FragSizeEXT", + "aliases" : ["FragmentSizeNV"], "value" : 5292 , - "capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ], + "capabilities" : [ "FragmentDensityEXT" ], "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ], "version" : "None" }, - { - "enumerant" : "FragmentSizeNV", - "value" : 5292 , - "capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ], - "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ], - "version" : "None" - }, { "enumerant" : "FragInvocationCountEXT", + "aliases" : ["InvocationsPerPixelNV"], "value" : 5293, - "capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ], + "capabilities" : [ "FragmentDensityEXT" ], "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ], "version" : "None" }, - { - "enumerant" : "InvocationsPerPixelNV", - "value" : 5293, - "capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ], - "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ], - "version" : "None" - }, { "enumerant" : "PrimitivePointIndicesEXT", "value" : 5294, @@ -14621,13 +15211,7 @@ }, { "enumerant" : "LaunchIdKHR", - "value" : 5319, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "LaunchIdNV", + "aliases" : ["LaunchIdNV"], "value" : 5319, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14635,13 +15219,7 @@ }, { "enumerant" : "LaunchSizeKHR", - "value" : 5320, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "LaunchSizeNV", + "aliases" : ["LaunchSizeNV"], "value" : 5320, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14649,13 +15227,7 @@ }, { "enumerant" : "WorldRayOriginKHR", - "value" : 5321, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "WorldRayOriginNV", + "aliases" : ["WorldRayOriginNV"], "value" : 5321, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14663,13 +15235,7 @@ }, { "enumerant" : "WorldRayDirectionKHR", - "value" : 5322, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "WorldRayDirectionNV", + "aliases" : ["WorldRayDirectionNV"], "value" : 5322, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14677,13 +15243,7 @@ }, { "enumerant" : "ObjectRayOriginKHR", - "value" : 5323, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "ObjectRayOriginNV", + "aliases" : ["ObjectRayOriginNV"], "value" : 5323, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14691,13 +15251,7 @@ }, { "enumerant" : "ObjectRayDirectionKHR", - "value" : 5324, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "ObjectRayDirectionNV", + "aliases" : ["ObjectRayDirectionNV"], "value" : 5324, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14705,13 +15259,7 @@ }, { "enumerant" : "RayTminKHR", - "value" : 5325, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "RayTminNV", + "aliases" : ["RayTminNV"], "value" : 5325, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14719,13 +15267,7 @@ }, { "enumerant" : "RayTmaxKHR", - "value" : 5326, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "RayTmaxNV", + "aliases" : ["RayTmaxNV"], "value" : 5326, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14733,13 +15275,7 @@ }, { "enumerant" : "InstanceCustomIndexKHR", - "value" : 5327, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "InstanceCustomIndexNV", + "aliases" : ["InstanceCustomIndexNV"], "value" : 5327, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14747,13 +15283,7 @@ }, { "enumerant" : "ObjectToWorldKHR", - "value" : 5330, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "ObjectToWorldNV", + "aliases" : ["ObjectToWorldNV"], "value" : 5330, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14761,13 +15291,7 @@ }, { "enumerant" : "WorldToObjectKHR", - "value" : 5331, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "WorldToObjectNV", + "aliases" : ["WorldToObjectNV"], "value" : 5331, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14782,13 +15306,7 @@ }, { "enumerant" : "HitKindKHR", - "value" : 5333, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "HitKindNV", + "aliases" : ["HitKindNV"], "value" : 5333, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14821,13 +15339,7 @@ }, { "enumerant" : "IncomingRayFlagsKHR", - "value" : 5351, - "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], - "version" : "None" - }, - { - "enumerant" : "IncomingRayFlagsNV", + "aliases" : ["IncomingRayFlagsNV"], "value" : 5351, "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -14840,6 +15352,27 @@ "extensions" : [ "SPV_KHR_ray_tracing" ], "version" : "None" }, + { + "enumerant" : "HitIsSphereNV", + "value" : 5359, + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "HitIsLSSNV", + "value" : 5360, + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "HitSpherePositionNV", + "value" : 5361, + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, { "enumerant" : "WarpsPerSMNV", "value" : 5374, @@ -14868,6 +15401,13 @@ "extensions" : [ "SPV_NV_shader_sm_builtins" ], "version" : "None" }, + { + "enumerant" : "HitLSSPositionsNV", + "value" : 5396, + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, { "enumerant" : "HitKindFrontFacingMicroTriangleNV", "value" : 5405, @@ -14880,6 +15420,27 @@ "capabilities" : [ "RayTracingDisplacementMicromapNV" ], "version" : "None" }, + { + "enumerant" : "HitSphereRadiusNV", + "value" : 5420, + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "HitLSSRadiiNV", + "value" : 5421, + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "ClusterIDNV", + "value" : 5436, + "capabilities" : [ "RayTracingClusterAccelerationStructureNV" ], + "extensions" : [ "SPV_NV_cluster_acceleration_structure" ], + "version" : "None" + }, { "enumerant" : "CullMaskKHR", "value" : 6021, @@ -14920,12 +15481,7 @@ }, { "enumerant" : "QueueFamily", - "value" : 5, - "capabilities" : [ "VulkanMemoryModel" ], - "version" : "1.5" - }, - { - "enumerant" : "QueueFamilyKHR", + "aliases" : ["QueueFamilyKHR"], "value" : 5, "capabilities" : [ "VulkanMemoryModel" ], "version" : "1.5" @@ -15501,33 +16057,16 @@ }, { "enumerant" : "StorageBuffer16BitAccess", - "value" : 4433, - "extensions" : [ "SPV_KHR_16bit_storage" ], - "version" : "1.3" - }, - { - "enumerant" : "StorageUniformBufferBlock16", + "aliases" : ["StorageUniformBufferBlock16"], "value" : 4433, "extensions" : [ "SPV_KHR_16bit_storage" ], "version" : "1.3" }, { "enumerant" : "UniformAndStorageBuffer16BitAccess", + "aliases" : ["StorageUniform16"], "value" : 4434, - "capabilities" : [ - "StorageBuffer16BitAccess", - "StorageUniformBufferBlock16" - ], - "extensions" : [ "SPV_KHR_16bit_storage" ], - "version" : "1.3" - }, - { - "enumerant" : "StorageUniform16", - "value" : 4434, - "capabilities" : [ - "StorageBuffer16BitAccess", - "StorageUniformBufferBlock16" - ], + "capabilities" : [ "StorageBuffer16BitAccess" ], "extensions" : [ "SPV_KHR_16bit_storage" ], "version" : "1.3" }, @@ -15645,6 +16184,13 @@ "extensions" : [ "SPV_KHR_ray_query" ], "version" : "None" }, + { + "enumerant" : "UntypedPointersKHR", + "value" : 4473, + "extensions" : [ "SPV_KHR_untyped_pointers" ], + "provisional" : true, + "version" : "None" + }, { "enumerant" : "RayTraversalPrimitiveCullingKHR", "value" : 4478, @@ -15736,6 +16282,7 @@ "value" : 5067, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_AMDX_shader_enqueue" ], + "provisional" : true, "version" : "None" }, { @@ -15743,7 +16290,7 @@ "value" : 5087, "extensions" : [ "SPV_KHR_quad_control" ], "version" : "None" - }, + }, { "enumerant" : "SampleMaskOverrideCoverageNV", "value" : 5249, @@ -15760,22 +16307,16 @@ }, { "enumerant" : "ShaderViewportIndexLayerEXT", + "aliases" : ["ShaderViewportIndexLayerNV"], "value" : 5254, "capabilities" : [ "MultiViewport" ], - "extensions" : [ "SPV_EXT_shader_viewport_index_layer" ], - "version" : "None" - }, - { - "enumerant" : "ShaderViewportIndexLayerNV", - "value" : 5254, - "capabilities" : [ "MultiViewport" ], - "extensions" : [ "SPV_NV_viewport_array2" ], + "extensions" : [ "SPV_EXT_shader_viewport_index_layer", "SPV_NV_viewport_array2" ], "version" : "None" }, { "enumerant" : "ShaderViewportMaskNV", "value" : 5255, - "capabilities" : [ "ShaderViewportIndexLayerNV" ], + "capabilities" : [ "ShaderViewportIndexLayerEXT" ], "extensions" : [ "SPV_NV_viewport_array2" ], "version" : "None" }, @@ -15822,36 +16363,27 @@ }, { "enumerant" : "FragmentBarycentricKHR", + "aliases" : ["FragmentBarycentricNV"], "value" : 5284, "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { - "enumerant" : "FragmentBarycentricNV", - "value" : 5284, - "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], - "version" : "None" - }, - { - "enumerant" : "ComputeDerivativeGroupQuadsNV", + "enumerant" : "ComputeDerivativeGroupQuadsKHR", + "aliases" : ["ComputeDerivativeGroupQuadsNV"], "value" : 5288, - "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ], "version" : "None" }, { "enumerant" : "FragmentDensityEXT", + "aliases" : ["ShadingRateNV"], "value" : 5291, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ], "version" : "None" }, - { - "enumerant" : "ShadingRateNV", - "value" : 5291, - "capabilities" : [ "Shader" ], - "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ], - "version" : "None" - }, { "enumerant" : "GroupNonUniformPartitionedNV", "value" : 5297, @@ -15860,12 +16392,7 @@ }, { "enumerant" : "ShaderNonUniform", - "value" : 5301, - "capabilities" : [ "Shader" ], - "version" : "1.5" - }, - { - "enumerant" : "ShaderNonUniformEXT", + "aliases" : ["ShaderNonUniformEXT"], "value" : 5301, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15873,12 +16400,7 @@ }, { "enumerant" : "RuntimeDescriptorArray", - "value" : 5302, - "capabilities" : [ "Shader" ], - "version" : "1.5" - }, - { - "enumerant" : "RuntimeDescriptorArrayEXT", + "aliases" : ["RuntimeDescriptorArrayEXT"], "value" : 5302, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15886,12 +16408,7 @@ }, { "enumerant" : "InputAttachmentArrayDynamicIndexing", - "value" : 5303, - "capabilities" : [ "InputAttachment" ], - "version" : "1.5" - }, - { - "enumerant" : "InputAttachmentArrayDynamicIndexingEXT", + "aliases" : ["InputAttachmentArrayDynamicIndexingEXT"], "value" : 5303, "capabilities" : [ "InputAttachment" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15899,12 +16416,7 @@ }, { "enumerant" : "UniformTexelBufferArrayDynamicIndexing", - "value" : 5304, - "capabilities" : [ "SampledBuffer" ], - "version" : "1.5" - }, - { - "enumerant" : "UniformTexelBufferArrayDynamicIndexingEXT", + "aliases" : ["UniformTexelBufferArrayDynamicIndexingEXT"], "value" : 5304, "capabilities" : [ "SampledBuffer" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15912,12 +16424,7 @@ }, { "enumerant" : "StorageTexelBufferArrayDynamicIndexing", - "value" : 5305, - "capabilities" : [ "ImageBuffer" ], - "version" : "1.5" - }, - { - "enumerant" : "StorageTexelBufferArrayDynamicIndexingEXT", + "aliases" : ["StorageTexelBufferArrayDynamicIndexingEXT"], "value" : 5305, "capabilities" : [ "ImageBuffer" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15925,12 +16432,7 @@ }, { "enumerant" : "UniformBufferArrayNonUniformIndexing", - "value" : 5306, - "capabilities" : [ "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "UniformBufferArrayNonUniformIndexingEXT", + "aliases" : ["UniformBufferArrayNonUniformIndexingEXT"], "value" : 5306, "capabilities" : [ "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15938,12 +16440,7 @@ }, { "enumerant" : "SampledImageArrayNonUniformIndexing", - "value" : 5307, - "capabilities" : [ "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "SampledImageArrayNonUniformIndexingEXT", + "aliases" : ["SampledImageArrayNonUniformIndexingEXT"], "value" : 5307, "capabilities" : [ "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15951,12 +16448,7 @@ }, { "enumerant" : "StorageBufferArrayNonUniformIndexing", - "value" : 5308, - "capabilities" : [ "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "StorageBufferArrayNonUniformIndexingEXT", + "aliases" : ["StorageBufferArrayNonUniformIndexingEXT"], "value" : 5308, "capabilities" : [ "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15964,12 +16456,7 @@ }, { "enumerant" : "StorageImageArrayNonUniformIndexing", - "value" : 5309, - "capabilities" : [ "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "StorageImageArrayNonUniformIndexingEXT", + "aliases" : ["StorageImageArrayNonUniformIndexingEXT"], "value" : 5309, "capabilities" : [ "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15977,12 +16464,7 @@ }, { "enumerant" : "InputAttachmentArrayNonUniformIndexing", - "value" : 5310, - "capabilities" : [ "InputAttachment", "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "InputAttachmentArrayNonUniformIndexingEXT", + "aliases" : ["InputAttachmentArrayNonUniformIndexingEXT"], "value" : 5310, "capabilities" : [ "InputAttachment", "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -15990,12 +16472,7 @@ }, { "enumerant" : "UniformTexelBufferArrayNonUniformIndexing", - "value" : 5311, - "capabilities" : [ "SampledBuffer", "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "UniformTexelBufferArrayNonUniformIndexingEXT", + "aliases" : ["UniformTexelBufferArrayNonUniformIndexingEXT"], "value" : 5311, "capabilities" : [ "SampledBuffer", "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -16003,12 +16480,7 @@ }, { "enumerant" : "StorageTexelBufferArrayNonUniformIndexing", - "value" : 5312, - "capabilities" : [ "ImageBuffer", "ShaderNonUniform" ], - "version" : "1.5" - }, - { - "enumerant" : "StorageTexelBufferArrayNonUniformIndexingEXT", + "aliases" : ["StorageTexelBufferArrayNonUniformIndexingEXT"], "value" : 5312, "capabilities" : [ "ImageBuffer", "ShaderNonUniform" ], "extensions" : [ "SPV_EXT_descriptor_indexing" ], @@ -16037,44 +16509,32 @@ }, { "enumerant" : "VulkanMemoryModel", - "value" : 5345, - "version" : "1.5" - }, - { - "enumerant" : "VulkanMemoryModelKHR", + "aliases" : ["VulkanMemoryModelKHR"], "value" : 5345, "extensions" : [ "SPV_KHR_vulkan_memory_model" ], "version" : "1.5" }, { "enumerant" : "VulkanMemoryModelDeviceScope", - "value" : 5346, - "version" : "1.5" - }, - { - "enumerant" : "VulkanMemoryModelDeviceScopeKHR", + "aliases" : ["VulkanMemoryModelDeviceScopeKHR"], "value" : 5346, "extensions" : [ "SPV_KHR_vulkan_memory_model" ], "version" : "1.5" }, { "enumerant" : "PhysicalStorageBufferAddresses", + "aliases" : ["PhysicalStorageBufferAddressesEXT"], "value" : 5347, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ], "version" : "1.5" }, { - "enumerant" : "PhysicalStorageBufferAddressesEXT", - "value" : 5347, - "capabilities" : [ "Shader" ], - "extensions" : [ "SPV_EXT_physical_storage_buffer" ], - "version" : "1.5" - }, - { - "enumerant" : "ComputeDerivativeGroupLinearNV", + "enumerant" : "ComputeDerivativeGroupLinearKHR", + "aliases" : ["ComputeDerivativeGroupLinearNV"], "value" : 5350, - "extensions" : [ "SPV_NV_compute_shader_derivatives" ], + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ], "version" : "None" }, { @@ -16121,12 +16581,7 @@ }, { "enumerant" : "DemoteToHelperInvocation", - "value" : 5379, - "capabilities" : [ "Shader" ], - "version" : "1.6" - }, - { - "enumerant" : "DemoteToHelperInvocationEXT", + "aliases" : ["DemoteToHelperInvocationEXT"], "value" : 5379, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ], @@ -16166,6 +16621,12 @@ "extensions" : [ "SPV_KHR_ray_tracing_position_fetch" ], "version" : "None" }, + { + "enumerant" : "CooperativeVectorNV", + "value" : 5394, + "extensions" : [ "SPV_NV_cooperative_vector" ], + "version" : "None" + }, { "enumerant" : "AtomicFloat16VectorNV", "value" : 5404, @@ -16185,6 +16646,67 @@ "extensions" : [ "SPV_NV_raw_access_chains" ], "version" : "None" }, + { + "enumerant" : "RayTracingSpheresGeometryNV", + "value" : 5418, + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "RayTracingLinearSweptSpheresGeometryNV", + "value" : 5419, + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "CooperativeMatrixReductionsNV", + "value" : 5430, + "extensions" : [ "SPV_NV_cooperative_matrix2" ], + "version" : "None" + }, + { + "enumerant" : "CooperativeMatrixConversionsNV", + "value" : 5431, + "extensions" : [ "SPV_NV_cooperative_matrix2" ], + "version" : "None" + }, + { + "enumerant" : "CooperativeMatrixPerElementOperationsNV", + "value" : 5432, + "extensions" : [ "SPV_NV_cooperative_matrix2" ], + "version" : "None" + }, + { + "enumerant" : "CooperativeMatrixTensorAddressingNV", + "value" : 5433, + "extensions" : [ "SPV_NV_cooperative_matrix2" ], + "version" : "None" + }, + { + "enumerant" : "CooperativeMatrixBlockLoadsNV", + "value" : 5434, + "extensions" : [ "SPV_NV_cooperative_matrix2" ], + "version" : "None" + }, + { + "enumerant" : "CooperativeVectorTrainingNV", + "value" : 5435, + "extensions" : [ "SPV_NV_cooperative_vector" ], + "version" : "None" + }, + { + "enumerant" : "RayTracingClusterAccelerationStructureNV", + "value" : 5437, + "capabilities" : [ "RayTracingKHR" ], + "extensions" : [ "SPV_NV_cluster_acceleration_structure" ], + "version" : "None" + }, + { + "enumerant" : "TensorAddressingNV", + "value" : 5439, + "extensions" : [ "SPV_NV_tensor_addressing" ], + "version" : "None" + }, { "enumerant" : "SubgroupShuffleINTEL", "value" : 5568, @@ -16224,7 +16746,6 @@ { "enumerant" : "IntegerFunctions2INTEL", "value" : 5584, - "capabilities" : [ "Shader" ], "extensions" : [ "SPV_INTEL_shader_integer_functions2" ], "version" : "None" }, @@ -16442,23 +16963,14 @@ }, { "enumerant" : "DotProductInputAll", - "value" : 6016, - "version" : "1.6" - }, - { - "enumerant" : "DotProductInputAllKHR", + "aliases" : ["DotProductInputAllKHR"], "value" : 6016, "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "enumerant" : "DotProductInput4x8Bit", - "value" : 6017, - "capabilities" : [ "Int8" ], - "version" : "1.6" - }, - { - "enumerant" : "DotProductInput4x8BitKHR", + "aliases" : ["DotProductInput4x8BitKHR"], "value" : 6017, "capabilities" : [ "Int8" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -16466,22 +16978,14 @@ }, { "enumerant" : "DotProductInput4x8BitPacked", - "value" : 6018, - "version" : "1.6" - }, - { - "enumerant" : "DotProductInput4x8BitPackedKHR", + "aliases" : ["DotProductInput4x8BitPackedKHR"], "value" : 6018, "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" }, { "enumerant" : "DotProduct", - "value" : 6019, - "version" : "1.6" - }, - { - "enumerant" : "DotProductKHR", + "aliases" : ["DotProductKHR"], "value" : 6019, "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" @@ -16542,9 +17046,10 @@ "version" : "None" }, { - "enumerant" : "OptNoneINTEL", + "enumerant" : "OptNoneEXT", + "aliases" : ["OptNoneINTEL"], "value" : 6094, - "extensions" : [ "SPV_INTEL_optnone" ], + "extensions" : [ "SPV_EXT_optnone", "SPV_INTEL_optnone" ], "version" : "None" }, { @@ -16571,6 +17076,12 @@ "extensions" : [ "SPV_INTEL_split_barrier" ], "version" : "None" }, + { + "enumerant" : "ArithmeticFenceEXT", + "value" : 6144, + "extensions" : [ "SPV_EXT_arithmetic_fence" ], + "version" : "None" + }, { "enumerant" : "FPGAClusterAttributesV2INTEL", "value" : 6150, @@ -16615,6 +17126,38 @@ "extensions": [ "SPV_INTEL_global_variable_fpga_decorations" ], "version" : "None" }, + { + "enumerant" : "SubgroupBufferPrefetchINTEL", + "value" : 6220, + "extensions": [ "SPV_INTEL_subgroup_buffer_prefetch" ], + "version" : "None" + }, + { + "enumerant" : "Subgroup2DBlockIOINTEL", + "value" : 6228, + "extensions": [ "SPV_INTEL_2d_block_io" ], + "version" : "None" + }, + { + "enumerant" : "Subgroup2DBlockTransformINTEL", + "value" : 6229, + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "extensions": [ "SPV_INTEL_2d_block_io" ], + "version" : "None" + }, + { + "enumerant" : "Subgroup2DBlockTransposeINTEL", + "value" : 6230, + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "extensions": [ "SPV_INTEL_2d_block_io" ], + "version" : "None" + }, + { + "enumerant" : "SubgroupMatrixMultiplyAccumulateINTEL", + "value" : 6236, + "extensions": [ "SPV_INTEL_subgroup_matrix_multiply_accumulate" ], + "version" : "None" + }, { "enumerant" : "GroupUniformArithmeticKHR", "value" : 6400, @@ -16623,9 +17166,9 @@ }, { "enumerant" : "MaskedGatherScatterINTEL", - "value" : 6427, - "extensions" : [ "SPV_INTEL_masked_gather_scatter"], - "version" : "None" + "value" : 6427, + "extensions" : [ "SPV_INTEL_masked_gather_scatter"], + "version" : "None" }, { "enumerant" : "CacheControlsINTEL", @@ -16707,11 +17250,7 @@ "enumerants" : [ { "enumerant" : "PackedVectorFormat4x8Bit", - "value" : 0, - "version" : "1.6" - }, - { - "enumerant" : "PackedVectorFormat4x8BitKHR", + "aliases" : ["PackedVectorFormat4x8BitKHR"], "value" : 0, "extensions" : [ "SPV_KHR_integer_dot_product" ], "version" : "1.6" @@ -16801,6 +17340,87 @@ } ] }, + { + "category" : "BitEnum", + "kind" : "CooperativeMatrixReduce", + "enumerants" : [ + { + "enumerant" : "Row", + "value" : "0x0001", + "version" : "None" + }, + { + "enumerant" : "Column", + "value" : "0x0002", + "version" : "None" + }, + { + "enumerant" : "2x2", + "value" : "0x0004", + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "TensorClampMode", + "enumerants" : [ + { + "enumerant" : "Undefined", + "value" : 0, + "version": "None" + }, + { + "enumerant" : "Constant", + "value" : 1, + "version": "None" + }, + { + "enumerant" : "ClampToEdge", + "value" : 2, + "version": "None" + }, + { + "enumerant" : "Repeat", + "value" : 3, + "version": "None" + }, + { + "enumerant" : "RepeatMirrored", + "value" : 4, + "version": "None" + } + ] + }, + { + "category" : "BitEnum", + "kind" : "TensorAddressingOperands", + "enumerants" : [ + { + "enumerant" : "None", + "value" : "0x0000", + "version" : "None" + }, + { + "enumerant" : "TensorView", + "value" : "0x0001", + "parameters" : [ + { "kind" : "IdRef" } + ], + "capabilities" : [ "CooperativeMatrixTensorAddressingNV" ], + "version" : "None" + }, + { + "enumerant" : "DecodeFunc", + "value" : "0x0002", + "parameters" : [ + { "kind" : "IdRef" } + ], + "capabilities" : [ "CooperativeMatrixBlockLoadsNV" ], + "version" : "None" + } + ] + }, { "category" : "ValueEnum", "kind" : "InitializationModeQualifier", @@ -16897,6 +17517,200 @@ } ] }, + { + "category" : "BitEnum", + "kind" : "MatrixMultiplyAccumulateOperands", + "enumerants" : [ + { + "enumerant" : "None", + "value" : "0x0", + "version" : "None" + }, + { + "enumerant" : "MatrixASignedComponentsINTEL", + "value" : "0x1", + "version" : "None" + }, + { + "enumerant" : "MatrixBSignedComponentsINTEL", + "value" : "0x2", + "version" : "None" + }, + { + "enumerant" : "MatrixCBFloat16INTEL", + "value" : "0x4", + "version" : "None" + }, + { + "enumerant" : "MatrixResultBFloat16INTEL", + "value" : "0x8", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedInt8INTEL", + "value" : "0x10", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedInt8INTEL", + "value" : "0x20", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedInt4INTEL", + "value" : "0x40", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedInt4INTEL", + "value" : "0x80", + "version" : "None" + }, + { + "enumerant" : "MatrixATF32INTEL", + "value" : "0x100", + "version" : "None" + }, + { + "enumerant" : "MatrixBTF32INTEL", + "value" : "0x200", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedFloat16INTEL", + "value" : "0x400", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedFloat16INTEL", + "value" : "0x800", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedBFloat16INTEL", + "value" : "0x1000", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedBFloat16INTEL", + "value" : "0x2000", + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "FPEncoding", + "enumerants" : [ + ] + }, + { + "category" : "ValueEnum", + "kind" : "CooperativeVectorMatrixLayout", + "enumerants" : [ + { + "enumerant" : "RowMajorNV", + "value" : 0, + "version" : "None" + }, + { + "enumerant" : "ColumnMajorNV", + "value" : 1, + "version" : "None" + }, + { + "enumerant" : "InferencingOptimalNV", + "value" : 2, + "version" : "None" + }, + { + "enumerant" : "TrainingOptimalNV", + "value" : 3, + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "ComponentType", + "enumerants" : [ + { + "enumerant" : "Float16NV", + "value" : 0, + "version" : "None" + }, + { + "enumerant" : "Float32NV", + "value" : 1, + "version" : "None" + }, + { + "enumerant" : "Float64NV", + "value" : 2, + "version" : "None" + }, + { + "enumerant" : "SignedInt8NV", + "value" : 3, + "version" : "None" + }, + { + "enumerant" : "SignedInt16NV", + "value" : 4, + "version" : "None" + }, + { + "enumerant" : "SignedInt32NV", + "value" : 5, + "version" : "None" + }, + { + "enumerant" : "SignedInt64NV", + "value" : 6, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt8NV", + "value" : 7, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt16NV", + "value" : 8, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt32NV", + "value" : 9, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt64NV", + "value" : 10, + "version" : "None" + }, + { + "enumerant" : "SignedInt8PackedNV", + "value" : 1000491000, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt8PackedNV", + "value" : 1000491001, + "version" : "None" + }, + { + "enumerant" : "FloatE4M3NV", + "value" : 1000491002, + "version" : "None" + }, + { + "enumerant" : "FloatE5M2NV", + "value" : 1000491003, + "version" : "None" + } + ] + }, { "category" : "Id", "kind" : "IdResultType", diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index 06ce712c6..65b7ae143 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -3859,7 +3859,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray SetDst(opdata.result, result); break; } - case Op::DemoteToHelperInvocationEXT: + case Op::DemoteToHelperInvocation: { helperInvocation = true; break; @@ -4387,12 +4387,12 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray } // KHR_integer_dotproduct - case Op::SDotKHR: - case Op::UDotKHR: - case Op::SUDotKHR: - case Op::SDotAccSatKHR: - case Op::UDotAccSatKHR: - case Op::SUDotAccSatKHR: + case Op::SDot: + case Op::UDot: + case Op::SUDot: + case Op::SDotAccSat: + case Op::UDotAccSat: + case Op::SUDotAccSat: // legacy/OpenCL/AMD group operations case Op::GroupAll: @@ -4602,9 +4602,9 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::ImageBlockMatchWindowSADQCOM: case Op::ImageBlockMatchGatherSSDQCOM: case Op::ImageBlockMatchGatherSADQCOM: - case Op::FinalizeNodePayloadsAMDX: + case Op::AllocateNodePayloadsAMDX: case Op::FinishWritingNodePayloadAMDX: - case Op::InitializeNodePayloadsAMDX: + case Op::NodePayloadArrayLengthAMDX: case Op::FetchMicroTriangleVertexBarycentricNV: case Op::FetchMicroTriangleVertexPositionNV: case Op::CompositeConstructContinuedINTEL: @@ -4679,6 +4679,20 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::DecorateId: case Op::ModuleProcessed: case Op::ExecutionModeId: + case Op::TypeUntypedPointerKHR: + case Op::UntypedVariableKHR: + case Op::UntypedAccessChainKHR: + case Op::UntypedInBoundsAccessChainKHR: + case Op::UntypedInBoundsPtrAccessChainKHR: + case Op::UntypedPtrAccessChainKHR: + case Op::UntypedArrayLengthKHR: + case Op::UntypedPrefetchKHR: + case Op::TypeNodePayloadArrayAMDX: + case Op::ConstantStringAMDX: + case Op::SpecConstantStringAMDX: + case Op::TypeCooperativeVectorNV: + case Op::TypeTensorLayoutNV: + case Op::TypeTensorViewNV: { RDCERR("Encountered unexpected global SPIR-V operation %s", ToStr(opdata.op).c_str()); break; @@ -4749,6 +4763,53 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::WritePipeBlockingINTEL: case Op::ControlBarrierArriveINTEL: case Op::ControlBarrierWaitINTEL: + case Op::ArithmeticFenceEXT: + case Op::SubgroupMatrixMultiplyAccumulateINTEL: + case Op::EnqueueNodePayloadsAMDX: + case Op::IsNodePayloadValidAMDX: + case Op::SubgroupBlockPrefetchINTEL: + case Op::Subgroup2DBlockLoadINTEL: + case Op::Subgroup2DBlockLoadTransformINTEL: + case Op::Subgroup2DBlockLoadTransposeINTEL: + case Op::Subgroup2DBlockPrefetchINTEL: + case Op::Subgroup2DBlockStoreINTEL: + case Op::CreateTensorLayoutNV: + case Op::CreateTensorViewNV: + case Op::TensorViewSetClipNV: + case Op::TensorViewSetDimensionNV: + case Op::TensorViewSetStrideNV: + case Op::TensorLayoutSetDimensionNV: + case Op::TensorLayoutSetBlockSizeNV: + case Op::TensorLayoutSetClampValueNV: + case Op::TensorLayoutSetStrideNV: + case Op::TensorLayoutSliceNV: + case Op::RayQueryGetClusterIdNV: + case Op::RayQueryIsSphereHitNV: + case Op::RayQueryIsLSSHitNV: + case Op::RayQueryGetIntersectionLSSHitValueNV: + case Op::RayQueryGetIntersectionLSSPositionsNV: + case Op::RayQueryGetIntersectionLSSRadiiNV: + case Op::RayQueryGetIntersectionSpherePositionNV: + case Op::RayQueryGetIntersectionSphereRadiusNV: + case Op::HitObjectIsLSSHitNV: + case Op::HitObjectIsSphereHitNV: + case Op::HitObjectGetLSSPositionsNV: + case Op::HitObjectGetLSSRadiiNV: + case Op::HitObjectGetSpherePositionNV: + case Op::HitObjectGetSphereRadiusNV: + case Op::HitObjectGetClusterIdNV: + case Op::CooperativeMatrixConvertNV: + case Op::CooperativeMatrixReduceNV: + case Op::CooperativeMatrixLoadTensorNV: + case Op::CooperativeMatrixStoreTensorNV: + case Op::CooperativeMatrixPerElementOpNV: + case Op::CooperativeMatrixTransposeNV: + case Op::CooperativeVectorLoadNV: + case Op::CooperativeVectorStoreNV: + case Op::CooperativeVectorMatrixMulAddNV: + case Op::CooperativeVectorMatrixMulNV: + case Op::CooperativeVectorOuterProductAccumulateNV: + case Op::CooperativeVectorReduceSumAccumulateNV: { // these are kernel only RDCERR("Encountered unexpected kernel SPIR-V operation %s", ToStr(opdata.op).c_str()); diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp index 1ef74a7a0..35027cd49 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -575,7 +575,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::StorageTexelBufferArrayNonUniformIndexing: case Capability::VulkanMemoryModel: case Capability::VulkanMemoryModelDeviceScope: - case Capability::DemoteToHelperInvocationEXT: + case Capability::DemoteToHelperInvocation: case Capability::AtomicFloat32AddEXT: case Capability::AtomicFloat32MinMaxEXT: case Capability::AtomicFloat16AddEXT: @@ -672,10 +672,10 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const } // integer dot product - case Capability::DotProductKHR: - case Capability::DotProductInput4x8BitKHR: - case Capability::DotProductInput4x8BitPackedKHR: - case Capability::DotProductInputAllKHR: + case Capability::DotProduct: + case Capability::DotProductInput4x8Bit: + case Capability::DotProductInput4x8BitPacked: + case Capability::DotProductInputAll: { supported = false; break; @@ -696,6 +696,28 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const break; } + // barycentric + case Capability::FragmentBarycentricKHR: + { + supported = false; + break; + } + + // compute shader derivatives + case Capability::ComputeDerivativeGroupQuadsKHR: + case Capability::ComputeDerivativeGroupLinearKHR: + { + supported = false; + break; + } + + // untyped pointers + case Capability::UntypedPointersKHR: + { + supported = false; + break; + } + // no plans to support these - mostly Kernel/OpenCL related or vendor extensions case Capability::Addresses: case Capability::Linkage: @@ -722,11 +744,8 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::ShaderStereoViewNV: case Capability::PerViewAttributesNV: case Capability::MeshShadingNV: - case Capability::FragmentBarycentricNV: case Capability::ImageFootprintNV: - case Capability::ComputeDerivativeGroupQuadsNV: case Capability::GroupNonUniformPartitionedNV: - case Capability::ComputeDerivativeGroupLinearNV: case Capability::CooperativeMatrixNV: case Capability::ShaderSMBuiltinsNV: case Capability::SubgroupShuffleINTEL: @@ -746,7 +765,6 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::UnstructuredLoopControlsINTEL: case Capability::KernelAttributesINTEL: case Capability::BlockingPipesINTEL: - case Capability::OptNoneINTEL: case Capability::RayTracingMotionBlurNV: case Capability::RoundToInfinityINTEL: case Capability::FloatingPointModeINTEL: @@ -792,6 +810,13 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::AtomicFloat16VectorNV: case Capability::RayTracingDisplacementMicromapNV: case Capability::CooperativeMatrixKHR: + case Capability::CooperativeVectorNV: + case Capability::CooperativeVectorTrainingNV: + case Capability::CooperativeMatrixReductionsNV: + case Capability::CooperativeMatrixConversionsNV: + case Capability::CooperativeMatrixPerElementOperationsNV: + case Capability::CooperativeMatrixTensorAddressingNV: + case Capability::CooperativeMatrixBlockLoadsNV: case Capability::FloatControls2: case Capability::FPGAClusterAttributesV2INTEL: case Capability::FPMaxErrorINTEL: @@ -800,9 +825,20 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::CacheControlsINTEL: case Capability::RegisterLimitsINTEL: case Capability::GlobalVariableHostAccessINTEL: + case Capability::SubgroupBufferPrefetchINTEL: + case Capability::Subgroup2DBlockIOINTEL: + case Capability::Subgroup2DBlockTransformINTEL: + case Capability::Subgroup2DBlockTransposeINTEL: + case Capability::SubgroupMatrixMultiplyAccumulateINTEL: case Capability::CooperativeMatrixLayoutsARM: case Capability::RawAccessChainsNV: case Capability::ReplicatedCompositesEXT: + case Capability::RayTracingSpheresGeometryNV: + case Capability::RayTracingLinearSweptSpheresGeometryNV: + case Capability::RayTracingClusterAccelerationStructureNV: + case Capability::TensorAddressingNV: + case Capability::OptNoneEXT: + case Capability::ArithmeticFenceEXT: case Capability::Max: case Capability::Invalid: { @@ -3598,8 +3634,7 @@ uint32_t Debugger::WalkVariable( } case DataType::PointerType: { - RDCASSERT((dataTypes[type.id].pointerType.storage == StorageClass::PhysicalStorageBuffer) || - (dataTypes[type.id].pointerType.storage == StorageClass::PhysicalStorageBufferEXT)); + RDCASSERT(dataTypes[type.id].pointerType.storage == StorageClass::PhysicalStorageBuffer); if(outVar) { outVar->type = VarType::GPUPointer; diff --git a/renderdoc/driver/shaders/spirv/spirv_gen.cpp b/renderdoc/driver/shaders/spirv/spirv_gen.cpp index 8cd9cdf19..579889ebd 100644 --- a/renderdoc/driver/shaders/spirv/spirv_gen.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_gen.cpp @@ -162,7 +162,7 @@ rdcstr DoStringise(const rdcspv::FunctionControl &el) STRINGISE_BITFIELD_CLASS_BIT(DontInline); STRINGISE_BITFIELD_CLASS_BIT(Pure); STRINGISE_BITFIELD_CLASS_BIT(Const); - STRINGISE_BITFIELD_CLASS_BIT(OptNoneINTEL); + STRINGISE_BITFIELD_CLASS_BIT(OptNoneEXT); } END_BITFIELD_STRINGISE(); } @@ -288,6 +288,7 @@ rdcstr DoStringise(const rdcspv::SourceLanguage &el) STRINGISE_ENUM_CLASS(WGSL); STRINGISE_ENUM_CLASS(Slang); STRINGISE_ENUM_CLASS(Zig); + STRINGISE_ENUM_CLASS(Rust); } END_ENUM_STRINGISE(); } @@ -398,6 +399,7 @@ rdcstr DoStringise(const rdcspv::ExecutionMode &el) STRINGISE_ENUM_CLASS(EarlyAndLateFragmentTestsAMD); STRINGISE_ENUM_CLASS(StencilRefReplacingEXT); STRINGISE_ENUM_CLASS(CoalescingAMDX); + STRINGISE_ENUM_CLASS(IsApiEntryAMDX); STRINGISE_ENUM_CLASS(MaxNodeRecursionAMDX); STRINGISE_ENUM_CLASS(StaticNumWorkgroupsAMDX); STRINGISE_ENUM_CLASS(ShaderIndexAMDX); @@ -410,10 +412,11 @@ rdcstr DoStringise(const rdcspv::ExecutionMode &el) STRINGISE_ENUM_CLASS(StencilRefLessBackAMD); STRINGISE_ENUM_CLASS(QuadDerivativesKHR); STRINGISE_ENUM_CLASS(RequireFullQuadsKHR); + STRINGISE_ENUM_CLASS(SharesInputWithAMDX); STRINGISE_ENUM_CLASS(OutputLinesEXT); STRINGISE_ENUM_CLASS(OutputPrimitivesEXT); - STRINGISE_ENUM_CLASS(DerivativeGroupQuadsNV); - STRINGISE_ENUM_CLASS(DerivativeGroupLinearNV); + STRINGISE_ENUM_CLASS(DerivativeGroupQuadsKHR); + STRINGISE_ENUM_CLASS(DerivativeGroupLinearKHR); STRINGISE_ENUM_CLASS(OutputTrianglesEXT); STRINGISE_ENUM_CLASS(PixelInterlockOrderedEXT); STRINGISE_ENUM_CLASS(PixelInterlockUnorderedEXT); @@ -463,7 +466,6 @@ rdcstr DoStringise(const rdcspv::StorageClass &el) STRINGISE_ENUM_CLASS(StorageBuffer); STRINGISE_ENUM_CLASS(TileImageEXT); STRINGISE_ENUM_CLASS(NodePayloadAMDX); - STRINGISE_ENUM_CLASS(NodeOutputPayloadAMDX); STRINGISE_ENUM_CLASS(CallableDataKHR); STRINGISE_ENUM_CLASS(IncomingCallableDataKHR); STRINGISE_ENUM_CLASS(RayPayloadKHR); @@ -626,6 +628,7 @@ rdcstr DoStringise(const rdcspv::ImageChannelDataType &el) STRINGISE_ENUM_CLASS(UnormInt101010_2); STRINGISE_ENUM_CLASS(UnsignedIntRaw10EXT); STRINGISE_ENUM_CLASS(UnsignedIntRaw12EXT); + STRINGISE_ENUM_CLASS(UnormInt2_101010EXT); } END_ENUM_STRINGISE(); } @@ -812,6 +815,10 @@ rdcstr DoStringise(const rdcspv::Decoration &el) STRINGISE_ENUM_CLASS(NodeMaxPayloadsAMDX); STRINGISE_ENUM_CLASS(TrackFinishWritingAMDX); STRINGISE_ENUM_CLASS(PayloadNodeNameAMDX); + STRINGISE_ENUM_CLASS(PayloadNodeBaseIndexAMDX); + STRINGISE_ENUM_CLASS(PayloadNodeSparseArrayAMDX); + STRINGISE_ENUM_CLASS(PayloadNodeArraySizeAMDX); + STRINGISE_ENUM_CLASS(PayloadDispatchIndirectAMDX); STRINGISE_ENUM_CLASS(OverrideCoverageNV); STRINGISE_ENUM_CLASS(PassthroughNV); STRINGISE_ENUM_CLASS(ViewportRelativeNV); @@ -967,7 +974,7 @@ rdcstr DoStringise(const rdcspv::BuiltIn &el) STRINGISE_ENUM_CLASS(BaryCoordSmoothSampleAMD); STRINGISE_ENUM_CLASS(BaryCoordPullModelAMD); STRINGISE_ENUM_CLASS(FragStencilRefEXT); - STRINGISE_ENUM_CLASS(CoalescedInputCountAMDX); + STRINGISE_ENUM_CLASS(RemainingRecursionLevelsAMDX); STRINGISE_ENUM_CLASS(ShaderIndexAMDX); STRINGISE_ENUM_CLASS(ViewportMaskNV); STRINGISE_ENUM_CLASS(SecondaryPositionNV); @@ -1010,12 +1017,19 @@ rdcstr DoStringise(const rdcspv::BuiltIn &el) STRINGISE_ENUM_CLASS(HitMicroTriangleVertexBarycentricsNV); STRINGISE_ENUM_CLASS(IncomingRayFlagsKHR); STRINGISE_ENUM_CLASS(RayGeometryIndexKHR); + STRINGISE_ENUM_CLASS(HitIsSphereNV); + STRINGISE_ENUM_CLASS(HitIsLSSNV); + STRINGISE_ENUM_CLASS(HitSpherePositionNV); STRINGISE_ENUM_CLASS(WarpsPerSMNV); STRINGISE_ENUM_CLASS(SMCountNV); STRINGISE_ENUM_CLASS(WarpIDNV); STRINGISE_ENUM_CLASS(SMIDNV); + STRINGISE_ENUM_CLASS(HitLSSPositionsNV); STRINGISE_ENUM_CLASS(HitKindFrontFacingMicroTriangleNV); STRINGISE_ENUM_CLASS(HitKindBackFacingMicroTriangleNV); + STRINGISE_ENUM_CLASS(HitSphereRadiusNV); + STRINGISE_ENUM_CLASS(HitLSSRadiiNV); + STRINGISE_ENUM_CLASS(ClusterIDNV); STRINGISE_ENUM_CLASS(CullMaskKHR); } END_ENUM_STRINGISE(); @@ -1172,6 +1186,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(RoundingModeRTZ); STRINGISE_ENUM_CLASS(RayQueryProvisionalKHR); STRINGISE_ENUM_CLASS(RayQueryKHR); + STRINGISE_ENUM_CLASS(UntypedPointersKHR); STRINGISE_ENUM_CLASS(RayTraversalPrimitiveCullingKHR); STRINGISE_ENUM_CLASS(RayTracingKHR); STRINGISE_ENUM_CLASS(TextureSampleWeightedQCOM); @@ -1197,7 +1212,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(ImageFootprintNV); STRINGISE_ENUM_CLASS(MeshShadingEXT); STRINGISE_ENUM_CLASS(FragmentBarycentricKHR); - STRINGISE_ENUM_CLASS(ComputeDerivativeGroupQuadsNV); + STRINGISE_ENUM_CLASS(ComputeDerivativeGroupQuadsKHR); STRINGISE_ENUM_CLASS(FragmentDensityEXT); STRINGISE_ENUM_CLASS(GroupNonUniformPartitionedNV); STRINGISE_ENUM_CLASS(ShaderNonUniform); @@ -1217,7 +1232,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(VulkanMemoryModel); STRINGISE_ENUM_CLASS(VulkanMemoryModelDeviceScope); STRINGISE_ENUM_CLASS(PhysicalStorageBufferAddresses); - STRINGISE_ENUM_CLASS(ComputeDerivativeGroupLinearNV); + STRINGISE_ENUM_CLASS(ComputeDerivativeGroupLinearKHR); STRINGISE_ENUM_CLASS(RayTracingProvisionalKHR); STRINGISE_ENUM_CLASS(FragmentShaderSampleInterlockEXT); STRINGISE_ENUM_CLASS(FragmentShaderShadingRateInterlockEXT); @@ -1229,9 +1244,20 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(ShaderInvocationReorderNV); STRINGISE_ENUM_CLASS(BindlessTextureNV); STRINGISE_ENUM_CLASS(RayQueryPositionFetchKHR); + STRINGISE_ENUM_CLASS(CooperativeVectorNV); STRINGISE_ENUM_CLASS(AtomicFloat16VectorNV); STRINGISE_ENUM_CLASS(RayTracingDisplacementMicromapNV); STRINGISE_ENUM_CLASS(RawAccessChainsNV); + STRINGISE_ENUM_CLASS(RayTracingSpheresGeometryNV); + STRINGISE_ENUM_CLASS(RayTracingLinearSweptSpheresGeometryNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixReductionsNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixConversionsNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixPerElementOperationsNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixTensorAddressingNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixBlockLoadsNV); + STRINGISE_ENUM_CLASS(CooperativeVectorTrainingNV); + STRINGISE_ENUM_CLASS(RayTracingClusterAccelerationStructureNV); + STRINGISE_ENUM_CLASS(TensorAddressingNV); STRINGISE_ENUM_CLASS(SubgroupShuffleINTEL); STRINGISE_ENUM_CLASS(SubgroupBufferBlockIOINTEL); STRINGISE_ENUM_CLASS(SubgroupImageBlockIOINTEL); @@ -1287,11 +1313,12 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(AtomicFloat32AddEXT); STRINGISE_ENUM_CLASS(AtomicFloat64AddEXT); STRINGISE_ENUM_CLASS(LongCompositesINTEL); - STRINGISE_ENUM_CLASS(OptNoneINTEL); + STRINGISE_ENUM_CLASS(OptNoneEXT); STRINGISE_ENUM_CLASS(AtomicFloat16AddEXT); STRINGISE_ENUM_CLASS(DebugInfoModuleINTEL); STRINGISE_ENUM_CLASS(BFloat16ConversionINTEL); STRINGISE_ENUM_CLASS(SplitBarrierINTEL); + STRINGISE_ENUM_CLASS(ArithmeticFenceEXT); STRINGISE_ENUM_CLASS(FPGAClusterAttributesV2INTEL); STRINGISE_ENUM_CLASS(FPGAKernelAttributesv2INTEL); STRINGISE_ENUM_CLASS(FPMaxErrorINTEL); @@ -1299,6 +1326,11 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(FPGAArgumentInterfacesINTEL); STRINGISE_ENUM_CLASS(GlobalVariableHostAccessINTEL); STRINGISE_ENUM_CLASS(GlobalVariableFPGADecorationsINTEL); + STRINGISE_ENUM_CLASS(SubgroupBufferPrefetchINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockIOINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockTransformINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockTransposeINTEL); + STRINGISE_ENUM_CLASS(SubgroupMatrixMultiplyAccumulateINTEL); STRINGISE_ENUM_CLASS(GroupUniformArithmeticKHR); STRINGISE_ENUM_CLASS(MaskedGatherScatterINTEL); STRINGISE_ENUM_CLASS(CacheControlsINTEL); @@ -1392,6 +1424,45 @@ rdcstr DoStringise(const rdcspv::CooperativeMatrixUse &el) END_ENUM_STRINGISE(); } +template <> +rdcstr DoStringise(const rdcspv::CooperativeMatrixReduce &el) +{ + BEGIN_BITFIELD_STRINGISE(rdcspv::CooperativeMatrixReduce); + { + STRINGISE_BITFIELD_CLASS_BIT(Row); + STRINGISE_BITFIELD_CLASS_BIT(Column); + STRINGISE_BITFIELD_CLASS_BIT(_2x2); + } + END_BITFIELD_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::TensorClampMode &el) +{ + BEGIN_ENUM_STRINGISE(rdcspv::TensorClampMode); + { + STRINGISE_ENUM_CLASS(Undefined); + STRINGISE_ENUM_CLASS(Constant); + STRINGISE_ENUM_CLASS(ClampToEdge); + STRINGISE_ENUM_CLASS(Repeat); + STRINGISE_ENUM_CLASS(RepeatMirrored); + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::TensorAddressingOperands &el) +{ + BEGIN_BITFIELD_STRINGISE(rdcspv::TensorAddressingOperands); + { + STRINGISE_BITFIELD_CLASS_VALUE(None); + + STRINGISE_BITFIELD_CLASS_BIT(TensorView); + STRINGISE_BITFIELD_CLASS_BIT(DecodeFunc); + } + END_BITFIELD_STRINGISE(); +} + template <> rdcstr DoStringise(const rdcspv::InitializationModeQualifier &el) { @@ -1440,6 +1511,71 @@ rdcstr DoStringise(const rdcspv::NamedMaximumNumberOfRegisters &el) END_ENUM_STRINGISE(); } +template <> +rdcstr DoStringise(const rdcspv::MatrixMultiplyAccumulateOperands &el) +{ + BEGIN_BITFIELD_STRINGISE(rdcspv::MatrixMultiplyAccumulateOperands); + { + STRINGISE_BITFIELD_CLASS_VALUE(None); + + STRINGISE_BITFIELD_CLASS_BIT(MatrixASignedComponentsINTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixBSignedComponentsINTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixCBFloat16INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixResultBFloat16INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixAPackedInt8INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixBPackedInt8INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixAPackedInt4INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixBPackedInt4INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixATF32INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixBTF32INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixAPackedFloat16INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixBPackedFloat16INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixAPackedBFloat16INTEL); + STRINGISE_BITFIELD_CLASS_BIT(MatrixBPackedBFloat16INTEL); + } + END_BITFIELD_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::FPEncoding &el) { return "?"; } + +template <> +rdcstr DoStringise(const rdcspv::CooperativeVectorMatrixLayout &el) +{ + BEGIN_ENUM_STRINGISE(rdcspv::CooperativeVectorMatrixLayout); + { + STRINGISE_ENUM_CLASS(RowMajorNV); + STRINGISE_ENUM_CLASS(ColumnMajorNV); + STRINGISE_ENUM_CLASS(InferencingOptimalNV); + STRINGISE_ENUM_CLASS(TrainingOptimalNV); + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::ComponentType &el) +{ + BEGIN_ENUM_STRINGISE(rdcspv::ComponentType); + { + STRINGISE_ENUM_CLASS(Float16NV); + STRINGISE_ENUM_CLASS(Float32NV); + STRINGISE_ENUM_CLASS(Float64NV); + STRINGISE_ENUM_CLASS(SignedInt8NV); + STRINGISE_ENUM_CLASS(SignedInt16NV); + STRINGISE_ENUM_CLASS(SignedInt32NV); + STRINGISE_ENUM_CLASS(SignedInt64NV); + STRINGISE_ENUM_CLASS(UnsignedInt8NV); + STRINGISE_ENUM_CLASS(UnsignedInt16NV); + STRINGISE_ENUM_CLASS(UnsignedInt32NV); + STRINGISE_ENUM_CLASS(UnsignedInt64NV); + STRINGISE_ENUM_CLASS(SignedInt8PackedNV); + STRINGISE_ENUM_CLASS(UnsignedInt8PackedNV); + STRINGISE_ENUM_CLASS(FloatE4M3NV); + STRINGISE_ENUM_CLASS(FloatE5M2NV); + } + END_ENUM_STRINGISE(); +} + template <> rdcstr DoStringise(const rdcspv::Op &el) { @@ -1793,8 +1929,16 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(DepthAttachmentReadEXT); STRINGISE_ENUM_CLASS(StencilAttachmentReadEXT); STRINGISE_ENUM_CLASS(TerminateInvocation); + STRINGISE_ENUM_CLASS(TypeUntypedPointerKHR); + STRINGISE_ENUM_CLASS(UntypedVariableKHR); + STRINGISE_ENUM_CLASS(UntypedAccessChainKHR); + STRINGISE_ENUM_CLASS(UntypedInBoundsAccessChainKHR); STRINGISE_ENUM_CLASS(SubgroupBallotKHR); STRINGISE_ENUM_CLASS(SubgroupFirstInvocationKHR); + STRINGISE_ENUM_CLASS(UntypedPtrAccessChainKHR); + STRINGISE_ENUM_CLASS(UntypedInBoundsPtrAccessChainKHR); + STRINGISE_ENUM_CLASS(UntypedArrayLengthKHR); + STRINGISE_ENUM_CLASS(UntypedPrefetchKHR); STRINGISE_ENUM_CLASS(SubgroupAllKHR); STRINGISE_ENUM_CLASS(SubgroupAnyKHR); STRINGISE_ENUM_CLASS(SubgroupAllEqualKHR); @@ -1846,9 +1990,14 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(FragmentMaskFetchAMD); STRINGISE_ENUM_CLASS(FragmentFetchAMD); STRINGISE_ENUM_CLASS(ReadClockKHR); - STRINGISE_ENUM_CLASS(FinalizeNodePayloadsAMDX); + STRINGISE_ENUM_CLASS(AllocateNodePayloadsAMDX); + STRINGISE_ENUM_CLASS(EnqueueNodePayloadsAMDX); + STRINGISE_ENUM_CLASS(TypeNodePayloadArrayAMDX); STRINGISE_ENUM_CLASS(FinishWritingNodePayloadAMDX); - STRINGISE_ENUM_CLASS(InitializeNodePayloadsAMDX); + STRINGISE_ENUM_CLASS(NodePayloadArrayLengthAMDX); + STRINGISE_ENUM_CLASS(IsNodePayloadValidAMDX); + STRINGISE_ENUM_CLASS(ConstantStringAMDX); + STRINGISE_ENUM_CLASS(SpecConstantStringAMDX); STRINGISE_ENUM_CLASS(GroupNonUniformQuadAllKHR); STRINGISE_ENUM_CLASS(GroupNonUniformQuadAnyKHR); STRINGISE_ENUM_CLASS(HitObjectRecordHitMotionNV); @@ -1885,12 +2034,20 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(ReorderThreadWithHintNV); STRINGISE_ENUM_CLASS(TypeHitObjectNV); STRINGISE_ENUM_CLASS(ImageSampleFootprintNV); + STRINGISE_ENUM_CLASS(TypeCooperativeVectorNV); + STRINGISE_ENUM_CLASS(CooperativeVectorMatrixMulNV); + STRINGISE_ENUM_CLASS(CooperativeVectorOuterProductAccumulateNV); + STRINGISE_ENUM_CLASS(CooperativeVectorReduceSumAccumulateNV); + STRINGISE_ENUM_CLASS(CooperativeVectorMatrixMulAddNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixConvertNV); STRINGISE_ENUM_CLASS(EmitMeshTasksEXT); STRINGISE_ENUM_CLASS(SetMeshOutputsEXT); STRINGISE_ENUM_CLASS(GroupNonUniformPartitionNV); STRINGISE_ENUM_CLASS(WritePackedPrimitiveIndices4x8NV); STRINGISE_ENUM_CLASS(FetchMicroTriangleVertexPositionNV); STRINGISE_ENUM_CLASS(FetchMicroTriangleVertexBarycentricNV); + STRINGISE_ENUM_CLASS(CooperativeVectorLoadNV); + STRINGISE_ENUM_CLASS(CooperativeVectorStoreNV); STRINGISE_ENUM_CLASS(ReportIntersectionKHR); STRINGISE_ENUM_CLASS(IgnoreIntersectionNV); STRINGISE_ENUM_CLASS(TerminateRayNV); @@ -1900,6 +2057,8 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(RayQueryGetIntersectionTriangleVertexPositionsKHR); STRINGISE_ENUM_CLASS(TypeAccelerationStructureKHR); STRINGISE_ENUM_CLASS(ExecuteCallableNV); + STRINGISE_ENUM_CLASS(RayQueryGetClusterIdNV); + STRINGISE_ENUM_CLASS(HitObjectGetClusterIdNV); STRINGISE_ENUM_CLASS(TypeCooperativeMatrixNV); STRINGISE_ENUM_CLASS(CooperativeMatrixLoadNV); STRINGISE_ENUM_CLASS(CooperativeMatrixStoreNV); @@ -1907,8 +2066,25 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(CooperativeMatrixLengthNV); STRINGISE_ENUM_CLASS(BeginInvocationInterlockEXT); STRINGISE_ENUM_CLASS(EndInvocationInterlockEXT); + STRINGISE_ENUM_CLASS(CooperativeMatrixReduceNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixLoadTensorNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixStoreTensorNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixPerElementOpNV); + STRINGISE_ENUM_CLASS(TypeTensorLayoutNV); + STRINGISE_ENUM_CLASS(TypeTensorViewNV); + STRINGISE_ENUM_CLASS(CreateTensorLayoutNV); + STRINGISE_ENUM_CLASS(TensorLayoutSetDimensionNV); + STRINGISE_ENUM_CLASS(TensorLayoutSetStrideNV); + STRINGISE_ENUM_CLASS(TensorLayoutSliceNV); + STRINGISE_ENUM_CLASS(TensorLayoutSetClampValueNV); + STRINGISE_ENUM_CLASS(CreateTensorViewNV); + STRINGISE_ENUM_CLASS(TensorViewSetDimensionNV); + STRINGISE_ENUM_CLASS(TensorViewSetStrideNV); STRINGISE_ENUM_CLASS(DemoteToHelperInvocation); STRINGISE_ENUM_CLASS(IsHelperInvocationEXT); + STRINGISE_ENUM_CLASS(TensorViewSetClipNV); + STRINGISE_ENUM_CLASS(TensorLayoutSetBlockSizeNV); + STRINGISE_ENUM_CLASS(CooperativeMatrixTransposeNV); STRINGISE_ENUM_CLASS(ConvertUToImageNV); STRINGISE_ENUM_CLASS(ConvertUToSamplerNV); STRINGISE_ENUM_CLASS(ConvertImageToUNV); @@ -1917,6 +2093,19 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(ConvertSampledImageToUNV); STRINGISE_ENUM_CLASS(SamplerImageAddressingModeNV); STRINGISE_ENUM_CLASS(RawAccessChainNV); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionSpherePositionNV); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionSphereRadiusNV); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionLSSPositionsNV); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionLSSRadiiNV); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionLSSHitValueNV); + STRINGISE_ENUM_CLASS(HitObjectGetSpherePositionNV); + STRINGISE_ENUM_CLASS(HitObjectGetSphereRadiusNV); + STRINGISE_ENUM_CLASS(HitObjectGetLSSPositionsNV); + STRINGISE_ENUM_CLASS(HitObjectGetLSSRadiiNV); + STRINGISE_ENUM_CLASS(HitObjectIsSphereHitNV); + STRINGISE_ENUM_CLASS(HitObjectIsLSSHitNV); + STRINGISE_ENUM_CLASS(RayQueryIsSphereHitNV); + STRINGISE_ENUM_CLASS(RayQueryIsLSSHitNV); STRINGISE_ENUM_CLASS(SubgroupShuffleINTEL); STRINGISE_ENUM_CLASS(SubgroupShuffleDownINTEL); STRINGISE_ENUM_CLASS(SubgroupShuffleUpINTEL); @@ -1978,6 +2167,14 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(ConvertBF16ToFINTEL); STRINGISE_ENUM_CLASS(ControlBarrierArriveINTEL); STRINGISE_ENUM_CLASS(ControlBarrierWaitINTEL); + STRINGISE_ENUM_CLASS(ArithmeticFenceEXT); + STRINGISE_ENUM_CLASS(SubgroupBlockPrefetchINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockLoadINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockLoadTransformINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockLoadTransposeINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockPrefetchINTEL); + STRINGISE_ENUM_CLASS(Subgroup2DBlockStoreINTEL); + STRINGISE_ENUM_CLASS(SubgroupMatrixMultiplyAccumulateINTEL); STRINGISE_ENUM_CLASS(GroupIMulKHR); STRINGISE_ENUM_CLASS(GroupFMulKHR); STRINGISE_ENUM_CLASS(GroupBitwiseAndKHR); @@ -2187,6 +2384,8 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + ToStr(el.roundingModeRTE) + ")"; break; case ExecutionMode::RoundingModeRTZ: ret += "(" + ToStr(el.roundingModeRTZ) + ")"; break; + case ExecutionMode::IsApiEntryAMDX: + ret += "(" + idName(el.isApiEntryAMDX) + ")"; break; case ExecutionMode::MaxNodeRecursionAMDX: ret += "(" + idName(el.maxNodeRecursionAMDX) + ")"; break; case ExecutionMode::StaticNumWorkgroupsAMDX: @@ -2195,6 +2394,8 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + idName(el.shaderIndexAMDX) + ")"; break; case ExecutionMode::MaxNumWorkgroupsAMDX: ret += "(" + idName(el.maxNumWorkgroupsAMDX.xsize) + ", " + idName(el.maxNumWorkgroupsAMDX.ysize) + ", " + idName(el.maxNumWorkgroupsAMDX.zsize) + ")"; break; + case ExecutionMode::SharesInputWithAMDX: + ret += "(" + idName(el.sharesInputWithAMDX.nodeName) + ", " + idName(el.sharesInputWithAMDX.shaderIndex) + ")"; break; case ExecutionMode::OutputPrimitivesEXT: ret += "(" + ToStr(el.outputPrimitivesEXT) + ")"; break; case ExecutionMode::SharedLocalMemorySizeINTEL: @@ -2291,6 +2492,12 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + idName(el.nodeSharesPayloadLimitsWithAMDX) + ")"; break; case Decoration::NodeMaxPayloadsAMDX: ret += "(" + idName(el.nodeMaxPayloadsAMDX) + ")"; break; + case Decoration::PayloadNodeNameAMDX: + ret += "(" + idName(el.payloadNodeNameAMDX) + ")"; break; + case Decoration::PayloadNodeBaseIndexAMDX: + ret += "(" + idName(el.payloadNodeBaseIndexAMDX) + ")"; break; + case Decoration::PayloadNodeArraySizeAMDX: + ret += "(" + idName(el.payloadNodeArraySizeAMDX) + ")"; break; case Decoration::SecondaryViewportRelativeNV: ret += "(" + ToStr(el.secondaryViewportRelativeNV) + ")"; break; case Decoration::SIMTCallINTEL: @@ -2376,6 +2583,25 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: return ret; } +template<> +rdcstr ParamToStr(const std::function &idName, const rdcspv::TensorAddressingOperandsAndParamDatas &el) +{ + rdcstr ret; + + if(el.flags & TensorAddressingOperands::None) + ret += "None" ", "; + if(el.flags & TensorAddressingOperands::TensorView) + ret += "TensorView" "(" + idName(el.tensorView) + ")" ", "; + if(el.flags & TensorAddressingOperands::DecodeFunc) + ret += "DecodeFunc" "(" + idName(el.decodeFunc) + ")" ", "; + + // remove trailing ", " + if(ret.size() > 2) + ret.erase(ret.size()-2, 2); + + return ret; +} + void OpDecoder::ForEachID(const ConstIter &it, const std::function &callback) { if (rdcspv::ManualForEachID(it, callback)) @@ -4292,6 +4518,29 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function inline MemoryAccessAndParamDatas DecodeParam(const ConstIter &it, uint32_t &word) { @@ -775,6 +773,19 @@ struct ExecutionModeParam } }; +template<> +struct ExecutionModeParam +{ + Id isApiEntryAMDX; + ExecutionModeParam(Id isApiEntryAMDXParam) { isApiEntryAMDX = isApiEntryAMDXParam; } + operator ExecutionModeAndParamData() + { + ExecutionModeAndParamData ret(ExecutionMode::IsApiEntryAMDX); + ret.isApiEntryAMDX = isApiEntryAMDX; + return ret; + } +}; + template<> struct ExecutionModeParam { @@ -831,6 +842,20 @@ struct ExecutionModeParam } }; +template<> +struct ExecutionModeParam +{ + SharesInputWithAMDXParams sharesInputWithAMDX; + ExecutionModeParam(Id nodeName, Id shaderIndex) { sharesInputWithAMDX.nodeName = nodeName; sharesInputWithAMDX.shaderIndex = shaderIndex; } + operator ExecutionModeAndParamData() + { + ExecutionModeAndParamData ret(ExecutionMode::SharesInputWithAMDX); + ret.sharesInputWithAMDX.nodeName = sharesInputWithAMDX.nodeName; + ret.sharesInputWithAMDX.shaderIndex = sharesInputWithAMDX.shaderIndex; + return ret; + } +}; + template<> struct ExecutionModeParam { @@ -1134,6 +1159,10 @@ inline ExecutionModeAndParamData DecodeParam(const ConstIter &it, uint32_t &word ret.roundingModeRTZ = (uint32_t)it.word(word); word += 1; break; + case ExecutionMode::IsApiEntryAMDX: + ret.isApiEntryAMDX = Id::fromWord(it.word(word)); + word += 1; + break; case ExecutionMode::MaxNodeRecursionAMDX: ret.maxNodeRecursionAMDX = Id::fromWord(it.word(word)); word += 1; @@ -1154,6 +1183,11 @@ inline ExecutionModeAndParamData DecodeParam(const ConstIter &it, uint32_t &word ret.maxNumWorkgroupsAMDX.zsize = Id::fromWord(it.word(word+2)); word += 3; break; + case ExecutionMode::SharesInputWithAMDX: + ret.sharesInputWithAMDX.nodeName = Id::fromWord(it.word(word+0)); + ret.sharesInputWithAMDX.shaderIndex = Id::fromWord(it.word(word+1)); + word += 2; + break; case ExecutionMode::OutputPrimitivesEXT: ret.outputPrimitivesEXT = (uint32_t)it.word(word); word += 1; @@ -1288,6 +1322,9 @@ inline void EncodeParam(rdcarray &words, const ExecutionModeAndParamDa case ExecutionMode::RoundingModeRTZ: words.push_back((uint32_t)param.roundingModeRTZ); break; + case ExecutionMode::IsApiEntryAMDX: + words.push_back(param.isApiEntryAMDX.value()); + break; case ExecutionMode::MaxNodeRecursionAMDX: words.push_back(param.maxNodeRecursionAMDX.value()); break; @@ -1304,6 +1341,10 @@ inline void EncodeParam(rdcarray &words, const ExecutionModeAndParamDa words.push_back(param.maxNumWorkgroupsAMDX.ysize.value()); words.push_back(param.maxNumWorkgroupsAMDX.zsize.value()); break; + case ExecutionMode::SharesInputWithAMDX: + words.push_back(param.sharesInputWithAMDX.nodeName.value()); + words.push_back(param.sharesInputWithAMDX.shaderIndex.value()); + break; case ExecutionMode::OutputPrimitivesEXT: words.push_back((uint32_t)param.outputPrimitivesEXT); break; @@ -1381,10 +1422,12 @@ inline uint16_t ExtraWordCount(const ExecutionMode executionMode) case ExecutionMode::SignedZeroInfNanPreserve: return 1; case ExecutionMode::RoundingModeRTE: return 1; case ExecutionMode::RoundingModeRTZ: return 1; + case ExecutionMode::IsApiEntryAMDX: return 1; case ExecutionMode::MaxNodeRecursionAMDX: return 1; case ExecutionMode::StaticNumWorkgroupsAMDX: return 3; case ExecutionMode::ShaderIndexAMDX: return 1; case ExecutionMode::MaxNumWorkgroupsAMDX: return 3; + case ExecutionMode::SharesInputWithAMDX: return 2; case ExecutionMode::OutputPrimitivesEXT: return 1; case ExecutionMode::SharedLocalMemorySizeINTEL: return 1; case ExecutionMode::RoundingModeRTPINTEL: return 1; @@ -1753,6 +1796,45 @@ struct DecorationParam } }; +template<> +struct DecorationParam +{ + Id payloadNodeNameAMDX; + DecorationParam(Id payloadNodeNameAMDXParam) { payloadNodeNameAMDX = payloadNodeNameAMDXParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::PayloadNodeNameAMDX); + ret.payloadNodeNameAMDX = payloadNodeNameAMDX; + return ret; + } +}; + +template<> +struct DecorationParam +{ + Id payloadNodeBaseIndexAMDX; + DecorationParam(Id payloadNodeBaseIndexAMDXParam) { payloadNodeBaseIndexAMDX = payloadNodeBaseIndexAMDXParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::PayloadNodeBaseIndexAMDX); + ret.payloadNodeBaseIndexAMDX = payloadNodeBaseIndexAMDX; + return ret; + } +}; + +template<> +struct DecorationParam +{ + Id payloadNodeArraySizeAMDX; + DecorationParam(Id payloadNodeArraySizeAMDXParam) { payloadNodeArraySizeAMDX = payloadNodeArraySizeAMDXParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::PayloadNodeArraySizeAMDX); + ret.payloadNodeArraySizeAMDX = payloadNodeArraySizeAMDX; + return ret; + } +}; + template<> struct DecorationParam { @@ -2375,6 +2457,18 @@ inline DecorationAndParamData DecodeParam(const ConstIter &it, uint32_t &word) ret.nodeMaxPayloadsAMDX = Id::fromWord(it.word(word)); word += 1; break; + case Decoration::PayloadNodeNameAMDX: + ret.payloadNodeNameAMDX = Id::fromWord(it.word(word)); + word += 1; + break; + case Decoration::PayloadNodeBaseIndexAMDX: + ret.payloadNodeBaseIndexAMDX = Id::fromWord(it.word(word)); + word += 1; + break; + case Decoration::PayloadNodeArraySizeAMDX: + ret.payloadNodeArraySizeAMDX = Id::fromWord(it.word(word)); + word += 1; + break; case Decoration::SecondaryViewportRelativeNV: ret.secondaryViewportRelativeNV = (uint32_t)it.word(word); word += 1; @@ -2621,6 +2715,15 @@ inline void EncodeParam(rdcarray &words, const DecorationAndParamData case Decoration::NodeMaxPayloadsAMDX: words.push_back(param.nodeMaxPayloadsAMDX.value()); break; + case Decoration::PayloadNodeNameAMDX: + words.push_back(param.payloadNodeNameAMDX.value()); + break; + case Decoration::PayloadNodeBaseIndexAMDX: + words.push_back(param.payloadNodeBaseIndexAMDX.value()); + break; + case Decoration::PayloadNodeArraySizeAMDX: + words.push_back(param.payloadNodeArraySizeAMDX.value()); + break; case Decoration::SecondaryViewportRelativeNV: words.push_back((uint32_t)param.secondaryViewportRelativeNV); break; @@ -2778,6 +2881,9 @@ inline uint16_t ExtraWordCount(const Decoration decoration) case Decoration::MaxByteOffsetId: return 1; case Decoration::NodeSharesPayloadLimitsWithAMDX: return 1; case Decoration::NodeMaxPayloadsAMDX: return 1; + case Decoration::PayloadNodeNameAMDX: return 1; + case Decoration::PayloadNodeBaseIndexAMDX: return 1; + case Decoration::PayloadNodeArraySizeAMDX: return 1; case Decoration::SecondaryViewportRelativeNV: return 1; case Decoration::SIMTCallINTEL: return 1; case Decoration::FuncParamIOKindINTEL: return 1; @@ -2846,6 +2952,52 @@ inline uint16_t OptionalWordCount(const CooperativeMatrixLayout val) { return va inline uint16_t OptionalWordCount(const CooperativeMatrixUse val) { return val != CooperativeMatrixUse::Invalid ? 1 : 0; } +inline uint16_t OptionalWordCount(const TensorClampMode val) { return val != TensorClampMode::Invalid ? 1 : 0; } + +template<> +inline TensorAddressingOperandsAndParamDatas DecodeParam(const ConstIter &it, uint32_t &word) +{ + if(word >= it.size()) return TensorAddressingOperandsAndParamDatas(); + + TensorAddressingOperandsAndParamDatas ret((TensorAddressingOperands)it.word(word)); + word++; + if(ret.flags & TensorAddressingOperands::TensorView) + { + ret.tensorView = Id::fromWord(it.word(word)); + word += 1; + } + if(ret.flags & TensorAddressingOperands::DecodeFunc) + { + ret.decodeFunc = Id::fromWord(it.word(word)); + word += 1; + } + return ret; +} + +inline void EncodeParam(rdcarray &words, const TensorAddressingOperandsAndParamDatas ¶m) +{ + words.push_back((uint32_t)param.flags); + if(param.flags & TensorAddressingOperands::TensorView) + { + words.push_back(param.tensorView.value()); + } + if(param.flags & TensorAddressingOperands::DecodeFunc) + { + words.push_back(param.decodeFunc.value()); + } +} + +inline uint16_t ExtraWordCount(const TensorAddressingOperands tensorAddressingOperands) +{ + switch(tensorAddressingOperands) + { + case TensorAddressingOperands::TensorView: return 1; + case TensorAddressingOperands::DecodeFunc: return 1; + default: break; + } + return 0; +} + inline uint16_t OptionalWordCount(const InitializationModeQualifier val) { return val != InitializationModeQualifier::Invalid ? 1 : 0; } inline uint16_t OptionalWordCount(const LoadCacheControl val) { return val != LoadCacheControl::Invalid ? 1 : 0; } @@ -2854,6 +3006,14 @@ inline uint16_t OptionalWordCount(const StoreCacheControl val) { return val != S inline uint16_t OptionalWordCount(const NamedMaximumNumberOfRegisters val) { return val != NamedMaximumNumberOfRegisters::Invalid ? 1 : 0; } +inline uint16_t OptionalWordCount(const MatrixMultiplyAccumulateOperands val) { return val != MatrixMultiplyAccumulateOperands::None ? 1 : 0; } + +inline uint16_t OptionalWordCount(const FPEncoding val) { return val != FPEncoding::Invalid ? 1 : 0; } + +inline uint16_t OptionalWordCount(const CooperativeVectorMatrixLayout val) { return val != CooperativeVectorMatrixLayout::Invalid ? 1 : 0; } + +inline uint16_t OptionalWordCount(const ComponentType val) { return val != ComponentType::Invalid ? 1 : 0; } + inline uint16_t ExtraWordCount(const rdcstr &val) { @@ -3422,22 +3582,39 @@ struct OpTypeFloat { OpTypeFloat(const ConstIter &it) { - memcpy(this, it.words(), sizeof(*this)); + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->result = Id::fromWord(it.word(1)); + this->width = (uint32_t)it.word(2); + this->floatingPointEncoding = (it.size() > 3) ? (FPEncoding)it.word(3) : FPEncoding::Invalid; } - OpTypeFloat(IdResult result, uint32_t width) + OpTypeFloat(IdResult result, uint32_t width, FPEncoding floatingPointEncoding = FPEncoding::Invalid) : op(Op::TypeFloat) - , wordCount(FixedWordSize) + , wordCount(MinWordSize + OptionalWordCount(floatingPointEncoding)) { this->result = result; this->width = width; + this->floatingPointEncoding = floatingPointEncoding; + } + operator Operation() const + { + rdcarray words; + words.push_back(result.value()); + words.push_back((uint32_t)width); + if(floatingPointEncoding != FPEncoding::Invalid) words.push_back((uint32_t)floatingPointEncoding); + return Operation(OpCode, words); } static constexpr Op OpCode = Op::TypeFloat; - static constexpr uint16_t FixedWordSize = 3U; + static constexpr uint16_t MinWordSize = 3U; Op op; uint16_t wordCount; IdResult result; uint32_t width; + FPEncoding floatingPointEncoding; + + bool HasFloatingPointEncoding() const { return wordCount > 3; } }; struct OpTypeVector @@ -13269,6 +13446,174 @@ struct OpTerminateInvocation // no operands }; +struct OpTypeUntypedPointerKHR +{ + OpTypeUntypedPointerKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTypeUntypedPointerKHR(IdResult result, StorageClass storageClass) + : op(Op::TypeUntypedPointerKHR) + , wordCount(FixedWordSize) + { + this->result = result; + this->storageClass = storageClass; + } + + static constexpr Op OpCode = Op::TypeUntypedPointerKHR; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + IdResult result; + StorageClass storageClass; +}; + +struct OpUntypedVariableKHR +{ + OpUntypedVariableKHR(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->storageClass = (StorageClass)it.word(3); + this->dataType = (it.size() > 4) ? Id::fromWord(it.word(4)) : Id(); + this->initializer = (it.size() > 5) ? Id::fromWord(it.word(5)) : Id(); + } + OpUntypedVariableKHR(IdResultType resultType, IdResult result, StorageClass storageClass, Id dataType = Id(), Id initializer = Id()) + : op(Op::UntypedVariableKHR) + , wordCount(MinWordSize + OptionalWordCount(dataType) + OptionalWordCount(initializer)) + { + this->resultType = resultType; + this->result = result; + this->storageClass = storageClass; + this->dataType = dataType; + this->initializer = initializer; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back((uint32_t)storageClass); + if(dataType != Id()) words.push_back(dataType.value()); + if(initializer != Id()) words.push_back(initializer.value()); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::UntypedVariableKHR; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + StorageClass storageClass; + Id dataType; + Id initializer; + + bool HasDataType() const { return wordCount > 4; } + bool HasInitializer() const { return wordCount > 5; } +}; + +struct OpUntypedAccessChainKHR +{ + OpUntypedAccessChainKHR(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->baseType = Id::fromWord(it.word(3)); + this->base = Id::fromWord(it.word(4)); + word = 5; + this->indexes = MultiParam(it, word); + } + OpUntypedAccessChainKHR(IdResultType resultType, IdResult result, Id baseType, Id base, const rdcarray &indexes = {}) + : op(Op::UntypedAccessChainKHR) + , wordCount(MinWordSize + MultiWordCount(indexes)) + { + this->resultType = resultType; + this->result = result; + this->baseType = baseType; + this->base = base; + this->indexes = indexes; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(baseType.value()); + words.push_back(base.value()); + for(size_t i=0; i < indexes.size(); i++) + { + words.push_back(indexes[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::UntypedAccessChainKHR; + static constexpr uint16_t MinWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id baseType; + Id base; + rdcarray indexes; +}; + +struct OpUntypedInBoundsAccessChainKHR +{ + OpUntypedInBoundsAccessChainKHR(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->baseType = Id::fromWord(it.word(3)); + this->base = Id::fromWord(it.word(4)); + word = 5; + this->indexes = MultiParam(it, word); + } + OpUntypedInBoundsAccessChainKHR(IdResultType resultType, IdResult result, Id baseType, Id base, const rdcarray &indexes = {}) + : op(Op::UntypedInBoundsAccessChainKHR) + , wordCount(MinWordSize + MultiWordCount(indexes)) + { + this->resultType = resultType; + this->result = result; + this->baseType = baseType; + this->base = base; + this->indexes = indexes; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(baseType.value()); + words.push_back(base.value()); + for(size_t i=0; i < indexes.size(); i++) + { + words.push_back(indexes[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::UntypedInBoundsAccessChainKHR; + static constexpr uint16_t MinWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id baseType; + Id base; + rdcarray indexes; +}; + struct OpSubgroupBallotKHR { OpSubgroupBallotKHR(const ConstIter &it) @@ -13317,6 +13662,189 @@ struct OpSubgroupFirstInvocationKHR Id value; }; +struct OpUntypedPtrAccessChainKHR +{ + OpUntypedPtrAccessChainKHR(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->baseType = Id::fromWord(it.word(3)); + this->base = Id::fromWord(it.word(4)); + this->element = Id::fromWord(it.word(5)); + word = 6; + this->indexes = MultiParam(it, word); + } + OpUntypedPtrAccessChainKHR(IdResultType resultType, IdResult result, Id baseType, Id base, Id element, const rdcarray &indexes = {}) + : op(Op::UntypedPtrAccessChainKHR) + , wordCount(MinWordSize + MultiWordCount(indexes)) + { + this->resultType = resultType; + this->result = result; + this->baseType = baseType; + this->base = base; + this->element = element; + this->indexes = indexes; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(baseType.value()); + words.push_back(base.value()); + words.push_back(element.value()); + for(size_t i=0; i < indexes.size(); i++) + { + words.push_back(indexes[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::UntypedPtrAccessChainKHR; + static constexpr uint16_t MinWordSize = 6U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id baseType; + Id base; + Id element; + rdcarray indexes; +}; + +struct OpUntypedInBoundsPtrAccessChainKHR +{ + OpUntypedInBoundsPtrAccessChainKHR(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->baseType = Id::fromWord(it.word(3)); + this->base = Id::fromWord(it.word(4)); + this->element = Id::fromWord(it.word(5)); + word = 6; + this->indexes = MultiParam(it, word); + } + OpUntypedInBoundsPtrAccessChainKHR(IdResultType resultType, IdResult result, Id baseType, Id base, Id element, const rdcarray &indexes = {}) + : op(Op::UntypedInBoundsPtrAccessChainKHR) + , wordCount(MinWordSize + MultiWordCount(indexes)) + { + this->resultType = resultType; + this->result = result; + this->baseType = baseType; + this->base = base; + this->element = element; + this->indexes = indexes; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(baseType.value()); + words.push_back(base.value()); + words.push_back(element.value()); + for(size_t i=0; i < indexes.size(); i++) + { + words.push_back(indexes[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::UntypedInBoundsPtrAccessChainKHR; + static constexpr uint16_t MinWordSize = 6U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id baseType; + Id base; + Id element; + rdcarray indexes; +}; + +struct OpUntypedArrayLengthKHR +{ + OpUntypedArrayLengthKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpUntypedArrayLengthKHR(IdResultType resultType, IdResult result, Id structure, Id pointer, uint32_t arraymember) + : op(Op::UntypedArrayLengthKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->structure = structure; + this->pointer = pointer; + this->arraymember = arraymember; + } + + static constexpr Op OpCode = Op::UntypedArrayLengthKHR; + static constexpr uint16_t FixedWordSize = 6U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id structure; + Id pointer; + uint32_t arraymember; +}; + +struct OpUntypedPrefetchKHR +{ + OpUntypedPrefetchKHR(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->pointerType = Id::fromWord(it.word(1)); + this->numBytes = Id::fromWord(it.word(2)); + this->rW = (it.size() > 3) ? Id::fromWord(it.word(3)) : Id(); + this->locality = (it.size() > 4) ? Id::fromWord(it.word(4)) : Id(); + this->cacheType = (it.size() > 5) ? Id::fromWord(it.word(5)) : Id(); + } + OpUntypedPrefetchKHR(Id pointerType, Id numBytes, Id rW = Id(), Id locality = Id(), Id cacheType = Id()) + : op(Op::UntypedPrefetchKHR) + , wordCount(MinWordSize + OptionalWordCount(rW) + OptionalWordCount(locality) + OptionalWordCount(cacheType)) + { + this->pointerType = pointerType; + this->numBytes = numBytes; + this->rW = rW; + this->locality = locality; + this->cacheType = cacheType; + } + operator Operation() const + { + rdcarray words; + words.push_back(pointerType.value()); + words.push_back(numBytes.value()); + if(rW != Id()) words.push_back(rW.value()); + if(locality != Id()) words.push_back(locality.value()); + if(cacheType != Id()) words.push_back(cacheType.value()); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::UntypedPrefetchKHR; + static constexpr uint16_t MinWordSize = 3U; + Op op; + uint16_t wordCount; + Id pointerType; + Id numBytes; + Id rW; + Id locality; + Id cacheType; + + bool HasRW() const { return wordCount > 3; } + bool HasLocality() const { return wordCount > 4; } + bool HasCacheType() const { return wordCount > 5; } +}; + struct OpSubgroupAllKHR { OpSubgroupAllKHR(const ConstIter &it) @@ -14879,26 +15407,76 @@ struct OpReadClockKHR IdScope scope; }; -struct OpFinalizeNodePayloadsAMDX +struct OpAllocateNodePayloadsAMDX { - OpFinalizeNodePayloadsAMDX(const ConstIter &it) + OpAllocateNodePayloadsAMDX(const ConstIter &it) { memcpy(this, it.words(), sizeof(*this)); } - OpFinalizeNodePayloadsAMDX(Id payloadArray) - : op(Op::FinalizeNodePayloadsAMDX) + OpAllocateNodePayloadsAMDX(IdResultType resultType, IdResult result, IdScope visibility, Id payloadCount, Id nodeIndex) + : op(Op::AllocateNodePayloadsAMDX) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->visibility = visibility; + this->payloadCount = payloadCount; + this->nodeIndex = nodeIndex; + } + + static constexpr Op OpCode = Op::AllocateNodePayloadsAMDX; + static constexpr uint16_t FixedWordSize = 6U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + IdScope visibility; + Id payloadCount; + Id nodeIndex; +}; + +struct OpEnqueueNodePayloadsAMDX +{ + OpEnqueueNodePayloadsAMDX(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpEnqueueNodePayloadsAMDX(Id payloadArray) + : op(Op::EnqueueNodePayloadsAMDX) , wordCount(FixedWordSize) { this->payloadArray = payloadArray; } - static constexpr Op OpCode = Op::FinalizeNodePayloadsAMDX; + static constexpr Op OpCode = Op::EnqueueNodePayloadsAMDX; static constexpr uint16_t FixedWordSize = 2U; Op op; uint16_t wordCount; Id payloadArray; }; +struct OpTypeNodePayloadArrayAMDX +{ + OpTypeNodePayloadArrayAMDX(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTypeNodePayloadArrayAMDX(IdResult result, Id payloadType) + : op(Op::TypeNodePayloadArrayAMDX) + , wordCount(FixedWordSize) + { + this->result = result; + this->payloadType = payloadType; + } + + static constexpr Op OpCode = Op::TypeNodePayloadArrayAMDX; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + IdResult result; + Id payloadType; +}; + struct OpFinishWritingNodePayloadAMDX { OpFinishWritingNodePayloadAMDX(const ConstIter &it) @@ -14923,32 +15501,124 @@ struct OpFinishWritingNodePayloadAMDX Id payload; }; -struct OpInitializeNodePayloadsAMDX +struct OpNodePayloadArrayLengthAMDX { - OpInitializeNodePayloadsAMDX(const ConstIter &it) + OpNodePayloadArrayLengthAMDX(const ConstIter &it) { memcpy(this, it.words(), sizeof(*this)); } - OpInitializeNodePayloadsAMDX(Id payloadArray, IdScope visibility, Id payloadCount, Id nodeIndex) - : op(Op::InitializeNodePayloadsAMDX) + OpNodePayloadArrayLengthAMDX(IdResultType resultType, IdResult result, Id payloadArray) + : op(Op::NodePayloadArrayLengthAMDX) , wordCount(FixedWordSize) { + this->resultType = resultType; + this->result = result; this->payloadArray = payloadArray; - this->visibility = visibility; - this->payloadCount = payloadCount; + } + + static constexpr Op OpCode = Op::NodePayloadArrayLengthAMDX; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id payloadArray; +}; + +struct OpIsNodePayloadValidAMDX +{ + OpIsNodePayloadValidAMDX(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpIsNodePayloadValidAMDX(IdResultType resultType, IdResult result, Id payloadType, Id nodeIndex) + : op(Op::IsNodePayloadValidAMDX) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->payloadType = payloadType; this->nodeIndex = nodeIndex; } - static constexpr Op OpCode = Op::InitializeNodePayloadsAMDX; + static constexpr Op OpCode = Op::IsNodePayloadValidAMDX; static constexpr uint16_t FixedWordSize = 5U; Op op; uint16_t wordCount; - Id payloadArray; - IdScope visibility; - Id payloadCount; + IdResultType resultType; + IdResult result; + Id payloadType; Id nodeIndex; }; +struct OpConstantStringAMDX +{ + OpConstantStringAMDX(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->result = Id::fromWord(it.word(1)); + word = 2; + this->literalString = DecodeParam(it, word); + } + OpConstantStringAMDX(IdResult result, rdcstr literalString) + : op(Op::ConstantStringAMDX) + , wordCount(MinWordSize + ExtraWordCount(literalString)) + { + this->result = result; + this->literalString = literalString; + } + operator Operation() const + { + rdcarray words; + words.push_back(result.value()); + EncodeParam(words, literalString); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::ConstantStringAMDX; + static constexpr uint16_t MinWordSize = 3U; + Op op; + uint16_t wordCount; + IdResult result; + rdcstr literalString; +}; + +struct OpSpecConstantStringAMDX +{ + OpSpecConstantStringAMDX(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->result = Id::fromWord(it.word(1)); + word = 2; + this->literalString = DecodeParam(it, word); + } + OpSpecConstantStringAMDX(IdResult result, rdcstr literalString) + : op(Op::SpecConstantStringAMDX) + , wordCount(MinWordSize + ExtraWordCount(literalString)) + { + this->result = result; + this->literalString = literalString; + } + operator Operation() const + { + rdcarray words; + words.push_back(result.value()); + EncodeParam(words, literalString); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::SpecConstantStringAMDX; + static constexpr uint16_t MinWordSize = 3U; + Op op; + uint16_t wordCount; + IdResult result; + rdcstr literalString; +}; + struct OpGroupNonUniformQuadAllKHR { OpGroupNonUniformQuadAllKHR(const ConstIter &it) @@ -15977,6 +16647,305 @@ struct OpImageSampleFootprintNV ImageOperandsAndParamDatas imageOperands; }; +struct OpTypeCooperativeVectorNV +{ + OpTypeCooperativeVectorNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTypeCooperativeVectorNV(IdResult result, Id componentType, Id componentCount) + : op(Op::TypeCooperativeVectorNV) + , wordCount(FixedWordSize) + { + this->result = result; + this->componentType = componentType; + this->componentCount = componentCount; + } + + static constexpr Op OpCode = Op::TypeCooperativeVectorNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResult result; + Id componentType; + Id componentCount; +}; + +struct OpCooperativeVectorMatrixMulNV +{ + OpCooperativeVectorMatrixMulNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->input = Id::fromWord(it.word(3)); + this->inputInterpretation = Id::fromWord(it.word(4)); + this->matrix = Id::fromWord(it.word(5)); + this->matrixOffset = Id::fromWord(it.word(6)); + this->matrixInterpretation = Id::fromWord(it.word(7)); + this->m = Id::fromWord(it.word(8)); + this->k = Id::fromWord(it.word(9)); + this->memoryLayout = Id::fromWord(it.word(10)); + this->transpose = Id::fromWord(it.word(11)); + this->matrixStride = (it.size() > 12) ? Id::fromWord(it.word(12)) : Id(); + this->cooperativeMatrixOperands = (it.size() > 13) ? (CooperativeMatrixOperands)it.word(13) : CooperativeMatrixOperands::NoneKHR; + } + OpCooperativeVectorMatrixMulNV(IdResultType resultType, IdResult result, Id input, Id inputInterpretation, Id matrix, Id matrixOffset, Id matrixInterpretation, Id m, Id k, Id memoryLayout, Id transpose, Id matrixStride = Id(), CooperativeMatrixOperands cooperativeMatrixOperands = CooperativeMatrixOperands::NoneKHR) + : op(Op::CooperativeVectorMatrixMulNV) + , wordCount(MinWordSize + OptionalWordCount(matrixStride) + OptionalWordCount(cooperativeMatrixOperands)) + { + this->resultType = resultType; + this->result = result; + this->input = input; + this->inputInterpretation = inputInterpretation; + this->matrix = matrix; + this->matrixOffset = matrixOffset; + this->matrixInterpretation = matrixInterpretation; + this->m = m; + this->k = k; + this->memoryLayout = memoryLayout; + this->transpose = transpose; + this->matrixStride = matrixStride; + this->cooperativeMatrixOperands = cooperativeMatrixOperands; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(input.value()); + words.push_back(inputInterpretation.value()); + words.push_back(matrix.value()); + words.push_back(matrixOffset.value()); + words.push_back(matrixInterpretation.value()); + words.push_back(m.value()); + words.push_back(k.value()); + words.push_back(memoryLayout.value()); + words.push_back(transpose.value()); + if(matrixStride != Id()) words.push_back(matrixStride.value()); + if(cooperativeMatrixOperands != CooperativeMatrixOperands::NoneKHR) words.push_back((uint32_t)cooperativeMatrixOperands); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeVectorMatrixMulNV; + static constexpr uint16_t MinWordSize = 12U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id input; + Id inputInterpretation; + Id matrix; + Id matrixOffset; + Id matrixInterpretation; + Id m; + Id k; + Id memoryLayout; + Id transpose; + Id matrixStride; + CooperativeMatrixOperands cooperativeMatrixOperands; + + bool HasMatrixStride() const { return wordCount > 12; } + bool HasCooperativeMatrixOperands() const { return wordCount > 13; } +}; + +struct OpCooperativeVectorOuterProductAccumulateNV +{ + OpCooperativeVectorOuterProductAccumulateNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->pointer = Id::fromWord(it.word(1)); + this->offset = Id::fromWord(it.word(2)); + this->a = Id::fromWord(it.word(3)); + this->b = Id::fromWord(it.word(4)); + this->memoryLayout = Id::fromWord(it.word(5)); + this->matrixInterpretation = Id::fromWord(it.word(6)); + this->matrixStride = (it.size() > 7) ? Id::fromWord(it.word(7)) : Id(); + } + OpCooperativeVectorOuterProductAccumulateNV(Id pointer, Id offset, Id a, Id b, Id memoryLayout, Id matrixInterpretation, Id matrixStride = Id()) + : op(Op::CooperativeVectorOuterProductAccumulateNV) + , wordCount(MinWordSize + OptionalWordCount(matrixStride)) + { + this->pointer = pointer; + this->offset = offset; + this->a = a; + this->b = b; + this->memoryLayout = memoryLayout; + this->matrixInterpretation = matrixInterpretation; + this->matrixStride = matrixStride; + } + operator Operation() const + { + rdcarray words; + words.push_back(pointer.value()); + words.push_back(offset.value()); + words.push_back(a.value()); + words.push_back(b.value()); + words.push_back(memoryLayout.value()); + words.push_back(matrixInterpretation.value()); + if(matrixStride != Id()) words.push_back(matrixStride.value()); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeVectorOuterProductAccumulateNV; + static constexpr uint16_t MinWordSize = 7U; + Op op; + uint16_t wordCount; + Id pointer; + Id offset; + Id a; + Id b; + Id memoryLayout; + Id matrixInterpretation; + Id matrixStride; + + bool HasMatrixStride() const { return wordCount > 7; } +}; + +struct OpCooperativeVectorReduceSumAccumulateNV +{ + OpCooperativeVectorReduceSumAccumulateNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpCooperativeVectorReduceSumAccumulateNV(Id pointer, Id offset, Id v) + : op(Op::CooperativeVectorReduceSumAccumulateNV) + , wordCount(FixedWordSize) + { + this->pointer = pointer; + this->offset = offset; + this->v = v; + } + + static constexpr Op OpCode = Op::CooperativeVectorReduceSumAccumulateNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + Id pointer; + Id offset; + Id v; +}; + +struct OpCooperativeVectorMatrixMulAddNV +{ + OpCooperativeVectorMatrixMulAddNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->input = Id::fromWord(it.word(3)); + this->inputInterpretation = Id::fromWord(it.word(4)); + this->matrix = Id::fromWord(it.word(5)); + this->matrixOffset = Id::fromWord(it.word(6)); + this->matrixInterpretation = Id::fromWord(it.word(7)); + this->bias = Id::fromWord(it.word(8)); + this->biasOffset = Id::fromWord(it.word(9)); + this->biasInterpretation = Id::fromWord(it.word(10)); + this->m = Id::fromWord(it.word(11)); + this->k = Id::fromWord(it.word(12)); + this->memoryLayout = Id::fromWord(it.word(13)); + this->transpose = Id::fromWord(it.word(14)); + this->matrixStride = (it.size() > 15) ? Id::fromWord(it.word(15)) : Id(); + this->cooperativeMatrixOperands = (it.size() > 16) ? (CooperativeMatrixOperands)it.word(16) : CooperativeMatrixOperands::NoneKHR; + } + OpCooperativeVectorMatrixMulAddNV(IdResultType resultType, IdResult result, Id input, Id inputInterpretation, Id matrix, Id matrixOffset, Id matrixInterpretation, Id bias, Id biasOffset, Id biasInterpretation, Id m, Id k, Id memoryLayout, Id transpose, Id matrixStride = Id(), CooperativeMatrixOperands cooperativeMatrixOperands = CooperativeMatrixOperands::NoneKHR) + : op(Op::CooperativeVectorMatrixMulAddNV) + , wordCount(MinWordSize + OptionalWordCount(matrixStride) + OptionalWordCount(cooperativeMatrixOperands)) + { + this->resultType = resultType; + this->result = result; + this->input = input; + this->inputInterpretation = inputInterpretation; + this->matrix = matrix; + this->matrixOffset = matrixOffset; + this->matrixInterpretation = matrixInterpretation; + this->bias = bias; + this->biasOffset = biasOffset; + this->biasInterpretation = biasInterpretation; + this->m = m; + this->k = k; + this->memoryLayout = memoryLayout; + this->transpose = transpose; + this->matrixStride = matrixStride; + this->cooperativeMatrixOperands = cooperativeMatrixOperands; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(input.value()); + words.push_back(inputInterpretation.value()); + words.push_back(matrix.value()); + words.push_back(matrixOffset.value()); + words.push_back(matrixInterpretation.value()); + words.push_back(bias.value()); + words.push_back(biasOffset.value()); + words.push_back(biasInterpretation.value()); + words.push_back(m.value()); + words.push_back(k.value()); + words.push_back(memoryLayout.value()); + words.push_back(transpose.value()); + if(matrixStride != Id()) words.push_back(matrixStride.value()); + if(cooperativeMatrixOperands != CooperativeMatrixOperands::NoneKHR) words.push_back((uint32_t)cooperativeMatrixOperands); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeVectorMatrixMulAddNV; + static constexpr uint16_t MinWordSize = 15U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id input; + Id inputInterpretation; + Id matrix; + Id matrixOffset; + Id matrixInterpretation; + Id bias; + Id biasOffset; + Id biasInterpretation; + Id m; + Id k; + Id memoryLayout; + Id transpose; + Id matrixStride; + CooperativeMatrixOperands cooperativeMatrixOperands; + + bool HasMatrixStride() const { return wordCount > 15; } + bool HasCooperativeMatrixOperands() const { return wordCount > 16; } +}; + +struct OpCooperativeMatrixConvertNV +{ + OpCooperativeMatrixConvertNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpCooperativeMatrixConvertNV(IdResultType resultType, IdResult result, Id matrix) + : op(Op::CooperativeMatrixConvertNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->matrix = matrix; + } + + static constexpr Op OpCode = Op::CooperativeMatrixConvertNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id matrix; +}; + struct OpEmitMeshTasksEXT { OpEmitMeshTasksEXT(const ConstIter &it) @@ -16152,6 +17121,94 @@ struct OpFetchMicroTriangleVertexBarycentricNV Id barycentric; }; +struct OpCooperativeVectorLoadNV +{ + OpCooperativeVectorLoadNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->pointer = Id::fromWord(it.word(3)); + this->offset = Id::fromWord(it.word(4)); + word = 5; + this->memoryAccess = DecodeParam(it, word); + } + OpCooperativeVectorLoadNV(IdResultType resultType, IdResult result, Id pointer, Id offset, MemoryAccessAndParamDatas memoryAccess = MemoryAccess::None) + : op(Op::CooperativeVectorLoadNV) + , wordCount(MinWordSize + ExtraWordCount(memoryAccess)) + { + this->resultType = resultType; + this->result = result; + this->pointer = pointer; + this->offset = offset; + this->memoryAccess = memoryAccess; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(pointer.value()); + words.push_back(offset.value()); + EncodeParam(words, memoryAccess); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeVectorLoadNV; + static constexpr uint16_t MinWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id pointer; + Id offset; + MemoryAccessAndParamDatas memoryAccess; +}; + +struct OpCooperativeVectorStoreNV +{ + OpCooperativeVectorStoreNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->pointer = Id::fromWord(it.word(1)); + this->offset = Id::fromWord(it.word(2)); + this->object = Id::fromWord(it.word(3)); + word = 4; + this->memoryAccess = DecodeParam(it, word); + } + OpCooperativeVectorStoreNV(Id pointer, Id offset, Id object, MemoryAccessAndParamDatas memoryAccess = MemoryAccess::None) + : op(Op::CooperativeVectorStoreNV) + , wordCount(MinWordSize + ExtraWordCount(memoryAccess)) + { + this->pointer = pointer; + this->offset = offset; + this->object = object; + this->memoryAccess = memoryAccess; + } + operator Operation() const + { + rdcarray words; + words.push_back(pointer.value()); + words.push_back(offset.value()); + words.push_back(object.value()); + EncodeParam(words, memoryAccess); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeVectorStoreNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + Id pointer; + Id offset; + Id object; + MemoryAccessAndParamDatas memoryAccess; +}; + struct OpReportIntersectionKHR { OpReportIntersectionKHR(const ConstIter &it) @@ -16410,6 +17467,56 @@ struct OpExecuteCallableNV Id callableDataId; }; +struct OpRayQueryGetClusterIdNV +{ + OpRayQueryGetClusterIdNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetClusterIdNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetClusterIdNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetClusterIdNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpHitObjectGetClusterIdNV +{ + OpHitObjectGetClusterIdNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetClusterIdNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetClusterIdNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetClusterIdNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + struct OpTypeCooperativeMatrixNV { OpTypeCooperativeMatrixNV(const ConstIter &it) @@ -16626,6 +17733,547 @@ struct OpEndInvocationInterlockEXT // no operands }; +struct OpCooperativeMatrixReduceNV +{ + OpCooperativeMatrixReduceNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpCooperativeMatrixReduceNV(IdResultType resultType, IdResult result, Id matrix, CooperativeMatrixReduce reduce, Id combineFunc) + : op(Op::CooperativeMatrixReduceNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->matrix = matrix; + this->reduce = reduce; + this->combineFunc = combineFunc; + } + + static constexpr Op OpCode = Op::CooperativeMatrixReduceNV; + static constexpr uint16_t FixedWordSize = 6U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id matrix; + CooperativeMatrixReduce reduce; + Id combineFunc; +}; + +struct OpCooperativeMatrixLoadTensorNV +{ + OpCooperativeMatrixLoadTensorNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->pointer = Id::fromWord(it.word(3)); + this->object = Id::fromWord(it.word(4)); + this->tensorLayout = Id::fromWord(it.word(5)); + word = 6; + this->memoryOperand = DecodeParam(it, word); + this->tensorAddressingOperands = DecodeParam(it, word); + } + OpCooperativeMatrixLoadTensorNV(IdResultType resultType, IdResult result, Id pointer, Id object, Id tensorLayout, MemoryAccessAndParamDatas memoryOperand, TensorAddressingOperandsAndParamDatas tensorAddressingOperands) + : op(Op::CooperativeMatrixLoadTensorNV) + , wordCount(MinWordSize + ExtraWordCount(memoryOperand) + ExtraWordCount(tensorAddressingOperands)) + { + this->resultType = resultType; + this->result = result; + this->pointer = pointer; + this->object = object; + this->tensorLayout = tensorLayout; + this->memoryOperand = memoryOperand; + this->tensorAddressingOperands = tensorAddressingOperands; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(pointer.value()); + words.push_back(object.value()); + words.push_back(tensorLayout.value()); + EncodeParam(words, memoryOperand); + EncodeParam(words, tensorAddressingOperands); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeMatrixLoadTensorNV; + static constexpr uint16_t MinWordSize = 8U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id pointer; + Id object; + Id tensorLayout; + MemoryAccessAndParamDatas memoryOperand; + TensorAddressingOperandsAndParamDatas tensorAddressingOperands; +}; + +struct OpCooperativeMatrixStoreTensorNV +{ + OpCooperativeMatrixStoreTensorNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->pointer = Id::fromWord(it.word(1)); + this->object = Id::fromWord(it.word(2)); + this->tensorLayout = Id::fromWord(it.word(3)); + word = 4; + this->memoryOperand = DecodeParam(it, word); + this->tensorAddressingOperands = DecodeParam(it, word); + } + OpCooperativeMatrixStoreTensorNV(Id pointer, Id object, Id tensorLayout, MemoryAccessAndParamDatas memoryOperand, TensorAddressingOperandsAndParamDatas tensorAddressingOperands) + : op(Op::CooperativeMatrixStoreTensorNV) + , wordCount(MinWordSize + ExtraWordCount(memoryOperand) + ExtraWordCount(tensorAddressingOperands)) + { + this->pointer = pointer; + this->object = object; + this->tensorLayout = tensorLayout; + this->memoryOperand = memoryOperand; + this->tensorAddressingOperands = tensorAddressingOperands; + } + operator Operation() const + { + rdcarray words; + words.push_back(pointer.value()); + words.push_back(object.value()); + words.push_back(tensorLayout.value()); + EncodeParam(words, memoryOperand); + EncodeParam(words, tensorAddressingOperands); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeMatrixStoreTensorNV; + static constexpr uint16_t MinWordSize = 6U; + Op op; + uint16_t wordCount; + Id pointer; + Id object; + Id tensorLayout; + MemoryAccessAndParamDatas memoryOperand; + TensorAddressingOperandsAndParamDatas tensorAddressingOperands; +}; + +struct OpCooperativeMatrixPerElementOpNV +{ + OpCooperativeMatrixPerElementOpNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->matrix = Id::fromWord(it.word(3)); + this->func = Id::fromWord(it.word(4)); + word = 5; + this->operands = MultiParam(it, word); + } + OpCooperativeMatrixPerElementOpNV(IdResultType resultType, IdResult result, Id matrix, Id func, const rdcarray &operands = {}) + : op(Op::CooperativeMatrixPerElementOpNV) + , wordCount(MinWordSize + MultiWordCount(operands)) + { + this->resultType = resultType; + this->result = result; + this->matrix = matrix; + this->func = func; + this->operands = operands; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(matrix.value()); + words.push_back(func.value()); + for(size_t i=0; i < operands.size(); i++) + { + words.push_back(operands[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::CooperativeMatrixPerElementOpNV; + static constexpr uint16_t MinWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id matrix; + Id func; + rdcarray operands; +}; + +struct OpTypeTensorLayoutNV +{ + OpTypeTensorLayoutNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTypeTensorLayoutNV(IdResult result, Id dim, Id clampMode) + : op(Op::TypeTensorLayoutNV) + , wordCount(FixedWordSize) + { + this->result = result; + this->dim = dim; + this->clampMode = clampMode; + } + + static constexpr Op OpCode = Op::TypeTensorLayoutNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResult result; + Id dim; + Id clampMode; +}; + +struct OpTypeTensorViewNV +{ + OpTypeTensorViewNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->result = Id::fromWord(it.word(1)); + this->dim = Id::fromWord(it.word(2)); + this->hasDimensions = Id::fromWord(it.word(3)); + word = 4; + this->p = MultiParam(it, word); + } + OpTypeTensorViewNV(IdResult result, Id dim, Id hasDimensions, const rdcarray &p = {}) + : op(Op::TypeTensorViewNV) + , wordCount(MinWordSize + MultiWordCount(p)) + { + this->result = result; + this->dim = dim; + this->hasDimensions = hasDimensions; + this->p = p; + } + operator Operation() const + { + rdcarray words; + words.push_back(result.value()); + words.push_back(dim.value()); + words.push_back(hasDimensions.value()); + for(size_t i=0; i < p.size(); i++) + { + words.push_back(p[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TypeTensorViewNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResult result; + Id dim; + Id hasDimensions; + rdcarray p; +}; + +struct OpCreateTensorLayoutNV +{ + OpCreateTensorLayoutNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpCreateTensorLayoutNV(IdResultType resultType, IdResult result) + : op(Op::CreateTensorLayoutNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + } + + static constexpr Op OpCode = Op::CreateTensorLayoutNV; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; +}; + +struct OpTensorLayoutSetDimensionNV +{ + OpTensorLayoutSetDimensionNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->tensorLayout = Id::fromWord(it.word(3)); + word = 4; + this->dim = MultiParam(it, word); + } + OpTensorLayoutSetDimensionNV(IdResultType resultType, IdResult result, Id tensorLayout, const rdcarray &dim = {}) + : op(Op::TensorLayoutSetDimensionNV) + , wordCount(MinWordSize + MultiWordCount(dim)) + { + this->resultType = resultType; + this->result = result; + this->tensorLayout = tensorLayout; + this->dim = dim; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(tensorLayout.value()); + for(size_t i=0; i < dim.size(); i++) + { + words.push_back(dim[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TensorLayoutSetDimensionNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorLayout; + rdcarray dim; +}; + +struct OpTensorLayoutSetStrideNV +{ + OpTensorLayoutSetStrideNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->tensorLayout = Id::fromWord(it.word(3)); + word = 4; + this->stride = MultiParam(it, word); + } + OpTensorLayoutSetStrideNV(IdResultType resultType, IdResult result, Id tensorLayout, const rdcarray &stride = {}) + : op(Op::TensorLayoutSetStrideNV) + , wordCount(MinWordSize + MultiWordCount(stride)) + { + this->resultType = resultType; + this->result = result; + this->tensorLayout = tensorLayout; + this->stride = stride; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(tensorLayout.value()); + for(size_t i=0; i < stride.size(); i++) + { + words.push_back(stride[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TensorLayoutSetStrideNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorLayout; + rdcarray stride; +}; + +struct OpTensorLayoutSliceNV +{ + OpTensorLayoutSliceNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->tensorLayout = Id::fromWord(it.word(3)); + word = 4; + this->operands = MultiParam(it, word); + } + OpTensorLayoutSliceNV(IdResultType resultType, IdResult result, Id tensorLayout, const rdcarray &operands = {}) + : op(Op::TensorLayoutSliceNV) + , wordCount(MinWordSize + MultiWordCount(operands)) + { + this->resultType = resultType; + this->result = result; + this->tensorLayout = tensorLayout; + this->operands = operands; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(tensorLayout.value()); + for(size_t i=0; i < operands.size(); i++) + { + words.push_back(operands[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TensorLayoutSliceNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorLayout; + rdcarray operands; +}; + +struct OpTensorLayoutSetClampValueNV +{ + OpTensorLayoutSetClampValueNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTensorLayoutSetClampValueNV(IdResultType resultType, IdResult result, Id tensorLayout, Id value) + : op(Op::TensorLayoutSetClampValueNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->tensorLayout = tensorLayout; + this->value = value; + } + + static constexpr Op OpCode = Op::TensorLayoutSetClampValueNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorLayout; + Id value; +}; + +struct OpCreateTensorViewNV +{ + OpCreateTensorViewNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpCreateTensorViewNV(IdResultType resultType, IdResult result) + : op(Op::CreateTensorViewNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + } + + static constexpr Op OpCode = Op::CreateTensorViewNV; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; +}; + +struct OpTensorViewSetDimensionNV +{ + OpTensorViewSetDimensionNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->tensorView = Id::fromWord(it.word(3)); + word = 4; + this->dim = MultiParam(it, word); + } + OpTensorViewSetDimensionNV(IdResultType resultType, IdResult result, Id tensorView, const rdcarray &dim = {}) + : op(Op::TensorViewSetDimensionNV) + , wordCount(MinWordSize + MultiWordCount(dim)) + { + this->resultType = resultType; + this->result = result; + this->tensorView = tensorView; + this->dim = dim; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(tensorView.value()); + for(size_t i=0; i < dim.size(); i++) + { + words.push_back(dim[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TensorViewSetDimensionNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorView; + rdcarray dim; +}; + +struct OpTensorViewSetStrideNV +{ + OpTensorViewSetStrideNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->tensorView = Id::fromWord(it.word(3)); + word = 4; + this->stride = MultiParam(it, word); + } + OpTensorViewSetStrideNV(IdResultType resultType, IdResult result, Id tensorView, const rdcarray &stride = {}) + : op(Op::TensorViewSetStrideNV) + , wordCount(MinWordSize + MultiWordCount(stride)) + { + this->resultType = resultType; + this->result = result; + this->tensorView = tensorView; + this->stride = stride; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(tensorView.value()); + for(size_t i=0; i < stride.size(); i++) + { + words.push_back(stride[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TensorViewSetStrideNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorView; + rdcarray stride; +}; + struct OpDemoteToHelperInvocation { OpDemoteToHelperInvocation(const ConstIter &it) @@ -16668,6 +18316,107 @@ struct OpIsHelperInvocationEXT IdResult result; }; +struct OpTensorViewSetClipNV +{ + OpTensorViewSetClipNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTensorViewSetClipNV(IdResultType resultType, IdResult result, Id tensorView, Id clipRowOffset, Id clipRowSpan, Id clipColOffset, Id clipColSpan) + : op(Op::TensorViewSetClipNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->tensorView = tensorView; + this->clipRowOffset = clipRowOffset; + this->clipRowSpan = clipRowSpan; + this->clipColOffset = clipColOffset; + this->clipColSpan = clipColSpan; + } + + static constexpr Op OpCode = Op::TensorViewSetClipNV; + static constexpr uint16_t FixedWordSize = 8U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorView; + Id clipRowOffset; + Id clipRowSpan; + Id clipColOffset; + Id clipColSpan; +}; + +struct OpTensorLayoutSetBlockSizeNV +{ + OpTensorLayoutSetBlockSizeNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->tensorLayout = Id::fromWord(it.word(3)); + word = 4; + this->blockSize = MultiParam(it, word); + } + OpTensorLayoutSetBlockSizeNV(IdResultType resultType, IdResult result, Id tensorLayout, const rdcarray &blockSize = {}) + : op(Op::TensorLayoutSetBlockSizeNV) + , wordCount(MinWordSize + MultiWordCount(blockSize)) + { + this->resultType = resultType; + this->result = result; + this->tensorLayout = tensorLayout; + this->blockSize = blockSize; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(tensorLayout.value()); + for(size_t i=0; i < blockSize.size(); i++) + { + words.push_back(blockSize[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::TensorLayoutSetBlockSizeNV; + static constexpr uint16_t MinWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id tensorLayout; + rdcarray blockSize; +}; + +struct OpCooperativeMatrixTransposeNV +{ + OpCooperativeMatrixTransposeNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpCooperativeMatrixTransposeNV(IdResultType resultType, IdResult result, Id matrix) + : op(Op::CooperativeMatrixTransposeNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->matrix = matrix; + } + + static constexpr Op OpCode = Op::CooperativeMatrixTransposeNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id matrix; +}; + struct OpConvertUToImageNV { OpConvertUToImageNV(const ConstIter &it) @@ -16887,6 +18636,332 @@ struct OpRawAccessChainNV bool HasRawAccessChainOperands() const { return wordCount > 7; } }; +struct OpRayQueryGetIntersectionSpherePositionNV +{ + OpRayQueryGetIntersectionSpherePositionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionSpherePositionNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionSpherePositionNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionSpherePositionNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionSphereRadiusNV +{ + OpRayQueryGetIntersectionSphereRadiusNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionSphereRadiusNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionSphereRadiusNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionSphereRadiusNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionLSSPositionsNV +{ + OpRayQueryGetIntersectionLSSPositionsNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionLSSPositionsNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionLSSPositionsNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionLSSPositionsNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionLSSRadiiNV +{ + OpRayQueryGetIntersectionLSSRadiiNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionLSSRadiiNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionLSSRadiiNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionLSSRadiiNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionLSSHitValueNV +{ + OpRayQueryGetIntersectionLSSHitValueNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionLSSHitValueNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionLSSHitValueNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionLSSHitValueNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpHitObjectGetSpherePositionNV +{ + OpHitObjectGetSpherePositionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetSpherePositionNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetSpherePositionNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetSpherePositionNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetSphereRadiusNV +{ + OpHitObjectGetSphereRadiusNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetSphereRadiusNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetSphereRadiusNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetSphereRadiusNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetLSSPositionsNV +{ + OpHitObjectGetLSSPositionsNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetLSSPositionsNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetLSSPositionsNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetLSSPositionsNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetLSSRadiiNV +{ + OpHitObjectGetLSSRadiiNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetLSSRadiiNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetLSSRadiiNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetLSSRadiiNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectIsSphereHitNV +{ + OpHitObjectIsSphereHitNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectIsSphereHitNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectIsSphereHitNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectIsSphereHitNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectIsLSSHitNV +{ + OpHitObjectIsLSSHitNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectIsLSSHitNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectIsLSSHitNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectIsLSSHitNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpRayQueryIsSphereHitNV +{ + OpRayQueryIsSphereHitNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryIsSphereHitNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryIsSphereHitNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryIsSphereHitNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryIsLSSHitNV +{ + OpRayQueryIsLSSHitNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryIsLSSHitNV(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryIsLSSHitNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryIsLSSHitNV; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + struct OpSubgroupShuffleINTEL { OpSubgroupShuffleINTEL(const ConstIter &it) @@ -18518,6 +20593,311 @@ struct OpControlBarrierWaitINTEL IdMemorySemantics semantics; }; +struct OpArithmeticFenceEXT +{ + OpArithmeticFenceEXT(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpArithmeticFenceEXT(IdResultType resultType, IdResult result, Id target) + : op(Op::ArithmeticFenceEXT) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->target = target; + } + + static constexpr Op OpCode = Op::ArithmeticFenceEXT; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id target; +}; + +struct OpSubgroupBlockPrefetchINTEL +{ + OpSubgroupBlockPrefetchINTEL(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->ptr = Id::fromWord(it.word(1)); + this->numBytes = Id::fromWord(it.word(2)); + word = 3; + this->memoryAccess = DecodeParam(it, word); + } + OpSubgroupBlockPrefetchINTEL(Id ptr, Id numBytes, MemoryAccessAndParamDatas memoryAccess = MemoryAccess::None) + : op(Op::SubgroupBlockPrefetchINTEL) + , wordCount(MinWordSize + ExtraWordCount(memoryAccess)) + { + this->ptr = ptr; + this->numBytes = numBytes; + this->memoryAccess = memoryAccess; + } + operator Operation() const + { + rdcarray words; + words.push_back(ptr.value()); + words.push_back(numBytes.value()); + EncodeParam(words, memoryAccess); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::SubgroupBlockPrefetchINTEL; + static constexpr uint16_t MinWordSize = 3U; + Op op; + uint16_t wordCount; + Id ptr; + Id numBytes; + MemoryAccessAndParamDatas memoryAccess; +}; + +struct OpSubgroup2DBlockLoadINTEL +{ + OpSubgroup2DBlockLoadINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpSubgroup2DBlockLoadINTEL(Id elementSize, Id blockWidth, Id blockHeight, Id blockCount, Id srcBasePointer, Id memoryWidth, Id memoryHeight, Id memoryPitch, Id coordinate, Id dstPointer) + : op(Op::Subgroup2DBlockLoadINTEL) + , wordCount(FixedWordSize) + { + this->elementSize = elementSize; + this->blockWidth = blockWidth; + this->blockHeight = blockHeight; + this->blockCount = blockCount; + this->srcBasePointer = srcBasePointer; + this->memoryWidth = memoryWidth; + this->memoryHeight = memoryHeight; + this->memoryPitch = memoryPitch; + this->coordinate = coordinate; + this->dstPointer = dstPointer; + } + + static constexpr Op OpCode = Op::Subgroup2DBlockLoadINTEL; + static constexpr uint16_t FixedWordSize = 11U; + Op op; + uint16_t wordCount; + Id elementSize; + Id blockWidth; + Id blockHeight; + Id blockCount; + Id srcBasePointer; + Id memoryWidth; + Id memoryHeight; + Id memoryPitch; + Id coordinate; + Id dstPointer; +}; + +struct OpSubgroup2DBlockLoadTransformINTEL +{ + OpSubgroup2DBlockLoadTransformINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpSubgroup2DBlockLoadTransformINTEL(Id elementSize, Id blockWidth, Id blockHeight, Id blockCount, Id srcBasePointer, Id memoryWidth, Id memoryHeight, Id memoryPitch, Id coordinate, Id dstPointer) + : op(Op::Subgroup2DBlockLoadTransformINTEL) + , wordCount(FixedWordSize) + { + this->elementSize = elementSize; + this->blockWidth = blockWidth; + this->blockHeight = blockHeight; + this->blockCount = blockCount; + this->srcBasePointer = srcBasePointer; + this->memoryWidth = memoryWidth; + this->memoryHeight = memoryHeight; + this->memoryPitch = memoryPitch; + this->coordinate = coordinate; + this->dstPointer = dstPointer; + } + + static constexpr Op OpCode = Op::Subgroup2DBlockLoadTransformINTEL; + static constexpr uint16_t FixedWordSize = 11U; + Op op; + uint16_t wordCount; + Id elementSize; + Id blockWidth; + Id blockHeight; + Id blockCount; + Id srcBasePointer; + Id memoryWidth; + Id memoryHeight; + Id memoryPitch; + Id coordinate; + Id dstPointer; +}; + +struct OpSubgroup2DBlockLoadTransposeINTEL +{ + OpSubgroup2DBlockLoadTransposeINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpSubgroup2DBlockLoadTransposeINTEL(Id elementSize, Id blockWidth, Id blockHeight, Id blockCount, Id srcBasePointer, Id memoryWidth, Id memoryHeight, Id memoryPitch, Id coordinate, Id dstPointer) + : op(Op::Subgroup2DBlockLoadTransposeINTEL) + , wordCount(FixedWordSize) + { + this->elementSize = elementSize; + this->blockWidth = blockWidth; + this->blockHeight = blockHeight; + this->blockCount = blockCount; + this->srcBasePointer = srcBasePointer; + this->memoryWidth = memoryWidth; + this->memoryHeight = memoryHeight; + this->memoryPitch = memoryPitch; + this->coordinate = coordinate; + this->dstPointer = dstPointer; + } + + static constexpr Op OpCode = Op::Subgroup2DBlockLoadTransposeINTEL; + static constexpr uint16_t FixedWordSize = 11U; + Op op; + uint16_t wordCount; + Id elementSize; + Id blockWidth; + Id blockHeight; + Id blockCount; + Id srcBasePointer; + Id memoryWidth; + Id memoryHeight; + Id memoryPitch; + Id coordinate; + Id dstPointer; +}; + +struct OpSubgroup2DBlockPrefetchINTEL +{ + OpSubgroup2DBlockPrefetchINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpSubgroup2DBlockPrefetchINTEL(Id elementSize, Id blockWidth, Id blockHeight, Id blockCount, Id srcBasePointer, Id memoryWidth, Id memoryHeight, Id memoryPitch, Id coordinate) + : op(Op::Subgroup2DBlockPrefetchINTEL) + , wordCount(FixedWordSize) + { + this->elementSize = elementSize; + this->blockWidth = blockWidth; + this->blockHeight = blockHeight; + this->blockCount = blockCount; + this->srcBasePointer = srcBasePointer; + this->memoryWidth = memoryWidth; + this->memoryHeight = memoryHeight; + this->memoryPitch = memoryPitch; + this->coordinate = coordinate; + } + + static constexpr Op OpCode = Op::Subgroup2DBlockPrefetchINTEL; + static constexpr uint16_t FixedWordSize = 10U; + Op op; + uint16_t wordCount; + Id elementSize; + Id blockWidth; + Id blockHeight; + Id blockCount; + Id srcBasePointer; + Id memoryWidth; + Id memoryHeight; + Id memoryPitch; + Id coordinate; +}; + +struct OpSubgroup2DBlockStoreINTEL +{ + OpSubgroup2DBlockStoreINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpSubgroup2DBlockStoreINTEL(Id elementSize, Id blockWidth, Id blockHeight, Id blockCount, Id srcPointer, Id dstBasePointer, Id memoryWidth, Id memoryHeight, Id memoryPitch, Id coordinate) + : op(Op::Subgroup2DBlockStoreINTEL) + , wordCount(FixedWordSize) + { + this->elementSize = elementSize; + this->blockWidth = blockWidth; + this->blockHeight = blockHeight; + this->blockCount = blockCount; + this->srcPointer = srcPointer; + this->dstBasePointer = dstBasePointer; + this->memoryWidth = memoryWidth; + this->memoryHeight = memoryHeight; + this->memoryPitch = memoryPitch; + this->coordinate = coordinate; + } + + static constexpr Op OpCode = Op::Subgroup2DBlockStoreINTEL; + static constexpr uint16_t FixedWordSize = 11U; + Op op; + uint16_t wordCount; + Id elementSize; + Id blockWidth; + Id blockHeight; + Id blockCount; + Id srcPointer; + Id dstBasePointer; + Id memoryWidth; + Id memoryHeight; + Id memoryPitch; + Id coordinate; +}; + +struct OpSubgroupMatrixMultiplyAccumulateINTEL +{ + OpSubgroupMatrixMultiplyAccumulateINTEL(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + this->kDim = Id::fromWord(it.word(3)); + this->matrixA = Id::fromWord(it.word(4)); + this->matrixB = Id::fromWord(it.word(5)); + this->matrixC = Id::fromWord(it.word(6)); + this->matrixMultiplyAccumulateOperands = (it.size() > 7) ? (MatrixMultiplyAccumulateOperands)it.word(7) : MatrixMultiplyAccumulateOperands::None; + } + OpSubgroupMatrixMultiplyAccumulateINTEL(IdResultType resultType, IdResult result, Id kDim, Id matrixA, Id matrixB, Id matrixC, MatrixMultiplyAccumulateOperands matrixMultiplyAccumulateOperands = MatrixMultiplyAccumulateOperands::None) + : op(Op::SubgroupMatrixMultiplyAccumulateINTEL) + , wordCount(MinWordSize + OptionalWordCount(matrixMultiplyAccumulateOperands)) + { + this->resultType = resultType; + this->result = result; + this->kDim = kDim; + this->matrixA = matrixA; + this->matrixB = matrixB; + this->matrixC = matrixC; + this->matrixMultiplyAccumulateOperands = matrixMultiplyAccumulateOperands; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + words.push_back(kDim.value()); + words.push_back(matrixA.value()); + words.push_back(matrixB.value()); + words.push_back(matrixC.value()); + if(matrixMultiplyAccumulateOperands != MatrixMultiplyAccumulateOperands::None) words.push_back((uint32_t)matrixMultiplyAccumulateOperands); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::SubgroupMatrixMultiplyAccumulateINTEL; + static constexpr uint16_t MinWordSize = 7U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id kDim; + Id matrixA; + Id matrixB; + Id matrixC; + MatrixMultiplyAccumulateOperands matrixMultiplyAccumulateOperands; + + bool HasMatrixMultiplyAccumulateOperands() const { return wordCount > 7; } +}; + struct OpGroupIMulKHR { OpGroupIMulKHR(const ConstIter &it) @@ -18818,7 +21198,8 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: rdcstr ParamToStr(const std::function &idName, const rdcspv::LoopControlAndParamDatas &el);template<> rdcstr ParamToStr(const std::function &idName, const rdcspv::MemoryAccessAndParamDatas &el);template<> rdcstr ParamToStr(const std::function &idName, const rdcspv::ExecutionModeAndParamData &el);template<> -rdcstr ParamToStr(const std::function &idName, const rdcspv::DecorationAndParamData &el); +rdcstr ParamToStr(const std::function &idName, const rdcspv::DecorationAndParamData &el);template<> +rdcstr ParamToStr(const std::function &idName, const rdcspv::TensorAddressingOperandsAndParamDatas &el); template inline rdcstr ParamsToStr(const std::function &idName, const rdcarray &ids) diff --git a/renderdoc/driver/shaders/spirv/spirv_processor.cpp b/renderdoc/driver/shaders/spirv/spirv_processor.cpp index f9df80f45..72111e615 100644 --- a/renderdoc/driver/shaders/spirv/spirv_processor.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_processor.cpp @@ -461,7 +461,7 @@ void Processor::Parse(const rdcarray &spirvWords) } else if(opcode == Op::Decorate || opcode == Op::MemberDecorate || opcode == Op::GroupDecorate || opcode == Op::GroupMemberDecorate || opcode == Op::DecorationGroup || - opcode == Op::DecorateStringGOOGLE || opcode == Op::MemberDecorateStringGOOGLE) + opcode == Op::DecorateString || opcode == Op::MemberDecorateString) { START_SECTION(Section::Annotations); } diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index 311c27845..a7d18058b 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -1000,6 +1000,7 @@ void Reflector::MakeReflection(const GraphicsAPI sourceAPI, const ShaderStage st case SourceLanguage::NZSL: case SourceLanguage::WGSL: case SourceLanguage::Zig: + case SourceLanguage::Rust: case SourceLanguage::Max: break; }