diff --git a/renderdoc/driver/shaders/spirv/gen_spirv_code.py b/renderdoc/driver/shaders/spirv/gen_spirv_code.py index c044652b0..15a1784be 100644 --- a/renderdoc/driver/shaders/spirv/gen_spirv_code.py +++ b/renderdoc/driver/shaders/spirv/gen_spirv_code.py @@ -882,6 +882,7 @@ for inst in spirv['instructions']: stringise += ' STRINGISE_ENUM_CLASS({});\n'.format(inst['opname'][2:]) result = -1 + resultCount = 0 resultType = -1 used_ids += ' case rdcspv::Op::{}:\n'.format(inst['opname'][2:]) @@ -895,6 +896,9 @@ for inst in spirv['instructions']: for i,operand in enumerate(operands): if operand['kind'] == 'IdResult': result = i+1 + resultCount += 1 + elif 'name' in operand and operand['name'][0:6] == 'result': + resultCount += 1 if operand['kind'] == 'IdResultType': resultType = i+1 @@ -906,7 +910,9 @@ for inst in spirv['instructions']: disassemble += ' OpDecoder decoded(it);\n'.format(inst['opname'][2:]) - if resultType > 0 and result > 0: + if resultCount == 2: + raise ValueError("Unexpected multiple results without decoded opcode") + elif resultType > 0 and result > 0: disassemble += ' ret += declName(decoded.resultType, decoded.result) + " = ";\n' elif resultType > 0 and result == -1: raise ValueError("Unexpected result type without result") @@ -933,7 +939,9 @@ for inst in spirv['instructions']: disassemble += ' Op{} decoded(it);\n'.format(inst['opname'][2:]) - if resultType > 0 and result > 0: + if resultCount == 2: + disassemble += ' ret += declName(decoded.resultType, decoded.result0) + ", " + idName(decoded.result1) + " = ";\n' + elif resultType > 0 and result > 0: disassemble += ' ret += declName(decoded.resultType, decoded.result) + " = ";\n' elif resultType > 0 and result == -1: raise ValueError("Unexpected result type without result") diff --git a/renderdoc/driver/shaders/spirv/spir-v.xml b/renderdoc/driver/shaders/spirv/spir-v.xml index 2fac9c5ff..1298052d4 100644 --- a/renderdoc/driver/shaders/spirv/spir-v.xml +++ b/renderdoc/driver/shaders/spirv/spir-v.xml @@ -23,10 +23,11 @@ MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --> @@ -72,32 +73,45 @@ - + + + + + - - + @@ -112,15 +126,41 @@ - - + + - + + + + + + + + + + + + + + + + + + + + + @@ -143,4 +183,22 @@ + + + + + + + + + diff --git a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json index 45bac526d..6efa7aa40 100644 --- a/renderdoc/driver/shaders/spirv/spirv.core.grammar.json +++ b/renderdoc/driver/shaders/spirv/spirv.core.grammar.json @@ -1,6 +1,6 @@ { "copyright" : [ - "Copyright (c) 2014-2016 The Khronos Group Inc.", + "Copyright (c) 2014-2020 The Khronos Group Inc.", "", "Permission is hereby granted, free of charge, to any person obtaining a copy", "of this software and/or associated documentation files (the \"Materials\"),", @@ -27,7 +27,7 @@ "magic_number" : "0x07230203", "major_version" : 1, "minor_version" : 5, - "revision" : 1, + "revision" : 3, "instruction_printing_class" : [ { "tag" : "@exclude" @@ -4101,6 +4101,16 @@ "capabilities" : [ "Addresses", "VariablePointers", "VariablePointersStorageBuffer" ], "version" : "1.4" }, + { + "opname" : "OpTerminateInvocation", + "class" : "Control-Flow", + "opcode" : 4416, + "extensions" : [ + "SPV_KHR_terminate_invocation" + ], + "capabilities" : [ "Shader" ], + "version" : "None" + }, { "opname" : "OpSubgroupBallotKHR", "class" : "Group", @@ -4186,6 +4196,142 @@ "extensions" : [ "SPV_KHR_shader_ballot" ], "version" : "None" }, + { + "opname" : "OpTypeRayQueryProvisionalKHR", + "class" : "Reserved", + "opcode" : 4472, + "operands" : [ + { "kind" : "IdResult" } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryInitializeKHR", + "class" : "Reserved", + "opcode" : 4473, + "operands" : [ + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Accel'" + }, + { + "kind" : "IdRef", + "name" : "'RayFlags'" + }, + { + "kind" : "IdRef", + "name" : "'CullMask'" + }, + { + "kind" : "IdRef", + "name" : "'RayOrigin'" + }, + { + "kind" : "IdRef", + "name" : "'RayTMin'" + }, + { + "kind" : "IdRef", + "name" : "'RayDirection'" + }, + { + "kind" : "IdRef", + "name" : "'RayTMax'" + } + + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryTerminateKHR", + "class" : "Reserved", + "opcode" : 4474, + "operands" : [ + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGenerateIntersectionKHR", + "class" : "Reserved", + "opcode" : 4475, + "operands" : [ + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'HitT'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryConfirmIntersectionKHR", + "class" : "Reserved", + "opcode" : 4476, + "operands" : [ + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryProceedKHR", + "class" : "Reserved", + "opcode" : 4477, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionTypeKHR", + "class" : "Reserved", + "opcode" : 4479, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, { "opname" : "OpGroupIAddNonUniformAMD", "class" : "Group", @@ -4400,26 +4546,54 @@ { "kind" : "IdRef", "name" : "'Hit'" }, { "kind" : "IdRef", "name" : "'HitKind'" } ], - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "opname" : "OpReportIntersectionKHR", + "class" : "Reserved", + "opcode" : 5334, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Hit'" }, + { "kind" : "IdRef", "name" : "'HitKind'" } + ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "opname" : "OpIgnoreIntersectionNV", "class" : "Reserved", "opcode" : 5335, - - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "opname" : "OpIgnoreIntersectionKHR", + "class" : "Reserved", + "opcode" : 5335, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "opname" : "OpTerminateRayNV", "class" : "Reserved", "opcode" : 5336, - - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "opname" : "OpTerminateRayKHR", + "class" : "Reserved", + "opcode" : 5336, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { @@ -4440,8 +4614,30 @@ { "kind" : "IdRef", "name" : "'Ray Tmax'" }, { "kind" : "IdRef", "name" : "'PayloadId'" } ], - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "opname" : "OpTraceRayKHR", + "class" : "Reserved", + "opcode" : 5337, + "operands" : [ + + { "kind" : "IdRef", "name" : "'Accel'" }, + { "kind" : "IdRef", "name" : "'Ray Flags'" }, + { "kind" : "IdRef", "name" : "'Cull Mask'" }, + { "kind" : "IdRef", "name" : "'SBT Offset'" }, + { "kind" : "IdRef", "name" : "'SBT Stride'" }, + { "kind" : "IdRef", "name" : "'Miss Index'" }, + { "kind" : "IdRef", "name" : "'Ray Origin'" }, + { "kind" : "IdRef", "name" : "'Ray Tmin'" }, + { "kind" : "IdRef", "name" : "'Ray Direction'" }, + { "kind" : "IdRef", "name" : "'Ray Tmax'" }, + { "kind" : "IdRef", "name" : "'PayloadId'" } + ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { @@ -4451,8 +4647,19 @@ "operands" : [ { "kind" : "IdResult" } ], - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR", "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing", "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpTypeAccelerationStructureKHR", + "class" : "Reserved", + "opcode" : 5341, + "operands" : [ + { "kind" : "IdResult" } + ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR", "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing", "SPV_KHR_ray_query" ], "version" : "None" }, { @@ -4464,8 +4671,21 @@ { "kind" : "IdRef", "name" : "'SBT Index'" }, { "kind" : "IdRef", "name" : "'Callable DataId'" } ], - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "opname" : "OpExecuteCallableKHR", + "class" : "Reserved", + "opcode" : 5344, + "operands" : [ + + { "kind" : "IdRef", "name" : "'SBT Index'" }, + { "kind" : "IdRef", "name" : "'Callable DataId'" } + ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { @@ -4889,6 +5109,32 @@ "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" }, + { + "opname" : "OpFunctionPointerINTEL", + "class" : "@exclude", + "opcode" : 5600, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Function'" } + ], + "capabilities" : [ "FunctionPointersINTEL" ], + "extensions" : [ "SPV_INTEL_function_pointers" ], + "version" : "None" + }, + { + "opname" : "OpFunctionPointerCallINTEL", + "class" : "@exclude", + "opcode" : 5601, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operand 1'" } + ], + "capabilities" : [ "FunctionPointersINTEL" ], + "extensions" : [ "SPV_INTEL_function_pointers" ], + "version" : "None" + }, { "opname" : "OpDecorateString", "class" : "Annotation", @@ -6451,6 +6697,395 @@ ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" + }, + { + "opname" : "OpLoopControlINTEL", + "class" : "Reserved", + "opcode" : 5887, + "operands" : [ + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Loop Control Parameters'" } + ], + "capabilities" : [ "UnstructuredLoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_unstructured_loop_controls" ], + "version" : "None" + }, + { + "opname" : "OpReadPipeBlockingINTEL", + "class" : "Pipe", + "opcode" : 5946, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Packet Size'" }, + { "kind" : "IdRef", "name" : "'Packet Alignment'" } + ], + "capabilities" : [ "BlockingPipesINTEL" ], + "extensions" : [ "SPV_INTEL_blocking_pipes" ], + "version" : "None" + }, + { + "opname" : "OpWritePipeBlockingINTEL", + "class" : "Pipe", + "opcode" : 5947, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Packet Size'" }, + { "kind" : "IdRef", "name" : "'Packet Alignment'" } + ], + "capabilities" : [ "BlockingPipesINTEL" ], + "extensions" : [ "SPV_INTEL_blocking_pipes" ], + "version" : "None" + }, + { + "opname" : "OpFPGARegINTEL", + "class" : "Reserved", + "opcode" : 5949, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Result'" }, + { "kind" : "IdRef", "name" : "'Input'" } + ], + "capabilities" : [ "FPGARegINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_reg" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetRayTMinKHR", + "class" : "Reserved", + "opcode" : 6016, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetRayFlagsKHR", + "class" : "Reserved", + "opcode" : 6017, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionTKHR", + "class" : "Reserved", + "opcode" : 6018, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionInstanceCustomIndexKHR", + "class" : "Reserved", + "opcode" : 6019, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionInstanceIdKHR", + "class" : "Reserved", + "opcode" : 6020, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR", + "class" : "Reserved", + "opcode" : 6021, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionGeometryIndexKHR", + "class" : "Reserved", + "opcode" : 6022, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionPrimitiveIndexKHR", + "class" : "Reserved", + "opcode" : 6023, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionBarycentricsKHR", + "class" : "Reserved", + "opcode" : 6024, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionFrontFaceKHR", + "class" : "Reserved", + "opcode" : 6025, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR", + "class" : "Reserved", + "opcode" : 6026, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionObjectRayDirectionKHR", + "class" : "Reserved", + "opcode" : 6027, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionObjectRayOriginKHR", + "class" : "Reserved", + "opcode" : 6028, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetWorldRayDirectionKHR", + "class" : "Reserved", + "opcode" : 6029, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetWorldRayOriginKHR", + "class" : "Reserved", + "opcode" : 6030, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionObjectToWorldKHR", + "class" : "Reserved", + "opcode" : 6031, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionWorldToObjectKHR", + "class" : "Reserved", + "opcode" : 6032, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "'RayQuery'" + }, + { + "kind" : "IdRef", + "name" : "'Intersection'" + } + ], + "capabilities" : [ "RayQueryProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "opname" : "OpAtomicFAddEXT", + "class" : "Atomic", + "opcode" : 6035, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdScope", "name" : "'Memory'" }, + { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, + { "kind" : "IdRef", "name" : "'Value'" } + ], + "capabilities" : [ "AtomicFloat32AddEXT", "AtomicFloat64AddEXT" ], + "extensions" : [ "SPV_EXT_shader_atomic_float_add" ], + "version" : "None" } ], "operand_kinds" : [ @@ -6720,6 +7355,76 @@ { "kind" : "LiteralInteger" } ], "version" : "1.4" + }, + { + "enumerant" : "InitiationIntervalINTEL", + "value" : "0x10000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "MaxConcurrencyINTEL", + "value" : "0x20000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "DependencyArrayINTEL", + "value" : "0x40000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "PipelineEnableINTEL", + "value" : "0x80000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "LoopCoalesceINTEL", + "value" : "0x100000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "MaxInterleavingINTEL", + "value" : "0x200000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "SpeculatedIterationsINTEL", + "value" : "0x400000", + "parameters" : [ + { "kind" : "LiteralInteger" } + ], + "capabilities" : [ "FPGALoopControlsINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" } ] }, @@ -6942,6 +7647,108 @@ } ] }, + { + "category" : "BitEnum", + "kind" : "RayFlags", + "enumerants" : [ + { + "enumerant" : "NoneKHR", + "value" : "0x0000", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "OpaqueKHR", + "value" : "0x0001", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "NoOpaqueKHR", + "value" : "0x0002", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "TerminateOnFirstHitKHR", + "value" : "0x0004", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "SkipClosestHitShaderKHR", + "value" : "0x0008", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "CullBackFacingTrianglesKHR", + "value" : "0x0010", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "CullFrontFacingTrianglesKHR", + "value" : "0x0020", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "CullOpaqueKHR", + "value" : "0x0040", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "CullNoOpaqueKHR", + "value" : "0x0080", + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "SkipTrianglesKHR", + "value" : "0x0100", + "capabilities" : [ "RayTraversalPrimitiveCullingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "SkipAABBsKHR", + "value" : "0x0200", + "capabilities" : [ "RayTraversalPrimitiveCullingProvisionalKHR" ], + "version" : "None" + } + ] + }, + { + "category" : "BitEnum", + "kind" : "FragmentShadingRate", + "enumerants" : [ + { + "enumerant" : "Vertical2Pixels", + "value" : "0x0001", + "capabilities" : [ "FragmentShadingRateKHR" ], + "version" : "None" + }, + { + "enumerant" : "Vertical4Pixels", + "value" : "0x0002", + "capabilities" : [ "FragmentShadingRateKHR" ], + "version" : "None" + }, + { + "enumerant" : "Horizontal2Pixels", + "value" : "0x0004", + "capabilities" : [ "FragmentShadingRateKHR" ], + "version" : "None" + }, + { + "enumerant" : "Horizontal4Pixels", + "value" : "0x0008", + "capabilities" : [ "FragmentShadingRateKHR" ], + "version" : "None" + } + ] + }, { "category" : "ValueEnum", "kind" : "SourceLanguage", @@ -7026,37 +7833,73 @@ { "enumerant" : "RayGenerationNV", "value" : 5313, - "capabilities" : [ "RayTracingNV" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "RayGenerationKHR", + "value" : 5313, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "IntersectionNV", "value" : 5314, - "capabilities" : [ "RayTracingNV" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "IntersectionKHR", + "value" : 5314, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "AnyHitNV", "value" : 5315, - "capabilities" : [ "RayTracingNV" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "AnyHitKHR", + "value" : 5315, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "ClosestHitNV", "value" : 5316, - "capabilities" : [ "RayTracingNV" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "ClosestHitKHR", + "value" : 5316, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "MissNV", "value" : 5317, - "capabilities" : [ "RayTracingNV" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "MissKHR", + "value" : 5317, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "CallableNV", "value" : 5318, - "capabilities" : [ "RayTracingNV" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "CallableKHR", + "value" : 5318, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" } ] @@ -7507,6 +8350,45 @@ "capabilities" : [ "FragmentShaderShadingRateInterlockEXT" ], "extensions" : [ "SPV_EXT_fragment_shader_interlock" ], "version" : "None" + }, + { + "enumerant" : "MaxWorkgroupSizeINTEL", + "value" : 5893, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'max_x_size'" }, + { "kind" : "LiteralInteger", "name" : "'max_y_size'" }, + { "kind" : "LiteralInteger", "name" : "'max_z_size'" } + ], + "capabilities" : [ "KernelAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_kernel_attributes" ], + "version" : "None" + }, + { + "enumerant" : "MaxWorkDimINTEL", + "value" : 5894, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'max_dimensions'" } + ], + "capabilities" : [ "KernelAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_kernel_attributes" ], + "version" : "None" + }, + { + "enumerant" : "NoGlobalOffsetINTEL", + "value" : 5895, + "capabilities" : [ "KernelAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_kernel_attributes" ], + "version" : "None" + }, + { + "enumerant" : "NumSIMDWorkitemsINTEL", + "value" : 5896, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'vector_width'" } + ], + "capabilities" : [ "FPGAKernelAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_kernel_attributes" ], + "version" : "None" } ] }, @@ -7581,43 +8463,85 @@ { "enumerant" : "CallableDataNV", "value" : 5328, - "extensions" : [ "SPV_NV_ray_tracing" ], - "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "CallableDataKHR", + "value" : 5328, + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "IncomingCallableDataNV", "value" : 5329, - "extensions" : [ "SPV_NV_ray_tracing" ], - "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "IncomingCallableDataKHR", + "value" : 5329, + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "RayPayloadNV", "value" : 5338, - "extensions" : [ "SPV_NV_ray_tracing" ], - "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "RayPayloadKHR", + "value" : 5338, + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "HitAttributeNV", "value" : 5339, - "extensions" : [ "SPV_NV_ray_tracing" ], - "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "HitAttributeKHR", + "value" : 5339, + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "IncomingRayPayloadNV", "value" : 5342, - "extensions" : [ "SPV_NV_ray_tracing" ], - "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "IncomingRayPayloadKHR", + "value" : 5342, + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { "enumerant" : "ShaderRecordBufferNV", "value" : 5343, - "extensions" : [ "SPV_NV_ray_tracing" ], - "capabilities" : [ "RayTracingNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "ShaderRecordBufferKHR", + "value" : 5343, + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], "version" : "None" }, { @@ -7633,6 +8557,13 @@ "extensions" : [ "SPV_EXT_physical_storage_buffer" ], "capabilities" : [ "PhysicalStorageBufferAddresses" ], "version" : "1.5" + }, + { + "enumerant" : "CodeSectionINTEL", + "value" : 5605, + "extensions" : [ "SPV_INTEL_function_pointers" ], + "capabilities" : [ "FunctionPointersINTEL" ], + "version" : "None" } ] }, @@ -7925,6 +8856,16 @@ "enumerant" : "R8ui", "value" : 39, "capabilities" : [ "StorageImageExtendedFormats" ] + }, + { + "enumerant" : "R64ui", + "value" : 40, + "capabilities" : [ "Int64ImageEXT" ] + }, + { + "enumerant" : "R64i", + "value" : 41, + "capabilities" : [ "Int64ImageEXT" ] } ] }, @@ -8653,6 +9594,13 @@ "extensions" : [ "SPV_EXT_physical_storage_buffer" ], "version" : "1.5" }, + { + "enumerant" : "ReferencedIndirectlyINTEL", + "value" : 5602, + "capabilities" : [ "IndirectReferencesINTEL" ], + "extensions" : [ "SPV_INTEL_function_pointers" ], + "version" : "None" + }, { "enumerant" : "CounterBuffer", "value" : 5634, @@ -8695,6 +9643,115 @@ ], "extensions" : [ "SPV_GOOGLE_user_type" ], "version" : "None" + }, + { + "enumerant" : "RegisterINTEL", + "value" : 5825, + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "MemoryINTEL", + "value" : 5826, + "parameters" : [ + { "kind" : "LiteralString", "name" : "'Memory Type'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "NumbanksINTEL", + "value" : 5827, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Banks'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "BankwidthINTEL", + "value" : 5828, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Bank Width'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "MaxPrivateCopiesINTEL", + "value" : 5829, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Maximum Copies'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "SinglepumpINTEL", + "value" : 5830, + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "DoublepumpINTEL", + "value" : 5831, + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "MaxReplicatesINTEL", + "value" : 5832, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Maximum Replicates'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "SimpleDualPortINTEL", + "value" : 5833, + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "MergeINTEL", + "value" : 5834, + "parameters" : [ + { "kind" : "LiteralString", "name" : "'Merge Key'" }, + { "kind" : "LiteralString", "name" : "'Merge Type'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "BankBitsINTEL", + "value" : 5835, + "parameters" : [ + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Bank Bits'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "ForcePow2DepthINTEL", + "value" : 5836, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "'Force Key'" } + ], + "capabilities" : [ "FPGAMemoryAttributesINTEL" ], + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" } ] }, @@ -8735,7 +9792,7 @@ { "enumerant" : "PrimitiveId", "value" : 7, - "capabilities" : [ "Geometry", "Tessellation", "RayTracingNV" ] + "capabilities" : [ "Geometry", "Tessellation", "RayTracingNV", "RayTracingProvisionalKHR" ] }, { "enumerant" : "InvocationId", @@ -8987,6 +10044,13 @@ "extensions" : [ "SPV_KHR_shader_draw_parameters", "SPV_NV_mesh_shader" ], "version" : "1.3" }, + { + "enumerant" : "PrimitiveShadingRateKHR", + "value" : 4432, + "capabilities" : [ "FragmentShadingRateKHR" ], + "extensions" : [ "SPV_KHR_fragment_shading_rate" ], + "version" : "None" + }, { "enumerant" : "DeviceIndex", "value" : 4438, @@ -9001,6 +10065,13 @@ "extensions" : [ "SPV_KHR_multiview" ], "version" : "1.3" }, + { + "enumerant" : "ShadingRateKHR", + "value" : 4444, + "capabilities" : [ "FragmentShadingRateKHR" ], + "extensions" : [ "SPV_KHR_fragment_shading_rate" ], + "version" : "None" + }, { "enumerant" : "BaryCoordNoPerspAMD", "value" : 4992, @@ -9193,99 +10264,204 @@ { "enumerant" : "LaunchIdNV", "value" : 5319, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "LaunchIdKHR", + "value" : 5319, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "LaunchSizeNV", "value" : 5320, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "LaunchSizeKHR", + "value" : 5320, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "WorldRayOriginNV", "value" : 5321, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "WorldRayOriginKHR", + "value" : 5321, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "WorldRayDirectionNV", "value" : 5322, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "WorldRayDirectionKHR", + "value" : 5322, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "ObjectRayOriginNV", "value" : 5323, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "ObjectRayOriginKHR", + "value" : 5323, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "ObjectRayDirectionNV", "value" : 5324, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "ObjectRayDirectionKHR", + "value" : 5324, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "RayTminNV", "value" : 5325, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "RayTminKHR", + "value" : 5325, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "RayTmaxNV", "value" : 5326, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "RayTmaxKHR", + "value" : 5326, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "InstanceCustomIndexNV", "value" : 5327, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "InstanceCustomIndexKHR", + "value" : 5327, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "ObjectToWorldNV", "value" : 5330, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "ObjectToWorldKHR", + "value" : 5330, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "WorldToObjectNV", "value" : 5331, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "WorldToObjectKHR", + "value" : 5331, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "HitTNV", "value" : 5332, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "HitTKHR", + "value" : 5332, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "HitKindNV", "value" : 5333, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "HitKindKHR", + "value" : 5333, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], "version" : "None" }, { "enumerant" : "IncomingRayFlagsNV", "value" : 5351, - "capabilities" : [ "RayTracingNV" ], - "extensions" : [ "SPV_NV_ray_tracing" ], + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "IncomingRayFlagsKHR", + "value" : 5351, + "capabilities" : [ "RayTracingNV" , "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], + "version" : "None" + }, + { + "enumerant" : "RayGeometryIndexKHR", + "value" : 5352, + "capabilities" : [ "RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_tracing" ], "version" : "None" }, { @@ -9353,6 +10529,12 @@ "value" : 5, "capabilities" : [ "VulkanMemoryModel" ], "version" : "1.5" + }, + { + "enumerant" : "ShaderCallKHR", + "value" : 6, + "capabilities" : [ "RayTracingProvisionalKHR" ], + "version" : "None" } ] }, @@ -9773,6 +10955,13 @@ "value" : 70, "version" : "1.5" }, + { + "enumerant" : "FragmentShadingRateKHR", + "value" : 4422, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_KHR_fragment_shading_rate" ], + "version" : "None" + }, { "enumerant" : "SubgroupBallotKHR", "value" : 4423, @@ -9924,6 +11113,20 @@ "extensions" : [ "SPV_KHR_float_controls" ], "version" : "1.4" }, + { + "enumerant" : "RayQueryProvisionalKHR", + "value" : 4471, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_KHR_ray_query" ], + "version" : "None" + }, + { + "enumerant" : "RayTraversalPrimitiveCullingProvisionalKHR", + "value" : 4478, + "capabilities" : [ "RayQueryProvisionalKHR","RayTracingProvisionalKHR" ], + "extensions" : [ "SPV_KHR_ray_query","SPV_KHR_ray_tracing" ], + "version" : "None" + }, { "enumerant" : "Float16ImageAMD", "value" : 5008, @@ -9959,6 +11162,13 @@ "extensions" : [ "SPV_AMD_shader_image_load_store_lod" ], "version" : "None" }, + { + "enumerant" : "Int64ImageEXT", + "value" : 5016, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_EXT_shader_image_int64" ], + "version" : "None" + }, { "enumerant" : "ShaderClockKHR", "value" : 5055, @@ -10272,6 +11482,13 @@ "extensions" : [ "SPV_NV_compute_shader_derivatives" ], "version" : "None" }, + { + "enumerant" : "RayTracingProvisionalKHR", + "value" : 5353, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_KHR_ray_tracing" ], + "version" : "None" + }, { "enumerant" : "CooperativeMatrixNV", "value" : 5357, @@ -10345,6 +11562,18 @@ "extensions" : [ "SPV_INTEL_shader_integer_functions2" ], "version" : "None" }, + { + "enumerant" : "FunctionPointersINTEL", + "value" : 5603, + "extensions" : [ "SPV_INTEL_function_pointers" ], + "version" : "None" + }, + { + "enumerant" : "IndirectReferencesINTEL", + "value" : 5604, + "extensions" : [ "SPV_INTEL_function_pointers" ], + "version" : "None" + }, { "enumerant" : "SubgroupAvcMotionEstimationINTEL", "value" : 5696, @@ -10362,6 +11591,122 @@ "value" : 5698, "extensions" : [ "SPV_INTEL_device_side_avc_motion_estimation" ], "version" : "None" + }, + { + "enumerant" : "FPGAMemoryAttributesINTEL", + "value" : 5824, + "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], + "version" : "None" + }, + { + "enumerant" : "UnstructuredLoopControlsINTEL", + "value" : 5886, + "extensions" : [ "SPV_INTEL_unstructured_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "FPGALoopControlsINTEL", + "value" : 5888, + "extensions" : [ "SPV_INTEL_fpga_loop_controls" ], + "version" : "None" + }, + { + "enumerant" : "KernelAttributesINTEL", + "value" : 5892, + "extensions" : [ "SPV_INTEL_kernel_attributes" ], + "version" : "None" + }, + { + "enumerant" : "FPGAKernelAttributesINTEL", + "value" : 5897, + "extensions" : [ "SPV_INTEL_kernel_attributes" ], + "version" : "None" + }, + { + "enumerant" : "BlockingPipesINTEL", + "value" : 5945, + "extensions" : [ "SPV_INTEL_blocking_pipes" ], + "version" : "None" + }, + { + "enumerant" : "FPGARegINTEL", + "value" : 5948, + "extensions" : [ "SPV_INTEL_fpga_reg" ], + "version" : "None" + }, + { + "enumerant" : "AtomicFloat32AddEXT", + "value" : 6033, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_EXT_shader_atomic_float_add" ], + "version" : "None" + }, + { + "enumerant" : "AtomicFloat64AddEXT", + "value" : 6034, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_EXT_shader_atomic_float_add" ], + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "RayQueryIntersection", + "enumerants" : [ + { + "enumerant" : "RayQueryCandidateIntersectionKHR", + "value" : 0, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "RayQueryCommittedIntersectionKHR", + "value" : 1, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "RayQueryCommittedIntersectionType", + "enumerants" : [ + { + "enumerant" : "RayQueryCommittedIntersectionNoneKHR", + "value" : 0, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "RayQueryCommittedIntersectionTriangleKHR", + "value" : 1, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "RayQueryCommittedIntersectionGeneratedKHR", + "value" : 2, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "RayQueryCandidateIntersectionType", + "enumerants" : [ + { + "enumerant" : "RayQueryCandidateIntersectionTriangleKHR", + "value" : 0, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" + }, + { + "enumerant" : "RayQueryCandidateIntersectionAABBKHR", + "value" : 1, + "capabilities" : [ "RayQueryProvisionalKHR" ], + "version" : "None" } ] }, diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index f440c54f8..28e3a8a17 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -2596,6 +2596,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray break; } + case Op::TerminateInvocation: case Op::Kill: { killed = true; @@ -3082,6 +3083,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray break; } + case Op::AtomicFAddEXT: case Op::GroupIAddNonUniformAMD: case Op::GroupFAddNonUniformAMD: case Op::GroupFMinNonUniformAMD: @@ -3250,6 +3252,33 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: case Op::SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: case Op::SubgroupAvcSicGetInterRawSadsINTEL: + case Op::FunctionPointerINTEL: + case Op::FunctionPointerCallINTEL: + case Op::LoopControlINTEL: + case Op::RayQueryGetRayTMinKHR: + case Op::RayQueryGetRayFlagsKHR: + case Op::RayQueryGetIntersectionTKHR: + case Op::RayQueryGetIntersectionInstanceCustomIndexKHR: + case Op::RayQueryGetIntersectionInstanceIdKHR: + case Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: + case Op::RayQueryGetIntersectionGeometryIndexKHR: + case Op::RayQueryGetIntersectionPrimitiveIndexKHR: + case Op::RayQueryGetIntersectionBarycentricsKHR: + case Op::RayQueryGetIntersectionFrontFaceKHR: + case Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR: + case Op::RayQueryGetIntersectionObjectRayDirectionKHR: + case Op::RayQueryGetIntersectionObjectRayOriginKHR: + case Op::RayQueryGetWorldRayDirectionKHR: + case Op::RayQueryGetWorldRayOriginKHR: + case Op::RayQueryGetIntersectionObjectToWorldKHR: + case Op::RayQueryGetIntersectionWorldToObjectKHR: + case Op::TypeRayQueryProvisionalKHR: + case Op::RayQueryInitializeKHR: + case Op::RayQueryTerminateKHR: + case Op::RayQueryGenerateIntersectionKHR: + case Op::RayQueryConfirmIntersectionKHR: + case Op::RayQueryProceedKHR: + case Op::RayQueryGetIntersectionTypeKHR: { RDCERR("Unsupported extension opcode used %s", ToStr(opdata.op).c_str()); @@ -3381,6 +3410,9 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray case Op::TypePipeStorage: case Op::ConstantPipeStorage: case Op::CreatePipeFromPipeStorage: + case Op::FPGARegINTEL: + case Op::ReadPipeBlockingINTEL: + case Op::WritePipeBlockingINTEL: { // these are kernel only RDCERR("Encountered unexpected kernel SPIR-V operation %s", ToStr(opdata.op).c_str()); diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp index ed1998925..0b279e035 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -207,7 +207,8 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const ext == "SPV_EXT_descriptor_indexing" || ext == "SPV_KHR_vulkan_memory_model" || ext == "SPV_EXT_fragment_invocation_density" || ext == "SPV_KHR_no_integer_wrap_decoration" || ext == "SPV_KHR_float_controls" || - ext == "SPV_KHR_shader_clock" || ext == "SPV_KHR_non_semantic_info") + ext == "SPV_KHR_shader_clock" || ext == "SPV_KHR_non_semantic_info" || + ext == "SPV_KHR_terminate_invocation") { continue; } @@ -309,6 +310,9 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const // atomics case Capability::Int64Atomics: + case Capability::Int64ImageEXT: + case Capability::AtomicFloat32AddEXT: + case Capability::AtomicFloat64AddEXT: // physical pointers case Capability::PhysicalStorageBufferAddresses: @@ -352,6 +356,22 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const break; } + // fragment shading rate + case Capability::FragmentShadingRateKHR: + { + supported = false; + break; + } + + // raytracing + case Capability::RayQueryProvisionalKHR: + case Capability::RayTraversalPrimitiveCullingProvisionalKHR: + case Capability::RayTracingProvisionalKHR: + { + supported = false; + break; + } + // no plans to support these - mostly Kernel/OpenCL related or vendor extensions case Capability::Addresses: case Capability::Linkage: @@ -393,6 +413,15 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const case Capability::SubgroupAvcMotionEstimationINTEL: case Capability::SubgroupAvcMotionEstimationIntraINTEL: case Capability::SubgroupAvcMotionEstimationChromaINTEL: + case Capability::FunctionPointersINTEL: + case Capability::IndirectReferencesINTEL: + case Capability::FPGAKernelAttributesINTEL: + case Capability::FPGALoopControlsINTEL: + case Capability::FPGAMemoryAttributesINTEL: + case Capability::FPGARegINTEL: + case Capability::UnstructuredLoopControlsINTEL: + case Capability::KernelAttributesINTEL: + case Capability::BlockingPipesINTEL: 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 f955ba6dc..8d81ce0e5 100644 --- a/renderdoc/driver/shaders/spirv/spirv_gen.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_gen.cpp @@ -25,7 +25,7 @@ /****************************************************************************** * Generated from Khronos SPIR-V machine-readable JSON grammar. * - * Copyright (c) 2014-2016 The Khronos Group Inc. + * Copyright (c) 2014-2020 The Khronos Group Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and/or associated documentation files (the "Materials"), @@ -132,6 +132,13 @@ rdcstr DoStringise(const rdcspv::LoopControl &el) STRINGISE_BITFIELD_CLASS_BIT(IterationMultiple); STRINGISE_BITFIELD_CLASS_BIT(PeelCount); STRINGISE_BITFIELD_CLASS_BIT(PartialCount); + STRINGISE_BITFIELD_CLASS_BIT(InitiationIntervalINTEL); + STRINGISE_BITFIELD_CLASS_BIT(MaxConcurrencyINTEL); + STRINGISE_BITFIELD_CLASS_BIT(DependencyArrayINTEL); + STRINGISE_BITFIELD_CLASS_BIT(PipelineEnableINTEL); + STRINGISE_BITFIELD_CLASS_BIT(LoopCoalesceINTEL); + STRINGISE_BITFIELD_CLASS_BIT(MaxInterleavingINTEL); + STRINGISE_BITFIELD_CLASS_BIT(SpeculatedIterationsINTEL); } END_BITFIELD_STRINGISE(); } @@ -204,6 +211,39 @@ rdcstr DoStringise(const rdcspv::KernelProfilingInfo &el) END_BITFIELD_STRINGISE(); } +template <> +rdcstr DoStringise(const rdcspv::RayFlags &el) +{ + BEGIN_BITFIELD_STRINGISE(rdcspv::RayFlags); + { + STRINGISE_BITFIELD_CLASS_BIT(NoneKHR); + STRINGISE_BITFIELD_CLASS_BIT(OpaqueKHR); + STRINGISE_BITFIELD_CLASS_BIT(NoOpaqueKHR); + STRINGISE_BITFIELD_CLASS_BIT(TerminateOnFirstHitKHR); + STRINGISE_BITFIELD_CLASS_BIT(SkipClosestHitShaderKHR); + STRINGISE_BITFIELD_CLASS_BIT(CullBackFacingTrianglesKHR); + STRINGISE_BITFIELD_CLASS_BIT(CullFrontFacingTrianglesKHR); + STRINGISE_BITFIELD_CLASS_BIT(CullOpaqueKHR); + STRINGISE_BITFIELD_CLASS_BIT(CullNoOpaqueKHR); + STRINGISE_BITFIELD_CLASS_BIT(SkipTrianglesKHR); + STRINGISE_BITFIELD_CLASS_BIT(SkipAABBsKHR); + } + END_BITFIELD_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::FragmentShadingRate &el) +{ + BEGIN_BITFIELD_STRINGISE(rdcspv::FragmentShadingRate); + { + STRINGISE_BITFIELD_CLASS_BIT(Vertical2Pixels); + STRINGISE_BITFIELD_CLASS_BIT(Vertical4Pixels); + STRINGISE_BITFIELD_CLASS_BIT(Horizontal2Pixels); + STRINGISE_BITFIELD_CLASS_BIT(Horizontal4Pixels); + } + END_BITFIELD_STRINGISE(); +} + template <> rdcstr DoStringise(const rdcspv::SourceLanguage &el) { @@ -330,6 +370,10 @@ rdcstr DoStringise(const rdcspv::ExecutionMode &el) STRINGISE_ENUM_CLASS(SampleInterlockUnorderedEXT); STRINGISE_ENUM_CLASS(ShadingRateInterlockOrderedEXT); STRINGISE_ENUM_CLASS(ShadingRateInterlockUnorderedEXT); + STRINGISE_ENUM_CLASS(MaxWorkgroupSizeINTEL); + STRINGISE_ENUM_CLASS(MaxWorkDimINTEL); + STRINGISE_ENUM_CLASS(NoGlobalOffsetINTEL); + STRINGISE_ENUM_CLASS(NumSIMDWorkitemsINTEL); } END_ENUM_STRINGISE(); } @@ -359,6 +403,7 @@ rdcstr DoStringise(const rdcspv::StorageClass &el) STRINGISE_ENUM_CLASS(IncomingRayPayloadNV); STRINGISE_ENUM_CLASS(ShaderRecordBufferNV); STRINGISE_ENUM_CLASS(PhysicalStorageBuffer); + STRINGISE_ENUM_CLASS(CodeSectionINTEL); } END_ENUM_STRINGISE(); } @@ -449,6 +494,8 @@ rdcstr DoStringise(const rdcspv::ImageFormat &el) STRINGISE_ENUM_CLASS(Rg8ui); STRINGISE_ENUM_CLASS(R16ui); STRINGISE_ENUM_CLASS(R8ui); + STRINGISE_ENUM_CLASS(R64ui); + STRINGISE_ENUM_CLASS(R64i); } END_ENUM_STRINGISE(); } @@ -627,9 +674,22 @@ rdcstr DoStringise(const rdcspv::Decoration &el) STRINGISE_ENUM_CLASS(NonUniform); STRINGISE_ENUM_CLASS(RestrictPointer); STRINGISE_ENUM_CLASS(AliasedPointer); + STRINGISE_ENUM_CLASS(ReferencedIndirectlyINTEL); STRINGISE_ENUM_CLASS(CounterBuffer); STRINGISE_ENUM_CLASS(UserSemantic); STRINGISE_ENUM_CLASS(UserTypeGOOGLE); + STRINGISE_ENUM_CLASS(RegisterINTEL); + STRINGISE_ENUM_CLASS(MemoryINTEL); + STRINGISE_ENUM_CLASS(NumbanksINTEL); + STRINGISE_ENUM_CLASS(BankwidthINTEL); + STRINGISE_ENUM_CLASS(MaxPrivateCopiesINTEL); + STRINGISE_ENUM_CLASS(SinglepumpINTEL); + STRINGISE_ENUM_CLASS(DoublepumpINTEL); + STRINGISE_ENUM_CLASS(MaxReplicatesINTEL); + STRINGISE_ENUM_CLASS(SimpleDualPortINTEL); + STRINGISE_ENUM_CLASS(MergeINTEL); + STRINGISE_ENUM_CLASS(BankBitsINTEL); + STRINGISE_ENUM_CLASS(ForcePow2DepthINTEL); } END_ENUM_STRINGISE(); } @@ -688,8 +748,10 @@ rdcstr DoStringise(const rdcspv::BuiltIn &el) STRINGISE_ENUM_CLASS(BaseVertex); STRINGISE_ENUM_CLASS(BaseInstance); STRINGISE_ENUM_CLASS(DrawIndex); + STRINGISE_ENUM_CLASS(PrimitiveShadingRateKHR); STRINGISE_ENUM_CLASS(DeviceIndex); STRINGISE_ENUM_CLASS(ViewIndex); + STRINGISE_ENUM_CLASS(ShadingRateKHR); STRINGISE_ENUM_CLASS(BaryCoordNoPerspAMD); STRINGISE_ENUM_CLASS(BaryCoordNoPerspCentroidAMD); STRINGISE_ENUM_CLASS(BaryCoordNoPerspSampleAMD); @@ -730,6 +792,7 @@ rdcstr DoStringise(const rdcspv::BuiltIn &el) STRINGISE_ENUM_CLASS(HitTNV); STRINGISE_ENUM_CLASS(HitKindNV); STRINGISE_ENUM_CLASS(IncomingRayFlagsNV); + STRINGISE_ENUM_CLASS(RayGeometryIndexKHR); STRINGISE_ENUM_CLASS(WarpsPerSMNV); STRINGISE_ENUM_CLASS(SMCountNV); STRINGISE_ENUM_CLASS(WarpIDNV); @@ -749,6 +812,7 @@ rdcstr DoStringise(const rdcspv::Scope &el) STRINGISE_ENUM_CLASS(Subgroup); STRINGISE_ENUM_CLASS(Invocation); STRINGISE_ENUM_CLASS(QueueFamily); + STRINGISE_ENUM_CLASS(ShaderCallKHR); } END_ENUM_STRINGISE(); } @@ -855,6 +919,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(GroupNonUniformQuad); STRINGISE_ENUM_CLASS(ShaderLayer); STRINGISE_ENUM_CLASS(ShaderViewportIndex); + STRINGISE_ENUM_CLASS(FragmentShadingRateKHR); STRINGISE_ENUM_CLASS(SubgroupBallotKHR); STRINGISE_ENUM_CLASS(DrawParameters); STRINGISE_ENUM_CLASS(SubgroupVoteKHR); @@ -876,11 +941,14 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(SignedZeroInfNanPreserve); STRINGISE_ENUM_CLASS(RoundingModeRTE); STRINGISE_ENUM_CLASS(RoundingModeRTZ); + STRINGISE_ENUM_CLASS(RayQueryProvisionalKHR); + STRINGISE_ENUM_CLASS(RayTraversalPrimitiveCullingProvisionalKHR); STRINGISE_ENUM_CLASS(Float16ImageAMD); STRINGISE_ENUM_CLASS(ImageGatherBiasLodAMD); STRINGISE_ENUM_CLASS(FragmentMaskAMD); STRINGISE_ENUM_CLASS(StencilExportEXT); STRINGISE_ENUM_CLASS(ImageReadWriteLodAMD); + STRINGISE_ENUM_CLASS(Int64ImageEXT); STRINGISE_ENUM_CLASS(ShaderClockKHR); STRINGISE_ENUM_CLASS(SampleMaskOverrideCoverageNV); STRINGISE_ENUM_CLASS(GeometryShaderPassthroughNV); @@ -912,6 +980,7 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(VulkanMemoryModelDeviceScope); STRINGISE_ENUM_CLASS(PhysicalStorageBufferAddresses); STRINGISE_ENUM_CLASS(ComputeDerivativeGroupLinearNV); + STRINGISE_ENUM_CLASS(RayTracingProvisionalKHR); STRINGISE_ENUM_CLASS(CooperativeMatrixNV); STRINGISE_ENUM_CLASS(FragmentShaderSampleInterlockEXT); STRINGISE_ENUM_CLASS(FragmentShaderShadingRateInterlockEXT); @@ -923,9 +992,54 @@ rdcstr DoStringise(const rdcspv::Capability &el) STRINGISE_ENUM_CLASS(SubgroupImageBlockIOINTEL); STRINGISE_ENUM_CLASS(SubgroupImageMediaBlockIOINTEL); STRINGISE_ENUM_CLASS(IntegerFunctions2INTEL); + STRINGISE_ENUM_CLASS(FunctionPointersINTEL); + STRINGISE_ENUM_CLASS(IndirectReferencesINTEL); STRINGISE_ENUM_CLASS(SubgroupAvcMotionEstimationINTEL); STRINGISE_ENUM_CLASS(SubgroupAvcMotionEstimationIntraINTEL); STRINGISE_ENUM_CLASS(SubgroupAvcMotionEstimationChromaINTEL); + STRINGISE_ENUM_CLASS(FPGAMemoryAttributesINTEL); + STRINGISE_ENUM_CLASS(UnstructuredLoopControlsINTEL); + STRINGISE_ENUM_CLASS(FPGALoopControlsINTEL); + STRINGISE_ENUM_CLASS(KernelAttributesINTEL); + STRINGISE_ENUM_CLASS(FPGAKernelAttributesINTEL); + STRINGISE_ENUM_CLASS(BlockingPipesINTEL); + STRINGISE_ENUM_CLASS(FPGARegINTEL); + STRINGISE_ENUM_CLASS(AtomicFloat32AddEXT); + STRINGISE_ENUM_CLASS(AtomicFloat64AddEXT); + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::RayQueryIntersection &el) +{ + BEGIN_ENUM_STRINGISE(rdcspv::RayQueryIntersection); + { + STRINGISE_ENUM_CLASS(RayQueryCandidateIntersectionKHR); + STRINGISE_ENUM_CLASS(RayQueryCommittedIntersectionKHR); + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::RayQueryCommittedIntersectionType &el) +{ + BEGIN_ENUM_STRINGISE(rdcspv::RayQueryCommittedIntersectionType); + { + STRINGISE_ENUM_CLASS(RayQueryCommittedIntersectionNoneKHR); + STRINGISE_ENUM_CLASS(RayQueryCommittedIntersectionTriangleKHR); + STRINGISE_ENUM_CLASS(RayQueryCommittedIntersectionGeneratedKHR); + } + END_ENUM_STRINGISE(); +} + +template <> +rdcstr DoStringise(const rdcspv::RayQueryCandidateIntersectionType &el) +{ + BEGIN_ENUM_STRINGISE(rdcspv::RayQueryCandidateIntersectionType); + { + STRINGISE_ENUM_CLASS(RayQueryCandidateIntersectionTriangleKHR); + STRINGISE_ENUM_CLASS(RayQueryCandidateIntersectionAABBKHR); } END_ENUM_STRINGISE(); } @@ -1279,12 +1393,20 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(PtrEqual); STRINGISE_ENUM_CLASS(PtrNotEqual); STRINGISE_ENUM_CLASS(PtrDiff); + STRINGISE_ENUM_CLASS(TerminateInvocation); STRINGISE_ENUM_CLASS(SubgroupBallotKHR); STRINGISE_ENUM_CLASS(SubgroupFirstInvocationKHR); STRINGISE_ENUM_CLASS(SubgroupAllKHR); STRINGISE_ENUM_CLASS(SubgroupAnyKHR); STRINGISE_ENUM_CLASS(SubgroupAllEqualKHR); STRINGISE_ENUM_CLASS(SubgroupReadInvocationKHR); + STRINGISE_ENUM_CLASS(TypeRayQueryProvisionalKHR); + STRINGISE_ENUM_CLASS(RayQueryInitializeKHR); + STRINGISE_ENUM_CLASS(RayQueryTerminateKHR); + STRINGISE_ENUM_CLASS(RayQueryGenerateIntersectionKHR); + STRINGISE_ENUM_CLASS(RayQueryConfirmIntersectionKHR); + STRINGISE_ENUM_CLASS(RayQueryProceedKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionTypeKHR); STRINGISE_ENUM_CLASS(GroupIAddNonUniformAMD); STRINGISE_ENUM_CLASS(GroupFAddNonUniformAMD); STRINGISE_ENUM_CLASS(GroupFMinNonUniformAMD); @@ -1338,6 +1460,8 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(USubSatINTEL); STRINGISE_ENUM_CLASS(IMul32x16INTEL); STRINGISE_ENUM_CLASS(UMul32x16INTEL); + STRINGISE_ENUM_CLASS(FunctionPointerINTEL); + STRINGISE_ENUM_CLASS(FunctionPointerCallINTEL); STRINGISE_ENUM_CLASS(DecorateString); STRINGISE_ENUM_CLASS(MemberDecorateString); STRINGISE_ENUM_CLASS(VmeImageINTEL); @@ -1458,6 +1582,28 @@ rdcstr DoStringise(const rdcspv::Op &el) STRINGISE_ENUM_CLASS(SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL); STRINGISE_ENUM_CLASS(SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL); STRINGISE_ENUM_CLASS(SubgroupAvcSicGetInterRawSadsINTEL); + STRINGISE_ENUM_CLASS(LoopControlINTEL); + STRINGISE_ENUM_CLASS(ReadPipeBlockingINTEL); + STRINGISE_ENUM_CLASS(WritePipeBlockingINTEL); + STRINGISE_ENUM_CLASS(FPGARegINTEL); + STRINGISE_ENUM_CLASS(RayQueryGetRayTMinKHR); + STRINGISE_ENUM_CLASS(RayQueryGetRayFlagsKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionTKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionInstanceCustomIndexKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionInstanceIdKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionGeometryIndexKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionPrimitiveIndexKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionBarycentricsKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionFrontFaceKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionCandidateAABBOpaqueKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionObjectRayDirectionKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionObjectRayOriginKHR); + STRINGISE_ENUM_CLASS(RayQueryGetWorldRayDirectionKHR); + STRINGISE_ENUM_CLASS(RayQueryGetWorldRayOriginKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionObjectToWorldKHR); + STRINGISE_ENUM_CLASS(RayQueryGetIntersectionWorldToObjectKHR); + STRINGISE_ENUM_CLASS(AtomicFAddEXT); } END_ENUM_STRINGISE(); } @@ -1563,6 +1709,20 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "PeelCount" "(" + ToStr(el.peelCount) + ")" ", "; if(el.flags & LoopControl::PartialCount) ret += "PartialCount" "(" + ToStr(el.partialCount) + ")" ", "; + if(el.flags & LoopControl::InitiationIntervalINTEL) + ret += "InitiationIntervalINTEL" "(" + ToStr(el.initiationIntervalINTEL) + ")" ", "; + if(el.flags & LoopControl::MaxConcurrencyINTEL) + ret += "MaxConcurrencyINTEL" "(" + ToStr(el.maxConcurrencyINTEL) + ")" ", "; + if(el.flags & LoopControl::DependencyArrayINTEL) + ret += "DependencyArrayINTEL" "(" + ToStr(el.dependencyArrayINTEL) + ")" ", "; + if(el.flags & LoopControl::PipelineEnableINTEL) + ret += "PipelineEnableINTEL" "(" + ToStr(el.pipelineEnableINTEL) + ")" ", "; + if(el.flags & LoopControl::LoopCoalesceINTEL) + ret += "LoopCoalesceINTEL" "(" + ToStr(el.loopCoalesceINTEL) + ")" ", "; + if(el.flags & LoopControl::MaxInterleavingINTEL) + ret += "MaxInterleavingINTEL" "(" + ToStr(el.maxInterleavingINTEL) + ")" ", "; + if(el.flags & LoopControl::SpeculatedIterationsINTEL) + ret += "SpeculatedIterationsINTEL" "(" + ToStr(el.speculatedIterationsINTEL) + ")" ", "; // remove trailing ", " if(ret.size() > 2) @@ -1637,6 +1797,12 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + ToStr(el.roundingModeRTZ) + ")"; break; case ExecutionMode::OutputPrimitivesNV: ret += "(" + ToStr(el.outputPrimitivesNV) + ")"; break; + case ExecutionMode::MaxWorkgroupSizeINTEL: + ret += "(" + ToStr(el.maxWorkgroupSizeINTEL.max_x_size) + ", " + ToStr(el.maxWorkgroupSizeINTEL.max_y_size) + ", " + ToStr(el.maxWorkgroupSizeINTEL.max_z_size) + ")"; break; + case ExecutionMode::MaxWorkDimINTEL: + ret += "(" + ToStr(el.maxWorkDimINTEL) + ")"; break; + case ExecutionMode::NumSIMDWorkitemsINTEL: + ret += "(" + ToStr(el.numSIMDWorkitemsINTEL) + ")"; break; default: break; } @@ -1699,6 +1865,18 @@ rdcstr ParamToStr(const std::function &idName, const rdcspv: ret += "(" + ToStr(el.secondaryViewportRelativeNV) + ")"; break; case Decoration::CounterBuffer: ret += "(" + idName(el.counterBuffer) + ")"; break; + case Decoration::NumbanksINTEL: + ret += "(" + ToStr(el.numbanksINTEL) + ")"; break; + case Decoration::BankwidthINTEL: + ret += "(" + ToStr(el.bankwidthINTEL) + ")"; break; + case Decoration::MaxPrivateCopiesINTEL: + ret += "(" + ToStr(el.maxPrivateCopiesINTEL) + ")"; break; + case Decoration::MaxReplicatesINTEL: + ret += "(" + ToStr(el.maxReplicatesINTEL) + ")"; break; + case Decoration::BankBitsINTEL: + ret += "(" + ToStr(el.bankBitsINTEL) + ")"; break; + case Decoration::ForcePow2DepthINTEL: + ret += "(" + ToStr(el.forcePow2DepthINTEL) + ")"; break; default: break; } @@ -3600,6 +3778,8 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function &words, const LoopControlAndParamData { words.push_back((uint32_t)param.partialCount); } + if(param.flags & LoopControl::InitiationIntervalINTEL) + { + words.push_back((uint32_t)param.initiationIntervalINTEL); + } + if(param.flags & LoopControl::MaxConcurrencyINTEL) + { + words.push_back((uint32_t)param.maxConcurrencyINTEL); + } + if(param.flags & LoopControl::DependencyArrayINTEL) + { + words.push_back((uint32_t)param.dependencyArrayINTEL); + } + if(param.flags & LoopControl::PipelineEnableINTEL) + { + words.push_back((uint32_t)param.pipelineEnableINTEL); + } + if(param.flags & LoopControl::LoopCoalesceINTEL) + { + words.push_back((uint32_t)param.loopCoalesceINTEL); + } + if(param.flags & LoopControl::MaxInterleavingINTEL) + { + words.push_back((uint32_t)param.maxInterleavingINTEL); + } + if(param.flags & LoopControl::SpeculatedIterationsINTEL) + { + words.push_back((uint32_t)param.speculatedIterationsINTEL); + } } inline uint16_t ExtraWordCount(const LoopControl loopControl) @@ -381,6 +444,13 @@ inline uint16_t ExtraWordCount(const LoopControl loopControl) case LoopControl::IterationMultiple: return 1; case LoopControl::PeelCount: return 1; case LoopControl::PartialCount: return 1; + case LoopControl::InitiationIntervalINTEL: return 1; + case LoopControl::MaxConcurrencyINTEL: return 1; + case LoopControl::DependencyArrayINTEL: return 1; + case LoopControl::PipelineEnableINTEL: return 1; + case LoopControl::LoopCoalesceINTEL: return 1; + case LoopControl::MaxInterleavingINTEL: return 1; + case LoopControl::SpeculatedIterationsINTEL: return 1; default: break; } return 0; @@ -664,6 +734,47 @@ struct ExecutionModeParam } }; +template<> +struct ExecutionModeParam +{ + MaxWorkgroupSizeINTELParams maxWorkgroupSizeINTEL; + ExecutionModeParam(uint32_t max_x_size, uint32_t max_y_size, uint32_t max_z_size) { maxWorkgroupSizeINTEL.max_x_size = max_x_size; maxWorkgroupSizeINTEL.max_y_size = max_y_size; maxWorkgroupSizeINTEL.max_z_size = max_z_size; } + operator ExecutionModeAndParamData() + { + ExecutionModeAndParamData ret(ExecutionMode::MaxWorkgroupSizeINTEL); + ret.maxWorkgroupSizeINTEL.max_x_size = maxWorkgroupSizeINTEL.max_x_size; + ret.maxWorkgroupSizeINTEL.max_y_size = maxWorkgroupSizeINTEL.max_y_size; + ret.maxWorkgroupSizeINTEL.max_z_size = maxWorkgroupSizeINTEL.max_z_size; + return ret; + } +}; + +template<> +struct ExecutionModeParam +{ + uint32_t maxWorkDimINTEL; + ExecutionModeParam(uint32_t maxWorkDimINTELParam) { maxWorkDimINTEL = maxWorkDimINTELParam; } + operator ExecutionModeAndParamData() + { + ExecutionModeAndParamData ret(ExecutionMode::MaxWorkDimINTEL); + ret.maxWorkDimINTEL = maxWorkDimINTEL; + return ret; + } +}; + +template<> +struct ExecutionModeParam +{ + uint32_t numSIMDWorkitemsINTEL; + ExecutionModeParam(uint32_t numSIMDWorkitemsINTELParam) { numSIMDWorkitemsINTEL = numSIMDWorkitemsINTELParam; } + operator ExecutionModeAndParamData() + { + ExecutionModeAndParamData ret(ExecutionMode::NumSIMDWorkitemsINTEL); + ret.numSIMDWorkitemsINTEL = numSIMDWorkitemsINTEL; + return ret; + } +}; + template<> @@ -745,6 +856,20 @@ inline ExecutionModeAndParamData DecodeParam(const ConstIter &it, uint32_t &word ret.outputPrimitivesNV = (uint32_t)it.word(word); word += 1; break; + case ExecutionMode::MaxWorkgroupSizeINTEL: + ret.maxWorkgroupSizeINTEL.max_x_size = (uint32_t)it.word(word+0); + ret.maxWorkgroupSizeINTEL.max_y_size = (uint32_t)it.word(word+1); + ret.maxWorkgroupSizeINTEL.max_z_size = (uint32_t)it.word(word+2); + word += 3; + break; + case ExecutionMode::MaxWorkDimINTEL: + ret.maxWorkDimINTEL = (uint32_t)it.word(word); + word += 1; + break; + case ExecutionMode::NumSIMDWorkitemsINTEL: + ret.numSIMDWorkitemsINTEL = (uint32_t)it.word(word); + word += 1; + break; default: break; } return ret; @@ -809,6 +934,17 @@ inline void EncodeParam(rdcarray &words, const ExecutionModeAndParamDa case ExecutionMode::OutputPrimitivesNV: words.push_back((uint32_t)param.outputPrimitivesNV); break; + case ExecutionMode::MaxWorkgroupSizeINTEL: + words.push_back((uint32_t)param.maxWorkgroupSizeINTEL.max_x_size); + words.push_back((uint32_t)param.maxWorkgroupSizeINTEL.max_y_size); + words.push_back((uint32_t)param.maxWorkgroupSizeINTEL.max_z_size); + break; + case ExecutionMode::MaxWorkDimINTEL: + words.push_back((uint32_t)param.maxWorkDimINTEL); + break; + case ExecutionMode::NumSIMDWorkitemsINTEL: + words.push_back((uint32_t)param.numSIMDWorkitemsINTEL); + break; default: break; } } @@ -833,6 +969,9 @@ inline uint16_t ExtraWordCount(const ExecutionMode executionMode) case ExecutionMode::RoundingModeRTE: return 1; case ExecutionMode::RoundingModeRTZ: return 1; case ExecutionMode::OutputPrimitivesNV: return 1; + case ExecutionMode::MaxWorkgroupSizeINTEL: return 3; + case ExecutionMode::MaxWorkDimINTEL: return 1; + case ExecutionMode::NumSIMDWorkitemsINTEL: return 1; default: break; } return 0; @@ -1174,6 +1313,84 @@ struct DecorationParam } }; +template<> +struct DecorationParam +{ + uint32_t numbanksINTEL; + DecorationParam(uint32_t numbanksINTELParam) { numbanksINTEL = numbanksINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::NumbanksINTEL); + ret.numbanksINTEL = numbanksINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t bankwidthINTEL; + DecorationParam(uint32_t bankwidthINTELParam) { bankwidthINTEL = bankwidthINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::BankwidthINTEL); + ret.bankwidthINTEL = bankwidthINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t maxPrivateCopiesINTEL; + DecorationParam(uint32_t maxPrivateCopiesINTELParam) { maxPrivateCopiesINTEL = maxPrivateCopiesINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::MaxPrivateCopiesINTEL); + ret.maxPrivateCopiesINTEL = maxPrivateCopiesINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t maxReplicatesINTEL; + DecorationParam(uint32_t maxReplicatesINTELParam) { maxReplicatesINTEL = maxReplicatesINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::MaxReplicatesINTEL); + ret.maxReplicatesINTEL = maxReplicatesINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t bankBitsINTEL; + DecorationParam(uint32_t bankBitsINTELParam) { bankBitsINTEL = bankBitsINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::BankBitsINTEL); + ret.bankBitsINTEL = bankBitsINTEL; + return ret; + } +}; + +template<> +struct DecorationParam +{ + uint32_t forcePow2DepthINTEL; + DecorationParam(uint32_t forcePow2DepthINTELParam) { forcePow2DepthINTEL = forcePow2DepthINTELParam; } + operator DecorationAndParamData() + { + DecorationAndParamData ret(Decoration::ForcePow2DepthINTEL); + ret.forcePow2DepthINTEL = forcePow2DepthINTEL; + return ret; + } +}; + template<> @@ -1281,6 +1498,30 @@ inline DecorationAndParamData DecodeParam(const ConstIter &it, uint32_t &word) ret.counterBuffer = Id::fromWord(it.word(word)); word += 1; break; + case Decoration::NumbanksINTEL: + ret.numbanksINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::BankwidthINTEL: + ret.bankwidthINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::MaxPrivateCopiesINTEL: + ret.maxPrivateCopiesINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::MaxReplicatesINTEL: + ret.maxReplicatesINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::BankBitsINTEL: + ret.bankBitsINTEL = (uint32_t)it.word(word); + word += 1; + break; + case Decoration::ForcePow2DepthINTEL: + ret.forcePow2DepthINTEL = (uint32_t)it.word(word); + word += 1; + break; default: break; } return ret; @@ -1363,6 +1604,24 @@ inline void EncodeParam(rdcarray &words, const DecorationAndParamData case Decoration::CounterBuffer: words.push_back(param.counterBuffer.value()); break; + case Decoration::NumbanksINTEL: + words.push_back((uint32_t)param.numbanksINTEL); + break; + case Decoration::BankwidthINTEL: + words.push_back((uint32_t)param.bankwidthINTEL); + break; + case Decoration::MaxPrivateCopiesINTEL: + words.push_back((uint32_t)param.maxPrivateCopiesINTEL); + break; + case Decoration::MaxReplicatesINTEL: + words.push_back((uint32_t)param.maxReplicatesINTEL); + break; + case Decoration::BankBitsINTEL: + words.push_back((uint32_t)param.bankBitsINTEL); + break; + case Decoration::ForcePow2DepthINTEL: + words.push_back((uint32_t)param.forcePow2DepthINTEL); + break; default: break; } } @@ -1395,6 +1654,12 @@ inline uint16_t ExtraWordCount(const Decoration decoration) case Decoration::MaxByteOffsetId: return 1; case Decoration::SecondaryViewportRelativeNV: return 1; case Decoration::CounterBuffer: return 1; + case Decoration::NumbanksINTEL: return 1; + case Decoration::BankwidthINTEL: return 1; + case Decoration::MaxPrivateCopiesINTEL: return 1; + case Decoration::MaxReplicatesINTEL: return 1; + case Decoration::BankBitsINTEL: return 1; + case Decoration::ForcePow2DepthINTEL: return 1; default: break; } return 0; @@ -1410,6 +1675,12 @@ inline uint16_t OptionalWordCount(const KernelEnqueueFlags val) { return val != inline uint16_t OptionalWordCount(const Capability val) { return val != Capability::Invalid ? 1 : 0; } +inline uint16_t OptionalWordCount(const RayQueryIntersection val) { return val != RayQueryIntersection::Invalid ? 1 : 0; } + +inline uint16_t OptionalWordCount(const RayQueryCommittedIntersectionType val) { return val != RayQueryCommittedIntersectionType::Invalid ? 1 : 0; } + +inline uint16_t OptionalWordCount(const RayQueryCandidateIntersectionType val) { return val != RayQueryCandidateIntersectionType::Invalid ? 1 : 0; } + inline uint16_t ExtraWordCount(const rdcstr &val) { @@ -11645,6 +11916,26 @@ struct OpPtrDiff Id operand2; }; +struct OpTerminateInvocation +{ + OpTerminateInvocation(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTerminateInvocation() + : op(Op::TerminateInvocation) + , wordCount(FixedWordSize) + { + // no operands + } + + static constexpr Op OpCode = Op::TerminateInvocation; + static constexpr uint16_t FixedWordSize = 1U; + Op op; + uint16_t wordCount; + // no operands +}; + struct OpSubgroupBallotKHR { OpSubgroupBallotKHR(const ConstIter &it) @@ -11791,6 +12082,172 @@ struct OpSubgroupReadInvocationKHR Id index; }; +struct OpTypeRayQueryProvisionalKHR +{ + OpTypeRayQueryProvisionalKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpTypeRayQueryProvisionalKHR(IdResult result) + : op(Op::TypeRayQueryProvisionalKHR) + , wordCount(FixedWordSize) + { + this->result = result; + } + + static constexpr Op OpCode = Op::TypeRayQueryProvisionalKHR; + static constexpr uint16_t FixedWordSize = 2U; + Op op; + uint16_t wordCount; + IdResult result; +}; + +struct OpRayQueryInitializeKHR +{ + OpRayQueryInitializeKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryInitializeKHR(Id rayQuery, Id accel, Id rayFlags, Id cullMask, Id rayOrigin, Id rayTMin, Id rayDirection, Id rayTMax) + : op(Op::RayQueryInitializeKHR) + , wordCount(FixedWordSize) + { + this->rayQuery = rayQuery; + this->accel = accel; + this->rayFlags = rayFlags; + this->cullMask = cullMask; + this->rayOrigin = rayOrigin; + this->rayTMin = rayTMin; + this->rayDirection = rayDirection; + this->rayTMax = rayTMax; + } + + static constexpr Op OpCode = Op::RayQueryInitializeKHR; + static constexpr uint16_t FixedWordSize = 9U; + Op op; + uint16_t wordCount; + Id rayQuery; + Id accel; + Id rayFlags; + Id cullMask; + Id rayOrigin; + Id rayTMin; + Id rayDirection; + Id rayTMax; +}; + +struct OpRayQueryTerminateKHR +{ + OpRayQueryTerminateKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryTerminateKHR(Id rayQuery) + : op(Op::RayQueryTerminateKHR) + , wordCount(FixedWordSize) + { + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryTerminateKHR; + static constexpr uint16_t FixedWordSize = 2U; + Op op; + uint16_t wordCount; + Id rayQuery; +}; + +struct OpRayQueryGenerateIntersectionKHR +{ + OpRayQueryGenerateIntersectionKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGenerateIntersectionKHR(Id rayQuery, Id hitT) + : op(Op::RayQueryGenerateIntersectionKHR) + , wordCount(FixedWordSize) + { + this->rayQuery = rayQuery; + this->hitT = hitT; + } + + static constexpr Op OpCode = Op::RayQueryGenerateIntersectionKHR; + static constexpr uint16_t FixedWordSize = 3U; + Op op; + uint16_t wordCount; + Id rayQuery; + Id hitT; +}; + +struct OpRayQueryConfirmIntersectionKHR +{ + OpRayQueryConfirmIntersectionKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryConfirmIntersectionKHR(Id rayQuery) + : op(Op::RayQueryConfirmIntersectionKHR) + , wordCount(FixedWordSize) + { + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryConfirmIntersectionKHR; + static constexpr uint16_t FixedWordSize = 2U; + Op op; + uint16_t wordCount; + Id rayQuery; +}; + +struct OpRayQueryProceedKHR +{ + OpRayQueryProceedKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryProceedKHR(IdResultType resultType, IdResult result, Id rayQuery) + : op(Op::RayQueryProceedKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryProceedKHR; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; +}; + +struct OpRayQueryGetIntersectionTypeKHR +{ + OpRayQueryGetIntersectionTypeKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionTypeKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionTypeKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionTypeKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + struct OpGroupIAddNonUniformAMD { OpGroupIAddNonUniformAMD(const ConstIter &it) @@ -13218,6 +13675,70 @@ struct OpUMul32x16INTEL Id operand2; }; +struct OpFunctionPointerINTEL +{ + OpFunctionPointerINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpFunctionPointerINTEL(IdResultType resultType, IdResult result, Id function) + : op(Op::FunctionPointerINTEL) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->function = function; + } + + static constexpr Op OpCode = Op::FunctionPointerINTEL; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id function; +}; + +struct OpFunctionPointerCallINTEL +{ + OpFunctionPointerCallINTEL(const ConstIter &it) + { + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + this->resultType = Id::fromWord(it.word(1)); + this->result = Id::fromWord(it.word(2)); + uint32_t word = 3; + this->operand1 = MultiParam(it, word); + } + OpFunctionPointerCallINTEL(IdResultType resultType, IdResult result, const rdcarray &operand1 = {}) + : op(Op::FunctionPointerCallINTEL) + , wordCount(MinWordSize + MultiWordCount(operand1)) + { + this->resultType = resultType; + this->result = result; + this->operand1 = operand1; + } + operator Operation() const + { + rdcarray words; + words.push_back(resultType.value()); + words.push_back(result.value()); + for(size_t i=0; i < operand1.size(); i++) + { + words.push_back(operand1[i].value()); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::FunctionPointerCallINTEL; + static constexpr uint16_t MinWordSize = 3U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + rdcarray operand1; +}; + struct OpDecorateString { OpDecorateString(const ConstIter &it) @@ -16322,6 +16843,578 @@ struct OpSubgroupAvcSicGetInterRawSadsINTEL Id payload; }; +struct OpLoopControlINTEL +{ + OpLoopControlINTEL(const ConstIter &it) + { + this->op = OpCode; + this->wordCount = (uint16_t)it.size(); + uint32_t word = 1; + this->loopControlParameters = MultiParam(it, word); + } + OpLoopControlINTEL(const rdcarray &loopControlParameters = {}) + : op(Op::LoopControlINTEL) + , wordCount(MinWordSize + MultiWordCount(loopControlParameters)) + { + this->loopControlParameters = loopControlParameters; + } + operator Operation() const + { + rdcarray words; + for(size_t i=0; i < loopControlParameters.size(); i++) + { + words.push_back((uint32_t)loopControlParameters[i]); + } + return Operation(OpCode, words); + } + + static constexpr Op OpCode = Op::LoopControlINTEL; + static constexpr uint16_t MinWordSize = 1U; + Op op; + uint16_t wordCount; + rdcarray loopControlParameters; +}; + +struct OpReadPipeBlockingINTEL +{ + OpReadPipeBlockingINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpReadPipeBlockingINTEL(IdResultType resultType, IdResult result, Id packetSize, Id packetAlignment) + : op(Op::ReadPipeBlockingINTEL) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->packetSize = packetSize; + this->packetAlignment = packetAlignment; + } + + static constexpr Op OpCode = Op::ReadPipeBlockingINTEL; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id packetSize; + Id packetAlignment; +}; + +struct OpWritePipeBlockingINTEL +{ + OpWritePipeBlockingINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpWritePipeBlockingINTEL(IdResultType resultType, IdResult result, Id packetSize, Id packetAlignment) + : op(Op::WritePipeBlockingINTEL) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->packetSize = packetSize; + this->packetAlignment = packetAlignment; + } + + static constexpr Op OpCode = Op::WritePipeBlockingINTEL; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id packetSize; + Id packetAlignment; +}; + +struct OpFPGARegINTEL +{ + OpFPGARegINTEL(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpFPGARegINTEL(IdResultType resultType, IdResult result0, Id result1, Id input) + : op(Op::FPGARegINTEL) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result0 = result0; + this->result1 = result1; + this->input = input; + } + + static constexpr Op OpCode = Op::FPGARegINTEL; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result0; + Id result1; + Id input; +}; + +struct OpRayQueryGetRayTMinKHR +{ + OpRayQueryGetRayTMinKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetRayTMinKHR(IdResultType resultType, IdResult result, Id rayQuery) + : op(Op::RayQueryGetRayTMinKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryGetRayTMinKHR; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; +}; + +struct OpRayQueryGetRayFlagsKHR +{ + OpRayQueryGetRayFlagsKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetRayFlagsKHR(IdResultType resultType, IdResult result, Id rayQuery) + : op(Op::RayQueryGetRayFlagsKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryGetRayFlagsKHR; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; +}; + +struct OpRayQueryGetIntersectionTKHR +{ + OpRayQueryGetIntersectionTKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionTKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionTKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionTKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionInstanceCustomIndexKHR +{ + OpRayQueryGetIntersectionInstanceCustomIndexKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionInstanceCustomIndexKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionInstanceCustomIndexKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionInstanceCustomIndexKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionInstanceIdKHR +{ + OpRayQueryGetIntersectionInstanceIdKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionInstanceIdKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionInstanceIdKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionInstanceIdKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR +{ + OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionGeometryIndexKHR +{ + OpRayQueryGetIntersectionGeometryIndexKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionGeometryIndexKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionGeometryIndexKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionGeometryIndexKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionPrimitiveIndexKHR +{ + OpRayQueryGetIntersectionPrimitiveIndexKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionPrimitiveIndexKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionPrimitiveIndexKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionPrimitiveIndexKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionBarycentricsKHR +{ + OpRayQueryGetIntersectionBarycentricsKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionBarycentricsKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionBarycentricsKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionBarycentricsKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionFrontFaceKHR +{ + OpRayQueryGetIntersectionFrontFaceKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionFrontFaceKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionFrontFaceKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionFrontFaceKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionCandidateAABBOpaqueKHR +{ + OpRayQueryGetIntersectionCandidateAABBOpaqueKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionCandidateAABBOpaqueKHR(IdResultType resultType, IdResult result, Id rayQuery) + : op(Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; +}; + +struct OpRayQueryGetIntersectionObjectRayDirectionKHR +{ + OpRayQueryGetIntersectionObjectRayDirectionKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionObjectRayDirectionKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionObjectRayDirectionKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionObjectRayDirectionKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionObjectRayOriginKHR +{ + OpRayQueryGetIntersectionObjectRayOriginKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionObjectRayOriginKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionObjectRayOriginKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionObjectRayOriginKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetWorldRayDirectionKHR +{ + OpRayQueryGetWorldRayDirectionKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetWorldRayDirectionKHR(IdResultType resultType, IdResult result, Id rayQuery) + : op(Op::RayQueryGetWorldRayDirectionKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryGetWorldRayDirectionKHR; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; +}; + +struct OpRayQueryGetWorldRayOriginKHR +{ + OpRayQueryGetWorldRayOriginKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetWorldRayOriginKHR(IdResultType resultType, IdResult result, Id rayQuery) + : op(Op::RayQueryGetWorldRayOriginKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + } + + static constexpr Op OpCode = Op::RayQueryGetWorldRayOriginKHR; + static constexpr uint16_t FixedWordSize = 4U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; +}; + +struct OpRayQueryGetIntersectionObjectToWorldKHR +{ + OpRayQueryGetIntersectionObjectToWorldKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionObjectToWorldKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionObjectToWorldKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionObjectToWorldKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpRayQueryGetIntersectionWorldToObjectKHR +{ + OpRayQueryGetIntersectionWorldToObjectKHR(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpRayQueryGetIntersectionWorldToObjectKHR(IdResultType resultType, IdResult result, Id rayQuery, Id intersection) + : op(Op::RayQueryGetIntersectionWorldToObjectKHR) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->rayQuery = rayQuery; + this->intersection = intersection; + } + + static constexpr Op OpCode = Op::RayQueryGetIntersectionWorldToObjectKHR; + static constexpr uint16_t FixedWordSize = 5U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id rayQuery; + Id intersection; +}; + +struct OpAtomicFAddEXT +{ + OpAtomicFAddEXT(const ConstIter &it) + { + memcpy(this, it.words(), sizeof(*this)); + } + OpAtomicFAddEXT(IdResultType resultType, IdResult result, Id pointer, IdScope memory, IdMemorySemantics semantics, Id value) + : op(Op::AtomicFAddEXT) + , wordCount(FixedWordSize) + { + this->resultType = resultType; + this->result = result; + this->pointer = pointer; + this->memory = memory; + this->semantics = semantics; + this->value = value; + } + + static constexpr Op OpCode = Op::AtomicFAddEXT; + static constexpr uint16_t FixedWordSize = 7U; + Op op; + uint16_t wordCount; + IdResultType resultType; + IdResult result; + Id pointer; + IdScope memory; + IdMemorySemantics semantics; + Id value; +}; + template inline rdcstr ParamToStr(const std::function &idName, const T &el) {