diff --git a/renderdoc/driver/shaders/spirv/spir-v.xml b/renderdoc/driver/shaders/spirv/spir-v.xml index dad141be1..642fdf3b6 100644 --- a/renderdoc/driver/shaders/spirv/spir-v.xml +++ b/renderdoc/driver/shaders/spirv/spir-v.xml @@ -62,7 +62,7 @@ - + @@ -86,7 +86,8 @@ - + + diff --git a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json index c6517c4c4..b23d8a86c 100644 --- a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json +++ b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json @@ -4754,6 +4754,461 @@ "extensions" : [ "SPV_KHR_shader_clock" ], "version" : "None" }, + { + "opname" : "OpHitObjectRecordHitMotionNV", + "class" : "Reserved", + "opcode" : 5249, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, + { "kind" : "IdRef", "name" : "'InstanceId'" }, + { "kind" : "IdRef", "name" : "'PrimitiveId'" }, + { "kind" : "IdRef", "name" : "'GeometryIndex'" }, + { "kind" : "IdRef", "name" : "'Hit Kind'" }, + { "kind" : "IdRef", "name" : "'SBT Record Offset'" }, + { "kind" : "IdRef", "name" : "'SBT Record Stride'" }, + { "kind" : "IdRef", "name" : "'Origin'" }, + { "kind" : "IdRef", "name" : "'TMin'" }, + { "kind" : "IdRef", "name" : "'Direction'" }, + { "kind" : "IdRef", "name" : "'TMax'" }, + { "kind" : "IdRef", "name" : "'Current Time'" }, + { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectRecordHitWithIndexMotionNV", + "class" : "Reserved", + "opcode" : 5250, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, + { "kind" : "IdRef", "name" : "'InstanceId'" }, + { "kind" : "IdRef", "name" : "'PrimitiveId'" }, + { "kind" : "IdRef", "name" : "'GeometryIndex'" }, + { "kind" : "IdRef", "name" : "'Hit Kind'" }, + { "kind" : "IdRef", "name" : "'SBT Record Index'" }, + { "kind" : "IdRef", "name" : "'Origin'" }, + { "kind" : "IdRef", "name" : "'TMin'" }, + { "kind" : "IdRef", "name" : "'Direction'" }, + { "kind" : "IdRef", "name" : "'TMax'" }, + { "kind" : "IdRef", "name" : "'Current Time'" }, + { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectRecordMissMotionNV", + "class" : "Reserved", + "opcode" : 5251, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'SBT Index'" }, + { "kind" : "IdRef", "name" : "'Origin'" }, + { "kind" : "IdRef", "name" : "'TMin'" }, + { "kind" : "IdRef", "name" : "'Direction'" }, + { "kind" : "IdRef", "name" : "'TMax'" }, + { "kind" : "IdRef", "name" : "'Current Time'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetWorldToObjectNV", + "class" : "Reserved", + "opcode" : 5252, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetObjectToWorldNV", + "class" : "Reserved", + "opcode" : 5253, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetObjectRayDirectionNV", + "class" : "Reserved", + "opcode" : 5254, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetObjectRayOriginNV", + "class" : "Reserved", + "opcode" : 5255, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectTraceRayMotionNV", + "class" : "Reserved", + "opcode" : 5256, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Acceleration Structure'"}, + { "kind" : "IdRef", "name" : "'RayFlags'"}, + { "kind" : "IdRef", "name" : "'Cullmask'"}, + { "kind" : "IdRef", "name" : "'SBT Record Offset'"}, + { "kind" : "IdRef", "name" : "'SBT Record Stride'"}, + { "kind" : "IdRef", "name" : "'Miss Index'"}, + { "kind" : "IdRef", "name" : "'Origin'"}, + { "kind" : "IdRef", "name" : "'TMin'"}, + { "kind" : "IdRef", "name" : "'Direction'"}, + { "kind" : "IdRef", "name" : "'TMax'"}, + { "kind" : "IdRef", "name" : "'Time'"}, + { "kind" : "IdRef", "name" : "'Payload'"} + ], + "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetShaderRecordBufferHandleNV", + "class" : "Reserved", + "opcode" : 5257, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetShaderBindingTableRecordIndexNV", + "class" : "Reserved", + "opcode" : 5258, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectRecordEmptyNV", + "class" : "Reserved", + "opcode" : 5259, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectTraceRayNV", + "class" : "Reserved", + "opcode" : 5260, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Acceleration Structure'"}, + { "kind" : "IdRef", "name" : "'RayFlags'"}, + { "kind" : "IdRef", "name" : "'Cullmask'"}, + { "kind" : "IdRef", "name" : "'SBT Record Offset'"}, + { "kind" : "IdRef", "name" : "'SBT Record Stride'"}, + { "kind" : "IdRef", "name" : "'Miss Index'"}, + { "kind" : "IdRef", "name" : "'Origin'"}, + { "kind" : "IdRef", "name" : "'TMin'"}, + { "kind" : "IdRef", "name" : "'Direction'"}, + { "kind" : "IdRef", "name" : "'TMax'"}, + { "kind" : "IdRef", "name" : "'Payload'"} + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectRecordHitNV", + "class" : "Reserved", + "opcode" : 5261, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, + { "kind" : "IdRef", "name" : "'InstanceId'" }, + { "kind" : "IdRef", "name" : "'PrimitiveId'" }, + { "kind" : "IdRef", "name" : "'GeometryIndex'" }, + { "kind" : "IdRef", "name" : "'Hit Kind'" }, + { "kind" : "IdRef", "name" : "'SBT Record Offset'" }, + { "kind" : "IdRef", "name" : "'SBT Record Stride'" }, + { "kind" : "IdRef", "name" : "'Origin'" }, + { "kind" : "IdRef", "name" : "'TMin'" }, + { "kind" : "IdRef", "name" : "'Direction'" }, + { "kind" : "IdRef", "name" : "'TMax'" }, + { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectRecordHitWithIndexNV", + "class" : "Reserved", + "opcode" : 5262, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, + { "kind" : "IdRef", "name" : "'InstanceId'" }, + { "kind" : "IdRef", "name" : "'PrimitiveId'" }, + { "kind" : "IdRef", "name" : "'GeometryIndex'" }, + { "kind" : "IdRef", "name" : "'Hit Kind'" }, + { "kind" : "IdRef", "name" : "'SBT Record Index'" }, + { "kind" : "IdRef", "name" : "'Origin'" }, + { "kind" : "IdRef", "name" : "'TMin'" }, + { "kind" : "IdRef", "name" : "'Direction'" }, + { "kind" : "IdRef", "name" : "'TMax'" }, + { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectRecordMissNV", + "class" : "Reserved", + "opcode" : 5263, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'SBT Index'" }, + { "kind" : "IdRef", "name" : "'Origin'" }, + { "kind" : "IdRef", "name" : "'TMin'" }, + { "kind" : "IdRef", "name" : "'Direction'" }, + { "kind" : "IdRef", "name" : "'TMax'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectExecuteShaderNV", + "class" : "Reserved", + "opcode" : 5264, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Payload'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetCurrentTimeNV", + "class" : "Reserved", + "opcode" : 5265, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetAttributesNV", + "class" : "Reserved", + "opcode" : 5266, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "name" : "'Hit Object Attribute'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetHitKindNV", + "class" : "Reserved", + "opcode" : 5267, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetPrimitiveIndexNV", + "class" : "Reserved", + "opcode" : 5268, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetGeometryIndexNV", + "class" : "Reserved", + "opcode" : 5269, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetInstanceIdNV", + "class" : "Reserved", + "opcode" : 5270, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetInstanceCustomIndexNV", + "class" : "Reserved", + "opcode" : 5271, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetWorldRayDirectionNV", + "class" : "Reserved", + "opcode" : 5272, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetWorldRayOriginNV", + "class" : "Reserved", + "opcode" : 5273, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetRayTMaxNV", + "class" : "Reserved", + "opcode" : 5274, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetRayTMinNV", + "class" : "Reserved", + "opcode" : 5275, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsEmptyNV", + "class" : "Reserved", + "opcode" : 5276, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsHitNV", + "class" : "Reserved", + "opcode" : 5277, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsMissNV", + "class" : "Reserved", + "opcode" : 5278, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "'Hit Object'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpReorderThreadWithHitObjectNV", + "class" : "Reserved", + "opcode" : 5279, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hit Object'" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'Hint'" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "'Bits'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpReorderThreadWithHintNV", + "class" : "Reserved", + "opcode" : 5280, + "operands" : [ + { "kind" : "IdRef", "name" : "'Hint'" }, + { "kind" : "IdRef", "name" : "'Bits'" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, + { + "opname" : "OpTypeHitObjectNV", + "class" : "Reserved", + "opcode" : 5281, + "operands" : [ + { "kind" : "IdResult" } + ], + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, { "opname" : "OpImageSampleFootprintNV", "class" : "Image", @@ -9020,7 +9475,6 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { @@ -9030,7 +9484,6 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { @@ -9040,7 +9493,6 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { @@ -9050,7 +9502,6 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { @@ -9060,7 +9511,6 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { @@ -9070,7 +9520,6 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { @@ -9080,17 +9529,30 @@ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" }, { "enumerant" : "NoFusionINTEL", "value" : "0x800000", + "capabilities" : [ "FPGALoopControlsINTEL" ], + "version" : "None" + }, + { + "enumerant" : "LoopCountINTEL", + "value" : "0x1000000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "version" : "None" + }, + { + "enumerant" : "MaxReinvocationDelayINTEL", + "value" : "0x2000000", "parameters" : [ { "kind" : "LiteralInteger" } ], "capabilities" : [ "FPGALoopControlsINTEL" ], - "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], "version" : "None" } ] @@ -10245,6 +10707,15 @@ "capabilities" : [ "FPGAKernelAttributesINTEL" ], "version" : "None" }, + { + "enumerant" : "StreamingInterfaceINTEL", + "value" : 6154, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'StallFreeReturn'" } + ], + "capabilities" : [ "FPGAKernelAttributesINTEL" ], + "version" : "None" + }, { "enumerant" : "NamedBarrierCountINTEL", "value" : 6417, @@ -10422,6 +10893,12 @@ "capabilities" : [ "PhysicalStorageBufferAddresses" ], "version" : "1.5" }, + { + "enumerant" : "HitObjectAttributeNV", + "value" : 5385, + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, { "enumerant" : "TaskPayloadWorkgroupEXT", "value" : 5402, @@ -11184,6 +11661,11 @@ "enumerant" : "NoReadWrite", "value" : 7, "capabilities" : [ "Kernel" ] + }, + { + "enumerant" : "RuntimeAlignedINTEL", + "value" : 5940, + "capabilities" : [ "RuntimeAlignedAttributeINTEL" ] } ] }, @@ -11624,6 +12106,12 @@ "extensions" : [ "SPV_EXT_physical_storage_buffer" ], "version" : "1.5" }, + { + "enumerant" : "HitObjectShaderRecordBufferNV", + "value" : 5386, + "capabilities" : [ "ShaderInvocationReorderNV" ], + "version" : "None" + }, { "enumerant" : "BindlessSamplerNV", "value" : 5398, @@ -11929,6 +12417,16 @@ "capabilities" : [ "LoopFuseINTEL" ], "version" : "None" }, + { + "enumerant" : "MathOpDSPModeINTEL", + "value" : 5909, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Mode'" }, + { "kind" : "LiteralInteger", "name" : "'Propagate'" } + ], + "capabilities" : [ "FPGADSPControlINTEL" ], + "version" : "None" + }, { "enumerant" : "AliasScopeINTEL", "value" : 5914, @@ -11947,6 +12445,33 @@ "capabilities" : [ "MemoryAccessAliasingINTEL" ], "version" : "None" }, + { + "enumerant" : "InitiationIntervalINTEL", + "value" : 5917, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Cycles'" } + ], + "capabilities" : [ "FPGAInvocationPipeliningAttributesINTEL" ], + "version" : "None" + }, + { + "enumerant" : "MaxConcurrencyINTEL", + "value" : 5918, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Invocations'" } + ], + "capabilities" : [ "FPGAInvocationPipeliningAttributesINTEL" ], + "version" : "None" + }, + { + "enumerant" : "PipelineEnableINTEL", + "value" : 5919, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Enable'" } + ], + "capabilities" : [ "FPGAInvocationPipeliningAttributesINTEL" ], + "version" : "None" + }, { "enumerant" : "BufferLocationINTEL", "value" : 5921, @@ -13923,6 +14448,13 @@ "extensions" : [ "SPV_EXT_opacity_micromap" ], "version" : "None" }, + { + "enumerant" : "ShaderInvocationReorderNV", + "value" : 5383, + "capabilities" : [ "RayTracingKHR" ], + "extensions" : [ "SPV_NV_shader_invocation_reorder" ], + "version" : "None" + }, { "enumerant" : "BindlessTextureNV", "value" : 5390, @@ -14124,12 +14656,24 @@ "extensions" : [ "SPV_INTEL_loop_fuse" ], "version" : "None" }, + { + "enumerant" : "FPGADSPControlINTEL", + "value" : 5908, + "extensions" : [ "SPV_INTEL_fpga_dsp_control" ], + "version" : "None" + }, { "enumerant" : "MemoryAccessAliasingINTEL", "value" : 5910, "extensions" : [ "SPV_INTEL_memory_access_aliasing" ], "version" : "None" }, + { + "enumerant" : "FPGAInvocationPipeliningAttributesINTEL", + "value" : 5916, + "extensions" : [ "SPV_INTEL_fpga_invocation_pipelining_attributes" ], + "version" : "None" + }, { "enumerant" : "FPGABufferLocationINTEL", "value" : 5920, @@ -14148,6 +14692,12 @@ "extensions" : [ "SPV_INTEL_usm_storage_classes" ], "version" : "None" }, + { + "enumerant" : "RuntimeAlignedAttributeINTEL", + "value" : 5939, + "extensions" : [ "SPV_INTEL_runtime_aligned" ], + "version" : "None" + }, { "enumerant" : "IOPipesINTEL", "value" : 5943, diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index 7543e1a23..001f2077f 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -3683,6 +3683,39 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::SamplerImageAddressingModeNV: case Op::EmitMeshTasksEXT: case Op::SetMeshOutputsEXT: + case Op::HitObjectRecordHitMotionNV: + case Op::HitObjectRecordHitWithIndexMotionNV: + case Op::HitObjectRecordMissMotionNV: + case Op::HitObjectGetWorldToObjectNV: + case Op::HitObjectGetObjectToWorldNV: + case Op::HitObjectGetObjectRayDirectionNV: + case Op::HitObjectGetObjectRayOriginNV: + case Op::HitObjectTraceRayMotionNV: + case Op::HitObjectGetShaderRecordBufferHandleNV: + case Op::HitObjectGetShaderBindingTableRecordIndexNV: + case Op::HitObjectRecordEmptyNV: + case Op::HitObjectTraceRayNV: + case Op::HitObjectRecordHitNV: + case Op::HitObjectRecordHitWithIndexNV: + case Op::HitObjectRecordMissNV: + case Op::HitObjectExecuteShaderNV: + case Op::HitObjectGetCurrentTimeNV: + case Op::HitObjectGetAttributesNV: + case Op::HitObjectGetHitKindNV: + case Op::HitObjectGetPrimitiveIndexNV: + case Op::HitObjectGetGeometryIndexNV: + case Op::HitObjectGetInstanceIdNV: + case Op::HitObjectGetInstanceCustomIndexNV: + case Op::HitObjectGetWorldRayDirectionNV: + case Op::HitObjectGetWorldRayOriginNV: + case Op::HitObjectGetRayTMaxNV: + case Op::HitObjectGetRayTMinNV: + case Op::HitObjectIsEmptyNV: + case Op::HitObjectIsHitNV: + case Op::HitObjectIsMissNV: + case Op::ReorderThreadWithHitObjectNV: + case Op::ReorderThreadWithHintNV: + case Op::TypeHitObjectNV: { 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 46359c5b6..29ed8aecf 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -627,6 +627,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::RayTracingKHR: case Capability::RayCullMaskKHR: case Capability::RayTracingOpacityMicromapEXT: + case Capability::ShaderInvocationReorderNV: { supported = false; break; @@ -715,6 +716,9 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::SplitBarrierINTEL: case Capability::GroupUniformArithmeticKHR: case Capability::CoreBuiltinsARM: + case Capability::FPGADSPControlINTEL: + case Capability::FPGAInvocationPipeliningAttributesINTEL: + case Capability::RuntimeAlignedAttributeINTEL: 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 cc7b6d856..1d90c45dd 100644 --- a/renderdoc/driver/shaders/spirv/spirv_gen.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_gen.cpp @@ -144,6 +144,8 @@ rdcstr DoStringise(const rdcspv::LoopControl &el) STRINGISE_BITFIELD_CLASS_BIT(MaxInterleavingINTEL); STRINGISE_BITFIELD_CLASS_BIT(SpeculatedIterationsINTEL); STRINGISE_BITFIELD_CLASS_BIT(NoFusionINTEL); + STRINGISE_BITFIELD_CLASS_BIT(LoopCountINTEL); + STRINGISE_BITFIELD_CLASS_BIT(MaxReinvocationDelayINTEL); } END_BITFIELD_STRINGISE(); } @@ -401,6 +403,7 @@ rdcstr DoStringise(const rdcspv::ExecutionMode &el) STRINGISE_ENUM_CLASS(NoGlobalOffsetINTEL); STRINGISE_ENUM_CLASS(NumSIMDWorkitemsINTEL); STRINGISE_ENUM_CLASS(SchedulerTargetFmaxMhzINTEL); + STRINGISE_ENUM_CLASS(StreamingInterfaceINTEL); STRINGISE_ENUM_CLASS(NamedBarrierCountINTEL); } END_ENUM_STRINGISE(); @@ -431,6 +434,7 @@ rdcstr DoStringise(const rdcspv::StorageClass &el) STRINGISE_ENUM_CLASS(IncomingRayPayloadNV); STRINGISE_ENUM_CLASS(ShaderRecordBufferNV); STRINGISE_ENUM_CLASS(PhysicalStorageBuffer); + STRINGISE_ENUM_CLASS(HitObjectAttributeNV); STRINGISE_ENUM_CLASS(TaskPayloadWorkgroupEXT); STRINGISE_ENUM_CLASS(CodeSectionINTEL); STRINGISE_ENUM_CLASS(DeviceOnlyINTEL); @@ -688,6 +692,7 @@ rdcstr DoStringise(const rdcspv::FunctionParameterAttribute &el) STRINGISE_ENUM_CLASS(NoCapture); STRINGISE_ENUM_CLASS(NoWrite); STRINGISE_ENUM_CLASS(NoReadWrite); + STRINGISE_ENUM_CLASS(RuntimeAlignedINTEL); } END_ENUM_STRINGISE(); } @@ -758,6 +763,7 @@ rdcstr DoStringise(const rdcspv::Decoration &el) STRINGISE_ENUM_CLASS(NonUniform); STRINGISE_ENUM_CLASS(RestrictPointer); STRINGISE_ENUM_CLASS(AliasedPointer); + STRINGISE_ENUM_CLASS(HitObjectShaderRecordBufferNV); STRINGISE_ENUM_CLASS(BindlessSamplerNV); STRINGISE_ENUM_CLASS(BindlessImageNV); STRINGISE_ENUM_CLASS(BoundSamplerNV); @@ -794,8 +800,12 @@ rdcstr DoStringise(const rdcspv::Decoration &el) STRINGISE_ENUM_CLASS(PrefetchINTEL); STRINGISE_ENUM_CLASS(StallEnableINTEL); STRINGISE_ENUM_CLASS(FuseLoopsInFunctionINTEL); + STRINGISE_ENUM_CLASS(MathOpDSPModeINTEL); STRINGISE_ENUM_CLASS(AliasScopeINTEL); STRINGISE_ENUM_CLASS(NoAliasINTEL); + STRINGISE_ENUM_CLASS(InitiationIntervalINTEL); + STRINGISE_ENUM_CLASS(MaxConcurrencyINTEL); + STRINGISE_ENUM_CLASS(PipelineEnableINTEL); STRINGISE_ENUM_CLASS(BufferLocationINTEL); STRINGISE_ENUM_CLASS(IOPipeStorageINTEL); STRINGISE_ENUM_CLASS(FunctionFloatingPointModeINTEL); @@ -1120,6 +1130,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(FragmentShaderPixelInterlockEXT); STRINGISE_ENUM_CLASS(DemoteToHelperInvocation); STRINGISE_ENUM_CLASS(RayTracingOpacityMicromapEXT); + STRINGISE_ENUM_CLASS(ShaderInvocationReorderNV); STRINGISE_ENUM_CLASS(BindlessTextureNV); STRINGISE_ENUM_CLASS(SubgroupShuffleINTEL); STRINGISE_ENUM_CLASS(SubgroupBufferBlockIOINTEL); @@ -1153,10 +1164,13 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(FPGAMemoryAccessesINTEL); STRINGISE_ENUM_CLASS(FPGAClusterAttributesINTEL); STRINGISE_ENUM_CLASS(LoopFuseINTEL); + STRINGISE_ENUM_CLASS(FPGADSPControlINTEL); STRINGISE_ENUM_CLASS(MemoryAccessAliasingINTEL); + STRINGISE_ENUM_CLASS(FPGAInvocationPipeliningAttributesINTEL); STRINGISE_ENUM_CLASS(FPGABufferLocationINTEL); STRINGISE_ENUM_CLASS(ArbitraryPrecisionFixedPointINTEL); STRINGISE_ENUM_CLASS(USMStorageClassesINTEL); + STRINGISE_ENUM_CLASS(RuntimeAlignedAttributeINTEL); STRINGISE_ENUM_CLASS(IOPipesINTEL); STRINGISE_ENUM_CLASS(BlockingPipesINTEL); STRINGISE_ENUM_CLASS(FPGARegINTEL); @@ -1609,6 +1623,39 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(FragmentMaskFetchAMD); STRINGISE_ENUM_CLASS(FragmentFetchAMD); STRINGISE_ENUM_CLASS(ReadClockKHR); + STRINGISE_ENUM_CLASS(HitObjectRecordHitMotionNV); + STRINGISE_ENUM_CLASS(HitObjectRecordHitWithIndexMotionNV); + STRINGISE_ENUM_CLASS(HitObjectRecordMissMotionNV); + STRINGISE_ENUM_CLASS(HitObjectGetWorldToObjectNV); + STRINGISE_ENUM_CLASS(HitObjectGetObjectToWorldNV); + STRINGISE_ENUM_CLASS(HitObjectGetObjectRayDirectionNV); + STRINGISE_ENUM_CLASS(HitObjectGetObjectRayOriginNV); + STRINGISE_ENUM_CLASS(HitObjectTraceRayMotionNV); + STRINGISE_ENUM_CLASS(HitObjectGetShaderRecordBufferHandleNV); + STRINGISE_ENUM_CLASS(HitObjectGetShaderBindingTableRecordIndexNV); + STRINGISE_ENUM_CLASS(HitObjectRecordEmptyNV); + STRINGISE_ENUM_CLASS(HitObjectTraceRayNV); + STRINGISE_ENUM_CLASS(HitObjectRecordHitNV); + STRINGISE_ENUM_CLASS(HitObjectRecordHitWithIndexNV); + STRINGISE_ENUM_CLASS(HitObjectRecordMissNV); + STRINGISE_ENUM_CLASS(HitObjectExecuteShaderNV); + STRINGISE_ENUM_CLASS(HitObjectGetCurrentTimeNV); + STRINGISE_ENUM_CLASS(HitObjectGetAttributesNV); + STRINGISE_ENUM_CLASS(HitObjectGetHitKindNV); + STRINGISE_ENUM_CLASS(HitObjectGetPrimitiveIndexNV); + STRINGISE_ENUM_CLASS(HitObjectGetGeometryIndexNV); + STRINGISE_ENUM_CLASS(HitObjectGetInstanceIdNV); + STRINGISE_ENUM_CLASS(HitObjectGetInstanceCustomIndexNV); + STRINGISE_ENUM_CLASS(HitObjectGetWorldRayDirectionNV); + STRINGISE_ENUM_CLASS(HitObjectGetWorldRayOriginNV); + STRINGISE_ENUM_CLASS(HitObjectGetRayTMaxNV); + STRINGISE_ENUM_CLASS(HitObjectGetRayTMinNV); + STRINGISE_ENUM_CLASS(HitObjectIsEmptyNV); + STRINGISE_ENUM_CLASS(HitObjectIsHitNV); + STRINGISE_ENUM_CLASS(HitObjectIsMissNV); + STRINGISE_ENUM_CLASS(ReorderThreadWithHitObjectNV); + STRINGISE_ENUM_CLASS(ReorderThreadWithHintNV); + STRINGISE_ENUM_CLASS(TypeHitObjectNV); STRINGISE_ENUM_CLASS(ImageSampleFootprintNV); STRINGISE_ENUM_CLASS(EmitMeshTasksEXT); STRINGISE_ENUM_CLASS(SetMeshOutputsEXT); @@ -1828,7 +1875,11 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: if(el.flags & LoopControl::SpeculatedIterationsINTEL) ret += "SpeculatedIterationsINTEL" "(" + ToStr(el.speculatedIterationsINTEL) + ")" ", "; if(el.flags & LoopControl::NoFusionINTEL) - ret += "NoFusionINTEL" "(" + ToStr(el.noFusionINTEL) + ")" ", "; + ret += "NoFusionINTEL" ", "; + if(el.flags & LoopControl::LoopCountINTEL) + ret += "LoopCountINTEL" "(" + ToStr(el.loopCountINTEL) + ")" ", "; + if(el.flags & LoopControl::MaxReinvocationDelayINTEL) + ret += "MaxReinvocationDelayINTEL" "(" + ToStr(el.maxReinvocationDelayINTEL) + ")" ", "; // remove trailing ", " if(ret.size() > 2) @@ -1925,6 +1976,8 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + ToStr(el.numSIMDWorkitemsINTEL) + ")"; break; case ExecutionMode::SchedulerTargetFmaxMhzINTEL: ret += "(" + ToStr(el.schedulerTargetFmaxMhzINTEL) + ")"; break; + case ExecutionMode::StreamingInterfaceINTEL: + ret += "(" + ToStr(el.streamingInterfaceINTEL) + ")"; break; case ExecutionMode::NamedBarrierCountINTEL: ret += "(" + ToStr(el.namedBarrierCountINTEL) + ")"; break; default: @@ -2015,10 +2068,18 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + ToStr(el.cacheSizeINTEL) + ")"; break; case Decoration::PrefetchINTEL: ret += "(" + ToStr(el.prefetchINTEL) + ")"; break; + case Decoration::MathOpDSPModeINTEL: + ret += "(" + ToStr(el.mathOpDSPModeINTEL.mode) + ", " + ToStr(el.mathOpDSPModeINTEL.propagate) + ")"; break; case Decoration::AliasScopeINTEL: ret += "(" + idName(el.aliasScopeINTEL) + ")"; break; case Decoration::NoAliasINTEL: ret += "(" + idName(el.noAliasINTEL) + ")"; break; + case Decoration::InitiationIntervalINTEL: + ret += "(" + ToStr(el.initiationIntervalINTEL) + ")"; break; + case Decoration::MaxConcurrencyINTEL: + ret += "(" + ToStr(el.maxConcurrencyINTEL) + ")"; break; + case Decoration::PipelineEnableINTEL: + ret += "(" + ToStr(el.pipelineEnableINTEL) + ")"; break; case Decoration::BufferLocationINTEL: ret += "(" + ToStr(el.bufferLocationINTEL) + ")"; break; case Decoration::IOPipeStorageINTEL: @@ -4136,6 +4197,230 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function &words, const LoopControlAndParamData { words.push_back((uint32_t)param.speculatedIterationsINTEL); } - if(param.flags & LoopControl::NoFusionINTEL) + if(param.flags & LoopControl::LoopCountINTEL) { - words.push_back((uint32_t)param.noFusionINTEL); + words.push_back((uint32_t)param.loopCountINTEL); + } + if(param.flags & LoopControl::MaxReinvocationDelayINTEL) + { + words.push_back((uint32_t)param.maxReinvocationDelayINTEL); } } @@ -470,7 +479,8 @@ inline uint16_t ExtraWordCount(const LoopControl loopControl) case LoopControl::LoopCoalesceINTEL: return 1; case LoopControl::MaxInterleavingINTEL: return 1; case LoopControl::SpeculatedIterationsINTEL: return 1; - case LoopControl::NoFusionINTEL: return 1; + case LoopControl::LoopCountINTEL: return 1; + case LoopControl::MaxReinvocationDelayINTEL: return 1; default: break; } return 0; @@ -895,6 +905,19 @@ struct ExecutionModeParam } }; +template<> +struct ExecutionModeParam +{ + uint32_t streamingInterfaceINTEL; + ExecutionModeParam(uint32_t streamingInterfaceINTELParam) { streamingInterfaceINTEL = streamingInterfaceINTELParam; } + operator ExecutionModeAndParamData() + { + ExecutionModeAndParamData ret(ExecutionMode::StreamingInterfaceINTEL); + ret.streamingInterfaceINTEL = streamingInterfaceINTEL; + return ret; + } +}; + template<> struct ExecutionModeParam { @@ -1029,6 +1052,10 @@ inline ExecutionModeAndParamData DecodeParam(const ConstIter &it, uint32_t &word ret.schedulerTargetFmaxMhzINTEL = (uint32_t)it.word(word); word += 1; break; + case ExecutionMode::StreamingInterfaceINTEL: + ret.streamingInterfaceINTEL = (uint32_t)it.word(word); + word += 1; + break; case ExecutionMode::NamedBarrierCountINTEL: ret.namedBarrierCountINTEL = (uint32_t)it.word(word); word += 1; @@ -1128,6 +1155,9 @@ inline void EncodeParam(rdcarray &words, const ExecutionModeAndParamDa case ExecutionMode::SchedulerTargetFmaxMhzINTEL: words.push_back((uint32_t)param.schedulerTargetFmaxMhzINTEL); break; + case ExecutionMode::StreamingInterfaceINTEL: + words.push_back((uint32_t)param.streamingInterfaceINTEL); + break; case ExecutionMode::NamedBarrierCountINTEL: words.push_back((uint32_t)param.namedBarrierCountINTEL); break; @@ -1164,6 +1194,7 @@ inline uint16_t ExtraWordCount(const ExecutionMode executionMode) case ExecutionMode::MaxWorkDimINTEL: return 1; case ExecutionMode::NumSIMDWorkitemsINTEL: return 1; case ExecutionMode::SchedulerTargetFmaxMhzINTEL: return 1; + case ExecutionMode::StreamingInterfaceINTEL: return 1; case ExecutionMode::NamedBarrierCountINTEL: return 1; default: break; } @@ -1685,6 +1716,20 @@ struct DecorationParam } }; +template<> +struct DecorationParam +{ + MathOpDSPModeINTELParams mathOpDSPModeINTEL; + DecorationParam(uint32_t mode, uint32_t propagate) { mathOpDSPModeINTEL.mode = mode; mathOpDSPModeINTEL.propagate = propagate; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::MathOpDSPModeINTEL); + ret.mathOpDSPModeINTEL.mode = mathOpDSPModeINTEL.mode; + ret.mathOpDSPModeINTEL.propagate = mathOpDSPModeINTEL.propagate; + return ret; + } +}; + template<> struct DecorationParam { @@ -1711,6 +1756,45 @@ struct DecorationParam } }; +template<> +struct DecorationParam +{ + uint32_t initiationIntervalINTEL; + DecorationParam(uint32_t initiationIntervalINTELParam) { initiationIntervalINTEL = initiationIntervalINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::InitiationIntervalINTEL); + ret.initiationIntervalINTEL = initiationIntervalINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t maxConcurrencyINTEL; + DecorationParam(uint32_t maxConcurrencyINTELParam) { maxConcurrencyINTEL = maxConcurrencyINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::MaxConcurrencyINTEL); + ret.maxConcurrencyINTEL = maxConcurrencyINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t pipelineEnableINTEL; + DecorationParam(uint32_t pipelineEnableINTELParam) { pipelineEnableINTEL = pipelineEnableINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::PipelineEnableINTEL); + ret.pipelineEnableINTEL = pipelineEnableINTEL; + return ret; + } +}; + template<> struct DecorationParam { @@ -1912,6 +1996,11 @@ inline DecorationAndParamData DecodeParam(const ConstIter &it, uint32_t &word) ret.prefetchINTEL = (uint32_t)it.word(word); word += 1; break; + case Decoration::MathOpDSPModeINTEL: + ret.mathOpDSPModeINTEL.mode = (uint32_t)it.word(word+0); + ret.mathOpDSPModeINTEL.propagate = (uint32_t)it.word(word+1); + word += 2; + break; case Decoration::AliasScopeINTEL: ret.aliasScopeINTEL = Id::fromWord(it.word(word)); word += 1; @@ -1920,6 +2009,18 @@ inline DecorationAndParamData DecodeParam(const ConstIter &it, uint32_t &word) ret.noAliasINTEL = Id::fromWord(it.word(word)); word += 1; break; + case Decoration::InitiationIntervalINTEL: + ret.initiationIntervalINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::MaxConcurrencyINTEL: + ret.maxConcurrencyINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::PipelineEnableINTEL: + ret.pipelineEnableINTEL = (uint32_t)it.word(word); + word += 1; + break; case Decoration::BufferLocationINTEL: ret.bufferLocationINTEL = (uint32_t)it.word(word); word += 1; @@ -2056,12 +2157,25 @@ inline void EncodeParam(rdcarray &words, const DecorationAndParamData case Decoration::PrefetchINTEL: words.push_back((uint32_t)param.prefetchINTEL); break; + case Decoration::MathOpDSPModeINTEL: + words.push_back((uint32_t)param.mathOpDSPModeINTEL.mode); + words.push_back((uint32_t)param.mathOpDSPModeINTEL.propagate); + break; case Decoration::AliasScopeINTEL: words.push_back(param.aliasScopeINTEL.value()); break; case Decoration::NoAliasINTEL: words.push_back(param.noAliasINTEL.value()); break; + case Decoration::InitiationIntervalINTEL: + words.push_back((uint32_t)param.initiationIntervalINTEL); + break; + case Decoration::MaxConcurrencyINTEL: + words.push_back((uint32_t)param.maxConcurrencyINTEL); + break; + case Decoration::PipelineEnableINTEL: + words.push_back((uint32_t)param.pipelineEnableINTEL); + break; case Decoration::BufferLocationINTEL: words.push_back((uint32_t)param.bufferLocationINTEL); break; @@ -2117,8 +2231,12 @@ inline uint16_t ExtraWordCount(const Decoration decoration) case Decoration::ForcePow2DepthINTEL: return 1; case Decoration::CacheSizeINTEL: return 1; case Decoration::PrefetchINTEL: return 1; + case Decoration::MathOpDSPModeINTEL: return 2; case Decoration::AliasScopeINTEL: return 1; case Decoration::NoAliasINTEL: return 1; + case Decoration::InitiationIntervalINTEL: return 1; + case Decoration::MaxConcurrencyINTEL: return 1; + case Decoration::PipelineEnableINTEL: return 1; case Decoration::BufferLocationINTEL: return 1; case Decoration::IOPipeStorageINTEL: return 1; case Decoration::FunctionFloatingPointModeINTEL: return 2; @@ -13568,6 +13686,932 @@ struct OpReadClockKHR IdScope scope; }; +struct OpHitObjectRecordHitMotionNV +{ + OpHitObjectRecordHitMotionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordHitMotionNV(Id hitObject, Id accelerationStructure, Id instanceId, Id primitiveId, Id geometryIndex, Id hitKind, Id sBTRecordOffset, Id sBTRecordStride, Id origin, Id tMin, Id direction, Id tMax, Id currentTime, Id hitObjectAttributes) + : op(Op::HitObjectRecordHitMotionNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->accelerationStructure = accelerationStructure; + this->instanceId = instanceId; + this->primitiveId = primitiveId; + this->geometryIndex = geometryIndex; + this->hitKind = hitKind; + this->sBTRecordOffset = sBTRecordOffset; + this->sBTRecordStride = sBTRecordStride; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->currentTime = currentTime; + this->hitObjectAttributes = hitObjectAttributes; + } + + static constexpr Op OpCode = Op::HitObjectRecordHitMotionNV; + static constexpr uint16_t FixedWordSize = 15U; + Op op; + uint16_t wordCount; + Id hitObject; + Id accelerationStructure; + Id instanceId; + Id primitiveId; + Id geometryIndex; + Id hitKind; + Id sBTRecordOffset; + Id sBTRecordStride; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id currentTime; + Id hitObjectAttributes; +}; + +struct OpHitObjectRecordHitWithIndexMotionNV +{ + OpHitObjectRecordHitWithIndexMotionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordHitWithIndexMotionNV(Id hitObject, Id accelerationStructure, Id instanceId, Id primitiveId, Id geometryIndex, Id hitKind, Id sBTRecordIndex, Id origin, Id tMin, Id direction, Id tMax, Id currentTime, Id hitObjectAttributes) + : op(Op::HitObjectRecordHitWithIndexMotionNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->accelerationStructure = accelerationStructure; + this->instanceId = instanceId; + this->primitiveId = primitiveId; + this->geometryIndex = geometryIndex; + this->hitKind = hitKind; + this->sBTRecordIndex = sBTRecordIndex; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->currentTime = currentTime; + this->hitObjectAttributes = hitObjectAttributes; + } + + static constexpr Op OpCode = Op::HitObjectRecordHitWithIndexMotionNV; + static constexpr uint16_t FixedWordSize = 14U; + Op op; + uint16_t wordCount; + Id hitObject; + Id accelerationStructure; + Id instanceId; + Id primitiveId; + Id geometryIndex; + Id hitKind; + Id sBTRecordIndex; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id currentTime; + Id hitObjectAttributes; +}; + +struct OpHitObjectRecordMissMotionNV +{ + OpHitObjectRecordMissMotionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordMissMotionNV(Id hitObject, Id sBTIndex, Id origin, Id tMin, Id direction, Id tMax, Id currentTime) + : op(Op::HitObjectRecordMissMotionNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->sBTIndex = sBTIndex; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->currentTime = currentTime; + } + + static constexpr Op OpCode = Op::HitObjectRecordMissMotionNV; + static constexpr uint16_t FixedWordSize = 8U; + Op op; + uint16_t wordCount; + Id hitObject; + Id sBTIndex; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id currentTime; +}; + +struct OpHitObjectGetWorldToObjectNV +{ + OpHitObjectGetWorldToObjectNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetWorldToObjectNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetWorldToObjectNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetWorldToObjectNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetObjectToWorldNV +{ + OpHitObjectGetObjectToWorldNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetObjectToWorldNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetObjectToWorldNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetObjectToWorldNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetObjectRayDirectionNV +{ + OpHitObjectGetObjectRayDirectionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetObjectRayDirectionNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetObjectRayDirectionNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetObjectRayDirectionNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetObjectRayOriginNV +{ + OpHitObjectGetObjectRayOriginNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetObjectRayOriginNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetObjectRayOriginNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetObjectRayOriginNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectTraceRayMotionNV +{ + OpHitObjectTraceRayMotionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectTraceRayMotionNV(Id hitObject, Id accelerationStructure, Id rayFlags, Id cullmask, Id sBTRecordOffset, Id sBTRecordStride, Id missIndex, Id origin, Id tMin, Id direction, Id tMax, Id time, Id payload) + : op(Op::HitObjectTraceRayMotionNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->accelerationStructure = accelerationStructure; + this->rayFlags = rayFlags; + this->cullmask = cullmask; + this->sBTRecordOffset = sBTRecordOffset; + this->sBTRecordStride = sBTRecordStride; + this->missIndex = missIndex; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->time = time; + this->payload = payload; + } + + static constexpr Op OpCode = Op::HitObjectTraceRayMotionNV; + static constexpr uint16_t FixedWordSize = 14U; + Op op; + uint16_t wordCount; + Id hitObject; + Id accelerationStructure; + Id rayFlags; + Id cullmask; + Id sBTRecordOffset; + Id sBTRecordStride; + Id missIndex; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id time; + Id payload; +}; + +struct OpHitObjectGetShaderRecordBufferHandleNV +{ + OpHitObjectGetShaderRecordBufferHandleNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetShaderRecordBufferHandleNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetShaderRecordBufferHandleNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetShaderRecordBufferHandleNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetShaderBindingTableRecordIndexNV +{ + OpHitObjectGetShaderBindingTableRecordIndexNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetShaderBindingTableRecordIndexNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetShaderBindingTableRecordIndexNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetShaderBindingTableRecordIndexNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectRecordEmptyNV +{ + OpHitObjectRecordEmptyNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordEmptyNV(Id hitObject) + : op(Op::HitObjectRecordEmptyNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectRecordEmptyNV; + static constexpr uint16_t FixedWordSize = 2U; + Op op; + uint16_t wordCount; + Id hitObject; +}; + +struct OpHitObjectTraceRayNV +{ + OpHitObjectTraceRayNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectTraceRayNV(Id hitObject, Id accelerationStructure, Id rayFlags, Id cullmask, Id sBTRecordOffset, Id sBTRecordStride, Id missIndex, Id origin, Id tMin, Id direction, Id tMax, Id payload) + : op(Op::HitObjectTraceRayNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->accelerationStructure = accelerationStructure; + this->rayFlags = rayFlags; + this->cullmask = cullmask; + this->sBTRecordOffset = sBTRecordOffset; + this->sBTRecordStride = sBTRecordStride; + this->missIndex = missIndex; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->payload = payload; + } + + static constexpr Op OpCode = Op::HitObjectTraceRayNV; + static constexpr uint16_t FixedWordSize = 13U; + Op op; + uint16_t wordCount; + Id hitObject; + Id accelerationStructure; + Id rayFlags; + Id cullmask; + Id sBTRecordOffset; + Id sBTRecordStride; + Id missIndex; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id payload; +}; + +struct OpHitObjectRecordHitNV +{ + OpHitObjectRecordHitNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordHitNV(Id hitObject, Id accelerationStructure, Id instanceId, Id primitiveId, Id geometryIndex, Id hitKind, Id sBTRecordOffset, Id sBTRecordStride, Id origin, Id tMin, Id direction, Id tMax, Id hitObjectAttributes) + : op(Op::HitObjectRecordHitNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->accelerationStructure = accelerationStructure; + this->instanceId = instanceId; + this->primitiveId = primitiveId; + this->geometryIndex = geometryIndex; + this->hitKind = hitKind; + this->sBTRecordOffset = sBTRecordOffset; + this->sBTRecordStride = sBTRecordStride; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->hitObjectAttributes = hitObjectAttributes; + } + + static constexpr Op OpCode = Op::HitObjectRecordHitNV; + static constexpr uint16_t FixedWordSize = 14U; + Op op; + uint16_t wordCount; + Id hitObject; + Id accelerationStructure; + Id instanceId; + Id primitiveId; + Id geometryIndex; + Id hitKind; + Id sBTRecordOffset; + Id sBTRecordStride; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id hitObjectAttributes; +}; + +struct OpHitObjectRecordHitWithIndexNV +{ + OpHitObjectRecordHitWithIndexNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordHitWithIndexNV(Id hitObject, Id accelerationStructure, Id instanceId, Id primitiveId, Id geometryIndex, Id hitKind, Id sBTRecordIndex, Id origin, Id tMin, Id direction, Id tMax, Id hitObjectAttributes) + : op(Op::HitObjectRecordHitWithIndexNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->accelerationStructure = accelerationStructure; + this->instanceId = instanceId; + this->primitiveId = primitiveId; + this->geometryIndex = geometryIndex; + this->hitKind = hitKind; + this->sBTRecordIndex = sBTRecordIndex; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + this->hitObjectAttributes = hitObjectAttributes; + } + + static constexpr Op OpCode = Op::HitObjectRecordHitWithIndexNV; + static constexpr uint16_t FixedWordSize = 13U; + Op op; + uint16_t wordCount; + Id hitObject; + Id accelerationStructure; + Id instanceId; + Id primitiveId; + Id geometryIndex; + Id hitKind; + Id sBTRecordIndex; + Id origin; + Id tMin; + Id direction; + Id tMax; + Id hitObjectAttributes; +}; + +struct OpHitObjectRecordMissNV +{ + OpHitObjectRecordMissNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectRecordMissNV(Id hitObject, Id sBTIndex, Id origin, Id tMin, Id direction, Id tMax) + : op(Op::HitObjectRecordMissNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->sBTIndex = sBTIndex; + this->origin = origin; + this->tMin = tMin; + this->direction = direction; + this->tMax = tMax; + } + + static constexpr Op OpCode = Op::HitObjectRecordMissNV; + static constexpr uint16_t FixedWordSize = 7U; + Op op; + uint16_t wordCount; + Id hitObject; + Id sBTIndex; + Id origin; + Id tMin; + Id direction; + Id tMax; +}; + +struct OpHitObjectExecuteShaderNV +{ + OpHitObjectExecuteShaderNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectExecuteShaderNV(Id hitObject, Id payload) + : op(Op::HitObjectExecuteShaderNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->payload = payload; + } + + static constexpr Op OpCode = Op::HitObjectExecuteShaderNV; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + Id hitObject; + Id payload; +}; + +struct OpHitObjectGetCurrentTimeNV +{ + OpHitObjectGetCurrentTimeNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetCurrentTimeNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetCurrentTimeNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetCurrentTimeNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetAttributesNV +{ + OpHitObjectGetAttributesNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetAttributesNV(Id hitObject, Id hitObjectAttribute) + : op(Op::HitObjectGetAttributesNV) + , wordCount(FixedWordSize) + { + this->hitObject = hitObject; + this->hitObjectAttribute = hitObjectAttribute; + } + + static constexpr Op OpCode = Op::HitObjectGetAttributesNV; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + Id hitObject; + Id hitObjectAttribute; +}; + +struct OpHitObjectGetHitKindNV +{ + OpHitObjectGetHitKindNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetHitKindNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetHitKindNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetHitKindNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetPrimitiveIndexNV +{ + OpHitObjectGetPrimitiveIndexNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetPrimitiveIndexNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetPrimitiveIndexNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetPrimitiveIndexNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetGeometryIndexNV +{ + OpHitObjectGetGeometryIndexNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetGeometryIndexNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetGeometryIndexNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetGeometryIndexNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetInstanceIdNV +{ + OpHitObjectGetInstanceIdNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetInstanceIdNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetInstanceIdNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetInstanceIdNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetInstanceCustomIndexNV +{ + OpHitObjectGetInstanceCustomIndexNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetInstanceCustomIndexNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetInstanceCustomIndexNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetInstanceCustomIndexNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetWorldRayDirectionNV +{ + OpHitObjectGetWorldRayDirectionNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetWorldRayDirectionNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetWorldRayDirectionNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetWorldRayDirectionNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetWorldRayOriginNV +{ + OpHitObjectGetWorldRayOriginNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetWorldRayOriginNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetWorldRayOriginNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetWorldRayOriginNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetRayTMaxNV +{ + OpHitObjectGetRayTMaxNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetRayTMaxNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetRayTMaxNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetRayTMaxNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectGetRayTMinNV +{ + OpHitObjectGetRayTMinNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectGetRayTMinNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectGetRayTMinNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectGetRayTMinNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectIsEmptyNV +{ + OpHitObjectIsEmptyNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectIsEmptyNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectIsEmptyNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectIsEmptyNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectIsHitNV +{ + OpHitObjectIsHitNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectIsHitNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectIsHitNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectIsHitNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpHitObjectIsMissNV +{ + OpHitObjectIsMissNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpHitObjectIsMissNV(IdResultType resultType, IdResult result, Id hitObject) + : op(Op::HitObjectIsMissNV) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->hitObject = hitObject; + } + + static constexpr Op OpCode = Op::HitObjectIsMissNV; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id hitObject; +}; + +struct OpReorderThreadWithHitObjectNV +{ + OpReorderThreadWithHitObjectNV(const ConstIter &it) + { + uint32_t word = 0;(void)word; + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->hitObject = Id::fromWord(it.word(1)); + this->hint = (it.size() > 2) ? Id::fromWord(it.word(2)) : Id(); + this->bits = (it.size() > 3) ? Id::fromWord(it.word(3)) : Id(); + } + OpReorderThreadWithHitObjectNV(Id hitObject, Id hint = Id(), Id bits = Id()) + : op(Op::ReorderThreadWithHitObjectNV) + , wordCount(MinWordSize + OptionalWordCount(hint) + OptionalWordCount(bits)) + { + this->hitObject = hitObject; + this->hint = hint; + this->bits = bits; + } + operator Operation() const + { + rdcarray words; + words.push_back(hitObject.value()); + if(hint != Id()) words.push_back(hint.value()); + if(bits != Id()) words.push_back(bits.value()); + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::ReorderThreadWithHitObjectNV; + static constexpr uint16_t MinWordSize = 2U; + Op op; + uint16_t wordCount; + Id hitObject; + Id hint; + Id bits; + + bool HasHint() const { return wordCount > 2; } + bool HasBits() const { return wordCount > 3; } +}; + +struct OpReorderThreadWithHintNV +{ + OpReorderThreadWithHintNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpReorderThreadWithHintNV(Id hint, Id bits) + : op(Op::ReorderThreadWithHintNV) + , wordCount(FixedWordSize) + { + this->hint = hint; + this->bits = bits; + } + + static constexpr Op OpCode = Op::ReorderThreadWithHintNV; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + Id hint; + Id bits; +}; + +struct OpTypeHitObjectNV +{ + OpTypeHitObjectNV(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTypeHitObjectNV(IdResult result) + : op(Op::TypeHitObjectNV) + , wordCount(FixedWordSize) + { + this->result = result; + } + + static constexpr Op OpCode = Op::TypeHitObjectNV; + static constexpr uint16_t FixedWordSize = 2U; + Op op; + uint16_t wordCount; + IdResult result; +}; + struct OpImageSampleFootprintNV { OpImageSampleFootprintNV(const ConstIter &it)