From e0ed64d655f1ebf6e7a7c6f99da6e082f859c331 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Jan 2022 15:08:47 +0000 Subject: [PATCH] Update to SPIR-V 1.6 --- renderdoc/driver/shaders/spirv/spir-v.xml | 10 +- .../shaders/spirv/spirv.core.grammar.json | 350 ++++++++++++++++-- .../driver/shaders/spirv/spirv_debug.cpp | 9 +- .../shaders/spirv/spirv_debug_setup.cpp | 2 + renderdoc/driver/shaders/spirv/spirv_gen.cpp | 222 ++++++++--- renderdoc/driver/shaders/spirv/spirv_gen.h | 44 ++- .../driver/shaders/spirv/spirv_op_helpers.h | 244 ++++++++++-- 7 files changed, 741 insertions(+), 140 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spir-v.xml b/renderdoc/driver/shaders/spirv/spir-v.xml index 34453f83a..5b4f9ce4a 100644 --- a/renderdoc/driver/shaders/spirv/spir-v.xml +++ b/renderdoc/driver/shaders/spirv/spir-v.xml @@ -55,7 +55,7 @@ - + @@ -82,7 +82,9 @@ - + + + @@ -119,7 +121,7 @@ - + @@ -148,7 +150,7 @@ - + diff --git a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json index 53aaf354e..766a4ed21 100644 --- a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json +++ b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json @@ -26,8 +26,8 @@ ], "magic_number" : "0x07230203", "major_version" : 1, - "minor_version" : 5, - "revision" : 4, + "minor_version" : 6, + "revision" : 1, "instruction_printing_class" : [ { "tag" : "@exclude" @@ -1735,7 +1735,8 @@ { "kind" : "IdRef", "name" : "'x'" }, { "kind" : "IdRef", "name" : "'y'" } ], - "capabilities" : [ "Kernel" ] + "capabilities" : [ "Kernel" ], + "lastVersion" : "1.5" }, { "opname" : "OpOrdered", @@ -4109,7 +4110,7 @@ "SPV_KHR_terminate_invocation" ], "capabilities" : [ "Shader" ], - "version" : "None" + "version" : "1.6" }, { "opname" : "OpSubgroupBallotKHR", @@ -4260,6 +4261,20 @@ "extensions" : [ "SPV_KHR_ray_tracing" ], "version" : "None" }, + { + "opname" : "OpSDot", + "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" : [ "DotProduct" ], + "version" : "1.6" + }, { "opname" : "OpSDotKHR", "class" : "Arithmetic", @@ -4272,7 +4287,22 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProductKHR" ], - "version" : "None" + "extensions" : [ "SPV_KHR_integer_dot_product" ], + "version" : "1.6" + }, + { + "opname" : "OpUDot", + "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" : [ "DotProduct" ], + "version" : "1.6" }, { "opname" : "OpUDotKHR", @@ -4286,7 +4316,22 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProductKHR" ], - "version" : "None" + "extensions" : [ "SPV_KHR_integer_dot_product" ], + "version" : "1.6" + }, + { + "opname" : "OpSUDot", + "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" : [ "DotProduct" ], + "version" : "1.6" }, { "opname" : "OpSUDotKHR", @@ -4300,7 +4345,23 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProductKHR" ], - "version" : "None" + "extensions" : [ "SPV_KHR_integer_dot_product" ], + "version" : "1.6" + }, + { + "opname" : "OpSDotAccSat", + "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" : [ "DotProduct" ], + "version" : "1.6" }, { "opname" : "OpSDotAccSatKHR", @@ -4315,7 +4376,23 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProductKHR" ], - "version" : "None" + "extensions" : [ "SPV_KHR_integer_dot_product" ], + "version" : "1.6" + }, + { + "opname" : "OpUDotAccSat", + "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" : [ "DotProduct" ], + "version" : "1.6" }, { "opname" : "OpUDotAccSatKHR", @@ -4330,7 +4407,23 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProductKHR" ], - "version" : "None" + "extensions" : [ "SPV_KHR_integer_dot_product" ], + "version" : "1.6" + }, + { + "opname" : "OpSUDotAccSat", + "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" : [ "DotProduct" ], + "version" : "1.6" }, { "opname" : "OpSUDotAccSatKHR", @@ -4345,7 +4438,8 @@ { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } ], "capabilities" : [ "DotProductKHR" ], - "version" : "None" + "extensions" : [ "SPV_KHR_integer_dot_product" ], + "version" : "1.6" }, { "opname" : "OpTypeRayQueryKHR", @@ -4925,12 +5019,18 @@ "version" : "None" }, { - "opname" : "OpDemoteToHelperInvocationEXT", - "class" : "Reserved", + "opname" : "OpDemoteToHelperInvocation", + "class" : "Control-Flow", "opcode" : 5380, - "capabilities" : [ "DemoteToHelperInvocationEXT" ], - "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ], - "version" : "None" + "capabilities" : [ "DemoteToHelperInvocation" ], + "version" : "1.6" + }, + { + "opname" : "OpDemoteToHelperInvocationEXT", + "class" : "Control-Flow", + "opcode" : 5380, + "capabilities" : [ "DemoteToHelperInvocation" ], + "version" : "1.6" }, { "opname" : "OpIsHelperInvocationEXT", @@ -4944,6 +5044,88 @@ "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ], "version" : "None" }, + { + "opname" : "OpConvertUToImageNV", + "class" : "Reserved", + "opcode" : 5391, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Operand'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "opname" : "OpConvertUToSamplerNV", + "class" : "Reserved", + "opcode" : 5392, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Operand'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "opname" : "OpConvertImageToUNV", + "class" : "Reserved", + "opcode" : 5393, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Operand'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "opname" : "OpConvertSamplerToUNV", + "class" : "Reserved", + "opcode" : 5394, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Operand'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "opname" : "OpConvertUToSampledImageNV", + "class" : "Reserved", + "opcode" : 5395, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Operand'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "opname" : "OpConvertSampledImageToUNV", + "class" : "Reserved", + "opcode" : 5396, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Operand'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "opname" : "OpSamplerImageAddressingModeNV", + "class" : "Reserved", + "opcode" : 5397, + "operands" : [ + { "kind" : "LiteralInteger", "name" : "'Bit Width'" } + ], + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, { "opname" : "OpSubgroupShuffleINTEL", "class" : "Group", @@ -5256,7 +5438,7 @@ "version" : "None" }, { - "opname" : "OpConstFunctionPointerINTEL", + "opname" : "OpConstantFunctionPointerINTEL", "class" : "@exclude", "opcode" : 5600, "operands" : [ @@ -8476,6 +8658,11 @@ "value" : "0x2000", "version" : "1.4" }, + { + "enumerant" : "Nontemporal", + "value" : "0x4000", + "version" : "1.6" + }, { "enumerant" : "Offsets", "value" : "0x10000", @@ -10795,12 +10982,12 @@ { "enumerant" : "Uniform", "value" : 26, - "capabilities" : [ "Shader" ] + "capabilities" : [ "Shader", "UniformDecoration" ] }, { "enumerant" : "UniformId", "value" : 27, - "capabilities" : [ "Shader" ], + "capabilities" : [ "Shader", "UniformDecoration" ], "parameters" : [ { "kind" : "IdScope", "name" : "'Execution'" } ], @@ -11032,11 +11219,18 @@ "extensions" : [ "SPV_NV_mesh_shader" ], "version" : "None" }, + { + "enumerant" : "PerVertexKHR", + "value" : 5285, + "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], + "version" : "None" + }, { "enumerant" : "PerVertexNV", "value" : 5285, - "capabilities" : [ "FragmentBarycentricNV" ], - "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { @@ -11080,6 +11274,30 @@ "extensions" : [ "SPV_EXT_physical_storage_buffer" ], "version" : "1.5" }, + { + "enumerant" : "BindlessSamplerNV", + "value" : 5398, + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "enumerant" : "BindlessImageNV", + "value" : 5399, + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "enumerant" : "BoundSamplerNV", + "value" : 5400, + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, + { + "enumerant" : "BoundImageNV", + "value" : 5401, + "capabilities" : [ "BindlessTextureNV" ], + "version" : "None" + }, { "enumerant" : "SIMTCallINTEL", "value" : 5599, @@ -11400,6 +11618,12 @@ "value" : 6087, "capabilities" : [ "VectorComputeINTEL" ], "version" : "None" + }, + { + "enumerant" : "MediaBlockIOINTEL", + "value" : 6140, + "capabilities" : [ "VectorComputeINTEL" ], + "version" : "None" } ] }, @@ -11867,18 +12091,32 @@ "extensions" : [ "SPV_NV_mesh_shader" ], "version" : "None" }, + { + "enumerant" : "BaryCoordKHR", + "value" : 5286, + "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], + "version" : "None" + }, { "enumerant" : "BaryCoordNV", "value" : 5286, - "capabilities" : [ "FragmentBarycentricNV" ], - "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], + "version" : "None" + }, + { + "enumerant" : "BaryCoordNoPerspKHR", + "value" : 5287, + "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { "enumerant" : "BaryCoordNoPerspNV", "value" : 5287, - "capabilities" : [ "FragmentBarycentricNV" ], - "extensions" : [ "SPV_NV_fragment_shader_barycentric" ], + "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { @@ -12603,6 +12841,11 @@ "value" : 70, "version" : "1.5" }, + { + "enumerant" : "UniformDecoration", + "value" : 71, + "version" : "1.6" + }, { "enumerant" : "FragmentShadingRateKHR", "value" : 4422, @@ -12928,10 +13171,16 @@ "extensions" : [ "SPV_NV_shader_image_footprint" ], "version" : "None" }, + { + "enumerant" : "FragmentBarycentricKHR", + "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" ], + "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ], "version" : "None" }, { @@ -13214,11 +13463,23 @@ "extensions" : [ "SPV_EXT_fragment_shader_interlock" ], "version" : "None" }, + { + "enumerant" : "DemoteToHelperInvocation", + "value" : 5379, + "capabilities" : [ "Shader" ], + "version" : "1.6" + }, { "enumerant" : "DemoteToHelperInvocationEXT", "value" : 5379, "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ], + "version" : "1.6" + }, + { + "enumerant" : "BindlessTextureNV", + "value" : 5390, + "extensions" : [ "SPV_NV_bindless_texture" ], "version" : "None" }, { @@ -13452,30 +13713,51 @@ "extensions" : [ "SPV_INTEL_fpga_reg" ], "version" : "None" }, + { + "enumerant" : "DotProductInputAll", + "value" : 6016, + "version" : "1.6" + }, { "enumerant" : "DotProductInputAllKHR", "value" : 6016, "extensions" : [ "SPV_KHR_integer_dot_product" ], - "version" : "None" + "version" : "1.6" + }, + { + "enumerant" : "DotProductInput4x8Bit", + "value" : 6017, + "capabilities" : [ "Int8" ], + "version" : "1.6" }, { "enumerant" : "DotProductInput4x8BitKHR", "value" : 6017, "capabilities" : [ "Int8" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], - "version" : "None" + "version" : "1.6" + }, + { + "enumerant" : "DotProductInput4x8BitPacked", + "value" : 6018, + "version" : "1.6" }, { "enumerant" : "DotProductInput4x8BitPackedKHR", "value" : 6018, "extensions" : [ "SPV_KHR_integer_dot_product" ], - "version" : "None" + "version" : "1.6" + }, + { + "enumerant" : "DotProduct", + "value" : 6019, + "version" : "1.6" }, { "enumerant" : "DotProductKHR", "value" : 6019, "extensions" : [ "SPV_KHR_integer_dot_product" ], - "version" : "None" + "version" : "1.6" }, { "enumerant" : "BitInstructions", @@ -13486,14 +13768,12 @@ { "enumerant" : "AtomicFloat32AddEXT", "value" : 6033, - "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_shader_atomic_float_add" ], "version" : "None" }, { "enumerant" : "AtomicFloat64AddEXT", "value" : 6034, - "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_shader_atomic_float_add" ], "version" : "None" }, @@ -13512,7 +13792,6 @@ { "enumerant" : "AtomicFloat16AddEXT", "value" : 6095, - "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_shader_atomic_float16_add" ], "version" : "None" }, @@ -13588,11 +13867,16 @@ "category" : "ValueEnum", "kind" : "PackedVectorFormat", "enumerants" : [ + { + "enumerant" : "PackedVectorFormat4x8Bit", + "value" : 0, + "version" : "1.6" + }, { "enumerant" : "PackedVectorFormat4x8BitKHR", "value" : 0, "extensions" : [ "SPV_KHR_integer_dot_product" ], - "version" : "None" + "version" : "1.6" } ] }, diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index b9cb2d662..8ec5c5ba9 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -3731,7 +3731,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::VariableLengthArrayINTEL: case Op::TraceMotionNV: case Op::TraceRayMotionNV: - case Op::ConstFunctionPointerINTEL: + case Op::ConstantFunctionPointerINTEL: case Op::AsmTargetINTEL: case Op::AsmCallINTEL: case Op::SaveMemoryINTEL: @@ -3794,6 +3794,13 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::TypeStructContinuedINTEL: case Op::ConstantCompositeContinuedINTEL: case Op::SpecConstantCompositeContinuedINTEL: + case Op::ConvertUToImageNV: + case Op::ConvertUToSamplerNV: + case Op::ConvertUToSampledImageNV: + case Op::ConvertImageToUNV: + case Op::ConvertSamplerToUNV: + case Op::ConvertSampledImageToUNV: + case Op::SamplerImageAddressingModeNV: { RDCERR("Unsupported extension opcode used %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 d4d295339..3e21d9c28 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -365,6 +365,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::Int64ImageEXT: case Capability::ExpectAssumeKHR: case Capability::BitInstructions: + case Capability::UniformDecoration: { supported = true; break; @@ -516,6 +517,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::IOPipesINTEL: case Capability::LongConstantCompositeINTEL: case Capability::DebugInfoModuleINTEL: + case Capability::BindlessTextureNV: case Capability::Max: case Capability::Invalid: { diff --git a/renderdoc/driver/shaders/spirv/spirv_gen.cpp b/renderdoc/driver/shaders/spirv/spirv_gen.cpp index 854336e9e..7f7afba00 100644 --- a/renderdoc/driver/shaders/spirv/spirv_gen.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_gen.cpp @@ -83,6 +83,7 @@ rdcstr DoStringise(const rdcspv::ImageOperands &el) STRINGISE_BITFIELD_CLASS_BIT(VolatileTexel); STRINGISE_BITFIELD_CLASS_BIT(SignExtend); STRINGISE_BITFIELD_CLASS_BIT(ZeroExtend); + STRINGISE_BITFIELD_CLASS_BIT(Nontemporal); STRINGISE_BITFIELD_CLASS_BIT(Offsets); } END_BITFIELD_STRINGISE(); @@ -738,10 +739,14 @@ rdcstr DoStringise(const rdcspv::Decoration &el) STRINGISE_ENUM_CLASS(PerPrimitiveNV); STRINGISE_ENUM_CLASS(PerViewNV); STRINGISE_ENUM_CLASS(PerTaskNV); - STRINGISE_ENUM_CLASS(PerVertexNV); + STRINGISE_ENUM_CLASS(PerVertexKHR); STRINGISE_ENUM_CLASS(NonUniform); STRINGISE_ENUM_CLASS(RestrictPointer); STRINGISE_ENUM_CLASS(AliasedPointer); + STRINGISE_ENUM_CLASS(BindlessSamplerNV); + STRINGISE_ENUM_CLASS(BindlessImageNV); + STRINGISE_ENUM_CLASS(BoundSamplerNV); + STRINGISE_ENUM_CLASS(BoundImageNV); STRINGISE_ENUM_CLASS(SIMTCallINTEL); STRINGISE_ENUM_CLASS(ReferencedIndirectlyINTEL); STRINGISE_ENUM_CLASS(ClobberINTEL); @@ -779,6 +784,7 @@ rdcstr DoStringise(const rdcspv::Decoration &el) STRINGISE_ENUM_CLASS(FunctionFloatingPointModeINTEL); STRINGISE_ENUM_CLASS(SingleElementVectorINTEL); STRINGISE_ENUM_CLASS(VectorComputeCallableFunctionINTEL); + STRINGISE_ENUM_CLASS(MediaBlockIOINTEL); } END_ENUM_STRINGISE(); } @@ -863,8 +869,8 @@ rdcstr DoStringise(const rdcspv::BuiltIn &el) STRINGISE_ENUM_CLASS(LayerPerViewNV); STRINGISE_ENUM_CLASS(MeshViewCountNV); STRINGISE_ENUM_CLASS(MeshViewIndicesNV); - STRINGISE_ENUM_CLASS(BaryCoordNV); - STRINGISE_ENUM_CLASS(BaryCoordNoPerspNV); + STRINGISE_ENUM_CLASS(BaryCoordKHR); + STRINGISE_ENUM_CLASS(BaryCoordNoPerspKHR); STRINGISE_ENUM_CLASS(FragSizeEXT); STRINGISE_ENUM_CLASS(FragInvocationCountEXT); STRINGISE_ENUM_CLASS(LaunchIdNV); @@ -1009,6 +1015,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(GroupNonUniformQuad); STRINGISE_ENUM_CLASS(ShaderLayer); STRINGISE_ENUM_CLASS(ShaderViewportIndex); + STRINGISE_ENUM_CLASS(UniformDecoration); STRINGISE_ENUM_CLASS(FragmentShadingRateKHR); STRINGISE_ENUM_CLASS(SubgroupBallotKHR); STRINGISE_ENUM_CLASS(DrawParameters); @@ -1054,7 +1061,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(FragmentFullyCoveredEXT); STRINGISE_ENUM_CLASS(MeshShadingNV); STRINGISE_ENUM_CLASS(ImageFootprintNV); - STRINGISE_ENUM_CLASS(FragmentBarycentricNV); + STRINGISE_ENUM_CLASS(FragmentBarycentricKHR); STRINGISE_ENUM_CLASS(ComputeDerivativeGroupQuadsNV); STRINGISE_ENUM_CLASS(FragmentDensityEXT); STRINGISE_ENUM_CLASS(GroupNonUniformPartitionedNV); @@ -1082,7 +1089,8 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(FragmentShaderShadingRateInterlockEXT); STRINGISE_ENUM_CLASS(ShaderSMBuiltinsNV); STRINGISE_ENUM_CLASS(FragmentShaderPixelInterlockEXT); - STRINGISE_ENUM_CLASS(DemoteToHelperInvocationEXT); + STRINGISE_ENUM_CLASS(DemoteToHelperInvocation); + STRINGISE_ENUM_CLASS(BindlessTextureNV); STRINGISE_ENUM_CLASS(SubgroupShuffleINTEL); STRINGISE_ENUM_CLASS(SubgroupBufferBlockIOINTEL); STRINGISE_ENUM_CLASS(SubgroupImageBlockIOINTEL); @@ -1121,10 +1129,10 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(IOPipesINTEL); STRINGISE_ENUM_CLASS(BlockingPipesINTEL); STRINGISE_ENUM_CLASS(FPGARegINTEL); - STRINGISE_ENUM_CLASS(DotProductInputAllKHR); - STRINGISE_ENUM_CLASS(DotProductInput4x8BitKHR); - STRINGISE_ENUM_CLASS(DotProductInput4x8BitPackedKHR); - STRINGISE_ENUM_CLASS(DotProductKHR); + STRINGISE_ENUM_CLASS(DotProductInputAll); + STRINGISE_ENUM_CLASS(DotProductInput4x8Bit); + STRINGISE_ENUM_CLASS(DotProductInput4x8BitPacked); + STRINGISE_ENUM_CLASS(DotProduct); STRINGISE_ENUM_CLASS(BitInstructions); STRINGISE_ENUM_CLASS(AtomicFloat32AddEXT); STRINGISE_ENUM_CLASS(AtomicFloat64AddEXT); @@ -1175,7 +1183,7 @@ rdcstr DoStringise(const rdcspv::PackedVectorFormat &el) { BEGIN_ENUM_STRINGISE(rdcspv::PackedVectorFormat); { - STRINGISE_ENUM_CLASS(PackedVectorFormat4x8BitKHR); + STRINGISE_ENUM_CLASS(PackedVectorFormat4x8Bit); } END_ENUM_STRINGISE(); } @@ -1541,12 +1549,12 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(ConvertUToAccelerationStructureKHR); STRINGISE_ENUM_CLASS(IgnoreIntersectionKHR); STRINGISE_ENUM_CLASS(TerminateRayKHR); - STRINGISE_ENUM_CLASS(SDotKHR); - STRINGISE_ENUM_CLASS(UDotKHR); - STRINGISE_ENUM_CLASS(SUDotKHR); - STRINGISE_ENUM_CLASS(SDotAccSatKHR); - STRINGISE_ENUM_CLASS(UDotAccSatKHR); - STRINGISE_ENUM_CLASS(SUDotAccSatKHR); + STRINGISE_ENUM_CLASS(SDot); + STRINGISE_ENUM_CLASS(UDot); + STRINGISE_ENUM_CLASS(SUDot); + STRINGISE_ENUM_CLASS(SDotAccSat); + STRINGISE_ENUM_CLASS(UDotAccSat); + STRINGISE_ENUM_CLASS(SUDotAccSat); STRINGISE_ENUM_CLASS(TypeRayQueryKHR); STRINGISE_ENUM_CLASS(RayQueryInitializeKHR); STRINGISE_ENUM_CLASS(RayQueryTerminateKHR); @@ -1583,8 +1591,15 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(CooperativeMatrixLengthNV); STRINGISE_ENUM_CLASS(BeginInvocationInterlockEXT); STRINGISE_ENUM_CLASS(EndInvocationInterlockEXT); - STRINGISE_ENUM_CLASS(DemoteToHelperInvocationEXT); + STRINGISE_ENUM_CLASS(DemoteToHelperInvocation); STRINGISE_ENUM_CLASS(IsHelperInvocationEXT); + STRINGISE_ENUM_CLASS(ConvertUToImageNV); + STRINGISE_ENUM_CLASS(ConvertUToSamplerNV); + STRINGISE_ENUM_CLASS(ConvertImageToUNV); + STRINGISE_ENUM_CLASS(ConvertSamplerToUNV); + STRINGISE_ENUM_CLASS(ConvertUToSampledImageNV); + STRINGISE_ENUM_CLASS(ConvertSampledImageToUNV); + STRINGISE_ENUM_CLASS(SamplerImageAddressingModeNV); STRINGISE_ENUM_CLASS(SubgroupShuffleINTEL); STRINGISE_ENUM_CLASS(SubgroupShuffleDownINTEL); STRINGISE_ENUM_CLASS(SubgroupShuffleUpINTEL); @@ -1609,7 +1624,7 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(USubSatINTEL); STRINGISE_ENUM_CLASS(IMul32x16INTEL); STRINGISE_ENUM_CLASS(UMul32x16INTEL); - STRINGISE_ENUM_CLASS(ConstFunctionPointerINTEL); + STRINGISE_ENUM_CLASS(ConstantFunctionPointerINTEL); STRINGISE_ENUM_CLASS(FunctionPointerCallINTEL); STRINGISE_ENUM_CLASS(AsmTargetINTEL); STRINGISE_ENUM_CLASS(AsmINTEL); @@ -1893,6 +1908,8 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "SignExtend" ", "; if(el.flags & ImageOperands::ZeroExtend) ret += "ZeroExtend" ", "; + if(el.flags & ImageOperands::Nontemporal) + ret += "Nontemporal" ", "; if(el.flags & ImageOperands::Offsets) ret += "Offsets" "(" + idName(el.offsets) + ")" ", "; @@ -4090,39 +4107,39 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::functionop = OpCode; @@ -12685,8 +12685,8 @@ struct OpSDotKHR this->vector2 = Id::fromWord(it.word(4)); this->packedVectorFormat = (it.size() > 5) ? (PackedVectorFormat)it.word(5) : PackedVectorFormat::Invalid; } - OpSDotKHR(IdResultType resultType, IdResult result, Id vector1, Id vector2, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) - : op(Op::SDotKHR) + OpSDot(IdResultType resultType, IdResult result, Id vector1, Id vector2, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) + : op(Op::SDot) , wordCount(MinWordSize + OptionalWordCount(packedVectorFormat)) { this->resultType = resultType; @@ -12706,7 +12706,7 @@ struct OpSDotKHR return Operation(OpCode, words); } - static constexpr Op OpCode = Op::SDotKHR; + static constexpr Op OpCode = Op::SDot; static constexpr uint16_t MinWordSize = 5U; Op op; uint16_t wordCount; @@ -12719,9 +12719,9 @@ struct OpSDotKHR bool HasPackedVectorFormat() const { return wordCount > 5; } }; -struct OpUDotKHR +struct OpUDot { - OpUDotKHR(const ConstIter &it) + OpUDot(const ConstIter &it) { uint32_t word = 0;(void)word; this->op = OpCode; @@ -12732,8 +12732,8 @@ struct OpUDotKHR this->vector2 = Id::fromWord(it.word(4)); this->packedVectorFormat = (it.size() > 5) ? (PackedVectorFormat)it.word(5) : PackedVectorFormat::Invalid; } - OpUDotKHR(IdResultType resultType, IdResult result, Id vector1, Id vector2, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) - : op(Op::UDotKHR) + OpUDot(IdResultType resultType, IdResult result, Id vector1, Id vector2, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) + : op(Op::UDot) , wordCount(MinWordSize + OptionalWordCount(packedVectorFormat)) { this->resultType = resultType; @@ -12753,7 +12753,7 @@ struct OpUDotKHR return Operation(OpCode, words); } - static constexpr Op OpCode = Op::UDotKHR; + static constexpr Op OpCode = Op::UDot; static constexpr uint16_t MinWordSize = 5U; Op op; uint16_t wordCount; @@ -12766,9 +12766,9 @@ struct OpUDotKHR bool HasPackedVectorFormat() const { return wordCount > 5; } }; -struct OpSUDotKHR +struct OpSUDot { - OpSUDotKHR(const ConstIter &it) + OpSUDot(const ConstIter &it) { uint32_t word = 0;(void)word; this->op = OpCode; @@ -12779,8 +12779,8 @@ struct OpSUDotKHR this->vector2 = Id::fromWord(it.word(4)); this->packedVectorFormat = (it.size() > 5) ? (PackedVectorFormat)it.word(5) : PackedVectorFormat::Invalid; } - OpSUDotKHR(IdResultType resultType, IdResult result, Id vector1, Id vector2, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) - : op(Op::SUDotKHR) + OpSUDot(IdResultType resultType, IdResult result, Id vector1, Id vector2, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) + : op(Op::SUDot) , wordCount(MinWordSize + OptionalWordCount(packedVectorFormat)) { this->resultType = resultType; @@ -12800,7 +12800,7 @@ struct OpSUDotKHR return Operation(OpCode, words); } - static constexpr Op OpCode = Op::SUDotKHR; + static constexpr Op OpCode = Op::SUDot; static constexpr uint16_t MinWordSize = 5U; Op op; uint16_t wordCount; @@ -12813,9 +12813,9 @@ struct OpSUDotKHR bool HasPackedVectorFormat() const { return wordCount > 5; } }; -struct OpSDotAccSatKHR +struct OpSDotAccSat { - OpSDotAccSatKHR(const ConstIter &it) + OpSDotAccSat(const ConstIter &it) { uint32_t word = 0;(void)word; this->op = OpCode; @@ -12827,8 +12827,8 @@ struct OpSDotAccSatKHR this->accumulator = Id::fromWord(it.word(5)); this->packedVectorFormat = (it.size() > 6) ? (PackedVectorFormat)it.word(6) : PackedVectorFormat::Invalid; } - OpSDotAccSatKHR(IdResultType resultType, IdResult result, Id vector1, Id vector2, Id accumulator, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) - : op(Op::SDotAccSatKHR) + OpSDotAccSat(IdResultType resultType, IdResult result, Id vector1, Id vector2, Id accumulator, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) + : op(Op::SDotAccSat) , wordCount(MinWordSize + OptionalWordCount(packedVectorFormat)) { this->resultType = resultType; @@ -12850,7 +12850,7 @@ struct OpSDotAccSatKHR return Operation(OpCode, words); } - static constexpr Op OpCode = Op::SDotAccSatKHR; + static constexpr Op OpCode = Op::SDotAccSat; static constexpr uint16_t MinWordSize = 6U; Op op; uint16_t wordCount; @@ -12864,9 +12864,9 @@ struct OpSDotAccSatKHR bool HasPackedVectorFormat() const { return wordCount > 6; } }; -struct OpUDotAccSatKHR +struct OpUDotAccSat { - OpUDotAccSatKHR(const ConstIter &it) + OpUDotAccSat(const ConstIter &it) { uint32_t word = 0;(void)word; this->op = OpCode; @@ -12878,8 +12878,8 @@ struct OpUDotAccSatKHR this->accumulator = Id::fromWord(it.word(5)); this->packedVectorFormat = (it.size() > 6) ? (PackedVectorFormat)it.word(6) : PackedVectorFormat::Invalid; } - OpUDotAccSatKHR(IdResultType resultType, IdResult result, Id vector1, Id vector2, Id accumulator, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) - : op(Op::UDotAccSatKHR) + OpUDotAccSat(IdResultType resultType, IdResult result, Id vector1, Id vector2, Id accumulator, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) + : op(Op::UDotAccSat) , wordCount(MinWordSize + OptionalWordCount(packedVectorFormat)) { this->resultType = resultType; @@ -12901,7 +12901,7 @@ struct OpUDotAccSatKHR return Operation(OpCode, words); } - static constexpr Op OpCode = Op::UDotAccSatKHR; + static constexpr Op OpCode = Op::UDotAccSat; static constexpr uint16_t MinWordSize = 6U; Op op; uint16_t wordCount; @@ -12915,9 +12915,9 @@ struct OpUDotAccSatKHR bool HasPackedVectorFormat() const { return wordCount > 6; } }; -struct OpSUDotAccSatKHR +struct OpSUDotAccSat { - OpSUDotAccSatKHR(const ConstIter &it) + OpSUDotAccSat(const ConstIter &it) { uint32_t word = 0;(void)word; this->op = OpCode; @@ -12929,8 +12929,8 @@ struct OpSUDotAccSatKHR this->accumulator = Id::fromWord(it.word(5)); this->packedVectorFormat = (it.size() > 6) ? (PackedVectorFormat)it.word(6) : PackedVectorFormat::Invalid; } - OpSUDotAccSatKHR(IdResultType resultType, IdResult result, Id vector1, Id vector2, Id accumulator, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) - : op(Op::SUDotAccSatKHR) + OpSUDotAccSat(IdResultType resultType, IdResult result, Id vector1, Id vector2, Id accumulator, PackedVectorFormat packedVectorFormat = PackedVectorFormat::Invalid) + : op(Op::SUDotAccSat) , wordCount(MinWordSize + OptionalWordCount(packedVectorFormat)) { this->resultType = resultType; @@ -12952,7 +12952,7 @@ struct OpSUDotAccSatKHR return Operation(OpCode, words); } - static constexpr Op OpCode = Op::SUDotAccSatKHR; + static constexpr Op OpCode = Op::SUDotAccSat; static constexpr uint16_t MinWordSize = 6U; Op op; uint16_t wordCount; @@ -13982,20 +13982,20 @@ struct OpEndInvocationInterlockEXT // no operands }; -struct OpDemoteToHelperInvocationEXT +struct OpDemoteToHelperInvocation { - OpDemoteToHelperInvocationEXT(const ConstIter &it) + OpDemoteToHelperInvocation(const ConstIter &it) { memcpy(this, it.words(), sizeof(*this)); } - OpDemoteToHelperInvocationEXT() - : op(Op::DemoteToHelperInvocationEXT) + OpDemoteToHelperInvocation() + : op(Op::DemoteToHelperInvocation) , wordCount(FixedWordSize) { // no operands } - static constexpr Op OpCode = Op::DemoteToHelperInvocationEXT; + static constexpr Op OpCode = Op::DemoteToHelperInvocation; static constexpr uint16_t FixedWordSize = 1U; Op op; uint16_t wordCount; @@ -14024,6 +14024,170 @@ struct OpIsHelperInvocationEXT IdResult result; }; +struct OpConvertUToImageNV +{ + OpConvertUToImageNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpConvertUToImageNV(IdResultType resultType, IdResult result, Id operand) + : op(Op::ConvertUToImageNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->operand = operand; + } + + static constexpr Op OpCode = Op::ConvertUToImageNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id operand; +}; + +struct OpConvertUToSamplerNV +{ + OpConvertUToSamplerNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpConvertUToSamplerNV(IdResultType resultType, IdResult result, Id operand) + : op(Op::ConvertUToSamplerNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->operand = operand; + } + + static constexpr Op OpCode = Op::ConvertUToSamplerNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id operand; +}; + +struct OpConvertImageToUNV +{ + OpConvertImageToUNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpConvertImageToUNV(IdResultType resultType, IdResult result, Id operand) + : op(Op::ConvertImageToUNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->operand = operand; + } + + static constexpr Op OpCode = Op::ConvertImageToUNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id operand; +}; + +struct OpConvertSamplerToUNV +{ + OpConvertSamplerToUNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpConvertSamplerToUNV(IdResultType resultType, IdResult result, Id operand) + : op(Op::ConvertSamplerToUNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->operand = operand; + } + + static constexpr Op OpCode = Op::ConvertSamplerToUNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id operand; +}; + +struct OpConvertUToSampledImageNV +{ + OpConvertUToSampledImageNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpConvertUToSampledImageNV(IdResultType resultType, IdResult result, Id operand) + : op(Op::ConvertUToSampledImageNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->operand = operand; + } + + static constexpr Op OpCode = Op::ConvertUToSampledImageNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id operand; +}; + +struct OpConvertSampledImageToUNV +{ + OpConvertSampledImageToUNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpConvertSampledImageToUNV(IdResultType resultType, IdResult result, Id operand) + : op(Op::ConvertSampledImageToUNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->operand = operand; + } + + static constexpr Op OpCode = Op::ConvertSampledImageToUNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id operand; +}; + +struct OpSamplerImageAddressingModeNV +{ + OpSamplerImageAddressingModeNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpSamplerImageAddressingModeNV(uint32_t bitWidth) + : op(Op::SamplerImageAddressingModeNV) + , wordCount(FixedWordSize) + { + this->bitWidth = bitWidth; + } + + static constexpr Op OpCode = Op::SamplerImageAddressingModeNV; + static constexpr uint16_t FixedWordSize = 2U; + Op op; + uint16_t wordCount; + uint32_t bitWidth; +}; + struct OpSubgroupShuffleINTEL { OpSubgroupShuffleINTEL(const ConstIter &it) @@ -14646,14 +14810,14 @@ struct OpUMul32x16INTEL Id operand2; }; -struct OpConstFunctionPointerINTEL +struct OpConstantFunctionPointerINTEL { - OpConstFunctionPointerINTEL(const ConstIter &it) + OpConstantFunctionPointerINTEL(const ConstIter &it) { memcpy(this, it.words(), sizeof(*this)); } - OpConstFunctionPointerINTEL(IdResultType resultType, IdResult result, Id function) - : op(Op::ConstFunctionPointerINTEL) + OpConstantFunctionPointerINTEL(IdResultType resultType, IdResult result, Id function) + : op(Op::ConstantFunctionPointerINTEL) , wordCount(FixedWordSize) { this->resultType = resultType; @@ -14661,7 +14825,7 @@ struct OpConstFunctionPointerINTEL this->function = function; } - static constexpr Op OpCode = Op::ConstFunctionPointerINTEL; + static constexpr Op OpCode = Op::ConstantFunctionPointerINTEL; static constexpr uint16_t FixedWordSize = 4U; Op op; uint16_t wordCount;