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)