Update SPIR-V grammar and generated headers

This commit is contained in:
baldurk
2020-10-20 12:44:24 +01:00
parent b2746eede5
commit 4cdc46a5cf
8 changed files with 3475 additions and 94 deletions
@@ -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")
+82 -24
View File
@@ -23,10 +23,11 @@
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
-->
<!--
This file, spir-v.xml, is the SPIR-V Tool ID and Opcode registry. The
canonical version of the registry, together with related schema and
This file, spir-v.xml, is the SPIR-V Tool ID, opcode and enumerant registry.
The canonical version of the registry, together with related schema and
documentation, can be found in the Khronos Registry at
http://www.khronos.org/registry/spir-v/
include/spirv/spir-v.xml in the master branch at
https://github.com/KhronosGroup/SPIRV-Headers
-->
<!-- SECTION: SPIR-V Tool ID Definitions -->
@@ -72,32 +73,45 @@
<id value="20" vendor="W3C WebGPU Group" tool="WHLSL Shader Translator" comment="https://github.com/gpuweb/WHLSL"/>
<id value="21" vendor="Google" tool="Clspv" comment="Contact David Neto, dneto@google.com"/>
<id value="22" vendor="Google" tool="MLIR SPIR-V Serializer" comment="Contact Lei Zhang, antiagainst@google.com"/>
<unused start="23" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/>
<id value="23" vendor="Google" tool="Tint Compiler" comment="Contact David Neto, dneto@google.com"/>
<id value="24" vendor="Google" tool="ANGLE Shader Compiler" comment="Contact Shahbaz Youssefi, syoussefi@google.com"/>
<id value="25" vendor="Netease Games" tool="Messiah Shader Compiler" comment="Contact Yuwen Wu, atyuwen@gmail.com"/>
<id value="26" vendor="Xenia" tool="Xenia Emulator Microcode Translator" comment="Contact Vitaliy Kuzmin, triang3l@yandex.ru, https://github.com/xenia-project/xenia"/>
<unused start="27" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/>
</ids>
<!-- SECTION: SPIR-V Opcodes and Enumerants -->
<!-- Reserve new ranges for vendors in contiguous blocks of 64
preceding the "Future use" block below, and modify that block
accordingly.
Each vendor determines the use of values in their own ranges.
Vendors are not required to disclose those uses. If the use of a
value is included in an extension that is adopted by a Khronos
extension or specification, then that value's use may be permanently
<!-- Vendors reserve new ranges of:
- opcode enumerants in the "opcode" list below, and
- non-opcode enumerants in the non-opcodes "enumerant" list below.
Both are reserved by contiguous blocks of 64, preceding the given
"Future use" blocks.
SPIR-V background:
- SPIR-V currently has well over 30 enums, including the opcode enum
- each enum has its own name space, allowing reuse of enumerants
- SPIR-V restricts opcode enumerants to 16 bits
- all other enums use 32-bit enumerants
Reservation rules:
- opcode reservations ("opcode") are only valid for opcodes
- non-opcode reservations ("enumerant") are not valid for opcodes
- reservations in the enumerant list are valid for all non-opcode enums
- it is simpler to use each non-opcode enumerant for only one purpose
but this is left to the discretion of the vendor
- all enumerants in a range should be used before allocating a new range
(several extensions can use enumerants from the same range)
Each vendor determines the use of enumerants in the ranges they
reserve. Vendors are not required to disclose those uses. If the use
of an enumerant is included in an extension that is adopted by a Khronos
extension or specification, then that enumerant's use may be permanently
fixed as if originally reserved in a Khronos range.
The SPIR Working Group strongly recommends:
- Each value is used for only one purpose.
- All values in a range should be used before allocating a new range.
For example, to avoid unused gaps in ranges, it is customary for
several extensions to use values from the same range.
The Id type "enum" is a synonym for "opcode".
Note that SPIR-V restricts opcode values to 16 bits.
-->
<!-- Reserved opcode & enumerant blocks -->
<!-- Begin reservations of opcode enumerants -->
<ids type="opcode" start="0" end="4095" vendor="Khronos" comment="Reserved opcodes, not available to vendors - see the SPIR-V Specification"/>
<ids type="opcode" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/>
<ids type="opcode" start="4160" end="4415" vendor="ARM"/>
@@ -112,15 +126,41 @@
<ids type="opcode" start="5824" end="5951" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
<ids type="opcode" start="5952" end="6015" vendor="Codeplay" comment="Contact victor@codeplay.com"/>
<ids type="opcode" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/>
<!-- Opcodes & enumerants reservable for future use. To get a block, allocate
<ids type="opcode" start="6080" end="6143" vendor="Intel" comment="Contact mariusz.merecki@intel.com"/>
<!-- Opcode enumerants to reserve for future use. To get a block, allocate
multiples of 64 starting at the lowest available point in this
block and add a corresponding <ids> tag immediately above. Make
sure to fill in the vendor attribute, and preferably add a contact
person/address in a comment attribute. -->
<!-- Example new block: <ids type="opcode" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> -->
<ids type="opcode" start="6144" end="65535" comment="Opcode range reservable for future use by vendors"/>
<!-- End reservations of opcodes -->
<ids type="opcode" start="6080" end="4294967295" comment="Opcode range reservable for future use by vendors"/>
<!-- Begin reservations of non-opcode enumerants -->
<ids type="enumerant" start="0" end="4095" vendor="Khronos" comment="Reserved enumerants, not available to vendors - see the SPIR-V Specification"/>
<ids type="enumerant" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/>
<ids type="enumerant" start="4160" end="4415" vendor="ARM"/>
<ids type="enumerant" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, neil.henning@amd.com"/>
<ids type="enumerant" start="4480" end="4991" vendor="Qualcomm" comment="Contact weifengz@qti.qualcomm.com"/>
<ids type="enumerant" start="4992" end="5247" vendor="AMD"/>
<ids type="enumerant" start="5248" end="5503" vendor="NVIDIA"/>
<ids type="enumerant" start="5504" end="5567" vendor="Imagination"/>
<ids type="enumerant" start="5568" end="5631" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
<ids type="enumerant" start="5632" end="5695" vendor="Google" comment="Contact dneto@google.com"/>
<ids type="enumerant" start="5696" end="5823" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
<ids type="enumerant" start="5824" end="5951" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
<ids type="enumerant" start="5952" end="6015" vendor="Codeplay" comment="Contact victor@codeplay.com"/>
<ids type="enumerant" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/>
<ids type="enumerant" start="6080" end="6143" vendor="Intel" comment="Contact mariusz.merecki@intel.com"/>
<!-- Enumerants to reserve for future use. To get a block, allocate
multiples of 64 starting at the lowest available point in this
block and add a corresponding <ids> tag immediately above. Make
sure to fill in the vendor attribute, and preferably add a contact
person/address in a comment attribute. -->
<!-- Example new block: <ids type="enumerant" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> -->
<ids type="enumerant" start="6144" end="4294967295" comment="Enumerant range reservable for future use by vendors"/>
<!-- End reservations of enumerants -->
<!-- SECTION: SPIR-V Loop Control Bit Reservations -->
@@ -143,4 +183,22 @@
<ids type="LoopControl" start="23" end="30" comment="Unreserved bits reservable for use by vendors"/>
<ids type="LoopControl" start="31" end="31" vendor="Khronos" comment="Reserved LoopControl bit, not available to vendors"/>
<!-- SECTION: SPIR-V FP Fast Math Mode Bit Reservations -->
<!-- Reserve ranges of bits in the "FP Fast Math Mode" bitfield.
Each vendor determines the use of values in their own ranges.
Vendors are not required to disclose those uses. If the use of a
value is included in an extension that is adopted by a Khronos
extension or specification, then that value's use may be permanently
fixed as if originally reserved in a Khronos range.
The SPIR Working Group strongly recommends:
- Each value is used for only one purpose.
- All values in a range should be used before allocating a new range.
-->
<!-- Reserved FP fast math mode bits -->
<ids type="FPFastMathMode" start="0" end="15" vendor="Khronos" comment="Reserved FPFastMathMode bits, not available to vendors - see the SPIR-V Specification"/>
<ids type="FPFastMathMode" start="16" end="17" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
<ids type="FPFastMathMode" start="18" end="31" comment="Unreserved bits reservable for use by vendors"/>
</registry>
File diff suppressed because it is too large Load Diff
@@ -2596,6 +2596,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
break;
}
case Op::TerminateInvocation:
case Op::Kill:
{
killed = true;
@@ -3082,6 +3083,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
break;
}
case Op::AtomicFAddEXT:
case Op::GroupIAddNonUniformAMD:
case Op::GroupFAddNonUniformAMD:
case Op::GroupFMinNonUniformAMD:
@@ -3250,6 +3252,33 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
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<ThreadState>
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());
@@ -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:
{
+604 -1
View File
@@ -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<rdcstr(rdcspv::Id)> &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<rdcstr(rdcspv::Id)> &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<rdcstr(rdcspv::Id)> &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<void(Id,bool)
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::TerminateInvocation:
break;
case rdcspv::Op::SubgroupBallotKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
@@ -3631,6 +3811,40 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::TypeRayQueryProvisionalKHR:
callback(Id::fromWord(it.word(1)), true);
break;
case rdcspv::Op::RayQueryInitializeKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), false);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
callback(Id::fromWord(it.word(7)), false);
callback(Id::fromWord(it.word(8)), false);
break;
case rdcspv::Op::RayQueryTerminateKHR:
callback(Id::fromWord(it.word(1)), false);
break;
case rdcspv::Op::RayQueryGenerateIntersectionKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), false);
break;
case rdcspv::Op::RayQueryConfirmIntersectionKHR:
callback(Id::fromWord(it.word(1)), false);
break;
case rdcspv::Op::RayQueryProceedKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionTypeKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::GroupIAddNonUniformAMD:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
@@ -3929,6 +4143,16 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::FunctionPointerINTEL:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::FunctionPointerCallINTEL:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
for(size_t i=0; i < size-3; i++) callback(Id::fromWord(it.word(3+i)), false);
break;
case rdcspv::Op::DecorateString:
callback(Id::fromWord(it.word(1)), false);
break;
@@ -4626,6 +4850,131 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::LoopControlINTEL:
break;
case rdcspv::Op::ReadPipeBlockingINTEL:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::WritePipeBlockingINTEL:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::FPGARegINTEL:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetRayTMinKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::RayQueryGetRayFlagsKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionTKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionInstanceIdKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionGeometryIndexKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionPrimitiveIndexKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionBarycentricsKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionFrontFaceKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionObjectRayDirectionKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionObjectRayOriginKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetWorldRayDirectionKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::RayQueryGetWorldRayOriginKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionObjectToWorldKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::RayQueryGetIntersectionWorldToObjectKHR:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::AtomicFAddEXT:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
break;
case Op::Max: break;
}
}
@@ -6988,6 +7337,12 @@ rdcstr OpDecoder::Disassemble(const ConstIter &it, const std::function<rdcstr(Id
ret += "PtrDiff(" + ParamToStr(idName, decoded.operand1) + ", " + ParamToStr(idName, decoded.operand2) + ")";
break;
}
case rdcspv::Op::TerminateInvocation:
{
OpTerminateInvocation decoded(it);
ret += "TerminateInvocation(" ")";
break;
}
case rdcspv::Op::SubgroupBallotKHR:
{
OpSubgroupBallotKHR decoded(it);
@@ -7030,6 +7385,51 @@ rdcstr OpDecoder::Disassemble(const ConstIter &it, const std::function<rdcstr(Id
ret += "SubgroupReadInvocationKHR(" + ParamToStr(idName, decoded.value) + ", " + ParamToStr(idName, decoded.index) + ")";
break;
}
case rdcspv::Op::TypeRayQueryProvisionalKHR:
{
OpTypeRayQueryProvisionalKHR decoded(it);
ret += idName(decoded.result) + " = ";
ret += "TypeRayQueryProvisionalKHR(" ")";
break;
}
case rdcspv::Op::RayQueryInitializeKHR:
{
OpRayQueryInitializeKHR decoded(it);
ret += "RayQueryInitializeKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.accel) + ", " + ParamToStr(idName, decoded.rayFlags) + ", " + ParamToStr(idName, decoded.cullMask) + ", " + ParamToStr(idName, decoded.rayOrigin) + ", " + ParamToStr(idName, decoded.rayTMin) + ", " + ParamToStr(idName, decoded.rayDirection) + ", " + ParamToStr(idName, decoded.rayTMax) + ")";
break;
}
case rdcspv::Op::RayQueryTerminateKHR:
{
OpRayQueryTerminateKHR decoded(it);
ret += "RayQueryTerminateKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGenerateIntersectionKHR:
{
OpRayQueryGenerateIntersectionKHR decoded(it);
ret += "RayQueryGenerateIntersectionKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.hitT) + ")";
break;
}
case rdcspv::Op::RayQueryConfirmIntersectionKHR:
{
OpRayQueryConfirmIntersectionKHR decoded(it);
ret += "RayQueryConfirmIntersectionKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryProceedKHR:
{
OpRayQueryProceedKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryProceedKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionTypeKHR:
{
OpRayQueryGetIntersectionTypeKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionTypeKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::GroupIAddNonUniformAMD:
{
OpGroupIAddNonUniformAMD decoded(it);
@@ -7389,6 +7789,20 @@ rdcstr OpDecoder::Disassemble(const ConstIter &it, const std::function<rdcstr(Id
ret += "UMul32x16INTEL(" + ParamToStr(idName, decoded.operand1) + ", " + ParamToStr(idName, decoded.operand2) + ")";
break;
}
case rdcspv::Op::FunctionPointerINTEL:
{
OpFunctionPointerINTEL decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "FunctionPointerINTEL(" + ParamToStr(idName, decoded.function) + ")";
break;
}
case rdcspv::Op::FunctionPointerCallINTEL:
{
OpFunctionPointerCallINTEL decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "FunctionPointerCallINTEL(" + ParamsToStr(idName, decoded.operand1) + ")";
break;
}
case rdcspv::Op::DecorateString:
{
OpDecorateString decoded(it);
@@ -8227,6 +8641,159 @@ rdcstr OpDecoder::Disassemble(const ConstIter &it, const std::function<rdcstr(Id
ret += "SubgroupAvcSicGetInterRawSadsINTEL(" + ParamToStr(idName, decoded.payload) + ")";
break;
}
case rdcspv::Op::LoopControlINTEL:
{
OpLoopControlINTEL decoded(it);
ret += "LoopControlINTEL(" + ParamsToStr(idName, decoded.loopControlParameters) + ")";
break;
}
case rdcspv::Op::ReadPipeBlockingINTEL:
{
OpReadPipeBlockingINTEL decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "ReadPipeBlockingINTEL(" + ParamToStr(idName, decoded.packetSize) + ", " + ParamToStr(idName, decoded.packetAlignment) + ")";
break;
}
case rdcspv::Op::WritePipeBlockingINTEL:
{
OpWritePipeBlockingINTEL decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "WritePipeBlockingINTEL(" + ParamToStr(idName, decoded.packetSize) + ", " + ParamToStr(idName, decoded.packetAlignment) + ")";
break;
}
case rdcspv::Op::FPGARegINTEL:
{
OpFPGARegINTEL decoded(it);
ret += declName(decoded.resultType, decoded.result0) + ", " + idName(decoded.result1) + " = ";
ret += "FPGARegINTEL(" + ParamToStr(idName, decoded.result1) + ", " + ParamToStr(idName, decoded.input) + ")";
break;
}
case rdcspv::Op::RayQueryGetRayTMinKHR:
{
OpRayQueryGetRayTMinKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetRayTMinKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGetRayFlagsKHR:
{
OpRayQueryGetRayFlagsKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetRayFlagsKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionTKHR:
{
OpRayQueryGetIntersectionTKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionTKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR:
{
OpRayQueryGetIntersectionInstanceCustomIndexKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionInstanceCustomIndexKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionInstanceIdKHR:
{
OpRayQueryGetIntersectionInstanceIdKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionInstanceIdKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:
{
OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionGeometryIndexKHR:
{
OpRayQueryGetIntersectionGeometryIndexKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionGeometryIndexKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionPrimitiveIndexKHR:
{
OpRayQueryGetIntersectionPrimitiveIndexKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionPrimitiveIndexKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionBarycentricsKHR:
{
OpRayQueryGetIntersectionBarycentricsKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionBarycentricsKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionFrontFaceKHR:
{
OpRayQueryGetIntersectionFrontFaceKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionFrontFaceKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR:
{
OpRayQueryGetIntersectionCandidateAABBOpaqueKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionCandidateAABBOpaqueKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionObjectRayDirectionKHR:
{
OpRayQueryGetIntersectionObjectRayDirectionKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionObjectRayDirectionKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionObjectRayOriginKHR:
{
OpRayQueryGetIntersectionObjectRayOriginKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionObjectRayOriginKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetWorldRayDirectionKHR:
{
OpRayQueryGetWorldRayDirectionKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetWorldRayDirectionKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGetWorldRayOriginKHR:
{
OpRayQueryGetWorldRayOriginKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetWorldRayOriginKHR(" + ParamToStr(idName, decoded.rayQuery) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionObjectToWorldKHR:
{
OpRayQueryGetIntersectionObjectToWorldKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionObjectToWorldKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::RayQueryGetIntersectionWorldToObjectKHR:
{
OpRayQueryGetIntersectionWorldToObjectKHR decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "RayQueryGetIntersectionWorldToObjectKHR(" + ParamToStr(idName, decoded.rayQuery) + ", " + ParamToStr(idName, decoded.intersection) + ")";
break;
}
case rdcspv::Op::AtomicFAddEXT:
{
OpAtomicFAddEXT decoded(it);
ret += declName(decoded.resultType, decoded.result) + " = ";
ret += "AtomicFAddEXT(" + ParamToStr(idName, decoded.pointer) + ", " + ToStr(Scope(constIntVal(decoded.memory))) + ", " + ToStr(MemorySemantics(constIntVal(decoded.semantics))) + ", " + ParamToStr(idName, decoded.value) + ")";
break;
}
case Op::Max: break;
}
return ret;
@@ -8582,12 +9149,20 @@ OpDecoder::OpDecoder(const ConstIter &it)
case rdcspv::Op::PtrEqual: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::PtrNotEqual: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::PtrDiff: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::TerminateInvocation: result = Id(); resultType = Id(); break;
case rdcspv::Op::SubgroupBallotKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupFirstInvocationKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupAllKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupAnyKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupAllEqualKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupReadInvocationKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::TypeRayQueryProvisionalKHR: result = Id::fromWord(it.word(1)); resultType = Id(); break;
case rdcspv::Op::RayQueryInitializeKHR: result = Id(); resultType = Id(); break;
case rdcspv::Op::RayQueryTerminateKHR: result = Id(); resultType = Id(); break;
case rdcspv::Op::RayQueryGenerateIntersectionKHR: result = Id(); resultType = Id(); break;
case rdcspv::Op::RayQueryConfirmIntersectionKHR: result = Id(); resultType = Id(); break;
case rdcspv::Op::RayQueryProceedKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionTypeKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::GroupIAddNonUniformAMD: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::GroupFAddNonUniformAMD: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::GroupFMinNonUniformAMD: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
@@ -8641,6 +9216,8 @@ OpDecoder::OpDecoder(const ConstIter &it)
case rdcspv::Op::USubSatINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::IMul32x16INTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::UMul32x16INTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::FunctionPointerINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::FunctionPointerCallINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::DecorateString: result = Id(); resultType = Id(); break;
case rdcspv::Op::MemberDecorateString: result = Id(); resultType = Id(); break;
case rdcspv::Op::VmeImageINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
@@ -8761,6 +9338,28 @@ OpDecoder::OpDecoder(const ConstIter &it)
case rdcspv::Op::SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::SubgroupAvcSicGetInterRawSadsINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::LoopControlINTEL: result = Id(); resultType = Id(); break;
case rdcspv::Op::ReadPipeBlockingINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::WritePipeBlockingINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::FPGARegINTEL: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetRayTMinKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetRayFlagsKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionTKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionInstanceIdKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionGeometryIndexKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionPrimitiveIndexKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionBarycentricsKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionFrontFaceKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionObjectRayDirectionKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionObjectRayOriginKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetWorldRayDirectionKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetWorldRayOriginKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionObjectToWorldKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::RayQueryGetIntersectionWorldToObjectKHR: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case rdcspv::Op::AtomicFAddEXT: result = Id::fromWord(it.word(2)); resultType = Id::fromWord(it.word(1)); break;
case Op::Max: break;
}
}
@@ -8875,6 +9474,10 @@ rdcstr DoStringise(const rdcspv::Generator &el)
STRINGISE_ENUM_CLASS_NAMED(WHLSLShaderTranslator, "WHLSL Shader Translator from W3C WebGPU Group - https://github.com/gpuweb/WHLSL");
STRINGISE_ENUM_CLASS_NAMED(Clspv, "Clspv from Google - Contact David Neto, dneto@google.com");
STRINGISE_ENUM_CLASS_NAMED(MLIRSPIRVSerializer, "MLIR SPIR-V Serializer from Google - Contact Lei Zhang, antiagainst@google.com");
STRINGISE_ENUM_CLASS_NAMED(TintCompiler, "Tint Compiler from Google - Contact David Neto, dneto@google.com");
STRINGISE_ENUM_CLASS_NAMED(ANGLEShaderCompiler, "ANGLE Shader Compiler from Google - Contact Shahbaz Youssefi, syoussefi@google.com");
STRINGISE_ENUM_CLASS_NAMED(MessiahShaderCompiler, "Messiah Shader Compiler from Netease Games - Contact Yuwen Wu, atyuwen@gmail.com");
STRINGISE_ENUM_CLASS_NAMED(XeniaEmulatorMicrocodeTranslator, "Xenia Emulator Microcode Translator from Xenia - Contact Vitaliy Kuzmin, triang3l@yandex.ru, https://github.com/xenia-project/xenia");
}
END_ENUM_STRINGISE();
}
+215 -2
View File
@@ -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"),
@@ -72,7 +72,7 @@ namespace rdcspv
static const uint32_t MagicNumber = 0x07230203;
static const uint32_t VersionMajor = 1;
static const uint32_t VersionMinor = 5;
static const uint32_t VersionRevision = 1;
static const uint32_t VersionRevision = 3;
static const uint32_t VersionPacked = (1 << 16) | (5 << 8);
static const uint32_t OpCodeMask = 0xffff;
static const uint32_t WordCountShift = 16;
@@ -111,6 +111,10 @@ enum class Generator : uint32_t
WHLSLShaderTranslator = 20,
Clspv = 21,
MLIRSPIRVSerializer = 22,
TintCompiler = 23,
ANGLEShaderCompiler = 24,
MessiahShaderCompiler = 25,
XeniaEmulatorMicrocodeTranslator = 26,
};
enum class ImageOperands : uint32_t
@@ -177,6 +181,13 @@ enum class LoopControl : uint32_t
IterationMultiple = 0x0040,
PeelCount = 0x0080,
PartialCount = 0x0100,
InitiationIntervalINTEL = 0x10000,
MaxConcurrencyINTEL = 0x20000,
DependencyArrayINTEL = 0x40000,
PipelineEnableINTEL = 0x80000,
LoopCoalesceINTEL = 0x100000,
MaxInterleavingINTEL = 0x200000,
SpeculatedIterationsINTEL = 0x400000,
Max,
Invalid = ~0U,
};
@@ -251,6 +262,37 @@ enum class KernelProfilingInfo : uint32_t
BITMASK_OPERATORS(KernelProfilingInfo);
enum class RayFlags : uint32_t
{
NoneKHR = 0x0000,
OpaqueKHR = 0x0001,
NoOpaqueKHR = 0x0002,
TerminateOnFirstHitKHR = 0x0004,
SkipClosestHitShaderKHR = 0x0008,
CullBackFacingTrianglesKHR = 0x0010,
CullFrontFacingTrianglesKHR = 0x0020,
CullOpaqueKHR = 0x0040,
CullNoOpaqueKHR = 0x0080,
SkipTrianglesKHR = 0x0100,
SkipAABBsKHR = 0x0200,
Max,
Invalid = ~0U,
};
BITMASK_OPERATORS(RayFlags);
enum class FragmentShadingRate : uint32_t
{
Vertical2Pixels = 0x0001,
Vertical4Pixels = 0x0002,
Horizontal2Pixels = 0x0004,
Horizontal4Pixels = 0x0008,
Max,
Invalid = ~0U,
};
BITMASK_OPERATORS(FragmentShadingRate);
enum class SourceLanguage : uint32_t
{
Unknown = 0,
@@ -275,11 +317,17 @@ enum class ExecutionModel : uint32_t
TaskNV = 5267,
MeshNV = 5268,
RayGenerationNV = 5313,
RayGenerationKHR = 5313,
IntersectionNV = 5314,
IntersectionKHR = 5314,
AnyHitNV = 5315,
AnyHitKHR = 5315,
ClosestHitNV = 5316,
ClosestHitKHR = 5316,
MissNV = 5317,
MissKHR = 5317,
CallableNV = 5318,
CallableKHR = 5318,
Max,
Invalid = ~0U,
};
@@ -364,6 +412,10 @@ enum class ExecutionMode : uint32_t
SampleInterlockUnorderedEXT = 5369,
ShadingRateInterlockOrderedEXT = 5370,
ShadingRateInterlockUnorderedEXT = 5371,
MaxWorkgroupSizeINTEL = 5893,
MaxWorkDimINTEL = 5894,
NoGlobalOffsetINTEL = 5895,
NumSIMDWorkitemsINTEL = 5896,
Max,
Invalid = ~0U,
};
@@ -384,13 +436,20 @@ enum class StorageClass : uint32_t
Image = 11,
StorageBuffer = 12,
CallableDataNV = 5328,
CallableDataKHR = 5328,
IncomingCallableDataNV = 5329,
IncomingCallableDataKHR = 5329,
RayPayloadNV = 5338,
RayPayloadKHR = 5338,
HitAttributeNV = 5339,
HitAttributeKHR = 5339,
IncomingRayPayloadNV = 5342,
IncomingRayPayloadKHR = 5342,
ShaderRecordBufferNV = 5343,
ShaderRecordBufferKHR = 5343,
PhysicalStorageBuffer = 5349,
PhysicalStorageBufferEXT = 5349,
CodeSectionINTEL = 5605,
Max,
Invalid = ~0U,
};
@@ -469,6 +528,8 @@ enum class ImageFormat : uint32_t
Rg8ui = 37,
R16ui = 38,
R8ui = 39,
R64ui = 40,
R64i = 41,
Max,
Invalid = ~0U,
};
@@ -629,11 +690,24 @@ enum class Decoration : uint32_t
RestrictPointerEXT = 5355,
AliasedPointer = 5356,
AliasedPointerEXT = 5356,
ReferencedIndirectlyINTEL = 5602,
CounterBuffer = 5634,
HlslCounterBufferGOOGLE = 5634,
UserSemantic = 5635,
HlslSemanticGOOGLE = 5635,
UserTypeGOOGLE = 5636,
RegisterINTEL = 5825,
MemoryINTEL = 5826,
NumbanksINTEL = 5827,
BankwidthINTEL = 5828,
MaxPrivateCopiesINTEL = 5829,
SinglepumpINTEL = 5830,
DoublepumpINTEL = 5831,
MaxReplicatesINTEL = 5832,
SimpleDualPortINTEL = 5833,
MergeINTEL = 5834,
BankBitsINTEL = 5835,
ForcePow2DepthINTEL = 5836,
Max,
Invalid = ~0U,
};
@@ -694,8 +768,10 @@ enum class BuiltIn : uint32_t
BaseVertex = 4424,
BaseInstance = 4425,
DrawIndex = 4426,
PrimitiveShadingRateKHR = 4432,
DeviceIndex = 4438,
ViewIndex = 4440,
ShadingRateKHR = 4444,
BaryCoordNoPerspAMD = 4992,
BaryCoordNoPerspCentroidAMD = 4993,
BaryCoordNoPerspSampleAMD = 4994,
@@ -725,19 +801,34 @@ enum class BuiltIn : uint32_t
FragInvocationCountEXT = 5293,
InvocationsPerPixelNV = 5293,
LaunchIdNV = 5319,
LaunchIdKHR = 5319,
LaunchSizeNV = 5320,
LaunchSizeKHR = 5320,
WorldRayOriginNV = 5321,
WorldRayOriginKHR = 5321,
WorldRayDirectionNV = 5322,
WorldRayDirectionKHR = 5322,
ObjectRayOriginNV = 5323,
ObjectRayOriginKHR = 5323,
ObjectRayDirectionNV = 5324,
ObjectRayDirectionKHR = 5324,
RayTminNV = 5325,
RayTminKHR = 5325,
RayTmaxNV = 5326,
RayTmaxKHR = 5326,
InstanceCustomIndexNV = 5327,
InstanceCustomIndexKHR = 5327,
ObjectToWorldNV = 5330,
ObjectToWorldKHR = 5330,
WorldToObjectNV = 5331,
WorldToObjectKHR = 5331,
HitTNV = 5332,
HitTKHR = 5332,
HitKindNV = 5333,
HitKindKHR = 5333,
IncomingRayFlagsNV = 5351,
IncomingRayFlagsKHR = 5351,
RayGeometryIndexKHR = 5352,
WarpsPerSMNV = 5374,
SMCountNV = 5375,
WarpIDNV = 5376,
@@ -755,6 +846,7 @@ enum class Scope : uint32_t
Invocation = 4,
QueueFamily = 5,
QueueFamilyKHR = 5,
ShaderCallKHR = 6,
Max,
Invalid = ~0U,
};
@@ -852,6 +944,7 @@ enum class Capability : uint32_t
GroupNonUniformQuad = 68,
ShaderLayer = 69,
ShaderViewportIndex = 70,
FragmentShadingRateKHR = 4422,
SubgroupBallotKHR = 4423,
DrawParameters = 4427,
SubgroupVoteKHR = 4431,
@@ -875,11 +968,14 @@ enum class Capability : uint32_t
SignedZeroInfNanPreserve = 4466,
RoundingModeRTE = 4467,
RoundingModeRTZ = 4468,
RayQueryProvisionalKHR = 4471,
RayTraversalPrimitiveCullingProvisionalKHR = 4478,
Float16ImageAMD = 5008,
ImageGatherBiasLodAMD = 5009,
FragmentMaskAMD = 5010,
StencilExportEXT = 5013,
ImageReadWriteLodAMD = 5015,
Int64ImageEXT = 5016,
ShaderClockKHR = 5055,
SampleMaskOverrideCoverageNV = 5249,
GeometryShaderPassthroughNV = 5251,
@@ -928,6 +1024,7 @@ enum class Capability : uint32_t
PhysicalStorageBufferAddresses = 5347,
PhysicalStorageBufferAddressesEXT = 5347,
ComputeDerivativeGroupLinearNV = 5350,
RayTracingProvisionalKHR = 5353,
CooperativeMatrixNV = 5357,
FragmentShaderSampleInterlockEXT = 5363,
FragmentShaderShadingRateInterlockEXT = 5372,
@@ -939,9 +1036,45 @@ enum class Capability : uint32_t
SubgroupImageBlockIOINTEL = 5570,
SubgroupImageMediaBlockIOINTEL = 5579,
IntegerFunctions2INTEL = 5584,
FunctionPointersINTEL = 5603,
IndirectReferencesINTEL = 5604,
SubgroupAvcMotionEstimationINTEL = 5696,
SubgroupAvcMotionEstimationIntraINTEL = 5697,
SubgroupAvcMotionEstimationChromaINTEL = 5698,
FPGAMemoryAttributesINTEL = 5824,
UnstructuredLoopControlsINTEL = 5886,
FPGALoopControlsINTEL = 5888,
KernelAttributesINTEL = 5892,
FPGAKernelAttributesINTEL = 5897,
BlockingPipesINTEL = 5945,
FPGARegINTEL = 5948,
AtomicFloat32AddEXT = 6033,
AtomicFloat64AddEXT = 6034,
Max,
Invalid = ~0U,
};
enum class RayQueryIntersection : uint32_t
{
RayQueryCandidateIntersectionKHR = 0,
RayQueryCommittedIntersectionKHR = 1,
Max,
Invalid = ~0U,
};
enum class RayQueryCommittedIntersectionType : uint32_t
{
RayQueryCommittedIntersectionNoneKHR = 0,
RayQueryCommittedIntersectionTriangleKHR = 1,
RayQueryCommittedIntersectionGeneratedKHR = 2,
Max,
Invalid = ~0U,
};
enum class RayQueryCandidateIntersectionType : uint32_t
{
RayQueryCandidateIntersectionTriangleKHR = 0,
RayQueryCandidateIntersectionAABBKHR = 1,
Max,
Invalid = ~0U,
};
@@ -1029,6 +1162,13 @@ struct LoopControlAndParamDatas
uint32_t iterationMultiple;
uint32_t peelCount;
uint32_t partialCount;
uint32_t initiationIntervalINTEL;
uint32_t maxConcurrencyINTEL;
uint32_t dependencyArrayINTEL;
uint32_t pipelineEnableINTEL;
uint32_t loopCoalesceINTEL;
uint32_t maxInterleavingINTEL;
uint32_t speculatedIterationsINTEL;
operator LoopControl() const { return flags; }
bool operator &(const LoopControl v) const { return bool(flags & v); }
@@ -1052,6 +1192,20 @@ struct LoopControlAndParamDatas
void unsetPeelCount() { flags &= ~LoopControl::PeelCount; }
void setPartialCount(uint32_t partialCountParam) { flags |= LoopControl::PartialCount; partialCount = partialCountParam; }
void unsetPartialCount() { flags &= ~LoopControl::PartialCount; }
void setInitiationIntervalINTEL(uint32_t initiationIntervalINTELParam) { flags |= LoopControl::InitiationIntervalINTEL; initiationIntervalINTEL = initiationIntervalINTELParam; }
void unsetInitiationIntervalINTEL() { flags &= ~LoopControl::InitiationIntervalINTEL; }
void setMaxConcurrencyINTEL(uint32_t maxConcurrencyINTELParam) { flags |= LoopControl::MaxConcurrencyINTEL; maxConcurrencyINTEL = maxConcurrencyINTELParam; }
void unsetMaxConcurrencyINTEL() { flags &= ~LoopControl::MaxConcurrencyINTEL; }
void setDependencyArrayINTEL(uint32_t dependencyArrayINTELParam) { flags |= LoopControl::DependencyArrayINTEL; dependencyArrayINTEL = dependencyArrayINTELParam; }
void unsetDependencyArrayINTEL() { flags &= ~LoopControl::DependencyArrayINTEL; }
void setPipelineEnableINTEL(uint32_t pipelineEnableINTELParam) { flags |= LoopControl::PipelineEnableINTEL; pipelineEnableINTEL = pipelineEnableINTELParam; }
void unsetPipelineEnableINTEL() { flags &= ~LoopControl::PipelineEnableINTEL; }
void setLoopCoalesceINTEL(uint32_t loopCoalesceINTELParam) { flags |= LoopControl::LoopCoalesceINTEL; loopCoalesceINTEL = loopCoalesceINTELParam; }
void unsetLoopCoalesceINTEL() { flags &= ~LoopControl::LoopCoalesceINTEL; }
void setMaxInterleavingINTEL(uint32_t maxInterleavingINTELParam) { flags |= LoopControl::MaxInterleavingINTEL; maxInterleavingINTEL = maxInterleavingINTELParam; }
void unsetMaxInterleavingINTEL() { flags &= ~LoopControl::MaxInterleavingINTEL; }
void setSpeculatedIterationsINTEL(uint32_t speculatedIterationsINTELParam) { flags |= LoopControl::SpeculatedIterationsINTEL; speculatedIterationsINTEL = speculatedIterationsINTELParam; }
void unsetSpeculatedIterationsINTEL() { flags &= ~LoopControl::SpeculatedIterationsINTEL; }
};
struct MemoryAccessAndParamDatas
@@ -1109,6 +1263,13 @@ struct LocalSizeIdParams
Id zsize;
};
struct MaxWorkgroupSizeINTELParams
{
uint32_t max_x_size;
uint32_t max_y_size;
uint32_t max_z_size;
};
struct ExecutionModeAndParamData
{
ExecutionModeAndParamData(ExecutionMode v = ExecutionMode::Invalid) : value(v) {}
@@ -1131,6 +1292,9 @@ struct ExecutionModeAndParamData
uint32_t roundingModeRTE;
uint32_t roundingModeRTZ;
uint32_t outputPrimitivesNV;
MaxWorkgroupSizeINTELParams maxWorkgroupSizeINTEL;
uint32_t maxWorkDimINTEL;
uint32_t numSIMDWorkitemsINTEL;
};
operator ExecutionMode() const { return value; }
@@ -1168,6 +1332,12 @@ struct DecorationAndParamData
uint32_t secondaryViewportRelativeNV;
Id counterBuffer;
Id hlslCounterBufferGOOGLE;
uint32_t numbanksINTEL;
uint32_t bankwidthINTEL;
uint32_t maxPrivateCopiesINTEL;
uint32_t maxReplicatesINTEL;
uint32_t bankBitsINTEL;
uint32_t forcePow2DepthINTEL;
};
operator Decoration() const { return value; }
@@ -1520,12 +1690,20 @@ enum class Op : uint16_t
PtrEqual = 401,
PtrNotEqual = 402,
PtrDiff = 403,
TerminateInvocation = 4416,
SubgroupBallotKHR = 4421,
SubgroupFirstInvocationKHR = 4422,
SubgroupAllKHR = 4428,
SubgroupAnyKHR = 4429,
SubgroupAllEqualKHR = 4430,
SubgroupReadInvocationKHR = 4432,
TypeRayQueryProvisionalKHR = 4472,
RayQueryInitializeKHR = 4473,
RayQueryTerminateKHR = 4474,
RayQueryGenerateIntersectionKHR = 4475,
RayQueryConfirmIntersectionKHR = 4476,
RayQueryProceedKHR = 4477,
RayQueryGetIntersectionTypeKHR = 4479,
GroupIAddNonUniformAMD = 5000,
GroupFAddNonUniformAMD = 5001,
GroupFMinNonUniformAMD = 5002,
@@ -1541,11 +1719,17 @@ enum class Op : uint16_t
GroupNonUniformPartitionNV = 5296,
WritePackedPrimitiveIndices4x8NV = 5299,
ReportIntersectionNV = 5334,
ReportIntersectionKHR = 5334,
IgnoreIntersectionNV = 5335,
IgnoreIntersectionKHR = 5335,
TerminateRayNV = 5336,
TerminateRayKHR = 5336,
TraceNV = 5337,
TraceRayKHR = 5337,
TypeAccelerationStructureNV = 5341,
TypeAccelerationStructureKHR = 5341,
ExecuteCallableNV = 5344,
ExecuteCallableKHR = 5344,
TypeCooperativeMatrixNV = 5358,
CooperativeMatrixLoadNV = 5359,
CooperativeMatrixStoreNV = 5360,
@@ -1579,6 +1763,8 @@ enum class Op : uint16_t
USubSatINTEL = 5596,
IMul32x16INTEL = 5597,
UMul32x16INTEL = 5598,
FunctionPointerINTEL = 5600,
FunctionPointerCallINTEL = 5601,
DecorateString = 5632,
DecorateStringGOOGLE = 5632,
MemberDecorateString = 5633,
@@ -1701,6 +1887,28 @@ enum class Op : uint16_t
SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
SubgroupAvcSicGetInterRawSadsINTEL = 5816,
LoopControlINTEL = 5887,
ReadPipeBlockingINTEL = 5946,
WritePipeBlockingINTEL = 5947,
FPGARegINTEL = 5949,
RayQueryGetRayTMinKHR = 6016,
RayQueryGetRayFlagsKHR = 6017,
RayQueryGetIntersectionTKHR = 6018,
RayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
RayQueryGetIntersectionInstanceIdKHR = 6020,
RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
RayQueryGetIntersectionGeometryIndexKHR = 6022,
RayQueryGetIntersectionPrimitiveIndexKHR = 6023,
RayQueryGetIntersectionBarycentricsKHR = 6024,
RayQueryGetIntersectionFrontFaceKHR = 6025,
RayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
RayQueryGetIntersectionObjectRayDirectionKHR = 6027,
RayQueryGetIntersectionObjectRayOriginKHR = 6028,
RayQueryGetWorldRayDirectionKHR = 6029,
RayQueryGetWorldRayOriginKHR = 6030,
RayQueryGetIntersectionObjectToWorldKHR = 6031,
RayQueryGetIntersectionWorldToObjectKHR = 6032,
AtomicFAddEXT = 6035,
Max,
};
@@ -1807,6 +2015,8 @@ DECLARE_STRINGISE_TYPE(rdcspv::FunctionControl);
DECLARE_STRINGISE_TYPE(rdcspv::MemorySemantics);
DECLARE_STRINGISE_TYPE(rdcspv::MemoryAccess);
DECLARE_STRINGISE_TYPE(rdcspv::KernelProfilingInfo);
DECLARE_STRINGISE_TYPE(rdcspv::RayFlags);
DECLARE_STRINGISE_TYPE(rdcspv::FragmentShadingRate);
DECLARE_STRINGISE_TYPE(rdcspv::SourceLanguage);
DECLARE_STRINGISE_TYPE(rdcspv::ExecutionModel);
DECLARE_STRINGISE_TYPE(rdcspv::AddressingModel);
@@ -1829,3 +2039,6 @@ DECLARE_STRINGISE_TYPE(rdcspv::Scope);
DECLARE_STRINGISE_TYPE(rdcspv::GroupOperation);
DECLARE_STRINGISE_TYPE(rdcspv::KernelEnqueueFlags);
DECLARE_STRINGISE_TYPE(rdcspv::Capability);
DECLARE_STRINGISE_TYPE(rdcspv::RayQueryIntersection);
DECLARE_STRINGISE_TYPE(rdcspv::RayQueryCommittedIntersectionType);
DECLARE_STRINGISE_TYPE(rdcspv::RayQueryCandidateIntersectionType);
File diff suppressed because it is too large Load Diff