Бранимир Караџић 9 місяців тому
батько
коміт
2fb9eec9a4

+ 2292 - 4
3rdparty/spirv-cross/spirv.h

@@ -13,7 +13,7 @@
 ** 
 ** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
 ** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
 ** 
 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 ** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
@@ -73,6 +73,11 @@ typedef enum SpvSourceLanguage_ {
     SpvSourceLanguageHLSL = 5,
     SpvSourceLanguageCPP_for_OpenCL = 6,
     SpvSourceLanguageSYCL = 7,
+    SpvSourceLanguageHERO_C = 8,
+    SpvSourceLanguageNZSL = 9,
+    SpvSourceLanguageWGSL = 10,
+    SpvSourceLanguageSlang = 11,
+    SpvSourceLanguageZig = 12,
     SpvSourceLanguageMax = 0x7fffffff,
 } SpvSourceLanguage;
 
@@ -160,6 +165,9 @@ typedef enum SpvExecutionMode_ {
     SpvExecutionModeSubgroupsPerWorkgroupId = 37,
     SpvExecutionModeLocalSizeId = 38,
     SpvExecutionModeLocalSizeHintId = 39,
+    SpvExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
+    SpvExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
+    SpvExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
     SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
     SpvExecutionModePostDepthCoverage = 4446,
     SpvExecutionModeDenormPreserve = 4459,
@@ -169,17 +177,28 @@ typedef enum SpvExecutionMode_ {
     SpvExecutionModeRoundingModeRTZ = 4463,
     SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
     SpvExecutionModeStencilRefReplacingEXT = 5027,
+    SpvExecutionModeCoalescingAMDX = 5069,
+    SpvExecutionModeIsApiEntryAMDX = 5070,
+    SpvExecutionModeMaxNodeRecursionAMDX = 5071,
+    SpvExecutionModeStaticNumWorkgroupsAMDX = 5072,
+    SpvExecutionModeShaderIndexAMDX = 5073,
+    SpvExecutionModeMaxNumWorkgroupsAMDX = 5077,
     SpvExecutionModeStencilRefUnchangedFrontAMD = 5079,
     SpvExecutionModeStencilRefGreaterFrontAMD = 5080,
     SpvExecutionModeStencilRefLessFrontAMD = 5081,
     SpvExecutionModeStencilRefUnchangedBackAMD = 5082,
     SpvExecutionModeStencilRefGreaterBackAMD = 5083,
     SpvExecutionModeStencilRefLessBackAMD = 5084,
+    SpvExecutionModeQuadDerivativesKHR = 5088,
+    SpvExecutionModeRequireFullQuadsKHR = 5089,
+    SpvExecutionModeSharesInputWithAMDX = 5102,
     SpvExecutionModeOutputLinesEXT = 5269,
     SpvExecutionModeOutputLinesNV = 5269,
     SpvExecutionModeOutputPrimitivesEXT = 5270,
     SpvExecutionModeOutputPrimitivesNV = 5270,
+    SpvExecutionModeDerivativeGroupQuadsKHR = 5289,
     SpvExecutionModeDerivativeGroupQuadsNV = 5289,
+    SpvExecutionModeDerivativeGroupLinearKHR = 5290,
     SpvExecutionModeDerivativeGroupLinearNV = 5290,
     SpvExecutionModeOutputTrianglesEXT = 5298,
     SpvExecutionModeOutputTrianglesNV = 5298,
@@ -199,7 +218,14 @@ typedef enum SpvExecutionMode_ {
     SpvExecutionModeNoGlobalOffsetINTEL = 5895,
     SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
     SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
+    SpvExecutionModeMaximallyReconvergesKHR = 6023,
+    SpvExecutionModeFPFastMathDefault = 6028,
+    SpvExecutionModeStreamingInterfaceINTEL = 6154,
+    SpvExecutionModeRegisterMapInterfaceINTEL = 6160,
     SpvExecutionModeNamedBarrierCountINTEL = 6417,
+    SpvExecutionModeMaximumRegistersINTEL = 6461,
+    SpvExecutionModeMaximumRegistersIdINTEL = 6462,
+    SpvExecutionModeNamedMaximumRegistersINTEL = 6463,
     SpvExecutionModeMax = 0x7fffffff,
 } SpvExecutionMode;
 
@@ -217,6 +243,8 @@ typedef enum SpvStorageClass_ {
     SpvStorageClassAtomicCounter = 10,
     SpvStorageClassImage = 11,
     SpvStorageClassStorageBuffer = 12,
+    SpvStorageClassTileImageEXT = 4172,
+    SpvStorageClassNodePayloadAMDX = 5068,
     SpvStorageClassCallableDataKHR = 5328,
     SpvStorageClassCallableDataNV = 5328,
     SpvStorageClassIncomingCallableDataKHR = 5329,
@@ -231,6 +259,7 @@ typedef enum SpvStorageClass_ {
     SpvStorageClassShaderRecordBufferNV = 5343,
     SpvStorageClassPhysicalStorageBuffer = 5349,
     SpvStorageClassPhysicalStorageBufferEXT = 5349,
+    SpvStorageClassHitObjectAttributeNV = 5385,
     SpvStorageClassTaskPayloadWorkgroupEXT = 5402,
     SpvStorageClassCodeSectionINTEL = 5605,
     SpvStorageClassDeviceOnlyINTEL = 5936,
@@ -246,6 +275,7 @@ typedef enum SpvDim_ {
     SpvDimRect = 4,
     SpvDimBuffer = 5,
     SpvDimSubpassData = 6,
+    SpvDimTileImageDataEXT = 4173,
     SpvDimMax = 0x7fffffff,
 } SpvDim;
 
@@ -352,6 +382,9 @@ typedef enum SpvImageChannelDataType_ {
     SpvImageChannelDataTypeFloat = 14,
     SpvImageChannelDataTypeUnormInt24 = 15,
     SpvImageChannelDataTypeUnormInt101010_2 = 16,
+    SpvImageChannelDataTypeUnsignedIntRaw10EXT = 19,
+    SpvImageChannelDataTypeUnsignedIntRaw12EXT = 20,
+    SpvImageChannelDataTypeUnormInt2_101010EXT = 21,
     SpvImageChannelDataTypeMax = 0x7fffffff,
 } SpvImageChannelDataType;
 
@@ -409,8 +442,11 @@ typedef enum SpvFPFastMathModeShift_ {
     SpvFPFastMathModeNSZShift = 2,
     SpvFPFastMathModeAllowRecipShift = 3,
     SpvFPFastMathModeFastShift = 4,
+    SpvFPFastMathModeAllowContractShift = 16,
     SpvFPFastMathModeAllowContractFastINTELShift = 16,
+    SpvFPFastMathModeAllowReassocShift = 17,
     SpvFPFastMathModeAllowReassocINTELShift = 17,
+    SpvFPFastMathModeAllowTransformShift = 18,
     SpvFPFastMathModeMax = 0x7fffffff,
 } SpvFPFastMathModeShift;
 
@@ -421,8 +457,11 @@ typedef enum SpvFPFastMathModeMask_ {
     SpvFPFastMathModeNSZMask = 0x00000004,
     SpvFPFastMathModeAllowRecipMask = 0x00000008,
     SpvFPFastMathModeFastMask = 0x00000010,
+    SpvFPFastMathModeAllowContractMask = 0x00010000,
     SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
+    SpvFPFastMathModeAllowReassocMask = 0x00020000,
     SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
+    SpvFPFastMathModeAllowTransformMask = 0x00040000,
 } SpvFPFastMathModeMask;
 
 typedef enum SpvFPRoundingMode_ {
@@ -456,6 +495,7 @@ typedef enum SpvFunctionParameterAttribute_ {
     SpvFunctionParameterAttributeNoCapture = 5,
     SpvFunctionParameterAttributeNoWrite = 6,
     SpvFunctionParameterAttributeNoReadWrite = 7,
+    SpvFunctionParameterAttributeRuntimeAlignedINTEL = 5940,
     SpvFunctionParameterAttributeMax = 0x7fffffff,
 } SpvFunctionParameterAttribute;
 
@@ -513,6 +553,14 @@ typedef enum SpvDecoration_ {
     SpvDecorationBlockMatchTextureQCOM = 4488,
     SpvDecorationBlockMatchSamplerQCOM = 4499,
     SpvDecorationExplicitInterpAMD = 4999,
+    SpvDecorationNodeSharesPayloadLimitsWithAMDX = 5019,
+    SpvDecorationNodeMaxPayloadsAMDX = 5020,
+    SpvDecorationTrackFinishWritingAMDX = 5078,
+    SpvDecorationPayloadNodeNameAMDX = 5091,
+    SpvDecorationPayloadNodeBaseIndexAMDX = 5098,
+    SpvDecorationPayloadNodeSparseArrayAMDX = 5099,
+    SpvDecorationPayloadNodeArraySizeAMDX = 5100,
+    SpvDecorationPayloadDispatchIndirectAMDX = 5105,
     SpvDecorationOverrideCoverageNV = 5248,
     SpvDecorationPassthroughNV = 5250,
     SpvDecorationViewportRelativeNV = 5252,
@@ -529,6 +577,7 @@ typedef enum SpvDecoration_ {
     SpvDecorationRestrictPointerEXT = 5355,
     SpvDecorationAliasedPointer = 5356,
     SpvDecorationAliasedPointerEXT = 5356,
+    SpvDecorationHitObjectShaderRecordBufferNV = 5386,
     SpvDecorationBindlessSamplerNV = 5398,
     SpvDecorationBindlessImageNV = 5399,
     SpvDecorationBoundSamplerNV = 5400,
@@ -561,20 +610,45 @@ typedef enum SpvDecoration_ {
     SpvDecorationMergeINTEL = 5834,
     SpvDecorationBankBitsINTEL = 5835,
     SpvDecorationForcePow2DepthINTEL = 5836,
+    SpvDecorationStridesizeINTEL = 5883,
+    SpvDecorationWordsizeINTEL = 5884,
+    SpvDecorationTrueDualPortINTEL = 5885,
     SpvDecorationBurstCoalesceINTEL = 5899,
     SpvDecorationCacheSizeINTEL = 5900,
     SpvDecorationDontStaticallyCoalesceINTEL = 5901,
     SpvDecorationPrefetchINTEL = 5902,
     SpvDecorationStallEnableINTEL = 5905,
     SpvDecorationFuseLoopsInFunctionINTEL = 5907,
+    SpvDecorationMathOpDSPModeINTEL = 5909,
     SpvDecorationAliasScopeINTEL = 5914,
     SpvDecorationNoAliasINTEL = 5915,
+    SpvDecorationInitiationIntervalINTEL = 5917,
+    SpvDecorationMaxConcurrencyINTEL = 5918,
+    SpvDecorationPipelineEnableINTEL = 5919,
     SpvDecorationBufferLocationINTEL = 5921,
     SpvDecorationIOPipeStorageINTEL = 5944,
     SpvDecorationFunctionFloatingPointModeINTEL = 6080,
     SpvDecorationSingleElementVectorINTEL = 6085,
     SpvDecorationVectorComputeCallableFunctionINTEL = 6087,
     SpvDecorationMediaBlockIOINTEL = 6140,
+    SpvDecorationStallFreeINTEL = 6151,
+    SpvDecorationFPMaxErrorDecorationINTEL = 6170,
+    SpvDecorationLatencyControlLabelINTEL = 6172,
+    SpvDecorationLatencyControlConstraintINTEL = 6173,
+    SpvDecorationConduitKernelArgumentINTEL = 6175,
+    SpvDecorationRegisterMapKernelArgumentINTEL = 6176,
+    SpvDecorationMMHostInterfaceAddressWidthINTEL = 6177,
+    SpvDecorationMMHostInterfaceDataWidthINTEL = 6178,
+    SpvDecorationMMHostInterfaceLatencyINTEL = 6179,
+    SpvDecorationMMHostInterfaceReadWriteModeINTEL = 6180,
+    SpvDecorationMMHostInterfaceMaxBurstINTEL = 6181,
+    SpvDecorationMMHostInterfaceWaitRequestINTEL = 6182,
+    SpvDecorationStableKernelArgumentINTEL = 6183,
+    SpvDecorationHostAccessINTEL = 6188,
+    SpvDecorationInitModeINTEL = 6190,
+    SpvDecorationImplementInRegisterMapINTEL = 6191,
+    SpvDecorationCacheControlLoadINTEL = 6442,
+    SpvDecorationCacheControlStoreINTEL = 6443,
     SpvDecorationMax = 0x7fffffff,
 } SpvDecoration;
 
@@ -620,6 +694,11 @@ typedef enum SpvBuiltIn_ {
     SpvBuiltInSubgroupLocalInvocationId = 41,
     SpvBuiltInVertexIndex = 42,
     SpvBuiltInInstanceIndex = 43,
+    SpvBuiltInCoreIDARM = 4160,
+    SpvBuiltInCoreCountARM = 4161,
+    SpvBuiltInCoreMaxIDARM = 4162,
+    SpvBuiltInWarpIDARM = 4163,
+    SpvBuiltInWarpMaxIDARM = 4164,
     SpvBuiltInSubgroupEqMask = 4416,
     SpvBuiltInSubgroupEqMaskKHR = 4416,
     SpvBuiltInSubgroupGeMask = 4417,
@@ -645,6 +724,8 @@ typedef enum SpvBuiltIn_ {
     SpvBuiltInBaryCoordSmoothSampleAMD = 4997,
     SpvBuiltInBaryCoordPullModelAMD = 4998,
     SpvBuiltInFragStencilRefEXT = 5014,
+    SpvBuiltInRemainingRecursionLevelsAMDX = 5021,
+    SpvBuiltInShaderIndexAMDX = 5073,
     SpvBuiltInViewportMaskNV = 5253,
     SpvBuiltInSecondaryPositionNV = 5257,
     SpvBuiltInSecondaryViewportMaskNV = 5258,
@@ -697,6 +778,9 @@ typedef enum SpvBuiltIn_ {
     SpvBuiltInHitKindKHR = 5333,
     SpvBuiltInHitKindNV = 5333,
     SpvBuiltInCurrentRayTimeNV = 5334,
+    SpvBuiltInHitTriangleVertexPositionsKHR = 5335,
+    SpvBuiltInHitMicroTriangleVertexPositionsNV = 5337,
+    SpvBuiltInHitMicroTriangleVertexBarycentricsNV = 5344,
     SpvBuiltInIncomingRayFlagsKHR = 5351,
     SpvBuiltInIncomingRayFlagsNV = 5351,
     SpvBuiltInRayGeometryIndexKHR = 5352,
@@ -704,6 +788,8 @@ typedef enum SpvBuiltIn_ {
     SpvBuiltInSMCountNV = 5375,
     SpvBuiltInWarpIDNV = 5376,
     SpvBuiltInSMIDNV = 5377,
+    SpvBuiltInHitKindFrontFacingMicroTriangleNV = 5405,
+    SpvBuiltInHitKindBackFacingMicroTriangleNV = 5406,
     SpvBuiltInCullMaskKHR = 6021,
     SpvBuiltInMax = 0x7fffffff,
 } SpvBuiltIn;
@@ -738,6 +824,8 @@ typedef enum SpvLoopControlShift_ {
     SpvLoopControlMaxInterleavingINTELShift = 21,
     SpvLoopControlSpeculatedIterationsINTELShift = 22,
     SpvLoopControlNoFusionINTELShift = 23,
+    SpvLoopControlLoopCountINTELShift = 24,
+    SpvLoopControlMaxReinvocationDelayINTELShift = 25,
     SpvLoopControlMax = 0x7fffffff,
 } SpvLoopControlShift;
 
@@ -760,6 +848,8 @@ typedef enum SpvLoopControlMask_ {
     SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
     SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
     SpvLoopControlNoFusionINTELMask = 0x00800000,
+    SpvLoopControlLoopCountINTELMask = 0x01000000,
+    SpvLoopControlMaxReinvocationDelayINTELMask = 0x02000000,
 } SpvLoopControlMask;
 
 typedef enum SpvFunctionControlShift_ {
@@ -767,6 +857,7 @@ typedef enum SpvFunctionControlShift_ {
     SpvFunctionControlDontInlineShift = 1,
     SpvFunctionControlPureShift = 2,
     SpvFunctionControlConstShift = 3,
+    SpvFunctionControlOptNoneEXTShift = 16,
     SpvFunctionControlOptNoneINTELShift = 16,
     SpvFunctionControlMax = 0x7fffffff,
 } SpvFunctionControlShift;
@@ -777,6 +868,7 @@ typedef enum SpvFunctionControlMask_ {
     SpvFunctionControlDontInlineMask = 0x00000002,
     SpvFunctionControlPureMask = 0x00000004,
     SpvFunctionControlConstMask = 0x00000008,
+    SpvFunctionControlOptNoneEXTMask = 0x00010000,
     SpvFunctionControlOptNoneINTELMask = 0x00010000,
 } SpvFunctionControlMask;
 
@@ -963,6 +1055,11 @@ typedef enum SpvCapability_ {
     SpvCapabilityShaderLayer = 69,
     SpvCapabilityShaderViewportIndex = 70,
     SpvCapabilityUniformDecoration = 71,
+    SpvCapabilityCoreBuiltinsARM = 4165,
+    SpvCapabilityTileImageColorReadAccessEXT = 4166,
+    SpvCapabilityTileImageDepthReadAccessEXT = 4167,
+    SpvCapabilityTileImageStencilReadAccessEXT = 4168,
+    SpvCapabilityCooperativeMatrixLayoutsARM = 4201,
     SpvCapabilityFragmentShadingRateKHR = 4422,
     SpvCapabilitySubgroupBallotKHR = 4423,
     SpvCapabilityDrawParameters = 4427,
@@ -992,6 +1089,7 @@ typedef enum SpvCapability_ {
     SpvCapabilityRoundingModeRTZ = 4468,
     SpvCapabilityRayQueryProvisionalKHR = 4471,
     SpvCapabilityRayQueryKHR = 4472,
+    SpvCapabilityUntypedPointersKHR = 4473,
     SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478,
     SpvCapabilityRayTracingKHR = 4479,
     SpvCapabilityTextureSampleWeightedQCOM = 4484,
@@ -1005,6 +1103,8 @@ typedef enum SpvCapability_ {
     SpvCapabilityImageReadWriteLodAMD = 5015,
     SpvCapabilityInt64ImageEXT = 5016,
     SpvCapabilityShaderClockKHR = 5055,
+    SpvCapabilityShaderEnqueueAMDX = 5067,
+    SpvCapabilityQuadControlKHR = 5087,
     SpvCapabilitySampleMaskOverrideCoverageNV = 5249,
     SpvCapabilityGeometryShaderPassthroughNV = 5251,
     SpvCapabilityShaderViewportIndexLayerEXT = 5254,
@@ -1018,6 +1118,7 @@ typedef enum SpvCapability_ {
     SpvCapabilityMeshShadingEXT = 5283,
     SpvCapabilityFragmentBarycentricKHR = 5284,
     SpvCapabilityFragmentBarycentricNV = 5284,
+    SpvCapabilityComputeDerivativeGroupQuadsKHR = 5288,
     SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
     SpvCapabilityFragmentDensityEXT = 5291,
     SpvCapabilityShadingRateNV = 5291,
@@ -1046,6 +1147,7 @@ typedef enum SpvCapability_ {
     SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
     SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
     SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
+    SpvCapabilityRayTracingPositionFetchKHR = 5336,
     SpvCapabilityRayTracingNV = 5340,
     SpvCapabilityRayTracingMotionBlurNV = 5341,
     SpvCapabilityVulkanMemoryModel = 5345,
@@ -1054,6 +1156,7 @@ typedef enum SpvCapability_ {
     SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
     SpvCapabilityPhysicalStorageBufferAddresses = 5347,
     SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347,
+    SpvCapabilityComputeDerivativeGroupLinearKHR = 5350,
     SpvCapabilityComputeDerivativeGroupLinearNV = 5350,
     SpvCapabilityRayTracingProvisionalKHR = 5353,
     SpvCapabilityCooperativeMatrixNV = 5357,
@@ -1063,7 +1166,20 @@ typedef enum SpvCapability_ {
     SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
     SpvCapabilityDemoteToHelperInvocation = 5379,
     SpvCapabilityDemoteToHelperInvocationEXT = 5379,
+    SpvCapabilityDisplacementMicromapNV = 5380,
+    SpvCapabilityRayTracingOpacityMicromapEXT = 5381,
+    SpvCapabilityShaderInvocationReorderNV = 5383,
     SpvCapabilityBindlessTextureNV = 5390,
+    SpvCapabilityRayQueryPositionFetchKHR = 5391,
+    SpvCapabilityAtomicFloat16VectorNV = 5404,
+    SpvCapabilityRayTracingDisplacementMicromapNV = 5409,
+    SpvCapabilityRawAccessChainsNV = 5414,
+    SpvCapabilityCooperativeMatrixReductionsNV = 5430,
+    SpvCapabilityCooperativeMatrixConversionsNV = 5431,
+    SpvCapabilityCooperativeMatrixPerElementOperationsNV = 5432,
+    SpvCapabilityCooperativeMatrixTensorAddressingNV = 5433,
+    SpvCapabilityCooperativeMatrixBlockLoadsNV = 5434,
+    SpvCapabilityTensorAddressingNV = 5439,
     SpvCapabilitySubgroupShuffleINTEL = 5568,
     SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
     SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
@@ -1096,10 +1212,13 @@ typedef enum SpvCapability_ {
     SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
     SpvCapabilityFPGAClusterAttributesINTEL = 5904,
     SpvCapabilityLoopFuseINTEL = 5906,
+    SpvCapabilityFPGADSPControlINTEL = 5908,
     SpvCapabilityMemoryAccessAliasingINTEL = 5910,
+    SpvCapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
     SpvCapabilityFPGABufferLocationINTEL = 5920,
     SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
     SpvCapabilityUSMStorageClassesINTEL = 5935,
+    SpvCapabilityRuntimeAlignedAttributeINTEL = 5939,
     SpvCapabilityIOPipesINTEL = 5943,
     SpvCapabilityBlockingPipesINTEL = 5945,
     SpvCapabilityFPGARegINTEL = 5948,
@@ -1112,16 +1231,33 @@ typedef enum SpvCapability_ {
     SpvCapabilityDotProduct = 6019,
     SpvCapabilityDotProductKHR = 6019,
     SpvCapabilityRayCullMaskKHR = 6020,
+    SpvCapabilityCooperativeMatrixKHR = 6022,
+    SpvCapabilityReplicatedCompositesEXT = 6024,
     SpvCapabilityBitInstructions = 6025,
     SpvCapabilityGroupNonUniformRotateKHR = 6026,
+    SpvCapabilityFloatControls2 = 6029,
     SpvCapabilityAtomicFloat32AddEXT = 6033,
     SpvCapabilityAtomicFloat64AddEXT = 6034,
-    SpvCapabilityLongConstantCompositeINTEL = 6089,
+    SpvCapabilityLongCompositesINTEL = 6089,
+    SpvCapabilityOptNoneEXT = 6094,
     SpvCapabilityOptNoneINTEL = 6094,
     SpvCapabilityAtomicFloat16AddEXT = 6095,
     SpvCapabilityDebugInfoModuleINTEL = 6114,
+    SpvCapabilityBFloat16ConversionINTEL = 6115,
     SpvCapabilitySplitBarrierINTEL = 6141,
+    SpvCapabilityArithmeticFenceEXT = 6144,
+    SpvCapabilityFPGAClusterAttributesV2INTEL = 6150,
+    SpvCapabilityFPGAKernelAttributesv2INTEL = 6161,
+    SpvCapabilityFPMaxErrorINTEL = 6169,
+    SpvCapabilityFPGALatencyControlINTEL = 6171,
+    SpvCapabilityFPGAArgumentInterfacesINTEL = 6174,
+    SpvCapabilityGlobalVariableHostAccessINTEL = 6187,
+    SpvCapabilityGlobalVariableFPGADecorationsINTEL = 6189,
+    SpvCapabilitySubgroupBufferPrefetchINTEL = 6220,
     SpvCapabilityGroupUniformArithmeticKHR = 6400,
+    SpvCapabilityMaskedGatherScatterINTEL = 6427,
+    SpvCapabilityCacheControlsINTEL = 6441,
+    SpvCapabilityRegisterLimitsINTEL = 6460,
     SpvCapabilityMax = 0x7fffffff,
 } SpvCapability;
 
@@ -1136,6 +1272,7 @@ typedef enum SpvRayFlagsShift_ {
     SpvRayFlagsCullNoOpaqueKHRShift = 7,
     SpvRayFlagsSkipTrianglesKHRShift = 8,
     SpvRayFlagsSkipAABBsKHRShift = 9,
+    SpvRayFlagsForceOpacityMicromap2StateEXTShift = 10,
     SpvRayFlagsMax = 0x7fffffff,
 } SpvRayFlagsShift;
 
@@ -1151,6 +1288,7 @@ typedef enum SpvRayFlagsMask_ {
     SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080,
     SpvRayFlagsSkipTrianglesKHRMask = 0x00000100,
     SpvRayFlagsSkipAABBsKHRMask = 0x00000200,
+    SpvRayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
 } SpvRayFlagsMask;
 
 typedef enum SpvRayQueryIntersection_ {
@@ -1226,6 +1364,126 @@ typedef enum SpvPackedVectorFormat_ {
     SpvPackedVectorFormatMax = 0x7fffffff,
 } SpvPackedVectorFormat;
 
+typedef enum SpvCooperativeMatrixOperandsShift_ {
+    SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0,
+    SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1,
+    SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2,
+    SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3,
+    SpvCooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4,
+    SpvCooperativeMatrixOperandsMax = 0x7fffffff,
+} SpvCooperativeMatrixOperandsShift;
+
+typedef enum SpvCooperativeMatrixOperandsMask_ {
+    SpvCooperativeMatrixOperandsMaskNone = 0,
+    SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001,
+    SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002,
+    SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004,
+    SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008,
+    SpvCooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010,
+} SpvCooperativeMatrixOperandsMask;
+
+typedef enum SpvCooperativeMatrixLayout_ {
+    SpvCooperativeMatrixLayoutRowMajorKHR = 0,
+    SpvCooperativeMatrixLayoutColumnMajorKHR = 1,
+    SpvCooperativeMatrixLayoutRowBlockedInterleavedARM = 4202,
+    SpvCooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203,
+    SpvCooperativeMatrixLayoutMax = 0x7fffffff,
+} SpvCooperativeMatrixLayout;
+
+typedef enum SpvCooperativeMatrixUse_ {
+    SpvCooperativeMatrixUseMatrixAKHR = 0,
+    SpvCooperativeMatrixUseMatrixBKHR = 1,
+    SpvCooperativeMatrixUseMatrixAccumulatorKHR = 2,
+    SpvCooperativeMatrixUseMax = 0x7fffffff,
+} SpvCooperativeMatrixUse;
+
+typedef enum SpvCooperativeMatrixReduceShift_ {
+    SpvCooperativeMatrixReduceRowShift = 0,
+    SpvCooperativeMatrixReduceColumnShift = 1,
+    SpvCooperativeMatrixReduce2x2Shift = 2,
+    SpvCooperativeMatrixReduceMax = 0x7fffffff,
+} SpvCooperativeMatrixReduceShift;
+
+typedef enum SpvCooperativeMatrixReduceMask_ {
+    SpvCooperativeMatrixReduceMaskNone = 0,
+    SpvCooperativeMatrixReduceRowMask = 0x00000001,
+    SpvCooperativeMatrixReduceColumnMask = 0x00000002,
+    SpvCooperativeMatrixReduce2x2Mask = 0x00000004,
+} SpvCooperativeMatrixReduceMask;
+
+typedef enum SpvTensorClampMode_ {
+    SpvTensorClampModeUndefined = 0,
+    SpvTensorClampModeConstant = 1,
+    SpvTensorClampModeClampToEdge = 2,
+    SpvTensorClampModeRepeat = 3,
+    SpvTensorClampModeRepeatMirrored = 4,
+    SpvTensorClampModeMax = 0x7fffffff,
+} SpvTensorClampMode;
+
+typedef enum SpvTensorAddressingOperandsShift_ {
+    SpvTensorAddressingOperandsTensorViewShift = 0,
+    SpvTensorAddressingOperandsDecodeFuncShift = 1,
+    SpvTensorAddressingOperandsMax = 0x7fffffff,
+} SpvTensorAddressingOperandsShift;
+
+typedef enum SpvTensorAddressingOperandsMask_ {
+    SpvTensorAddressingOperandsMaskNone = 0,
+    SpvTensorAddressingOperandsTensorViewMask = 0x00000001,
+    SpvTensorAddressingOperandsDecodeFuncMask = 0x00000002,
+} SpvTensorAddressingOperandsMask;
+
+typedef enum SpvInitializationModeQualifier_ {
+    SpvInitializationModeQualifierInitOnDeviceReprogramINTEL = 0,
+    SpvInitializationModeQualifierInitOnDeviceResetINTEL = 1,
+    SpvInitializationModeQualifierMax = 0x7fffffff,
+} SpvInitializationModeQualifier;
+
+typedef enum SpvHostAccessQualifier_ {
+    SpvHostAccessQualifierNoneINTEL = 0,
+    SpvHostAccessQualifierReadINTEL = 1,
+    SpvHostAccessQualifierWriteINTEL = 2,
+    SpvHostAccessQualifierReadWriteINTEL = 3,
+    SpvHostAccessQualifierMax = 0x7fffffff,
+} SpvHostAccessQualifier;
+
+typedef enum SpvLoadCacheControl_ {
+    SpvLoadCacheControlUncachedINTEL = 0,
+    SpvLoadCacheControlCachedINTEL = 1,
+    SpvLoadCacheControlStreamingINTEL = 2,
+    SpvLoadCacheControlInvalidateAfterReadINTEL = 3,
+    SpvLoadCacheControlConstCachedINTEL = 4,
+    SpvLoadCacheControlMax = 0x7fffffff,
+} SpvLoadCacheControl;
+
+typedef enum SpvStoreCacheControl_ {
+    SpvStoreCacheControlUncachedINTEL = 0,
+    SpvStoreCacheControlWriteThroughINTEL = 1,
+    SpvStoreCacheControlWriteBackINTEL = 2,
+    SpvStoreCacheControlStreamingINTEL = 3,
+    SpvStoreCacheControlMax = 0x7fffffff,
+} SpvStoreCacheControl;
+
+typedef enum SpvNamedMaximumNumberOfRegisters_ {
+    SpvNamedMaximumNumberOfRegistersAutoINTEL = 0,
+    SpvNamedMaximumNumberOfRegistersMax = 0x7fffffff,
+} SpvNamedMaximumNumberOfRegisters;
+
+typedef enum SpvRawAccessChainOperandsShift_ {
+    SpvRawAccessChainOperandsRobustnessPerComponentNVShift = 0,
+    SpvRawAccessChainOperandsRobustnessPerElementNVShift = 1,
+    SpvRawAccessChainOperandsMax = 0x7fffffff,
+} SpvRawAccessChainOperandsShift;
+
+typedef enum SpvRawAccessChainOperandsMask_ {
+    SpvRawAccessChainOperandsMaskNone = 0,
+    SpvRawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001,
+    SpvRawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002,
+} SpvRawAccessChainOperandsMask;
+
+typedef enum SpvFPEncoding_ {
+    SpvFPEncodingMax = 0x7fffffff,
+} SpvFPEncoding;
+
 typedef enum SpvOp_ {
     SpvOpNop = 0,
     SpvOpUndef = 1,
@@ -1571,14 +1829,26 @@ typedef enum SpvOp_ {
     SpvOpPtrEqual = 401,
     SpvOpPtrNotEqual = 402,
     SpvOpPtrDiff = 403,
+    SpvOpColorAttachmentReadEXT = 4160,
+    SpvOpDepthAttachmentReadEXT = 4161,
+    SpvOpStencilAttachmentReadEXT = 4162,
     SpvOpTerminateInvocation = 4416,
+    SpvOpTypeUntypedPointerKHR = 4417,
+    SpvOpUntypedVariableKHR = 4418,
+    SpvOpUntypedAccessChainKHR = 4419,
+    SpvOpUntypedInBoundsAccessChainKHR = 4420,
     SpvOpSubgroupBallotKHR = 4421,
     SpvOpSubgroupFirstInvocationKHR = 4422,
+    SpvOpUntypedPtrAccessChainKHR = 4423,
+    SpvOpUntypedInBoundsPtrAccessChainKHR = 4424,
+    SpvOpUntypedArrayLengthKHR = 4425,
+    SpvOpUntypedPrefetchKHR = 4426,
     SpvOpSubgroupAllKHR = 4428,
     SpvOpSubgroupAnyKHR = 4429,
     SpvOpSubgroupAllEqualKHR = 4430,
     SpvOpGroupNonUniformRotateKHR = 4431,
     SpvOpSubgroupReadInvocationKHR = 4432,
+    SpvOpExtInstWithForwardRefsKHR = 4433,
     SpvOpTraceRayKHR = 4445,
     SpvOpExecuteCallableKHR = 4446,
     SpvOpConvertUToAccelerationStructureKHR = 4447,
@@ -1596,6 +1866,14 @@ typedef enum SpvOp_ {
     SpvOpUDotAccSatKHR = 4454,
     SpvOpSUDotAccSat = 4455,
     SpvOpSUDotAccSatKHR = 4455,
+    SpvOpTypeCooperativeMatrixKHR = 4456,
+    SpvOpCooperativeMatrixLoadKHR = 4457,
+    SpvOpCooperativeMatrixStoreKHR = 4458,
+    SpvOpCooperativeMatrixMulAddKHR = 4459,
+    SpvOpCooperativeMatrixLengthKHR = 4460,
+    SpvOpConstantCompositeReplicateEXT = 4461,
+    SpvOpSpecConstantCompositeReplicateEXT = 4462,
+    SpvOpCompositeConstructReplicateEXT = 4463,
     SpvOpTypeRayQueryKHR = 4472,
     SpvOpRayQueryInitializeKHR = 4473,
     SpvOpRayQueryTerminateKHR = 4474,
@@ -1622,11 +1900,57 @@ typedef enum SpvOp_ {
     SpvOpFragmentMaskFetchAMD = 5011,
     SpvOpFragmentFetchAMD = 5012,
     SpvOpReadClockKHR = 5056,
+    SpvOpAllocateNodePayloadsAMDX = 5074,
+    SpvOpEnqueueNodePayloadsAMDX = 5075,
+    SpvOpTypeNodePayloadArrayAMDX = 5076,
+    SpvOpFinishWritingNodePayloadAMDX = 5078,
+    SpvOpNodePayloadArrayLengthAMDX = 5090,
+    SpvOpIsNodePayloadValidAMDX = 5101,
+    SpvOpConstantStringAMDX = 5103,
+    SpvOpSpecConstantStringAMDX = 5104,
+    SpvOpGroupNonUniformQuadAllKHR = 5110,
+    SpvOpGroupNonUniformQuadAnyKHR = 5111,
+    SpvOpHitObjectRecordHitMotionNV = 5249,
+    SpvOpHitObjectRecordHitWithIndexMotionNV = 5250,
+    SpvOpHitObjectRecordMissMotionNV = 5251,
+    SpvOpHitObjectGetWorldToObjectNV = 5252,
+    SpvOpHitObjectGetObjectToWorldNV = 5253,
+    SpvOpHitObjectGetObjectRayDirectionNV = 5254,
+    SpvOpHitObjectGetObjectRayOriginNV = 5255,
+    SpvOpHitObjectTraceRayMotionNV = 5256,
+    SpvOpHitObjectGetShaderRecordBufferHandleNV = 5257,
+    SpvOpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
+    SpvOpHitObjectRecordEmptyNV = 5259,
+    SpvOpHitObjectTraceRayNV = 5260,
+    SpvOpHitObjectRecordHitNV = 5261,
+    SpvOpHitObjectRecordHitWithIndexNV = 5262,
+    SpvOpHitObjectRecordMissNV = 5263,
+    SpvOpHitObjectExecuteShaderNV = 5264,
+    SpvOpHitObjectGetCurrentTimeNV = 5265,
+    SpvOpHitObjectGetAttributesNV = 5266,
+    SpvOpHitObjectGetHitKindNV = 5267,
+    SpvOpHitObjectGetPrimitiveIndexNV = 5268,
+    SpvOpHitObjectGetGeometryIndexNV = 5269,
+    SpvOpHitObjectGetInstanceIdNV = 5270,
+    SpvOpHitObjectGetInstanceCustomIndexNV = 5271,
+    SpvOpHitObjectGetWorldRayDirectionNV = 5272,
+    SpvOpHitObjectGetWorldRayOriginNV = 5273,
+    SpvOpHitObjectGetRayTMaxNV = 5274,
+    SpvOpHitObjectGetRayTMinNV = 5275,
+    SpvOpHitObjectIsEmptyNV = 5276,
+    SpvOpHitObjectIsHitNV = 5277,
+    SpvOpHitObjectIsMissNV = 5278,
+    SpvOpReorderThreadWithHitObjectNV = 5279,
+    SpvOpReorderThreadWithHintNV = 5280,
+    SpvOpTypeHitObjectNV = 5281,
     SpvOpImageSampleFootprintNV = 5283,
+    SpvOpCooperativeMatrixConvertNV = 5293,
     SpvOpEmitMeshTasksEXT = 5294,
     SpvOpSetMeshOutputsEXT = 5295,
     SpvOpGroupNonUniformPartitionNV = 5296,
     SpvOpWritePackedPrimitiveIndices4x8NV = 5299,
+    SpvOpFetchMicroTriangleVertexPositionNV = 5300,
+    SpvOpFetchMicroTriangleVertexBarycentricNV = 5301,
     SpvOpReportIntersectionKHR = 5334,
     SpvOpReportIntersectionNV = 5334,
     SpvOpIgnoreIntersectionNV = 5335,
@@ -1634,6 +1958,7 @@ typedef enum SpvOp_ {
     SpvOpTraceNV = 5337,
     SpvOpTraceMotionNV = 5338,
     SpvOpTraceRayMotionNV = 5339,
+    SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
     SpvOpTypeAccelerationStructureKHR = 5341,
     SpvOpTypeAccelerationStructureNV = 5341,
     SpvOpExecuteCallableNV = 5344,
@@ -1644,9 +1969,26 @@ typedef enum SpvOp_ {
     SpvOpCooperativeMatrixLengthNV = 5362,
     SpvOpBeginInvocationInterlockEXT = 5364,
     SpvOpEndInvocationInterlockEXT = 5365,
+    SpvOpCooperativeMatrixReduceNV = 5366,
+    SpvOpCooperativeMatrixLoadTensorNV = 5367,
+    SpvOpCooperativeMatrixStoreTensorNV = 5368,
+    SpvOpCooperativeMatrixPerElementOpNV = 5369,
+    SpvOpTypeTensorLayoutNV = 5370,
+    SpvOpTypeTensorViewNV = 5371,
+    SpvOpCreateTensorLayoutNV = 5372,
+    SpvOpTensorLayoutSetDimensionNV = 5373,
+    SpvOpTensorLayoutSetStrideNV = 5374,
+    SpvOpTensorLayoutSliceNV = 5375,
+    SpvOpTensorLayoutSetClampValueNV = 5376,
+    SpvOpCreateTensorViewNV = 5377,
+    SpvOpTensorViewSetDimensionNV = 5378,
+    SpvOpTensorViewSetStrideNV = 5379,
     SpvOpDemoteToHelperInvocation = 5380,
     SpvOpDemoteToHelperInvocationEXT = 5380,
     SpvOpIsHelperInvocationEXT = 5381,
+    SpvOpTensorViewSetClipNV = 5382,
+    SpvOpTensorLayoutSetBlockSizeNV = 5384,
+    SpvOpCooperativeMatrixTransposeNV = 5390,
     SpvOpConvertUToImageNV = 5391,
     SpvOpConvertUToSamplerNV = 5392,
     SpvOpConvertImageToUNV = 5393,
@@ -1654,6 +1996,7 @@ typedef enum SpvOp_ {
     SpvOpConvertUToSampledImageNV = 5395,
     SpvOpConvertSampledImageToUNV = 5396,
     SpvOpSamplerImageAddressingModeNV = 5397,
+    SpvOpRawAccessChainNV = 5398,
     SpvOpSubgroupShuffleINTEL = 5571,
     SpvOpSubgroupShuffleDownINTEL = 5572,
     SpvOpSubgroupShuffleUpINTEL = 5573,
@@ -1895,8 +2238,13 @@ typedef enum SpvOp_ {
     SpvOpTypeStructContinuedINTEL = 6090,
     SpvOpConstantCompositeContinuedINTEL = 6091,
     SpvOpSpecConstantCompositeContinuedINTEL = 6092,
+    SpvOpCompositeConstructContinuedINTEL = 6096,
+    SpvOpConvertFToBF16INTEL = 6116,
+    SpvOpConvertBF16ToFINTEL = 6117,
     SpvOpControlBarrierArriveINTEL = 6142,
     SpvOpControlBarrierWaitINTEL = 6143,
+    SpvOpArithmeticFenceEXT = 6145,
+    SpvOpSubgroupBlockPrefetchINTEL = 6221,
     SpvOpGroupIMulKHR = 6401,
     SpvOpGroupFMulKHR = 6402,
     SpvOpGroupBitwiseAndKHR = 6403,
@@ -1905,6 +2253,8 @@ typedef enum SpvOp_ {
     SpvOpGroupLogicalAndKHR = 6406,
     SpvOpGroupLogicalOrKHR = 6407,
     SpvOpGroupLogicalXorKHR = 6408,
+    SpvOpMaskedGatherINTEL = 6428,
+    SpvOpMaskedScatterINTEL = 6429,
     SpvOpMax = 0x7fffffff,
 } SpvOp;
 
@@ -2260,14 +2610,26 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break;
     case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
     case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break;
+    case SpvOpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
     case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break;
+    case SpvOpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break;
     case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
     case SpvOpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
     case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
@@ -2279,6 +2641,14 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break;
     case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break;
     case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break;
     case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
@@ -2305,18 +2675,65 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
     case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
     case SpvOpReadClockKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break;
+    case SpvOpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case SpvOpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case SpvOpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
     case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
     case SpvOpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
     case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
     case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
     case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break;
     case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
     case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break;
     case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
     case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
     case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
@@ -2325,8 +2742,25 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
     case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
     case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
@@ -2334,6 +2768,7 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRawAccessChainNV: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
     case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2573,8 +3008,13 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
     case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
     case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break;
     case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
     case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break;
     case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
@@ -2583,8 +3023,1856 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break;
     }
 }
+inline const char* SpvSourceLanguageToString(SpvSourceLanguage value) {
+    switch (value) {
+    case SpvSourceLanguageUnknown: return "Unknown";
+    case SpvSourceLanguageESSL: return "ESSL";
+    case SpvSourceLanguageGLSL: return "GLSL";
+    case SpvSourceLanguageOpenCL_C: return "OpenCL_C";
+    case SpvSourceLanguageOpenCL_CPP: return "OpenCL_CPP";
+    case SpvSourceLanguageHLSL: return "HLSL";
+    case SpvSourceLanguageCPP_for_OpenCL: return "CPP_for_OpenCL";
+    case SpvSourceLanguageSYCL: return "SYCL";
+    case SpvSourceLanguageHERO_C: return "HERO_C";
+    case SpvSourceLanguageNZSL: return "NZSL";
+    case SpvSourceLanguageWGSL: return "WGSL";
+    case SpvSourceLanguageSlang: return "Slang";
+    case SpvSourceLanguageZig: return "Zig";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvExecutionModelToString(SpvExecutionModel value) {
+    switch (value) {
+    case SpvExecutionModelVertex: return "Vertex";
+    case SpvExecutionModelTessellationControl: return "TessellationControl";
+    case SpvExecutionModelTessellationEvaluation: return "TessellationEvaluation";
+    case SpvExecutionModelGeometry: return "Geometry";
+    case SpvExecutionModelFragment: return "Fragment";
+    case SpvExecutionModelGLCompute: return "GLCompute";
+    case SpvExecutionModelKernel: return "Kernel";
+    case SpvExecutionModelTaskNV: return "TaskNV";
+    case SpvExecutionModelMeshNV: return "MeshNV";
+    case SpvExecutionModelRayGenerationKHR: return "RayGenerationKHR";
+    case SpvExecutionModelIntersectionKHR: return "IntersectionKHR";
+    case SpvExecutionModelAnyHitKHR: return "AnyHitKHR";
+    case SpvExecutionModelClosestHitKHR: return "ClosestHitKHR";
+    case SpvExecutionModelMissKHR: return "MissKHR";
+    case SpvExecutionModelCallableKHR: return "CallableKHR";
+    case SpvExecutionModelTaskEXT: return "TaskEXT";
+    case SpvExecutionModelMeshEXT: return "MeshEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvAddressingModelToString(SpvAddressingModel value) {
+    switch (value) {
+    case SpvAddressingModelLogical: return "Logical";
+    case SpvAddressingModelPhysical32: return "Physical32";
+    case SpvAddressingModelPhysical64: return "Physical64";
+    case SpvAddressingModelPhysicalStorageBuffer64: return "PhysicalStorageBuffer64";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvMemoryModelToString(SpvMemoryModel value) {
+    switch (value) {
+    case SpvMemoryModelSimple: return "Simple";
+    case SpvMemoryModelGLSL450: return "GLSL450";
+    case SpvMemoryModelOpenCL: return "OpenCL";
+    case SpvMemoryModelVulkan: return "Vulkan";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvExecutionModeToString(SpvExecutionMode value) {
+    switch (value) {
+    case SpvExecutionModeInvocations: return "Invocations";
+    case SpvExecutionModeSpacingEqual: return "SpacingEqual";
+    case SpvExecutionModeSpacingFractionalEven: return "SpacingFractionalEven";
+    case SpvExecutionModeSpacingFractionalOdd: return "SpacingFractionalOdd";
+    case SpvExecutionModeVertexOrderCw: return "VertexOrderCw";
+    case SpvExecutionModeVertexOrderCcw: return "VertexOrderCcw";
+    case SpvExecutionModePixelCenterInteger: return "PixelCenterInteger";
+    case SpvExecutionModeOriginUpperLeft: return "OriginUpperLeft";
+    case SpvExecutionModeOriginLowerLeft: return "OriginLowerLeft";
+    case SpvExecutionModeEarlyFragmentTests: return "EarlyFragmentTests";
+    case SpvExecutionModePointMode: return "PointMode";
+    case SpvExecutionModeXfb: return "Xfb";
+    case SpvExecutionModeDepthReplacing: return "DepthReplacing";
+    case SpvExecutionModeDepthGreater: return "DepthGreater";
+    case SpvExecutionModeDepthLess: return "DepthLess";
+    case SpvExecutionModeDepthUnchanged: return "DepthUnchanged";
+    case SpvExecutionModeLocalSize: return "LocalSize";
+    case SpvExecutionModeLocalSizeHint: return "LocalSizeHint";
+    case SpvExecutionModeInputPoints: return "InputPoints";
+    case SpvExecutionModeInputLines: return "InputLines";
+    case SpvExecutionModeInputLinesAdjacency: return "InputLinesAdjacency";
+    case SpvExecutionModeTriangles: return "Triangles";
+    case SpvExecutionModeInputTrianglesAdjacency: return "InputTrianglesAdjacency";
+    case SpvExecutionModeQuads: return "Quads";
+    case SpvExecutionModeIsolines: return "Isolines";
+    case SpvExecutionModeOutputVertices: return "OutputVertices";
+    case SpvExecutionModeOutputPoints: return "OutputPoints";
+    case SpvExecutionModeOutputLineStrip: return "OutputLineStrip";
+    case SpvExecutionModeOutputTriangleStrip: return "OutputTriangleStrip";
+    case SpvExecutionModeVecTypeHint: return "VecTypeHint";
+    case SpvExecutionModeContractionOff: return "ContractionOff";
+    case SpvExecutionModeInitializer: return "Initializer";
+    case SpvExecutionModeFinalizer: return "Finalizer";
+    case SpvExecutionModeSubgroupSize: return "SubgroupSize";
+    case SpvExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup";
+    case SpvExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId";
+    case SpvExecutionModeLocalSizeId: return "LocalSizeId";
+    case SpvExecutionModeLocalSizeHintId: return "LocalSizeHintId";
+    case SpvExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT";
+    case SpvExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT";
+    case SpvExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT";
+    case SpvExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR";
+    case SpvExecutionModePostDepthCoverage: return "PostDepthCoverage";
+    case SpvExecutionModeDenormPreserve: return "DenormPreserve";
+    case SpvExecutionModeDenormFlushToZero: return "DenormFlushToZero";
+    case SpvExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case SpvExecutionModeRoundingModeRTE: return "RoundingModeRTE";
+    case SpvExecutionModeRoundingModeRTZ: return "RoundingModeRTZ";
+    case SpvExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD";
+    case SpvExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT";
+    case SpvExecutionModeCoalescingAMDX: return "CoalescingAMDX";
+    case SpvExecutionModeIsApiEntryAMDX: return "IsApiEntryAMDX";
+    case SpvExecutionModeMaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX";
+    case SpvExecutionModeStaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX";
+    case SpvExecutionModeShaderIndexAMDX: return "ShaderIndexAMDX";
+    case SpvExecutionModeMaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX";
+    case SpvExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD";
+    case SpvExecutionModeStencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD";
+    case SpvExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD";
+    case SpvExecutionModeStencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD";
+    case SpvExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD";
+    case SpvExecutionModeStencilRefLessBackAMD: return "StencilRefLessBackAMD";
+    case SpvExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR";
+    case SpvExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR";
+    case SpvExecutionModeSharesInputWithAMDX: return "SharesInputWithAMDX";
+    case SpvExecutionModeOutputLinesEXT: return "OutputLinesEXT";
+    case SpvExecutionModeOutputPrimitivesEXT: return "OutputPrimitivesEXT";
+    case SpvExecutionModeDerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR";
+    case SpvExecutionModeDerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR";
+    case SpvExecutionModeOutputTrianglesEXT: return "OutputTrianglesEXT";
+    case SpvExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";
+    case SpvExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";
+    case SpvExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT";
+    case SpvExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT";
+    case SpvExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT";
+    case SpvExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
+    case SpvExecutionModeSharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL";
+    case SpvExecutionModeRoundingModeRTPINTEL: return "RoundingModeRTPINTEL";
+    case SpvExecutionModeRoundingModeRTNINTEL: return "RoundingModeRTNINTEL";
+    case SpvExecutionModeFloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL";
+    case SpvExecutionModeFloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL";
+    case SpvExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL";
+    case SpvExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL";
+    case SpvExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL";
+    case SpvExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL";
+    case SpvExecutionModeSchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL";
+    case SpvExecutionModeMaximallyReconvergesKHR: return "MaximallyReconvergesKHR";
+    case SpvExecutionModeFPFastMathDefault: return "FPFastMathDefault";
+    case SpvExecutionModeStreamingInterfaceINTEL: return "StreamingInterfaceINTEL";
+    case SpvExecutionModeRegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL";
+    case SpvExecutionModeNamedBarrierCountINTEL: return "NamedBarrierCountINTEL";
+    case SpvExecutionModeMaximumRegistersINTEL: return "MaximumRegistersINTEL";
+    case SpvExecutionModeMaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL";
+    case SpvExecutionModeNamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvStorageClassToString(SpvStorageClass value) {
+    switch (value) {
+    case SpvStorageClassUniformConstant: return "UniformConstant";
+    case SpvStorageClassInput: return "Input";
+    case SpvStorageClassUniform: return "Uniform";
+    case SpvStorageClassOutput: return "Output";
+    case SpvStorageClassWorkgroup: return "Workgroup";
+    case SpvStorageClassCrossWorkgroup: return "CrossWorkgroup";
+    case SpvStorageClassPrivate: return "Private";
+    case SpvStorageClassFunction: return "Function";
+    case SpvStorageClassGeneric: return "Generic";
+    case SpvStorageClassPushConstant: return "PushConstant";
+    case SpvStorageClassAtomicCounter: return "AtomicCounter";
+    case SpvStorageClassImage: return "Image";
+    case SpvStorageClassStorageBuffer: return "StorageBuffer";
+    case SpvStorageClassTileImageEXT: return "TileImageEXT";
+    case SpvStorageClassNodePayloadAMDX: return "NodePayloadAMDX";
+    case SpvStorageClassCallableDataKHR: return "CallableDataKHR";
+    case SpvStorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR";
+    case SpvStorageClassRayPayloadKHR: return "RayPayloadKHR";
+    case SpvStorageClassHitAttributeKHR: return "HitAttributeKHR";
+    case SpvStorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR";
+    case SpvStorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR";
+    case SpvStorageClassPhysicalStorageBuffer: return "PhysicalStorageBuffer";
+    case SpvStorageClassHitObjectAttributeNV: return "HitObjectAttributeNV";
+    case SpvStorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT";
+    case SpvStorageClassCodeSectionINTEL: return "CodeSectionINTEL";
+    case SpvStorageClassDeviceOnlyINTEL: return "DeviceOnlyINTEL";
+    case SpvStorageClassHostOnlyINTEL: return "HostOnlyINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvDimToString(SpvDim value) {
+    switch (value) {
+    case SpvDim1D: return "1D";
+    case SpvDim2D: return "2D";
+    case SpvDim3D: return "3D";
+    case SpvDimCube: return "Cube";
+    case SpvDimRect: return "Rect";
+    case SpvDimBuffer: return "Buffer";
+    case SpvDimSubpassData: return "SubpassData";
+    case SpvDimTileImageDataEXT: return "TileImageDataEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvSamplerAddressingModeToString(SpvSamplerAddressingMode value) {
+    switch (value) {
+    case SpvSamplerAddressingModeNone: return "None";
+    case SpvSamplerAddressingModeClampToEdge: return "ClampToEdge";
+    case SpvSamplerAddressingModeClamp: return "Clamp";
+    case SpvSamplerAddressingModeRepeat: return "Repeat";
+    case SpvSamplerAddressingModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvSamplerFilterModeToString(SpvSamplerFilterMode value) {
+    switch (value) {
+    case SpvSamplerFilterModeNearest: return "Nearest";
+    case SpvSamplerFilterModeLinear: return "Linear";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvImageFormatToString(SpvImageFormat value) {
+    switch (value) {
+    case SpvImageFormatUnknown: return "Unknown";
+    case SpvImageFormatRgba32f: return "Rgba32f";
+    case SpvImageFormatRgba16f: return "Rgba16f";
+    case SpvImageFormatR32f: return "R32f";
+    case SpvImageFormatRgba8: return "Rgba8";
+    case SpvImageFormatRgba8Snorm: return "Rgba8Snorm";
+    case SpvImageFormatRg32f: return "Rg32f";
+    case SpvImageFormatRg16f: return "Rg16f";
+    case SpvImageFormatR11fG11fB10f: return "R11fG11fB10f";
+    case SpvImageFormatR16f: return "R16f";
+    case SpvImageFormatRgba16: return "Rgba16";
+    case SpvImageFormatRgb10A2: return "Rgb10A2";
+    case SpvImageFormatRg16: return "Rg16";
+    case SpvImageFormatRg8: return "Rg8";
+    case SpvImageFormatR16: return "R16";
+    case SpvImageFormatR8: return "R8";
+    case SpvImageFormatRgba16Snorm: return "Rgba16Snorm";
+    case SpvImageFormatRg16Snorm: return "Rg16Snorm";
+    case SpvImageFormatRg8Snorm: return "Rg8Snorm";
+    case SpvImageFormatR16Snorm: return "R16Snorm";
+    case SpvImageFormatR8Snorm: return "R8Snorm";
+    case SpvImageFormatRgba32i: return "Rgba32i";
+    case SpvImageFormatRgba16i: return "Rgba16i";
+    case SpvImageFormatRgba8i: return "Rgba8i";
+    case SpvImageFormatR32i: return "R32i";
+    case SpvImageFormatRg32i: return "Rg32i";
+    case SpvImageFormatRg16i: return "Rg16i";
+    case SpvImageFormatRg8i: return "Rg8i";
+    case SpvImageFormatR16i: return "R16i";
+    case SpvImageFormatR8i: return "R8i";
+    case SpvImageFormatRgba32ui: return "Rgba32ui";
+    case SpvImageFormatRgba16ui: return "Rgba16ui";
+    case SpvImageFormatRgba8ui: return "Rgba8ui";
+    case SpvImageFormatR32ui: return "R32ui";
+    case SpvImageFormatRgb10a2ui: return "Rgb10a2ui";
+    case SpvImageFormatRg32ui: return "Rg32ui";
+    case SpvImageFormatRg16ui: return "Rg16ui";
+    case SpvImageFormatRg8ui: return "Rg8ui";
+    case SpvImageFormatR16ui: return "R16ui";
+    case SpvImageFormatR8ui: return "R8ui";
+    case SpvImageFormatR64ui: return "R64ui";
+    case SpvImageFormatR64i: return "R64i";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvImageChannelOrderToString(SpvImageChannelOrder value) {
+    switch (value) {
+    case SpvImageChannelOrderR: return "R";
+    case SpvImageChannelOrderA: return "A";
+    case SpvImageChannelOrderRG: return "RG";
+    case SpvImageChannelOrderRA: return "RA";
+    case SpvImageChannelOrderRGB: return "RGB";
+    case SpvImageChannelOrderRGBA: return "RGBA";
+    case SpvImageChannelOrderBGRA: return "BGRA";
+    case SpvImageChannelOrderARGB: return "ARGB";
+    case SpvImageChannelOrderIntensity: return "Intensity";
+    case SpvImageChannelOrderLuminance: return "Luminance";
+    case SpvImageChannelOrderRx: return "Rx";
+    case SpvImageChannelOrderRGx: return "RGx";
+    case SpvImageChannelOrderRGBx: return "RGBx";
+    case SpvImageChannelOrderDepth: return "Depth";
+    case SpvImageChannelOrderDepthStencil: return "DepthStencil";
+    case SpvImageChannelOrdersRGB: return "sRGB";
+    case SpvImageChannelOrdersRGBx: return "sRGBx";
+    case SpvImageChannelOrdersRGBA: return "sRGBA";
+    case SpvImageChannelOrdersBGRA: return "sBGRA";
+    case SpvImageChannelOrderABGR: return "ABGR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvImageChannelDataTypeToString(SpvImageChannelDataType value) {
+    switch (value) {
+    case SpvImageChannelDataTypeSnormInt8: return "SnormInt8";
+    case SpvImageChannelDataTypeSnormInt16: return "SnormInt16";
+    case SpvImageChannelDataTypeUnormInt8: return "UnormInt8";
+    case SpvImageChannelDataTypeUnormInt16: return "UnormInt16";
+    case SpvImageChannelDataTypeUnormShort565: return "UnormShort565";
+    case SpvImageChannelDataTypeUnormShort555: return "UnormShort555";
+    case SpvImageChannelDataTypeUnormInt101010: return "UnormInt101010";
+    case SpvImageChannelDataTypeSignedInt8: return "SignedInt8";
+    case SpvImageChannelDataTypeSignedInt16: return "SignedInt16";
+    case SpvImageChannelDataTypeSignedInt32: return "SignedInt32";
+    case SpvImageChannelDataTypeUnsignedInt8: return "UnsignedInt8";
+    case SpvImageChannelDataTypeUnsignedInt16: return "UnsignedInt16";
+    case SpvImageChannelDataTypeUnsignedInt32: return "UnsignedInt32";
+    case SpvImageChannelDataTypeHalfFloat: return "HalfFloat";
+    case SpvImageChannelDataTypeFloat: return "Float";
+    case SpvImageChannelDataTypeUnormInt24: return "UnormInt24";
+    case SpvImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2";
+    case SpvImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT";
+    case SpvImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT";
+    case SpvImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPRoundingModeToString(SpvFPRoundingMode value) {
+    switch (value) {
+    case SpvFPRoundingModeRTE: return "RTE";
+    case SpvFPRoundingModeRTZ: return "RTZ";
+    case SpvFPRoundingModeRTP: return "RTP";
+    case SpvFPRoundingModeRTN: return "RTN";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvLinkageTypeToString(SpvLinkageType value) {
+    switch (value) {
+    case SpvLinkageTypeExport: return "Export";
+    case SpvLinkageTypeImport: return "Import";
+    case SpvLinkageTypeLinkOnceODR: return "LinkOnceODR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvAccessQualifierToString(SpvAccessQualifier value) {
+    switch (value) {
+    case SpvAccessQualifierReadOnly: return "ReadOnly";
+    case SpvAccessQualifierWriteOnly: return "WriteOnly";
+    case SpvAccessQualifierReadWrite: return "ReadWrite";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFunctionParameterAttributeToString(SpvFunctionParameterAttribute value) {
+    switch (value) {
+    case SpvFunctionParameterAttributeZext: return "Zext";
+    case SpvFunctionParameterAttributeSext: return "Sext";
+    case SpvFunctionParameterAttributeByVal: return "ByVal";
+    case SpvFunctionParameterAttributeSret: return "Sret";
+    case SpvFunctionParameterAttributeNoAlias: return "NoAlias";
+    case SpvFunctionParameterAttributeNoCapture: return "NoCapture";
+    case SpvFunctionParameterAttributeNoWrite: return "NoWrite";
+    case SpvFunctionParameterAttributeNoReadWrite: return "NoReadWrite";
+    case SpvFunctionParameterAttributeRuntimeAlignedINTEL: return "RuntimeAlignedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvDecorationToString(SpvDecoration value) {
+    switch (value) {
+    case SpvDecorationRelaxedPrecision: return "RelaxedPrecision";
+    case SpvDecorationSpecId: return "SpecId";
+    case SpvDecorationBlock: return "Block";
+    case SpvDecorationBufferBlock: return "BufferBlock";
+    case SpvDecorationRowMajor: return "RowMajor";
+    case SpvDecorationColMajor: return "ColMajor";
+    case SpvDecorationArrayStride: return "ArrayStride";
+    case SpvDecorationMatrixStride: return "MatrixStride";
+    case SpvDecorationGLSLShared: return "GLSLShared";
+    case SpvDecorationGLSLPacked: return "GLSLPacked";
+    case SpvDecorationCPacked: return "CPacked";
+    case SpvDecorationBuiltIn: return "BuiltIn";
+    case SpvDecorationNoPerspective: return "NoPerspective";
+    case SpvDecorationFlat: return "Flat";
+    case SpvDecorationPatch: return "Patch";
+    case SpvDecorationCentroid: return "Centroid";
+    case SpvDecorationSample: return "Sample";
+    case SpvDecorationInvariant: return "Invariant";
+    case SpvDecorationRestrict: return "Restrict";
+    case SpvDecorationAliased: return "Aliased";
+    case SpvDecorationVolatile: return "Volatile";
+    case SpvDecorationConstant: return "Constant";
+    case SpvDecorationCoherent: return "Coherent";
+    case SpvDecorationNonWritable: return "NonWritable";
+    case SpvDecorationNonReadable: return "NonReadable";
+    case SpvDecorationUniform: return "Uniform";
+    case SpvDecorationUniformId: return "UniformId";
+    case SpvDecorationSaturatedConversion: return "SaturatedConversion";
+    case SpvDecorationStream: return "Stream";
+    case SpvDecorationLocation: return "Location";
+    case SpvDecorationComponent: return "Component";
+    case SpvDecorationIndex: return "Index";
+    case SpvDecorationBinding: return "Binding";
+    case SpvDecorationDescriptorSet: return "DescriptorSet";
+    case SpvDecorationOffset: return "Offset";
+    case SpvDecorationXfbBuffer: return "XfbBuffer";
+    case SpvDecorationXfbStride: return "XfbStride";
+    case SpvDecorationFuncParamAttr: return "FuncParamAttr";
+    case SpvDecorationFPRoundingMode: return "FPRoundingMode";
+    case SpvDecorationFPFastMathMode: return "FPFastMathMode";
+    case SpvDecorationLinkageAttributes: return "LinkageAttributes";
+    case SpvDecorationNoContraction: return "NoContraction";
+    case SpvDecorationInputAttachmentIndex: return "InputAttachmentIndex";
+    case SpvDecorationAlignment: return "Alignment";
+    case SpvDecorationMaxByteOffset: return "MaxByteOffset";
+    case SpvDecorationAlignmentId: return "AlignmentId";
+    case SpvDecorationMaxByteOffsetId: return "MaxByteOffsetId";
+    case SpvDecorationNoSignedWrap: return "NoSignedWrap";
+    case SpvDecorationNoUnsignedWrap: return "NoUnsignedWrap";
+    case SpvDecorationWeightTextureQCOM: return "WeightTextureQCOM";
+    case SpvDecorationBlockMatchTextureQCOM: return "BlockMatchTextureQCOM";
+    case SpvDecorationBlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM";
+    case SpvDecorationExplicitInterpAMD: return "ExplicitInterpAMD";
+    case SpvDecorationNodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX";
+    case SpvDecorationNodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX";
+    case SpvDecorationTrackFinishWritingAMDX: return "TrackFinishWritingAMDX";
+    case SpvDecorationPayloadNodeNameAMDX: return "PayloadNodeNameAMDX";
+    case SpvDecorationPayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX";
+    case SpvDecorationPayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX";
+    case SpvDecorationPayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX";
+    case SpvDecorationPayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX";
+    case SpvDecorationOverrideCoverageNV: return "OverrideCoverageNV";
+    case SpvDecorationPassthroughNV: return "PassthroughNV";
+    case SpvDecorationViewportRelativeNV: return "ViewportRelativeNV";
+    case SpvDecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
+    case SpvDecorationPerPrimitiveEXT: return "PerPrimitiveEXT";
+    case SpvDecorationPerViewNV: return "PerViewNV";
+    case SpvDecorationPerTaskNV: return "PerTaskNV";
+    case SpvDecorationPerVertexKHR: return "PerVertexKHR";
+    case SpvDecorationNonUniform: return "NonUniform";
+    case SpvDecorationRestrictPointer: return "RestrictPointer";
+    case SpvDecorationAliasedPointer: return "AliasedPointer";
+    case SpvDecorationHitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV";
+    case SpvDecorationBindlessSamplerNV: return "BindlessSamplerNV";
+    case SpvDecorationBindlessImageNV: return "BindlessImageNV";
+    case SpvDecorationBoundSamplerNV: return "BoundSamplerNV";
+    case SpvDecorationBoundImageNV: return "BoundImageNV";
+    case SpvDecorationSIMTCallINTEL: return "SIMTCallINTEL";
+    case SpvDecorationReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL";
+    case SpvDecorationClobberINTEL: return "ClobberINTEL";
+    case SpvDecorationSideEffectsINTEL: return "SideEffectsINTEL";
+    case SpvDecorationVectorComputeVariableINTEL: return "VectorComputeVariableINTEL";
+    case SpvDecorationFuncParamIOKindINTEL: return "FuncParamIOKindINTEL";
+    case SpvDecorationVectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL";
+    case SpvDecorationStackCallINTEL: return "StackCallINTEL";
+    case SpvDecorationGlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL";
+    case SpvDecorationCounterBuffer: return "CounterBuffer";
+    case SpvDecorationHlslSemanticGOOGLE: return "HlslSemanticGOOGLE";
+    case SpvDecorationUserTypeGOOGLE: return "UserTypeGOOGLE";
+    case SpvDecorationFunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL";
+    case SpvDecorationFunctionDenormModeINTEL: return "FunctionDenormModeINTEL";
+    case SpvDecorationRegisterINTEL: return "RegisterINTEL";
+    case SpvDecorationMemoryINTEL: return "MemoryINTEL";
+    case SpvDecorationNumbanksINTEL: return "NumbanksINTEL";
+    case SpvDecorationBankwidthINTEL: return "BankwidthINTEL";
+    case SpvDecorationMaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL";
+    case SpvDecorationSinglepumpINTEL: return "SinglepumpINTEL";
+    case SpvDecorationDoublepumpINTEL: return "DoublepumpINTEL";
+    case SpvDecorationMaxReplicatesINTEL: return "MaxReplicatesINTEL";
+    case SpvDecorationSimpleDualPortINTEL: return "SimpleDualPortINTEL";
+    case SpvDecorationMergeINTEL: return "MergeINTEL";
+    case SpvDecorationBankBitsINTEL: return "BankBitsINTEL";
+    case SpvDecorationForcePow2DepthINTEL: return "ForcePow2DepthINTEL";
+    case SpvDecorationStridesizeINTEL: return "StridesizeINTEL";
+    case SpvDecorationWordsizeINTEL: return "WordsizeINTEL";
+    case SpvDecorationTrueDualPortINTEL: return "TrueDualPortINTEL";
+    case SpvDecorationBurstCoalesceINTEL: return "BurstCoalesceINTEL";
+    case SpvDecorationCacheSizeINTEL: return "CacheSizeINTEL";
+    case SpvDecorationDontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL";
+    case SpvDecorationPrefetchINTEL: return "PrefetchINTEL";
+    case SpvDecorationStallEnableINTEL: return "StallEnableINTEL";
+    case SpvDecorationFuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL";
+    case SpvDecorationMathOpDSPModeINTEL: return "MathOpDSPModeINTEL";
+    case SpvDecorationAliasScopeINTEL: return "AliasScopeINTEL";
+    case SpvDecorationNoAliasINTEL: return "NoAliasINTEL";
+    case SpvDecorationInitiationIntervalINTEL: return "InitiationIntervalINTEL";
+    case SpvDecorationMaxConcurrencyINTEL: return "MaxConcurrencyINTEL";
+    case SpvDecorationPipelineEnableINTEL: return "PipelineEnableINTEL";
+    case SpvDecorationBufferLocationINTEL: return "BufferLocationINTEL";
+    case SpvDecorationIOPipeStorageINTEL: return "IOPipeStorageINTEL";
+    case SpvDecorationFunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL";
+    case SpvDecorationSingleElementVectorINTEL: return "SingleElementVectorINTEL";
+    case SpvDecorationVectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL";
+    case SpvDecorationMediaBlockIOINTEL: return "MediaBlockIOINTEL";
+    case SpvDecorationStallFreeINTEL: return "StallFreeINTEL";
+    case SpvDecorationFPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL";
+    case SpvDecorationLatencyControlLabelINTEL: return "LatencyControlLabelINTEL";
+    case SpvDecorationLatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL";
+    case SpvDecorationConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL";
+    case SpvDecorationRegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL";
+    case SpvDecorationMMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL";
+    case SpvDecorationMMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL";
+    case SpvDecorationMMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL";
+    case SpvDecorationMMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL";
+    case SpvDecorationMMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL";
+    case SpvDecorationMMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL";
+    case SpvDecorationStableKernelArgumentINTEL: return "StableKernelArgumentINTEL";
+    case SpvDecorationHostAccessINTEL: return "HostAccessINTEL";
+    case SpvDecorationInitModeINTEL: return "InitModeINTEL";
+    case SpvDecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL";
+    case SpvDecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL";
+    case SpvDecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvBuiltInToString(SpvBuiltIn value) {
+    switch (value) {
+    case SpvBuiltInPosition: return "Position";
+    case SpvBuiltInPointSize: return "PointSize";
+    case SpvBuiltInClipDistance: return "ClipDistance";
+    case SpvBuiltInCullDistance: return "CullDistance";
+    case SpvBuiltInVertexId: return "VertexId";
+    case SpvBuiltInInstanceId: return "InstanceId";
+    case SpvBuiltInPrimitiveId: return "PrimitiveId";
+    case SpvBuiltInInvocationId: return "InvocationId";
+    case SpvBuiltInLayer: return "Layer";
+    case SpvBuiltInViewportIndex: return "ViewportIndex";
+    case SpvBuiltInTessLevelOuter: return "TessLevelOuter";
+    case SpvBuiltInTessLevelInner: return "TessLevelInner";
+    case SpvBuiltInTessCoord: return "TessCoord";
+    case SpvBuiltInPatchVertices: return "PatchVertices";
+    case SpvBuiltInFragCoord: return "FragCoord";
+    case SpvBuiltInPointCoord: return "PointCoord";
+    case SpvBuiltInFrontFacing: return "FrontFacing";
+    case SpvBuiltInSampleId: return "SampleId";
+    case SpvBuiltInSamplePosition: return "SamplePosition";
+    case SpvBuiltInSampleMask: return "SampleMask";
+    case SpvBuiltInFragDepth: return "FragDepth";
+    case SpvBuiltInHelperInvocation: return "HelperInvocation";
+    case SpvBuiltInNumWorkgroups: return "NumWorkgroups";
+    case SpvBuiltInWorkgroupSize: return "WorkgroupSize";
+    case SpvBuiltInWorkgroupId: return "WorkgroupId";
+    case SpvBuiltInLocalInvocationId: return "LocalInvocationId";
+    case SpvBuiltInGlobalInvocationId: return "GlobalInvocationId";
+    case SpvBuiltInLocalInvocationIndex: return "LocalInvocationIndex";
+    case SpvBuiltInWorkDim: return "WorkDim";
+    case SpvBuiltInGlobalSize: return "GlobalSize";
+    case SpvBuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize";
+    case SpvBuiltInGlobalOffset: return "GlobalOffset";
+    case SpvBuiltInGlobalLinearId: return "GlobalLinearId";
+    case SpvBuiltInSubgroupSize: return "SubgroupSize";
+    case SpvBuiltInSubgroupMaxSize: return "SubgroupMaxSize";
+    case SpvBuiltInNumSubgroups: return "NumSubgroups";
+    case SpvBuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups";
+    case SpvBuiltInSubgroupId: return "SubgroupId";
+    case SpvBuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId";
+    case SpvBuiltInVertexIndex: return "VertexIndex";
+    case SpvBuiltInInstanceIndex: return "InstanceIndex";
+    case SpvBuiltInCoreIDARM: return "CoreIDARM";
+    case SpvBuiltInCoreCountARM: return "CoreCountARM";
+    case SpvBuiltInCoreMaxIDARM: return "CoreMaxIDARM";
+    case SpvBuiltInWarpIDARM: return "WarpIDARM";
+    case SpvBuiltInWarpMaxIDARM: return "WarpMaxIDARM";
+    case SpvBuiltInSubgroupEqMask: return "SubgroupEqMask";
+    case SpvBuiltInSubgroupGeMask: return "SubgroupGeMask";
+    case SpvBuiltInSubgroupGtMask: return "SubgroupGtMask";
+    case SpvBuiltInSubgroupLeMask: return "SubgroupLeMask";
+    case SpvBuiltInSubgroupLtMask: return "SubgroupLtMask";
+    case SpvBuiltInBaseVertex: return "BaseVertex";
+    case SpvBuiltInBaseInstance: return "BaseInstance";
+    case SpvBuiltInDrawIndex: return "DrawIndex";
+    case SpvBuiltInPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR";
+    case SpvBuiltInDeviceIndex: return "DeviceIndex";
+    case SpvBuiltInViewIndex: return "ViewIndex";
+    case SpvBuiltInShadingRateKHR: return "ShadingRateKHR";
+    case SpvBuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD";
+    case SpvBuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD";
+    case SpvBuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD";
+    case SpvBuiltInBaryCoordSmoothAMD: return "BaryCoordSmoothAMD";
+    case SpvBuiltInBaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD";
+    case SpvBuiltInBaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD";
+    case SpvBuiltInBaryCoordPullModelAMD: return "BaryCoordPullModelAMD";
+    case SpvBuiltInFragStencilRefEXT: return "FragStencilRefEXT";
+    case SpvBuiltInRemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX";
+    case SpvBuiltInShaderIndexAMDX: return "ShaderIndexAMDX";
+    case SpvBuiltInViewportMaskNV: return "ViewportMaskNV";
+    case SpvBuiltInSecondaryPositionNV: return "SecondaryPositionNV";
+    case SpvBuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
+    case SpvBuiltInPositionPerViewNV: return "PositionPerViewNV";
+    case SpvBuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
+    case SpvBuiltInFullyCoveredEXT: return "FullyCoveredEXT";
+    case SpvBuiltInTaskCountNV: return "TaskCountNV";
+    case SpvBuiltInPrimitiveCountNV: return "PrimitiveCountNV";
+    case SpvBuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV";
+    case SpvBuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV";
+    case SpvBuiltInCullDistancePerViewNV: return "CullDistancePerViewNV";
+    case SpvBuiltInLayerPerViewNV: return "LayerPerViewNV";
+    case SpvBuiltInMeshViewCountNV: return "MeshViewCountNV";
+    case SpvBuiltInMeshViewIndicesNV: return "MeshViewIndicesNV";
+    case SpvBuiltInBaryCoordKHR: return "BaryCoordKHR";
+    case SpvBuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR";
+    case SpvBuiltInFragSizeEXT: return "FragSizeEXT";
+    case SpvBuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
+    case SpvBuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT";
+    case SpvBuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT";
+    case SpvBuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
+    case SpvBuiltInCullPrimitiveEXT: return "CullPrimitiveEXT";
+    case SpvBuiltInLaunchIdKHR: return "LaunchIdKHR";
+    case SpvBuiltInLaunchSizeKHR: return "LaunchSizeKHR";
+    case SpvBuiltInWorldRayOriginKHR: return "WorldRayOriginKHR";
+    case SpvBuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR";
+    case SpvBuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR";
+    case SpvBuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR";
+    case SpvBuiltInRayTminKHR: return "RayTminKHR";
+    case SpvBuiltInRayTmaxKHR: return "RayTmaxKHR";
+    case SpvBuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR";
+    case SpvBuiltInObjectToWorldKHR: return "ObjectToWorldKHR";
+    case SpvBuiltInWorldToObjectKHR: return "WorldToObjectKHR";
+    case SpvBuiltInHitTNV: return "HitTNV";
+    case SpvBuiltInHitKindKHR: return "HitKindKHR";
+    case SpvBuiltInCurrentRayTimeNV: return "CurrentRayTimeNV";
+    case SpvBuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
+    case SpvBuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV";
+    case SpvBuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV";
+    case SpvBuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";
+    case SpvBuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";
+    case SpvBuiltInWarpsPerSMNV: return "WarpsPerSMNV";
+    case SpvBuiltInSMCountNV: return "SMCountNV";
+    case SpvBuiltInWarpIDNV: return "WarpIDNV";
+    case SpvBuiltInSMIDNV: return "SMIDNV";
+    case SpvBuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV";
+    case SpvBuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV";
+    case SpvBuiltInCullMaskKHR: return "CullMaskKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvScopeToString(SpvScope value) {
+    switch (value) {
+    case SpvScopeCrossDevice: return "CrossDevice";
+    case SpvScopeDevice: return "Device";
+    case SpvScopeWorkgroup: return "Workgroup";
+    case SpvScopeSubgroup: return "Subgroup";
+    case SpvScopeInvocation: return "Invocation";
+    case SpvScopeQueueFamily: return "QueueFamily";
+    case SpvScopeShaderCallKHR: return "ShaderCallKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvGroupOperationToString(SpvGroupOperation value) {
+    switch (value) {
+    case SpvGroupOperationReduce: return "Reduce";
+    case SpvGroupOperationInclusiveScan: return "InclusiveScan";
+    case SpvGroupOperationExclusiveScan: return "ExclusiveScan";
+    case SpvGroupOperationClusteredReduce: return "ClusteredReduce";
+    case SpvGroupOperationPartitionedReduceNV: return "PartitionedReduceNV";
+    case SpvGroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV";
+    case SpvGroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvKernelEnqueueFlagsToString(SpvKernelEnqueueFlags value) {
+    switch (value) {
+    case SpvKernelEnqueueFlagsNoWait: return "NoWait";
+    case SpvKernelEnqueueFlagsWaitKernel: return "WaitKernel";
+    case SpvKernelEnqueueFlagsWaitWorkGroup: return "WaitWorkGroup";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCapabilityToString(SpvCapability value) {
+    switch (value) {
+    case SpvCapabilityMatrix: return "Matrix";
+    case SpvCapabilityShader: return "Shader";
+    case SpvCapabilityGeometry: return "Geometry";
+    case SpvCapabilityTessellation: return "Tessellation";
+    case SpvCapabilityAddresses: return "Addresses";
+    case SpvCapabilityLinkage: return "Linkage";
+    case SpvCapabilityKernel: return "Kernel";
+    case SpvCapabilityVector16: return "Vector16";
+    case SpvCapabilityFloat16Buffer: return "Float16Buffer";
+    case SpvCapabilityFloat16: return "Float16";
+    case SpvCapabilityFloat64: return "Float64";
+    case SpvCapabilityInt64: return "Int64";
+    case SpvCapabilityInt64Atomics: return "Int64Atomics";
+    case SpvCapabilityImageBasic: return "ImageBasic";
+    case SpvCapabilityImageReadWrite: return "ImageReadWrite";
+    case SpvCapabilityImageMipmap: return "ImageMipmap";
+    case SpvCapabilityPipes: return "Pipes";
+    case SpvCapabilityGroups: return "Groups";
+    case SpvCapabilityDeviceEnqueue: return "DeviceEnqueue";
+    case SpvCapabilityLiteralSampler: return "LiteralSampler";
+    case SpvCapabilityAtomicStorage: return "AtomicStorage";
+    case SpvCapabilityInt16: return "Int16";
+    case SpvCapabilityTessellationPointSize: return "TessellationPointSize";
+    case SpvCapabilityGeometryPointSize: return "GeometryPointSize";
+    case SpvCapabilityImageGatherExtended: return "ImageGatherExtended";
+    case SpvCapabilityStorageImageMultisample: return "StorageImageMultisample";
+    case SpvCapabilityUniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing";
+    case SpvCapabilitySampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing";
+    case SpvCapabilityStorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing";
+    case SpvCapabilityStorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing";
+    case SpvCapabilityClipDistance: return "ClipDistance";
+    case SpvCapabilityCullDistance: return "CullDistance";
+    case SpvCapabilityImageCubeArray: return "ImageCubeArray";
+    case SpvCapabilitySampleRateShading: return "SampleRateShading";
+    case SpvCapabilityImageRect: return "ImageRect";
+    case SpvCapabilitySampledRect: return "SampledRect";
+    case SpvCapabilityGenericPointer: return "GenericPointer";
+    case SpvCapabilityInt8: return "Int8";
+    case SpvCapabilityInputAttachment: return "InputAttachment";
+    case SpvCapabilitySparseResidency: return "SparseResidency";
+    case SpvCapabilityMinLod: return "MinLod";
+    case SpvCapabilitySampled1D: return "Sampled1D";
+    case SpvCapabilityImage1D: return "Image1D";
+    case SpvCapabilitySampledCubeArray: return "SampledCubeArray";
+    case SpvCapabilitySampledBuffer: return "SampledBuffer";
+    case SpvCapabilityImageBuffer: return "ImageBuffer";
+    case SpvCapabilityImageMSArray: return "ImageMSArray";
+    case SpvCapabilityStorageImageExtendedFormats: return "StorageImageExtendedFormats";
+    case SpvCapabilityImageQuery: return "ImageQuery";
+    case SpvCapabilityDerivativeControl: return "DerivativeControl";
+    case SpvCapabilityInterpolationFunction: return "InterpolationFunction";
+    case SpvCapabilityTransformFeedback: return "TransformFeedback";
+    case SpvCapabilityGeometryStreams: return "GeometryStreams";
+    case SpvCapabilityStorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat";
+    case SpvCapabilityStorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat";
+    case SpvCapabilityMultiViewport: return "MultiViewport";
+    case SpvCapabilitySubgroupDispatch: return "SubgroupDispatch";
+    case SpvCapabilityNamedBarrier: return "NamedBarrier";
+    case SpvCapabilityPipeStorage: return "PipeStorage";
+    case SpvCapabilityGroupNonUniform: return "GroupNonUniform";
+    case SpvCapabilityGroupNonUniformVote: return "GroupNonUniformVote";
+    case SpvCapabilityGroupNonUniformArithmetic: return "GroupNonUniformArithmetic";
+    case SpvCapabilityGroupNonUniformBallot: return "GroupNonUniformBallot";
+    case SpvCapabilityGroupNonUniformShuffle: return "GroupNonUniformShuffle";
+    case SpvCapabilityGroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative";
+    case SpvCapabilityGroupNonUniformClustered: return "GroupNonUniformClustered";
+    case SpvCapabilityGroupNonUniformQuad: return "GroupNonUniformQuad";
+    case SpvCapabilityShaderLayer: return "ShaderLayer";
+    case SpvCapabilityShaderViewportIndex: return "ShaderViewportIndex";
+    case SpvCapabilityUniformDecoration: return "UniformDecoration";
+    case SpvCapabilityCoreBuiltinsARM: return "CoreBuiltinsARM";
+    case SpvCapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT";
+    case SpvCapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT";
+    case SpvCapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT";
+    case SpvCapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM";
+    case SpvCapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR";
+    case SpvCapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
+    case SpvCapabilityDrawParameters: return "DrawParameters";
+    case SpvCapabilityWorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR";
+    case SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
+    case SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
+    case SpvCapabilitySubgroupVoteKHR: return "SubgroupVoteKHR";
+    case SpvCapabilityStorageBuffer16BitAccess: return "StorageBuffer16BitAccess";
+    case SpvCapabilityStorageUniform16: return "StorageUniform16";
+    case SpvCapabilityStoragePushConstant16: return "StoragePushConstant16";
+    case SpvCapabilityStorageInputOutput16: return "StorageInputOutput16";
+    case SpvCapabilityDeviceGroup: return "DeviceGroup";
+    case SpvCapabilityMultiView: return "MultiView";
+    case SpvCapabilityVariablePointersStorageBuffer: return "VariablePointersStorageBuffer";
+    case SpvCapabilityVariablePointers: return "VariablePointers";
+    case SpvCapabilityAtomicStorageOps: return "AtomicStorageOps";
+    case SpvCapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage";
+    case SpvCapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess";
+    case SpvCapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess";
+    case SpvCapabilityStoragePushConstant8: return "StoragePushConstant8";
+    case SpvCapabilityDenormPreserve: return "DenormPreserve";
+    case SpvCapabilityDenormFlushToZero: return "DenormFlushToZero";
+    case SpvCapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case SpvCapabilityRoundingModeRTE: return "RoundingModeRTE";
+    case SpvCapabilityRoundingModeRTZ: return "RoundingModeRTZ";
+    case SpvCapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR";
+    case SpvCapabilityRayQueryKHR: return "RayQueryKHR";
+    case SpvCapabilityUntypedPointersKHR: return "UntypedPointersKHR";
+    case SpvCapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
+    case SpvCapabilityRayTracingKHR: return "RayTracingKHR";
+    case SpvCapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM";
+    case SpvCapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
+    case SpvCapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
+    case SpvCapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
+    case SpvCapabilityFloat16ImageAMD: return "Float16ImageAMD";
+    case SpvCapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
+    case SpvCapabilityFragmentMaskAMD: return "FragmentMaskAMD";
+    case SpvCapabilityStencilExportEXT: return "StencilExportEXT";
+    case SpvCapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD";
+    case SpvCapabilityInt64ImageEXT: return "Int64ImageEXT";
+    case SpvCapabilityShaderClockKHR: return "ShaderClockKHR";
+    case SpvCapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX";
+    case SpvCapabilityQuadControlKHR: return "QuadControlKHR";
+    case SpvCapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";
+    case SpvCapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
+    case SpvCapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT";
+    case SpvCapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV";
+    case SpvCapabilityShaderStereoViewNV: return "ShaderStereoViewNV";
+    case SpvCapabilityPerViewAttributesNV: return "PerViewAttributesNV";
+    case SpvCapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
+    case SpvCapabilityMeshShadingNV: return "MeshShadingNV";
+    case SpvCapabilityImageFootprintNV: return "ImageFootprintNV";
+    case SpvCapabilityMeshShadingEXT: return "MeshShadingEXT";
+    case SpvCapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR";
+    case SpvCapabilityComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR";
+    case SpvCapabilityFragmentDensityEXT: return "FragmentDensityEXT";
+    case SpvCapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
+    case SpvCapabilityShaderNonUniform: return "ShaderNonUniform";
+    case SpvCapabilityRuntimeDescriptorArray: return "RuntimeDescriptorArray";
+    case SpvCapabilityInputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing";
+    case SpvCapabilityUniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing";
+    case SpvCapabilityStorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing";
+    case SpvCapabilityUniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing";
+    case SpvCapabilitySampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing";
+    case SpvCapabilityStorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing";
+    case SpvCapabilityStorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing";
+    case SpvCapabilityInputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing";
+    case SpvCapabilityUniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing";
+    case SpvCapabilityStorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing";
+    case SpvCapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR";
+    case SpvCapabilityRayTracingNV: return "RayTracingNV";
+    case SpvCapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV";
+    case SpvCapabilityVulkanMemoryModel: return "VulkanMemoryModel";
+    case SpvCapabilityVulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope";
+    case SpvCapabilityPhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses";
+    case SpvCapabilityComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR";
+    case SpvCapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR";
+    case SpvCapabilityCooperativeMatrixNV: return "CooperativeMatrixNV";
+    case SpvCapabilityFragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT";
+    case SpvCapabilityFragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT";
+    case SpvCapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV";
+    case SpvCapabilityFragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT";
+    case SpvCapabilityDemoteToHelperInvocation: return "DemoteToHelperInvocation";
+    case SpvCapabilityDisplacementMicromapNV: return "DisplacementMicromapNV";
+    case SpvCapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT";
+    case SpvCapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV";
+    case SpvCapabilityBindlessTextureNV: return "BindlessTextureNV";
+    case SpvCapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR";
+    case SpvCapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV";
+    case SpvCapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV";
+    case SpvCapabilityRawAccessChainsNV: return "RawAccessChainsNV";
+    case SpvCapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV";
+    case SpvCapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV";
+    case SpvCapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV";
+    case SpvCapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV";
+    case SpvCapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV";
+    case SpvCapabilityTensorAddressingNV: return "TensorAddressingNV";
+    case SpvCapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL";
+    case SpvCapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL";
+    case SpvCapabilitySubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL";
+    case SpvCapabilitySubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL";
+    case SpvCapabilityRoundToInfinityINTEL: return "RoundToInfinityINTEL";
+    case SpvCapabilityFloatingPointModeINTEL: return "FloatingPointModeINTEL";
+    case SpvCapabilityIntegerFunctions2INTEL: return "IntegerFunctions2INTEL";
+    case SpvCapabilityFunctionPointersINTEL: return "FunctionPointersINTEL";
+    case SpvCapabilityIndirectReferencesINTEL: return "IndirectReferencesINTEL";
+    case SpvCapabilityAsmINTEL: return "AsmINTEL";
+    case SpvCapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT";
+    case SpvCapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT";
+    case SpvCapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT";
+    case SpvCapabilityVectorComputeINTEL: return "VectorComputeINTEL";
+    case SpvCapabilityVectorAnyINTEL: return "VectorAnyINTEL";
+    case SpvCapabilityExpectAssumeKHR: return "ExpectAssumeKHR";
+    case SpvCapabilitySubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL";
+    case SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL";
+    case SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL";
+    case SpvCapabilityVariableLengthArrayINTEL: return "VariableLengthArrayINTEL";
+    case SpvCapabilityFunctionFloatControlINTEL: return "FunctionFloatControlINTEL";
+    case SpvCapabilityFPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL";
+    case SpvCapabilityFPFastMathModeINTEL: return "FPFastMathModeINTEL";
+    case SpvCapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL";
+    case SpvCapabilityArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL";
+    case SpvCapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL";
+    case SpvCapabilityFPGALoopControlsINTEL: return "FPGALoopControlsINTEL";
+    case SpvCapabilityKernelAttributesINTEL: return "KernelAttributesINTEL";
+    case SpvCapabilityFPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL";
+    case SpvCapabilityFPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL";
+    case SpvCapabilityFPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL";
+    case SpvCapabilityLoopFuseINTEL: return "LoopFuseINTEL";
+    case SpvCapabilityFPGADSPControlINTEL: return "FPGADSPControlINTEL";
+    case SpvCapabilityMemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL";
+    case SpvCapabilityFPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL";
+    case SpvCapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL";
+    case SpvCapabilityArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL";
+    case SpvCapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL";
+    case SpvCapabilityRuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL";
+    case SpvCapabilityIOPipesINTEL: return "IOPipesINTEL";
+    case SpvCapabilityBlockingPipesINTEL: return "BlockingPipesINTEL";
+    case SpvCapabilityFPGARegINTEL: return "FPGARegINTEL";
+    case SpvCapabilityDotProductInputAll: return "DotProductInputAll";
+    case SpvCapabilityDotProductInput4x8Bit: return "DotProductInput4x8Bit";
+    case SpvCapabilityDotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked";
+    case SpvCapabilityDotProduct: return "DotProduct";
+    case SpvCapabilityRayCullMaskKHR: return "RayCullMaskKHR";
+    case SpvCapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR";
+    case SpvCapabilityReplicatedCompositesEXT: return "ReplicatedCompositesEXT";
+    case SpvCapabilityBitInstructions: return "BitInstructions";
+    case SpvCapabilityGroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR";
+    case SpvCapabilityFloatControls2: return "FloatControls2";
+    case SpvCapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";
+    case SpvCapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";
+    case SpvCapabilityLongCompositesINTEL: return "LongCompositesINTEL";
+    case SpvCapabilityOptNoneEXT: return "OptNoneEXT";
+    case SpvCapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT";
+    case SpvCapabilityDebugInfoModuleINTEL: return "DebugInfoModuleINTEL";
+    case SpvCapabilityBFloat16ConversionINTEL: return "BFloat16ConversionINTEL";
+    case SpvCapabilitySplitBarrierINTEL: return "SplitBarrierINTEL";
+    case SpvCapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT";
+    case SpvCapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL";
+    case SpvCapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL";
+    case SpvCapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL";
+    case SpvCapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL";
+    case SpvCapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL";
+    case SpvCapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL";
+    case SpvCapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL";
+    case SpvCapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL";
+    case SpvCapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR";
+    case SpvCapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL";
+    case SpvCapabilityCacheControlsINTEL: return "CacheControlsINTEL";
+    case SpvCapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvRayQueryIntersectionToString(SpvRayQueryIntersection value) {
+    switch (value) {
+    case SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR";
+    case SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvRayQueryCommittedIntersectionTypeToString(SpvRayQueryCommittedIntersectionType value) {
+    switch (value) {
+    case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR";
+    case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR";
+    case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvRayQueryCandidateIntersectionTypeToString(SpvRayQueryCandidateIntersectionType value) {
+    switch (value) {
+    case SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR";
+    case SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPDenormModeToString(SpvFPDenormMode value) {
+    switch (value) {
+    case SpvFPDenormModePreserve: return "Preserve";
+    case SpvFPDenormModeFlushToZero: return "FlushToZero";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPOperationModeToString(SpvFPOperationMode value) {
+    switch (value) {
+    case SpvFPOperationModeIEEE: return "IEEE";
+    case SpvFPOperationModeALT: return "ALT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvQuantizationModesToString(SpvQuantizationModes value) {
+    switch (value) {
+    case SpvQuantizationModesTRN: return "TRN";
+    case SpvQuantizationModesTRN_ZERO: return "TRN_ZERO";
+    case SpvQuantizationModesRND: return "RND";
+    case SpvQuantizationModesRND_ZERO: return "RND_ZERO";
+    case SpvQuantizationModesRND_INF: return "RND_INF";
+    case SpvQuantizationModesRND_MIN_INF: return "RND_MIN_INF";
+    case SpvQuantizationModesRND_CONV: return "RND_CONV";
+    case SpvQuantizationModesRND_CONV_ODD: return "RND_CONV_ODD";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvOverflowModesToString(SpvOverflowModes value) {
+    switch (value) {
+    case SpvOverflowModesWRAP: return "WRAP";
+    case SpvOverflowModesSAT: return "SAT";
+    case SpvOverflowModesSAT_ZERO: return "SAT_ZERO";
+    case SpvOverflowModesSAT_SYM: return "SAT_SYM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvPackedVectorFormatToString(SpvPackedVectorFormat value) {
+    switch (value) {
+    case SpvPackedVectorFormatPackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCooperativeMatrixLayoutToString(SpvCooperativeMatrixLayout value) {
+    switch (value) {
+    case SpvCooperativeMatrixLayoutRowMajorKHR: return "RowMajorKHR";
+    case SpvCooperativeMatrixLayoutColumnMajorKHR: return "ColumnMajorKHR";
+    case SpvCooperativeMatrixLayoutRowBlockedInterleavedARM: return "RowBlockedInterleavedARM";
+    case SpvCooperativeMatrixLayoutColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCooperativeMatrixUseToString(SpvCooperativeMatrixUse value) {
+    switch (value) {
+    case SpvCooperativeMatrixUseMatrixAKHR: return "MatrixAKHR";
+    case SpvCooperativeMatrixUseMatrixBKHR: return "MatrixBKHR";
+    case SpvCooperativeMatrixUseMatrixAccumulatorKHR: return "MatrixAccumulatorKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvTensorClampModeToString(SpvTensorClampMode value) {
+    switch (value) {
+    case SpvTensorClampModeUndefined: return "Undefined";
+    case SpvTensorClampModeConstant: return "Constant";
+    case SpvTensorClampModeClampToEdge: return "ClampToEdge";
+    case SpvTensorClampModeRepeat: return "Repeat";
+    case SpvTensorClampModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvInitializationModeQualifierToString(SpvInitializationModeQualifier value) {
+    switch (value) {
+    case SpvInitializationModeQualifierInitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL";
+    case SpvInitializationModeQualifierInitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvHostAccessQualifierToString(SpvHostAccessQualifier value) {
+    switch (value) {
+    case SpvHostAccessQualifierNoneINTEL: return "NoneINTEL";
+    case SpvHostAccessQualifierReadINTEL: return "ReadINTEL";
+    case SpvHostAccessQualifierWriteINTEL: return "WriteINTEL";
+    case SpvHostAccessQualifierReadWriteINTEL: return "ReadWriteINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvLoadCacheControlToString(SpvLoadCacheControl value) {
+    switch (value) {
+    case SpvLoadCacheControlUncachedINTEL: return "UncachedINTEL";
+    case SpvLoadCacheControlCachedINTEL: return "CachedINTEL";
+    case SpvLoadCacheControlStreamingINTEL: return "StreamingINTEL";
+    case SpvLoadCacheControlInvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL";
+    case SpvLoadCacheControlConstCachedINTEL: return "ConstCachedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvStoreCacheControlToString(SpvStoreCacheControl value) {
+    switch (value) {
+    case SpvStoreCacheControlUncachedINTEL: return "UncachedINTEL";
+    case SpvStoreCacheControlWriteThroughINTEL: return "WriteThroughINTEL";
+    case SpvStoreCacheControlWriteBackINTEL: return "WriteBackINTEL";
+    case SpvStoreCacheControlStreamingINTEL: return "StreamingINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvNamedMaximumNumberOfRegistersToString(SpvNamedMaximumNumberOfRegisters value) {
+    switch (value) {
+    case SpvNamedMaximumNumberOfRegistersAutoINTEL: return "AutoINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPEncodingToString(SpvFPEncoding value) {
+    switch (value) {
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvOpToString(SpvOp value) {
+    switch (value) {
+    case SpvOpNop: return "OpNop";
+    case SpvOpUndef: return "OpUndef";
+    case SpvOpSourceContinued: return "OpSourceContinued";
+    case SpvOpSource: return "OpSource";
+    case SpvOpSourceExtension: return "OpSourceExtension";
+    case SpvOpName: return "OpName";
+    case SpvOpMemberName: return "OpMemberName";
+    case SpvOpString: return "OpString";
+    case SpvOpLine: return "OpLine";
+    case SpvOpExtension: return "OpExtension";
+    case SpvOpExtInstImport: return "OpExtInstImport";
+    case SpvOpExtInst: return "OpExtInst";
+    case SpvOpMemoryModel: return "OpMemoryModel";
+    case SpvOpEntryPoint: return "OpEntryPoint";
+    case SpvOpExecutionMode: return "OpExecutionMode";
+    case SpvOpCapability: return "OpCapability";
+    case SpvOpTypeVoid: return "OpTypeVoid";
+    case SpvOpTypeBool: return "OpTypeBool";
+    case SpvOpTypeInt: return "OpTypeInt";
+    case SpvOpTypeFloat: return "OpTypeFloat";
+    case SpvOpTypeVector: return "OpTypeVector";
+    case SpvOpTypeMatrix: return "OpTypeMatrix";
+    case SpvOpTypeImage: return "OpTypeImage";
+    case SpvOpTypeSampler: return "OpTypeSampler";
+    case SpvOpTypeSampledImage: return "OpTypeSampledImage";
+    case SpvOpTypeArray: return "OpTypeArray";
+    case SpvOpTypeRuntimeArray: return "OpTypeRuntimeArray";
+    case SpvOpTypeStruct: return "OpTypeStruct";
+    case SpvOpTypeOpaque: return "OpTypeOpaque";
+    case SpvOpTypePointer: return "OpTypePointer";
+    case SpvOpTypeFunction: return "OpTypeFunction";
+    case SpvOpTypeEvent: return "OpTypeEvent";
+    case SpvOpTypeDeviceEvent: return "OpTypeDeviceEvent";
+    case SpvOpTypeReserveId: return "OpTypeReserveId";
+    case SpvOpTypeQueue: return "OpTypeQueue";
+    case SpvOpTypePipe: return "OpTypePipe";
+    case SpvOpTypeForwardPointer: return "OpTypeForwardPointer";
+    case SpvOpConstantTrue: return "OpConstantTrue";
+    case SpvOpConstantFalse: return "OpConstantFalse";
+    case SpvOpConstant: return "OpConstant";
+    case SpvOpConstantComposite: return "OpConstantComposite";
+    case SpvOpConstantSampler: return "OpConstantSampler";
+    case SpvOpConstantNull: return "OpConstantNull";
+    case SpvOpSpecConstantTrue: return "OpSpecConstantTrue";
+    case SpvOpSpecConstantFalse: return "OpSpecConstantFalse";
+    case SpvOpSpecConstant: return "OpSpecConstant";
+    case SpvOpSpecConstantComposite: return "OpSpecConstantComposite";
+    case SpvOpSpecConstantOp: return "OpSpecConstantOp";
+    case SpvOpFunction: return "OpFunction";
+    case SpvOpFunctionParameter: return "OpFunctionParameter";
+    case SpvOpFunctionEnd: return "OpFunctionEnd";
+    case SpvOpFunctionCall: return "OpFunctionCall";
+    case SpvOpVariable: return "OpVariable";
+    case SpvOpImageTexelPointer: return "OpImageTexelPointer";
+    case SpvOpLoad: return "OpLoad";
+    case SpvOpStore: return "OpStore";
+    case SpvOpCopyMemory: return "OpCopyMemory";
+    case SpvOpCopyMemorySized: return "OpCopyMemorySized";
+    case SpvOpAccessChain: return "OpAccessChain";
+    case SpvOpInBoundsAccessChain: return "OpInBoundsAccessChain";
+    case SpvOpPtrAccessChain: return "OpPtrAccessChain";
+    case SpvOpArrayLength: return "OpArrayLength";
+    case SpvOpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics";
+    case SpvOpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain";
+    case SpvOpDecorate: return "OpDecorate";
+    case SpvOpMemberDecorate: return "OpMemberDecorate";
+    case SpvOpDecorationGroup: return "OpDecorationGroup";
+    case SpvOpGroupDecorate: return "OpGroupDecorate";
+    case SpvOpGroupMemberDecorate: return "OpGroupMemberDecorate";
+    case SpvOpVectorExtractDynamic: return "OpVectorExtractDynamic";
+    case SpvOpVectorInsertDynamic: return "OpVectorInsertDynamic";
+    case SpvOpVectorShuffle: return "OpVectorShuffle";
+    case SpvOpCompositeConstruct: return "OpCompositeConstruct";
+    case SpvOpCompositeExtract: return "OpCompositeExtract";
+    case SpvOpCompositeInsert: return "OpCompositeInsert";
+    case SpvOpCopyObject: return "OpCopyObject";
+    case SpvOpTranspose: return "OpTranspose";
+    case SpvOpSampledImage: return "OpSampledImage";
+    case SpvOpImageSampleImplicitLod: return "OpImageSampleImplicitLod";
+    case SpvOpImageSampleExplicitLod: return "OpImageSampleExplicitLod";
+    case SpvOpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod";
+    case SpvOpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod";
+    case SpvOpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod";
+    case SpvOpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod";
+    case SpvOpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod";
+    case SpvOpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod";
+    case SpvOpImageFetch: return "OpImageFetch";
+    case SpvOpImageGather: return "OpImageGather";
+    case SpvOpImageDrefGather: return "OpImageDrefGather";
+    case SpvOpImageRead: return "OpImageRead";
+    case SpvOpImageWrite: return "OpImageWrite";
+    case SpvOpImage: return "OpImage";
+    case SpvOpImageQueryFormat: return "OpImageQueryFormat";
+    case SpvOpImageQueryOrder: return "OpImageQueryOrder";
+    case SpvOpImageQuerySizeLod: return "OpImageQuerySizeLod";
+    case SpvOpImageQuerySize: return "OpImageQuerySize";
+    case SpvOpImageQueryLod: return "OpImageQueryLod";
+    case SpvOpImageQueryLevels: return "OpImageQueryLevels";
+    case SpvOpImageQuerySamples: return "OpImageQuerySamples";
+    case SpvOpConvertFToU: return "OpConvertFToU";
+    case SpvOpConvertFToS: return "OpConvertFToS";
+    case SpvOpConvertSToF: return "OpConvertSToF";
+    case SpvOpConvertUToF: return "OpConvertUToF";
+    case SpvOpUConvert: return "OpUConvert";
+    case SpvOpSConvert: return "OpSConvert";
+    case SpvOpFConvert: return "OpFConvert";
+    case SpvOpQuantizeToF16: return "OpQuantizeToF16";
+    case SpvOpConvertPtrToU: return "OpConvertPtrToU";
+    case SpvOpSatConvertSToU: return "OpSatConvertSToU";
+    case SpvOpSatConvertUToS: return "OpSatConvertUToS";
+    case SpvOpConvertUToPtr: return "OpConvertUToPtr";
+    case SpvOpPtrCastToGeneric: return "OpPtrCastToGeneric";
+    case SpvOpGenericCastToPtr: return "OpGenericCastToPtr";
+    case SpvOpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit";
+    case SpvOpBitcast: return "OpBitcast";
+    case SpvOpSNegate: return "OpSNegate";
+    case SpvOpFNegate: return "OpFNegate";
+    case SpvOpIAdd: return "OpIAdd";
+    case SpvOpFAdd: return "OpFAdd";
+    case SpvOpISub: return "OpISub";
+    case SpvOpFSub: return "OpFSub";
+    case SpvOpIMul: return "OpIMul";
+    case SpvOpFMul: return "OpFMul";
+    case SpvOpUDiv: return "OpUDiv";
+    case SpvOpSDiv: return "OpSDiv";
+    case SpvOpFDiv: return "OpFDiv";
+    case SpvOpUMod: return "OpUMod";
+    case SpvOpSRem: return "OpSRem";
+    case SpvOpSMod: return "OpSMod";
+    case SpvOpFRem: return "OpFRem";
+    case SpvOpFMod: return "OpFMod";
+    case SpvOpVectorTimesScalar: return "OpVectorTimesScalar";
+    case SpvOpMatrixTimesScalar: return "OpMatrixTimesScalar";
+    case SpvOpVectorTimesMatrix: return "OpVectorTimesMatrix";
+    case SpvOpMatrixTimesVector: return "OpMatrixTimesVector";
+    case SpvOpMatrixTimesMatrix: return "OpMatrixTimesMatrix";
+    case SpvOpOuterProduct: return "OpOuterProduct";
+    case SpvOpDot: return "OpDot";
+    case SpvOpIAddCarry: return "OpIAddCarry";
+    case SpvOpISubBorrow: return "OpISubBorrow";
+    case SpvOpUMulExtended: return "OpUMulExtended";
+    case SpvOpSMulExtended: return "OpSMulExtended";
+    case SpvOpAny: return "OpAny";
+    case SpvOpAll: return "OpAll";
+    case SpvOpIsNan: return "OpIsNan";
+    case SpvOpIsInf: return "OpIsInf";
+    case SpvOpIsFinite: return "OpIsFinite";
+    case SpvOpIsNormal: return "OpIsNormal";
+    case SpvOpSignBitSet: return "OpSignBitSet";
+    case SpvOpLessOrGreater: return "OpLessOrGreater";
+    case SpvOpOrdered: return "OpOrdered";
+    case SpvOpUnordered: return "OpUnordered";
+    case SpvOpLogicalEqual: return "OpLogicalEqual";
+    case SpvOpLogicalNotEqual: return "OpLogicalNotEqual";
+    case SpvOpLogicalOr: return "OpLogicalOr";
+    case SpvOpLogicalAnd: return "OpLogicalAnd";
+    case SpvOpLogicalNot: return "OpLogicalNot";
+    case SpvOpSelect: return "OpSelect";
+    case SpvOpIEqual: return "OpIEqual";
+    case SpvOpINotEqual: return "OpINotEqual";
+    case SpvOpUGreaterThan: return "OpUGreaterThan";
+    case SpvOpSGreaterThan: return "OpSGreaterThan";
+    case SpvOpUGreaterThanEqual: return "OpUGreaterThanEqual";
+    case SpvOpSGreaterThanEqual: return "OpSGreaterThanEqual";
+    case SpvOpULessThan: return "OpULessThan";
+    case SpvOpSLessThan: return "OpSLessThan";
+    case SpvOpULessThanEqual: return "OpULessThanEqual";
+    case SpvOpSLessThanEqual: return "OpSLessThanEqual";
+    case SpvOpFOrdEqual: return "OpFOrdEqual";
+    case SpvOpFUnordEqual: return "OpFUnordEqual";
+    case SpvOpFOrdNotEqual: return "OpFOrdNotEqual";
+    case SpvOpFUnordNotEqual: return "OpFUnordNotEqual";
+    case SpvOpFOrdLessThan: return "OpFOrdLessThan";
+    case SpvOpFUnordLessThan: return "OpFUnordLessThan";
+    case SpvOpFOrdGreaterThan: return "OpFOrdGreaterThan";
+    case SpvOpFUnordGreaterThan: return "OpFUnordGreaterThan";
+    case SpvOpFOrdLessThanEqual: return "OpFOrdLessThanEqual";
+    case SpvOpFUnordLessThanEqual: return "OpFUnordLessThanEqual";
+    case SpvOpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual";
+    case SpvOpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual";
+    case SpvOpShiftRightLogical: return "OpShiftRightLogical";
+    case SpvOpShiftRightArithmetic: return "OpShiftRightArithmetic";
+    case SpvOpShiftLeftLogical: return "OpShiftLeftLogical";
+    case SpvOpBitwiseOr: return "OpBitwiseOr";
+    case SpvOpBitwiseXor: return "OpBitwiseXor";
+    case SpvOpBitwiseAnd: return "OpBitwiseAnd";
+    case SpvOpNot: return "OpNot";
+    case SpvOpBitFieldInsert: return "OpBitFieldInsert";
+    case SpvOpBitFieldSExtract: return "OpBitFieldSExtract";
+    case SpvOpBitFieldUExtract: return "OpBitFieldUExtract";
+    case SpvOpBitReverse: return "OpBitReverse";
+    case SpvOpBitCount: return "OpBitCount";
+    case SpvOpDPdx: return "OpDPdx";
+    case SpvOpDPdy: return "OpDPdy";
+    case SpvOpFwidth: return "OpFwidth";
+    case SpvOpDPdxFine: return "OpDPdxFine";
+    case SpvOpDPdyFine: return "OpDPdyFine";
+    case SpvOpFwidthFine: return "OpFwidthFine";
+    case SpvOpDPdxCoarse: return "OpDPdxCoarse";
+    case SpvOpDPdyCoarse: return "OpDPdyCoarse";
+    case SpvOpFwidthCoarse: return "OpFwidthCoarse";
+    case SpvOpEmitVertex: return "OpEmitVertex";
+    case SpvOpEndPrimitive: return "OpEndPrimitive";
+    case SpvOpEmitStreamVertex: return "OpEmitStreamVertex";
+    case SpvOpEndStreamPrimitive: return "OpEndStreamPrimitive";
+    case SpvOpControlBarrier: return "OpControlBarrier";
+    case SpvOpMemoryBarrier: return "OpMemoryBarrier";
+    case SpvOpAtomicLoad: return "OpAtomicLoad";
+    case SpvOpAtomicStore: return "OpAtomicStore";
+    case SpvOpAtomicExchange: return "OpAtomicExchange";
+    case SpvOpAtomicCompareExchange: return "OpAtomicCompareExchange";
+    case SpvOpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak";
+    case SpvOpAtomicIIncrement: return "OpAtomicIIncrement";
+    case SpvOpAtomicIDecrement: return "OpAtomicIDecrement";
+    case SpvOpAtomicIAdd: return "OpAtomicIAdd";
+    case SpvOpAtomicISub: return "OpAtomicISub";
+    case SpvOpAtomicSMin: return "OpAtomicSMin";
+    case SpvOpAtomicUMin: return "OpAtomicUMin";
+    case SpvOpAtomicSMax: return "OpAtomicSMax";
+    case SpvOpAtomicUMax: return "OpAtomicUMax";
+    case SpvOpAtomicAnd: return "OpAtomicAnd";
+    case SpvOpAtomicOr: return "OpAtomicOr";
+    case SpvOpAtomicXor: return "OpAtomicXor";
+    case SpvOpPhi: return "OpPhi";
+    case SpvOpLoopMerge: return "OpLoopMerge";
+    case SpvOpSelectionMerge: return "OpSelectionMerge";
+    case SpvOpLabel: return "OpLabel";
+    case SpvOpBranch: return "OpBranch";
+    case SpvOpBranchConditional: return "OpBranchConditional";
+    case SpvOpSwitch: return "OpSwitch";
+    case SpvOpKill: return "OpKill";
+    case SpvOpReturn: return "OpReturn";
+    case SpvOpReturnValue: return "OpReturnValue";
+    case SpvOpUnreachable: return "OpUnreachable";
+    case SpvOpLifetimeStart: return "OpLifetimeStart";
+    case SpvOpLifetimeStop: return "OpLifetimeStop";
+    case SpvOpGroupAsyncCopy: return "OpGroupAsyncCopy";
+    case SpvOpGroupWaitEvents: return "OpGroupWaitEvents";
+    case SpvOpGroupAll: return "OpGroupAll";
+    case SpvOpGroupAny: return "OpGroupAny";
+    case SpvOpGroupBroadcast: return "OpGroupBroadcast";
+    case SpvOpGroupIAdd: return "OpGroupIAdd";
+    case SpvOpGroupFAdd: return "OpGroupFAdd";
+    case SpvOpGroupFMin: return "OpGroupFMin";
+    case SpvOpGroupUMin: return "OpGroupUMin";
+    case SpvOpGroupSMin: return "OpGroupSMin";
+    case SpvOpGroupFMax: return "OpGroupFMax";
+    case SpvOpGroupUMax: return "OpGroupUMax";
+    case SpvOpGroupSMax: return "OpGroupSMax";
+    case SpvOpReadPipe: return "OpReadPipe";
+    case SpvOpWritePipe: return "OpWritePipe";
+    case SpvOpReservedReadPipe: return "OpReservedReadPipe";
+    case SpvOpReservedWritePipe: return "OpReservedWritePipe";
+    case SpvOpReserveReadPipePackets: return "OpReserveReadPipePackets";
+    case SpvOpReserveWritePipePackets: return "OpReserveWritePipePackets";
+    case SpvOpCommitReadPipe: return "OpCommitReadPipe";
+    case SpvOpCommitWritePipe: return "OpCommitWritePipe";
+    case SpvOpIsValidReserveId: return "OpIsValidReserveId";
+    case SpvOpGetNumPipePackets: return "OpGetNumPipePackets";
+    case SpvOpGetMaxPipePackets: return "OpGetMaxPipePackets";
+    case SpvOpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets";
+    case SpvOpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets";
+    case SpvOpGroupCommitReadPipe: return "OpGroupCommitReadPipe";
+    case SpvOpGroupCommitWritePipe: return "OpGroupCommitWritePipe";
+    case SpvOpEnqueueMarker: return "OpEnqueueMarker";
+    case SpvOpEnqueueKernel: return "OpEnqueueKernel";
+    case SpvOpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount";
+    case SpvOpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize";
+    case SpvOpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize";
+    case SpvOpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple";
+    case SpvOpRetainEvent: return "OpRetainEvent";
+    case SpvOpReleaseEvent: return "OpReleaseEvent";
+    case SpvOpCreateUserEvent: return "OpCreateUserEvent";
+    case SpvOpIsValidEvent: return "OpIsValidEvent";
+    case SpvOpSetUserEventStatus: return "OpSetUserEventStatus";
+    case SpvOpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo";
+    case SpvOpGetDefaultQueue: return "OpGetDefaultQueue";
+    case SpvOpBuildNDRange: return "OpBuildNDRange";
+    case SpvOpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod";
+    case SpvOpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod";
+    case SpvOpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod";
+    case SpvOpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod";
+    case SpvOpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod";
+    case SpvOpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod";
+    case SpvOpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod";
+    case SpvOpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod";
+    case SpvOpImageSparseFetch: return "OpImageSparseFetch";
+    case SpvOpImageSparseGather: return "OpImageSparseGather";
+    case SpvOpImageSparseDrefGather: return "OpImageSparseDrefGather";
+    case SpvOpImageSparseTexelsResident: return "OpImageSparseTexelsResident";
+    case SpvOpNoLine: return "OpNoLine";
+    case SpvOpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet";
+    case SpvOpAtomicFlagClear: return "OpAtomicFlagClear";
+    case SpvOpImageSparseRead: return "OpImageSparseRead";
+    case SpvOpSizeOf: return "OpSizeOf";
+    case SpvOpTypePipeStorage: return "OpTypePipeStorage";
+    case SpvOpConstantPipeStorage: return "OpConstantPipeStorage";
+    case SpvOpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage";
+    case SpvOpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount";
+    case SpvOpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups";
+    case SpvOpTypeNamedBarrier: return "OpTypeNamedBarrier";
+    case SpvOpNamedBarrierInitialize: return "OpNamedBarrierInitialize";
+    case SpvOpMemoryNamedBarrier: return "OpMemoryNamedBarrier";
+    case SpvOpModuleProcessed: return "OpModuleProcessed";
+    case SpvOpExecutionModeId: return "OpExecutionModeId";
+    case SpvOpDecorateId: return "OpDecorateId";
+    case SpvOpGroupNonUniformElect: return "OpGroupNonUniformElect";
+    case SpvOpGroupNonUniformAll: return "OpGroupNonUniformAll";
+    case SpvOpGroupNonUniformAny: return "OpGroupNonUniformAny";
+    case SpvOpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual";
+    case SpvOpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast";
+    case SpvOpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst";
+    case SpvOpGroupNonUniformBallot: return "OpGroupNonUniformBallot";
+    case SpvOpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot";
+    case SpvOpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract";
+    case SpvOpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount";
+    case SpvOpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB";
+    case SpvOpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB";
+    case SpvOpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle";
+    case SpvOpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor";
+    case SpvOpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp";
+    case SpvOpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown";
+    case SpvOpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd";
+    case SpvOpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd";
+    case SpvOpGroupNonUniformIMul: return "OpGroupNonUniformIMul";
+    case SpvOpGroupNonUniformFMul: return "OpGroupNonUniformFMul";
+    case SpvOpGroupNonUniformSMin: return "OpGroupNonUniformSMin";
+    case SpvOpGroupNonUniformUMin: return "OpGroupNonUniformUMin";
+    case SpvOpGroupNonUniformFMin: return "OpGroupNonUniformFMin";
+    case SpvOpGroupNonUniformSMax: return "OpGroupNonUniformSMax";
+    case SpvOpGroupNonUniformUMax: return "OpGroupNonUniformUMax";
+    case SpvOpGroupNonUniformFMax: return "OpGroupNonUniformFMax";
+    case SpvOpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd";
+    case SpvOpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr";
+    case SpvOpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor";
+    case SpvOpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd";
+    case SpvOpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr";
+    case SpvOpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor";
+    case SpvOpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast";
+    case SpvOpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap";
+    case SpvOpCopyLogical: return "OpCopyLogical";
+    case SpvOpPtrEqual: return "OpPtrEqual";
+    case SpvOpPtrNotEqual: return "OpPtrNotEqual";
+    case SpvOpPtrDiff: return "OpPtrDiff";
+    case SpvOpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT";
+    case SpvOpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT";
+    case SpvOpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT";
+    case SpvOpTerminateInvocation: return "OpTerminateInvocation";
+    case SpvOpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR";
+    case SpvOpUntypedVariableKHR: return "OpUntypedVariableKHR";
+    case SpvOpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR";
+    case SpvOpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR";
+    case SpvOpSubgroupBallotKHR: return "OpSubgroupBallotKHR";
+    case SpvOpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR";
+    case SpvOpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR";
+    case SpvOpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR";
+    case SpvOpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR";
+    case SpvOpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR";
+    case SpvOpSubgroupAllKHR: return "OpSubgroupAllKHR";
+    case SpvOpSubgroupAnyKHR: return "OpSubgroupAnyKHR";
+    case SpvOpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR";
+    case SpvOpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
+    case SpvOpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR";
+    case SpvOpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR";
+    case SpvOpTraceRayKHR: return "OpTraceRayKHR";
+    case SpvOpExecuteCallableKHR: return "OpExecuteCallableKHR";
+    case SpvOpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
+    case SpvOpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
+    case SpvOpTerminateRayKHR: return "OpTerminateRayKHR";
+    case SpvOpSDot: return "OpSDot";
+    case SpvOpUDot: return "OpUDot";
+    case SpvOpSUDot: return "OpSUDot";
+    case SpvOpSDotAccSat: return "OpSDotAccSat";
+    case SpvOpUDotAccSat: return "OpUDotAccSat";
+    case SpvOpSUDotAccSat: return "OpSUDotAccSat";
+    case SpvOpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR";
+    case SpvOpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR";
+    case SpvOpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR";
+    case SpvOpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR";
+    case SpvOpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR";
+    case SpvOpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT";
+    case SpvOpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT";
+    case SpvOpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT";
+    case SpvOpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
+    case SpvOpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
+    case SpvOpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
+    case SpvOpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";
+    case SpvOpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR";
+    case SpvOpRayQueryProceedKHR: return "OpRayQueryProceedKHR";
+    case SpvOpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR";
+    case SpvOpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM";
+    case SpvOpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
+    case SpvOpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
+    case SpvOpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case SpvOpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
+    case SpvOpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
+    case SpvOpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
+    case SpvOpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case SpvOpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
+    case SpvOpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
+    case SpvOpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
+    case SpvOpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD";
+    case SpvOpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD";
+    case SpvOpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD";
+    case SpvOpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD";
+    case SpvOpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD";
+    case SpvOpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD";
+    case SpvOpFragmentFetchAMD: return "OpFragmentFetchAMD";
+    case SpvOpReadClockKHR: return "OpReadClockKHR";
+    case SpvOpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX";
+    case SpvOpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX";
+    case SpvOpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX";
+    case SpvOpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX";
+    case SpvOpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX";
+    case SpvOpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX";
+    case SpvOpConstantStringAMDX: return "OpConstantStringAMDX";
+    case SpvOpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX";
+    case SpvOpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR";
+    case SpvOpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR";
+    case SpvOpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV";
+    case SpvOpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
+    case SpvOpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV";
+    case SpvOpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV";
+    case SpvOpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV";
+    case SpvOpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV";
+    case SpvOpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV";
+    case SpvOpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV";
+    case SpvOpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV";
+    case SpvOpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
+    case SpvOpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV";
+    case SpvOpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV";
+    case SpvOpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV";
+    case SpvOpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV";
+    case SpvOpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV";
+    case SpvOpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV";
+    case SpvOpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV";
+    case SpvOpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV";
+    case SpvOpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV";
+    case SpvOpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV";
+    case SpvOpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV";
+    case SpvOpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV";
+    case SpvOpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV";
+    case SpvOpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV";
+    case SpvOpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV";
+    case SpvOpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV";
+    case SpvOpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV";
+    case SpvOpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV";
+    case SpvOpHitObjectIsHitNV: return "OpHitObjectIsHitNV";
+    case SpvOpHitObjectIsMissNV: return "OpHitObjectIsMissNV";
+    case SpvOpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV";
+    case SpvOpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV";
+    case SpvOpTypeHitObjectNV: return "OpTypeHitObjectNV";
+    case SpvOpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
+    case SpvOpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV";
+    case SpvOpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
+    case SpvOpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
+    case SpvOpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
+    case SpvOpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
+    case SpvOpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV";
+    case SpvOpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV";
+    case SpvOpReportIntersectionKHR: return "OpReportIntersectionKHR";
+    case SpvOpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
+    case SpvOpTerminateRayNV: return "OpTerminateRayNV";
+    case SpvOpTraceNV: return "OpTraceNV";
+    case SpvOpTraceMotionNV: return "OpTraceMotionNV";
+    case SpvOpTraceRayMotionNV: return "OpTraceRayMotionNV";
+    case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
+    case SpvOpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
+    case SpvOpExecuteCallableNV: return "OpExecuteCallableNV";
+    case SpvOpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV";
+    case SpvOpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV";
+    case SpvOpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV";
+    case SpvOpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV";
+    case SpvOpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV";
+    case SpvOpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT";
+    case SpvOpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT";
+    case SpvOpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV";
+    case SpvOpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV";
+    case SpvOpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV";
+    case SpvOpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV";
+    case SpvOpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV";
+    case SpvOpTypeTensorViewNV: return "OpTypeTensorViewNV";
+    case SpvOpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV";
+    case SpvOpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV";
+    case SpvOpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV";
+    case SpvOpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV";
+    case SpvOpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV";
+    case SpvOpCreateTensorViewNV: return "OpCreateTensorViewNV";
+    case SpvOpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV";
+    case SpvOpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV";
+    case SpvOpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation";
+    case SpvOpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT";
+    case SpvOpTensorViewSetClipNV: return "OpTensorViewSetClipNV";
+    case SpvOpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV";
+    case SpvOpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV";
+    case SpvOpConvertUToImageNV: return "OpConvertUToImageNV";
+    case SpvOpConvertUToSamplerNV: return "OpConvertUToSamplerNV";
+    case SpvOpConvertImageToUNV: return "OpConvertImageToUNV";
+    case SpvOpConvertSamplerToUNV: return "OpConvertSamplerToUNV";
+    case SpvOpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV";
+    case SpvOpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV";
+    case SpvOpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV";
+    case SpvOpRawAccessChainNV: return "OpRawAccessChainNV";
+    case SpvOpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL";
+    case SpvOpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL";
+    case SpvOpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL";
+    case SpvOpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL";
+    case SpvOpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL";
+    case SpvOpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL";
+    case SpvOpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL";
+    case SpvOpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL";
+    case SpvOpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL";
+    case SpvOpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL";
+    case SpvOpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL";
+    case SpvOpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL";
+    case SpvOpAbsISubINTEL: return "OpAbsISubINTEL";
+    case SpvOpAbsUSubINTEL: return "OpAbsUSubINTEL";
+    case SpvOpIAddSatINTEL: return "OpIAddSatINTEL";
+    case SpvOpUAddSatINTEL: return "OpUAddSatINTEL";
+    case SpvOpIAverageINTEL: return "OpIAverageINTEL";
+    case SpvOpUAverageINTEL: return "OpUAverageINTEL";
+    case SpvOpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL";
+    case SpvOpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL";
+    case SpvOpISubSatINTEL: return "OpISubSatINTEL";
+    case SpvOpUSubSatINTEL: return "OpUSubSatINTEL";
+    case SpvOpIMul32x16INTEL: return "OpIMul32x16INTEL";
+    case SpvOpUMul32x16INTEL: return "OpUMul32x16INTEL";
+    case SpvOpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL";
+    case SpvOpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL";
+    case SpvOpAsmTargetINTEL: return "OpAsmTargetINTEL";
+    case SpvOpAsmINTEL: return "OpAsmINTEL";
+    case SpvOpAsmCallINTEL: return "OpAsmCallINTEL";
+    case SpvOpAtomicFMinEXT: return "OpAtomicFMinEXT";
+    case SpvOpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
+    case SpvOpAssumeTrueKHR: return "OpAssumeTrueKHR";
+    case SpvOpExpectKHR: return "OpExpectKHR";
+    case SpvOpDecorateString: return "OpDecorateString";
+    case SpvOpMemberDecorateString: return "OpMemberDecorateString";
+    case SpvOpVmeImageINTEL: return "OpVmeImageINTEL";
+    case SpvOpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL";
+    case SpvOpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL";
+    case SpvOpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL";
+    case SpvOpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL";
+    case SpvOpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL";
+    case SpvOpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL";
+    case SpvOpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL";
+    case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL";
+    case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL";
+    case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL";
+    case SpvOpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL";
+    case SpvOpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL";
+    case SpvOpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL";
+    case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL";
+    case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL";
+    case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL";
+    case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL";
+    case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL";
+    case SpvOpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL";
+    case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL";
+    case SpvOpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL";
+    case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL";
+    case SpvOpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL";
+    case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL";
+    case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL";
+    case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL";
+    case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL";
+    case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL";
+    case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL";
+    case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL";
+    case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL";
+    case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL";
+    case SpvOpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL";
+    case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL";
+    case SpvOpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL";
+    case SpvOpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL";
+    case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL";
+    case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL";
+    case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL";
+    case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL";
+    case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL";
+    case SpvOpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL";
+    case SpvOpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL";
+    case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL";
+    case SpvOpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL";
+    case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL";
+    case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL";
+    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL";
+    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL";
+    case SpvOpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL";
+    case SpvOpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL";
+    case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL";
+    case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL";
+    case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL";
+    case SpvOpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL";
+    case SpvOpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL";
+    case SpvOpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL";
+    case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL";
+    case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL";
+    case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL";
+    case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL";
+    case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL";
+    case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL";
+    case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL";
+    case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL";
+    case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL";
+    case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL";
+    case SpvOpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL";
+    case SpvOpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL";
+    case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL";
+    case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL";
+    case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL";
+    case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL";
+    case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL";
+    case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL";
+    case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL";
+    case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL";
+    case SpvOpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL";
+    case SpvOpSaveMemoryINTEL: return "OpSaveMemoryINTEL";
+    case SpvOpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL";
+    case SpvOpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL";
+    case SpvOpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL";
+    case SpvOpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL";
+    case SpvOpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL";
+    case SpvOpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL";
+    case SpvOpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL";
+    case SpvOpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL";
+    case SpvOpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL";
+    case SpvOpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL";
+    case SpvOpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL";
+    case SpvOpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL";
+    case SpvOpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL";
+    case SpvOpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL";
+    case SpvOpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL";
+    case SpvOpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL";
+    case SpvOpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL";
+    case SpvOpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL";
+    case SpvOpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL";
+    case SpvOpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL";
+    case SpvOpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL";
+    case SpvOpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL";
+    case SpvOpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL";
+    case SpvOpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL";
+    case SpvOpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL";
+    case SpvOpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL";
+    case SpvOpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL";
+    case SpvOpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL";
+    case SpvOpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL";
+    case SpvOpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL";
+    case SpvOpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL";
+    case SpvOpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL";
+    case SpvOpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL";
+    case SpvOpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL";
+    case SpvOpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL";
+    case SpvOpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL";
+    case SpvOpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL";
+    case SpvOpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL";
+    case SpvOpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL";
+    case SpvOpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL";
+    case SpvOpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL";
+    case SpvOpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL";
+    case SpvOpLoopControlINTEL: return "OpLoopControlINTEL";
+    case SpvOpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL";
+    case SpvOpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL";
+    case SpvOpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL";
+    case SpvOpFixedSqrtINTEL: return "OpFixedSqrtINTEL";
+    case SpvOpFixedRecipINTEL: return "OpFixedRecipINTEL";
+    case SpvOpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL";
+    case SpvOpFixedSinINTEL: return "OpFixedSinINTEL";
+    case SpvOpFixedCosINTEL: return "OpFixedCosINTEL";
+    case SpvOpFixedSinCosINTEL: return "OpFixedSinCosINTEL";
+    case SpvOpFixedSinPiINTEL: return "OpFixedSinPiINTEL";
+    case SpvOpFixedCosPiINTEL: return "OpFixedCosPiINTEL";
+    case SpvOpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL";
+    case SpvOpFixedLogINTEL: return "OpFixedLogINTEL";
+    case SpvOpFixedExpINTEL: return "OpFixedExpINTEL";
+    case SpvOpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL";
+    case SpvOpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL";
+    case SpvOpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL";
+    case SpvOpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL";
+    case SpvOpFPGARegINTEL: return "OpFPGARegINTEL";
+    case SpvOpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR";
+    case SpvOpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR";
+    case SpvOpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR";
+    case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
+    case SpvOpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR";
+    case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
+    case SpvOpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR";
+    case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
+    case SpvOpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR";
+    case SpvOpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR";
+    case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
+    case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
+    case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR";
+    case SpvOpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR";
+    case SpvOpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR";
+    case SpvOpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR";
+    case SpvOpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR";
+    case SpvOpAtomicFAddEXT: return "OpAtomicFAddEXT";
+    case SpvOpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL";
+    case SpvOpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL";
+    case SpvOpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL";
+    case SpvOpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL";
+    case SpvOpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL";
+    case SpvOpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL";
+    case SpvOpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL";
+    case SpvOpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL";
+    case SpvOpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL";
+    case SpvOpArithmeticFenceEXT: return "OpArithmeticFenceEXT";
+    case SpvOpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL";
+    case SpvOpGroupIMulKHR: return "OpGroupIMulKHR";
+    case SpvOpGroupFMulKHR: return "OpGroupFMulKHR";
+    case SpvOpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR";
+    case SpvOpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR";
+    case SpvOpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR";
+    case SpvOpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR";
+    case SpvOpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR";
+    case SpvOpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR";
+    case SpvOpMaskedGatherINTEL: return "OpMaskedGatherINTEL";
+    case SpvOpMaskedScatterINTEL: return "OpMaskedScatterINTEL";
+    default: return "Unknown";
+    }
+}
+
 #endif /* SPV_ENABLE_UTILITY_CODE */
 
 #endif

+ 2339 - 5
3rdparty/spirv-cross/spirv.hpp

@@ -12,7 +12,7 @@
 // 
 // MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
 // STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
 // 
 // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
@@ -69,6 +69,11 @@ enum SourceLanguage {
     SourceLanguageHLSL = 5,
     SourceLanguageCPP_for_OpenCL = 6,
     SourceLanguageSYCL = 7,
+    SourceLanguageHERO_C = 8,
+    SourceLanguageNZSL = 9,
+    SourceLanguageWGSL = 10,
+    SourceLanguageSlang = 11,
+    SourceLanguageZig = 12,
     SourceLanguageMax = 0x7fffffff,
 };
 
@@ -156,6 +161,9 @@ enum ExecutionMode {
     ExecutionModeSubgroupsPerWorkgroupId = 37,
     ExecutionModeLocalSizeId = 38,
     ExecutionModeLocalSizeHintId = 39,
+    ExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
+    ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
+    ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
     ExecutionModeSubgroupUniformControlFlowKHR = 4421,
     ExecutionModePostDepthCoverage = 4446,
     ExecutionModeDenormPreserve = 4459,
@@ -165,17 +173,28 @@ enum ExecutionMode {
     ExecutionModeRoundingModeRTZ = 4463,
     ExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
     ExecutionModeStencilRefReplacingEXT = 5027,
+    ExecutionModeCoalescingAMDX = 5069,
+    ExecutionModeIsApiEntryAMDX = 5070,
+    ExecutionModeMaxNodeRecursionAMDX = 5071,
+    ExecutionModeStaticNumWorkgroupsAMDX = 5072,
+    ExecutionModeShaderIndexAMDX = 5073,
+    ExecutionModeMaxNumWorkgroupsAMDX = 5077,
     ExecutionModeStencilRefUnchangedFrontAMD = 5079,
     ExecutionModeStencilRefGreaterFrontAMD = 5080,
     ExecutionModeStencilRefLessFrontAMD = 5081,
     ExecutionModeStencilRefUnchangedBackAMD = 5082,
     ExecutionModeStencilRefGreaterBackAMD = 5083,
     ExecutionModeStencilRefLessBackAMD = 5084,
+    ExecutionModeQuadDerivativesKHR = 5088,
+    ExecutionModeRequireFullQuadsKHR = 5089,
+    ExecutionModeSharesInputWithAMDX = 5102,
     ExecutionModeOutputLinesEXT = 5269,
     ExecutionModeOutputLinesNV = 5269,
     ExecutionModeOutputPrimitivesEXT = 5270,
     ExecutionModeOutputPrimitivesNV = 5270,
+    ExecutionModeDerivativeGroupQuadsKHR = 5289,
     ExecutionModeDerivativeGroupQuadsNV = 5289,
+    ExecutionModeDerivativeGroupLinearKHR = 5290,
     ExecutionModeDerivativeGroupLinearNV = 5290,
     ExecutionModeOutputTrianglesEXT = 5298,
     ExecutionModeOutputTrianglesNV = 5298,
@@ -195,7 +214,14 @@ enum ExecutionMode {
     ExecutionModeNoGlobalOffsetINTEL = 5895,
     ExecutionModeNumSIMDWorkitemsINTEL = 5896,
     ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
+    ExecutionModeMaximallyReconvergesKHR = 6023,
+    ExecutionModeFPFastMathDefault = 6028,
+    ExecutionModeStreamingInterfaceINTEL = 6154,
+    ExecutionModeRegisterMapInterfaceINTEL = 6160,
     ExecutionModeNamedBarrierCountINTEL = 6417,
+    ExecutionModeMaximumRegistersINTEL = 6461,
+    ExecutionModeMaximumRegistersIdINTEL = 6462,
+    ExecutionModeNamedMaximumRegistersINTEL = 6463,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -213,6 +239,8 @@ enum StorageClass {
     StorageClassAtomicCounter = 10,
     StorageClassImage = 11,
     StorageClassStorageBuffer = 12,
+    StorageClassTileImageEXT = 4172,
+    StorageClassNodePayloadAMDX = 5068,
     StorageClassCallableDataKHR = 5328,
     StorageClassCallableDataNV = 5328,
     StorageClassIncomingCallableDataKHR = 5329,
@@ -227,6 +255,7 @@ enum StorageClass {
     StorageClassShaderRecordBufferNV = 5343,
     StorageClassPhysicalStorageBuffer = 5349,
     StorageClassPhysicalStorageBufferEXT = 5349,
+    StorageClassHitObjectAttributeNV = 5385,
     StorageClassTaskPayloadWorkgroupEXT = 5402,
     StorageClassCodeSectionINTEL = 5605,
     StorageClassDeviceOnlyINTEL = 5936,
@@ -242,6 +271,7 @@ enum Dim {
     DimRect = 4,
     DimBuffer = 5,
     DimSubpassData = 6,
+    DimTileImageDataEXT = 4173,
     DimMax = 0x7fffffff,
 };
 
@@ -348,6 +378,9 @@ enum ImageChannelDataType {
     ImageChannelDataTypeFloat = 14,
     ImageChannelDataTypeUnormInt24 = 15,
     ImageChannelDataTypeUnormInt101010_2 = 16,
+    ImageChannelDataTypeUnsignedIntRaw10EXT = 19,
+    ImageChannelDataTypeUnsignedIntRaw12EXT = 20,
+    ImageChannelDataTypeUnormInt2_101010EXT = 21,
     ImageChannelDataTypeMax = 0x7fffffff,
 };
 
@@ -405,8 +438,11 @@ enum FPFastMathModeShift {
     FPFastMathModeNSZShift = 2,
     FPFastMathModeAllowRecipShift = 3,
     FPFastMathModeFastShift = 4,
+    FPFastMathModeAllowContractShift = 16,
     FPFastMathModeAllowContractFastINTELShift = 16,
+    FPFastMathModeAllowReassocShift = 17,
     FPFastMathModeAllowReassocINTELShift = 17,
+    FPFastMathModeAllowTransformShift = 18,
     FPFastMathModeMax = 0x7fffffff,
 };
 
@@ -417,8 +453,11 @@ enum FPFastMathModeMask {
     FPFastMathModeNSZMask = 0x00000004,
     FPFastMathModeAllowRecipMask = 0x00000008,
     FPFastMathModeFastMask = 0x00000010,
+    FPFastMathModeAllowContractMask = 0x00010000,
     FPFastMathModeAllowContractFastINTELMask = 0x00010000,
+    FPFastMathModeAllowReassocMask = 0x00020000,
     FPFastMathModeAllowReassocINTELMask = 0x00020000,
+    FPFastMathModeAllowTransformMask = 0x00040000,
 };
 
 enum FPRoundingMode {
@@ -452,6 +491,7 @@ enum FunctionParameterAttribute {
     FunctionParameterAttributeNoCapture = 5,
     FunctionParameterAttributeNoWrite = 6,
     FunctionParameterAttributeNoReadWrite = 7,
+    FunctionParameterAttributeRuntimeAlignedINTEL = 5940,
     FunctionParameterAttributeMax = 0x7fffffff,
 };
 
@@ -509,6 +549,14 @@ enum Decoration {
     DecorationBlockMatchTextureQCOM = 4488,
     DecorationBlockMatchSamplerQCOM = 4499,
     DecorationExplicitInterpAMD = 4999,
+    DecorationNodeSharesPayloadLimitsWithAMDX = 5019,
+    DecorationNodeMaxPayloadsAMDX = 5020,
+    DecorationTrackFinishWritingAMDX = 5078,
+    DecorationPayloadNodeNameAMDX = 5091,
+    DecorationPayloadNodeBaseIndexAMDX = 5098,
+    DecorationPayloadNodeSparseArrayAMDX = 5099,
+    DecorationPayloadNodeArraySizeAMDX = 5100,
+    DecorationPayloadDispatchIndirectAMDX = 5105,
     DecorationOverrideCoverageNV = 5248,
     DecorationPassthroughNV = 5250,
     DecorationViewportRelativeNV = 5252,
@@ -525,6 +573,7 @@ enum Decoration {
     DecorationRestrictPointerEXT = 5355,
     DecorationAliasedPointer = 5356,
     DecorationAliasedPointerEXT = 5356,
+    DecorationHitObjectShaderRecordBufferNV = 5386,
     DecorationBindlessSamplerNV = 5398,
     DecorationBindlessImageNV = 5399,
     DecorationBoundSamplerNV = 5400,
@@ -557,20 +606,45 @@ enum Decoration {
     DecorationMergeINTEL = 5834,
     DecorationBankBitsINTEL = 5835,
     DecorationForcePow2DepthINTEL = 5836,
+    DecorationStridesizeINTEL = 5883,
+    DecorationWordsizeINTEL = 5884,
+    DecorationTrueDualPortINTEL = 5885,
     DecorationBurstCoalesceINTEL = 5899,
     DecorationCacheSizeINTEL = 5900,
     DecorationDontStaticallyCoalesceINTEL = 5901,
     DecorationPrefetchINTEL = 5902,
     DecorationStallEnableINTEL = 5905,
     DecorationFuseLoopsInFunctionINTEL = 5907,
+    DecorationMathOpDSPModeINTEL = 5909,
     DecorationAliasScopeINTEL = 5914,
     DecorationNoAliasINTEL = 5915,
+    DecorationInitiationIntervalINTEL = 5917,
+    DecorationMaxConcurrencyINTEL = 5918,
+    DecorationPipelineEnableINTEL = 5919,
     DecorationBufferLocationINTEL = 5921,
     DecorationIOPipeStorageINTEL = 5944,
     DecorationFunctionFloatingPointModeINTEL = 6080,
     DecorationSingleElementVectorINTEL = 6085,
     DecorationVectorComputeCallableFunctionINTEL = 6087,
     DecorationMediaBlockIOINTEL = 6140,
+    DecorationStallFreeINTEL = 6151,
+    DecorationFPMaxErrorDecorationINTEL = 6170,
+    DecorationLatencyControlLabelINTEL = 6172,
+    DecorationLatencyControlConstraintINTEL = 6173,
+    DecorationConduitKernelArgumentINTEL = 6175,
+    DecorationRegisterMapKernelArgumentINTEL = 6176,
+    DecorationMMHostInterfaceAddressWidthINTEL = 6177,
+    DecorationMMHostInterfaceDataWidthINTEL = 6178,
+    DecorationMMHostInterfaceLatencyINTEL = 6179,
+    DecorationMMHostInterfaceReadWriteModeINTEL = 6180,
+    DecorationMMHostInterfaceMaxBurstINTEL = 6181,
+    DecorationMMHostInterfaceWaitRequestINTEL = 6182,
+    DecorationStableKernelArgumentINTEL = 6183,
+    DecorationHostAccessINTEL = 6188,
+    DecorationInitModeINTEL = 6190,
+    DecorationImplementInRegisterMapINTEL = 6191,
+    DecorationCacheControlLoadINTEL = 6442,
+    DecorationCacheControlStoreINTEL = 6443,
     DecorationMax = 0x7fffffff,
 };
 
@@ -616,6 +690,11 @@ enum BuiltIn {
     BuiltInSubgroupLocalInvocationId = 41,
     BuiltInVertexIndex = 42,
     BuiltInInstanceIndex = 43,
+    BuiltInCoreIDARM = 4160,
+    BuiltInCoreCountARM = 4161,
+    BuiltInCoreMaxIDARM = 4162,
+    BuiltInWarpIDARM = 4163,
+    BuiltInWarpMaxIDARM = 4164,
     BuiltInSubgroupEqMask = 4416,
     BuiltInSubgroupEqMaskKHR = 4416,
     BuiltInSubgroupGeMask = 4417,
@@ -641,6 +720,8 @@ enum BuiltIn {
     BuiltInBaryCoordSmoothSampleAMD = 4997,
     BuiltInBaryCoordPullModelAMD = 4998,
     BuiltInFragStencilRefEXT = 5014,
+    BuiltInRemainingRecursionLevelsAMDX = 5021,
+    BuiltInShaderIndexAMDX = 5073,
     BuiltInViewportMaskNV = 5253,
     BuiltInSecondaryPositionNV = 5257,
     BuiltInSecondaryViewportMaskNV = 5258,
@@ -693,6 +774,9 @@ enum BuiltIn {
     BuiltInHitKindKHR = 5333,
     BuiltInHitKindNV = 5333,
     BuiltInCurrentRayTimeNV = 5334,
+    BuiltInHitTriangleVertexPositionsKHR = 5335,
+    BuiltInHitMicroTriangleVertexPositionsNV = 5337,
+    BuiltInHitMicroTriangleVertexBarycentricsNV = 5344,
     BuiltInIncomingRayFlagsKHR = 5351,
     BuiltInIncomingRayFlagsNV = 5351,
     BuiltInRayGeometryIndexKHR = 5352,
@@ -700,6 +784,8 @@ enum BuiltIn {
     BuiltInSMCountNV = 5375,
     BuiltInWarpIDNV = 5376,
     BuiltInSMIDNV = 5377,
+    BuiltInHitKindFrontFacingMicroTriangleNV = 5405,
+    BuiltInHitKindBackFacingMicroTriangleNV = 5406,
     BuiltInCullMaskKHR = 6021,
     BuiltInMax = 0x7fffffff,
 };
@@ -734,6 +820,8 @@ enum LoopControlShift {
     LoopControlMaxInterleavingINTELShift = 21,
     LoopControlSpeculatedIterationsINTELShift = 22,
     LoopControlNoFusionINTELShift = 23,
+    LoopControlLoopCountINTELShift = 24,
+    LoopControlMaxReinvocationDelayINTELShift = 25,
     LoopControlMax = 0x7fffffff,
 };
 
@@ -756,6 +844,8 @@ enum LoopControlMask {
     LoopControlMaxInterleavingINTELMask = 0x00200000,
     LoopControlSpeculatedIterationsINTELMask = 0x00400000,
     LoopControlNoFusionINTELMask = 0x00800000,
+    LoopControlLoopCountINTELMask = 0x01000000,
+    LoopControlMaxReinvocationDelayINTELMask = 0x02000000,
 };
 
 enum FunctionControlShift {
@@ -763,6 +853,7 @@ enum FunctionControlShift {
     FunctionControlDontInlineShift = 1,
     FunctionControlPureShift = 2,
     FunctionControlConstShift = 3,
+    FunctionControlOptNoneEXTShift = 16,
     FunctionControlOptNoneINTELShift = 16,
     FunctionControlMax = 0x7fffffff,
 };
@@ -773,6 +864,7 @@ enum FunctionControlMask {
     FunctionControlDontInlineMask = 0x00000002,
     FunctionControlPureMask = 0x00000004,
     FunctionControlConstMask = 0x00000008,
+    FunctionControlOptNoneEXTMask = 0x00010000,
     FunctionControlOptNoneINTELMask = 0x00010000,
 };
 
@@ -959,6 +1051,11 @@ enum Capability {
     CapabilityShaderLayer = 69,
     CapabilityShaderViewportIndex = 70,
     CapabilityUniformDecoration = 71,
+    CapabilityCoreBuiltinsARM = 4165,
+    CapabilityTileImageColorReadAccessEXT = 4166,
+    CapabilityTileImageDepthReadAccessEXT = 4167,
+    CapabilityTileImageStencilReadAccessEXT = 4168,
+    CapabilityCooperativeMatrixLayoutsARM = 4201,
     CapabilityFragmentShadingRateKHR = 4422,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
@@ -988,6 +1085,7 @@ enum Capability {
     CapabilityRoundingModeRTZ = 4468,
     CapabilityRayQueryProvisionalKHR = 4471,
     CapabilityRayQueryKHR = 4472,
+    CapabilityUntypedPointersKHR = 4473,
     CapabilityRayTraversalPrimitiveCullingKHR = 4478,
     CapabilityRayTracingKHR = 4479,
     CapabilityTextureSampleWeightedQCOM = 4484,
@@ -1001,6 +1099,8 @@ enum Capability {
     CapabilityImageReadWriteLodAMD = 5015,
     CapabilityInt64ImageEXT = 5016,
     CapabilityShaderClockKHR = 5055,
+    CapabilityShaderEnqueueAMDX = 5067,
+    CapabilityQuadControlKHR = 5087,
     CapabilitySampleMaskOverrideCoverageNV = 5249,
     CapabilityGeometryShaderPassthroughNV = 5251,
     CapabilityShaderViewportIndexLayerEXT = 5254,
@@ -1014,6 +1114,7 @@ enum Capability {
     CapabilityMeshShadingEXT = 5283,
     CapabilityFragmentBarycentricKHR = 5284,
     CapabilityFragmentBarycentricNV = 5284,
+    CapabilityComputeDerivativeGroupQuadsKHR = 5288,
     CapabilityComputeDerivativeGroupQuadsNV = 5288,
     CapabilityFragmentDensityEXT = 5291,
     CapabilityShadingRateNV = 5291,
@@ -1042,6 +1143,7 @@ enum Capability {
     CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
     CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
     CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
+    CapabilityRayTracingPositionFetchKHR = 5336,
     CapabilityRayTracingNV = 5340,
     CapabilityRayTracingMotionBlurNV = 5341,
     CapabilityVulkanMemoryModel = 5345,
@@ -1050,6 +1152,7 @@ enum Capability {
     CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
     CapabilityPhysicalStorageBufferAddresses = 5347,
     CapabilityPhysicalStorageBufferAddressesEXT = 5347,
+    CapabilityComputeDerivativeGroupLinearKHR = 5350,
     CapabilityComputeDerivativeGroupLinearNV = 5350,
     CapabilityRayTracingProvisionalKHR = 5353,
     CapabilityCooperativeMatrixNV = 5357,
@@ -1059,7 +1162,20 @@ enum Capability {
     CapabilityFragmentShaderPixelInterlockEXT = 5378,
     CapabilityDemoteToHelperInvocation = 5379,
     CapabilityDemoteToHelperInvocationEXT = 5379,
+    CapabilityDisplacementMicromapNV = 5380,
+    CapabilityRayTracingOpacityMicromapEXT = 5381,
+    CapabilityShaderInvocationReorderNV = 5383,
     CapabilityBindlessTextureNV = 5390,
+    CapabilityRayQueryPositionFetchKHR = 5391,
+    CapabilityAtomicFloat16VectorNV = 5404,
+    CapabilityRayTracingDisplacementMicromapNV = 5409,
+    CapabilityRawAccessChainsNV = 5414,
+    CapabilityCooperativeMatrixReductionsNV = 5430,
+    CapabilityCooperativeMatrixConversionsNV = 5431,
+    CapabilityCooperativeMatrixPerElementOperationsNV = 5432,
+    CapabilityCooperativeMatrixTensorAddressingNV = 5433,
+    CapabilityCooperativeMatrixBlockLoadsNV = 5434,
+    CapabilityTensorAddressingNV = 5439,
     CapabilitySubgroupShuffleINTEL = 5568,
     CapabilitySubgroupBufferBlockIOINTEL = 5569,
     CapabilitySubgroupImageBlockIOINTEL = 5570,
@@ -1092,10 +1208,13 @@ enum Capability {
     CapabilityFPGAMemoryAccessesINTEL = 5898,
     CapabilityFPGAClusterAttributesINTEL = 5904,
     CapabilityLoopFuseINTEL = 5906,
+    CapabilityFPGADSPControlINTEL = 5908,
     CapabilityMemoryAccessAliasingINTEL = 5910,
+    CapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
     CapabilityFPGABufferLocationINTEL = 5920,
     CapabilityArbitraryPrecisionFixedPointINTEL = 5922,
     CapabilityUSMStorageClassesINTEL = 5935,
+    CapabilityRuntimeAlignedAttributeINTEL = 5939,
     CapabilityIOPipesINTEL = 5943,
     CapabilityBlockingPipesINTEL = 5945,
     CapabilityFPGARegINTEL = 5948,
@@ -1108,16 +1227,33 @@ enum Capability {
     CapabilityDotProduct = 6019,
     CapabilityDotProductKHR = 6019,
     CapabilityRayCullMaskKHR = 6020,
+    CapabilityCooperativeMatrixKHR = 6022,
+    CapabilityReplicatedCompositesEXT = 6024,
     CapabilityBitInstructions = 6025,
     CapabilityGroupNonUniformRotateKHR = 6026,
+    CapabilityFloatControls2 = 6029,
     CapabilityAtomicFloat32AddEXT = 6033,
     CapabilityAtomicFloat64AddEXT = 6034,
-    CapabilityLongConstantCompositeINTEL = 6089,
+    CapabilityLongCompositesINTEL = 6089,
+    CapabilityOptNoneEXT = 6094,
     CapabilityOptNoneINTEL = 6094,
     CapabilityAtomicFloat16AddEXT = 6095,
     CapabilityDebugInfoModuleINTEL = 6114,
+    CapabilityBFloat16ConversionINTEL = 6115,
     CapabilitySplitBarrierINTEL = 6141,
+    CapabilityArithmeticFenceEXT = 6144,
+    CapabilityFPGAClusterAttributesV2INTEL = 6150,
+    CapabilityFPGAKernelAttributesv2INTEL = 6161,
+    CapabilityFPMaxErrorINTEL = 6169,
+    CapabilityFPGALatencyControlINTEL = 6171,
+    CapabilityFPGAArgumentInterfacesINTEL = 6174,
+    CapabilityGlobalVariableHostAccessINTEL = 6187,
+    CapabilityGlobalVariableFPGADecorationsINTEL = 6189,
+    CapabilitySubgroupBufferPrefetchINTEL = 6220,
     CapabilityGroupUniformArithmeticKHR = 6400,
+    CapabilityMaskedGatherScatterINTEL = 6427,
+    CapabilityCacheControlsINTEL = 6441,
+    CapabilityRegisterLimitsINTEL = 6460,
     CapabilityMax = 0x7fffffff,
 };
 
@@ -1132,6 +1268,7 @@ enum RayFlagsShift {
     RayFlagsCullNoOpaqueKHRShift = 7,
     RayFlagsSkipTrianglesKHRShift = 8,
     RayFlagsSkipAABBsKHRShift = 9,
+    RayFlagsForceOpacityMicromap2StateEXTShift = 10,
     RayFlagsMax = 0x7fffffff,
 };
 
@@ -1147,6 +1284,7 @@ enum RayFlagsMask {
     RayFlagsCullNoOpaqueKHRMask = 0x00000080,
     RayFlagsSkipTrianglesKHRMask = 0x00000100,
     RayFlagsSkipAABBsKHRMask = 0x00000200,
+    RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
 };
 
 enum RayQueryIntersection {
@@ -1222,6 +1360,126 @@ enum PackedVectorFormat {
     PackedVectorFormatMax = 0x7fffffff,
 };
 
+enum CooperativeMatrixOperandsShift {
+    CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0,
+    CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1,
+    CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2,
+    CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3,
+    CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4,
+    CooperativeMatrixOperandsMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixOperandsMask {
+    CooperativeMatrixOperandsMaskNone = 0,
+    CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001,
+    CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002,
+    CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004,
+    CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008,
+    CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010,
+};
+
+enum CooperativeMatrixLayout {
+    CooperativeMatrixLayoutRowMajorKHR = 0,
+    CooperativeMatrixLayoutColumnMajorKHR = 1,
+    CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202,
+    CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203,
+    CooperativeMatrixLayoutMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixUse {
+    CooperativeMatrixUseMatrixAKHR = 0,
+    CooperativeMatrixUseMatrixBKHR = 1,
+    CooperativeMatrixUseMatrixAccumulatorKHR = 2,
+    CooperativeMatrixUseMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixReduceShift {
+    CooperativeMatrixReduceRowShift = 0,
+    CooperativeMatrixReduceColumnShift = 1,
+    CooperativeMatrixReduce2x2Shift = 2,
+    CooperativeMatrixReduceMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixReduceMask {
+    CooperativeMatrixReduceMaskNone = 0,
+    CooperativeMatrixReduceRowMask = 0x00000001,
+    CooperativeMatrixReduceColumnMask = 0x00000002,
+    CooperativeMatrixReduce2x2Mask = 0x00000004,
+};
+
+enum TensorClampMode {
+    TensorClampModeUndefined = 0,
+    TensorClampModeConstant = 1,
+    TensorClampModeClampToEdge = 2,
+    TensorClampModeRepeat = 3,
+    TensorClampModeRepeatMirrored = 4,
+    TensorClampModeMax = 0x7fffffff,
+};
+
+enum TensorAddressingOperandsShift {
+    TensorAddressingOperandsTensorViewShift = 0,
+    TensorAddressingOperandsDecodeFuncShift = 1,
+    TensorAddressingOperandsMax = 0x7fffffff,
+};
+
+enum TensorAddressingOperandsMask {
+    TensorAddressingOperandsMaskNone = 0,
+    TensorAddressingOperandsTensorViewMask = 0x00000001,
+    TensorAddressingOperandsDecodeFuncMask = 0x00000002,
+};
+
+enum InitializationModeQualifier {
+    InitializationModeQualifierInitOnDeviceReprogramINTEL = 0,
+    InitializationModeQualifierInitOnDeviceResetINTEL = 1,
+    InitializationModeQualifierMax = 0x7fffffff,
+};
+
+enum HostAccessQualifier {
+    HostAccessQualifierNoneINTEL = 0,
+    HostAccessQualifierReadINTEL = 1,
+    HostAccessQualifierWriteINTEL = 2,
+    HostAccessQualifierReadWriteINTEL = 3,
+    HostAccessQualifierMax = 0x7fffffff,
+};
+
+enum LoadCacheControl {
+    LoadCacheControlUncachedINTEL = 0,
+    LoadCacheControlCachedINTEL = 1,
+    LoadCacheControlStreamingINTEL = 2,
+    LoadCacheControlInvalidateAfterReadINTEL = 3,
+    LoadCacheControlConstCachedINTEL = 4,
+    LoadCacheControlMax = 0x7fffffff,
+};
+
+enum StoreCacheControl {
+    StoreCacheControlUncachedINTEL = 0,
+    StoreCacheControlWriteThroughINTEL = 1,
+    StoreCacheControlWriteBackINTEL = 2,
+    StoreCacheControlStreamingINTEL = 3,
+    StoreCacheControlMax = 0x7fffffff,
+};
+
+enum NamedMaximumNumberOfRegisters {
+    NamedMaximumNumberOfRegistersAutoINTEL = 0,
+    NamedMaximumNumberOfRegistersMax = 0x7fffffff,
+};
+
+enum RawAccessChainOperandsShift {
+    RawAccessChainOperandsRobustnessPerComponentNVShift = 0,
+    RawAccessChainOperandsRobustnessPerElementNVShift = 1,
+    RawAccessChainOperandsMax = 0x7fffffff,
+};
+
+enum RawAccessChainOperandsMask {
+    RawAccessChainOperandsMaskNone = 0,
+    RawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001,
+    RawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002,
+};
+
+enum FPEncoding {
+    FPEncodingMax = 0x7fffffff,
+};
+
 enum Op {
     OpNop = 0,
     OpUndef = 1,
@@ -1567,14 +1825,26 @@ enum Op {
     OpPtrEqual = 401,
     OpPtrNotEqual = 402,
     OpPtrDiff = 403,
+    OpColorAttachmentReadEXT = 4160,
+    OpDepthAttachmentReadEXT = 4161,
+    OpStencilAttachmentReadEXT = 4162,
     OpTerminateInvocation = 4416,
+    OpTypeUntypedPointerKHR = 4417,
+    OpUntypedVariableKHR = 4418,
+    OpUntypedAccessChainKHR = 4419,
+    OpUntypedInBoundsAccessChainKHR = 4420,
     OpSubgroupBallotKHR = 4421,
     OpSubgroupFirstInvocationKHR = 4422,
+    OpUntypedPtrAccessChainKHR = 4423,
+    OpUntypedInBoundsPtrAccessChainKHR = 4424,
+    OpUntypedArrayLengthKHR = 4425,
+    OpUntypedPrefetchKHR = 4426,
     OpSubgroupAllKHR = 4428,
     OpSubgroupAnyKHR = 4429,
     OpSubgroupAllEqualKHR = 4430,
     OpGroupNonUniformRotateKHR = 4431,
     OpSubgroupReadInvocationKHR = 4432,
+    OpExtInstWithForwardRefsKHR = 4433,
     OpTraceRayKHR = 4445,
     OpExecuteCallableKHR = 4446,
     OpConvertUToAccelerationStructureKHR = 4447,
@@ -1592,6 +1862,14 @@ enum Op {
     OpUDotAccSatKHR = 4454,
     OpSUDotAccSat = 4455,
     OpSUDotAccSatKHR = 4455,
+    OpTypeCooperativeMatrixKHR = 4456,
+    OpCooperativeMatrixLoadKHR = 4457,
+    OpCooperativeMatrixStoreKHR = 4458,
+    OpCooperativeMatrixMulAddKHR = 4459,
+    OpCooperativeMatrixLengthKHR = 4460,
+    OpConstantCompositeReplicateEXT = 4461,
+    OpSpecConstantCompositeReplicateEXT = 4462,
+    OpCompositeConstructReplicateEXT = 4463,
     OpTypeRayQueryKHR = 4472,
     OpRayQueryInitializeKHR = 4473,
     OpRayQueryTerminateKHR = 4474,
@@ -1618,11 +1896,57 @@ enum Op {
     OpFragmentMaskFetchAMD = 5011,
     OpFragmentFetchAMD = 5012,
     OpReadClockKHR = 5056,
+    OpAllocateNodePayloadsAMDX = 5074,
+    OpEnqueueNodePayloadsAMDX = 5075,
+    OpTypeNodePayloadArrayAMDX = 5076,
+    OpFinishWritingNodePayloadAMDX = 5078,
+    OpNodePayloadArrayLengthAMDX = 5090,
+    OpIsNodePayloadValidAMDX = 5101,
+    OpConstantStringAMDX = 5103,
+    OpSpecConstantStringAMDX = 5104,
+    OpGroupNonUniformQuadAllKHR = 5110,
+    OpGroupNonUniformQuadAnyKHR = 5111,
+    OpHitObjectRecordHitMotionNV = 5249,
+    OpHitObjectRecordHitWithIndexMotionNV = 5250,
+    OpHitObjectRecordMissMotionNV = 5251,
+    OpHitObjectGetWorldToObjectNV = 5252,
+    OpHitObjectGetObjectToWorldNV = 5253,
+    OpHitObjectGetObjectRayDirectionNV = 5254,
+    OpHitObjectGetObjectRayOriginNV = 5255,
+    OpHitObjectTraceRayMotionNV = 5256,
+    OpHitObjectGetShaderRecordBufferHandleNV = 5257,
+    OpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
+    OpHitObjectRecordEmptyNV = 5259,
+    OpHitObjectTraceRayNV = 5260,
+    OpHitObjectRecordHitNV = 5261,
+    OpHitObjectRecordHitWithIndexNV = 5262,
+    OpHitObjectRecordMissNV = 5263,
+    OpHitObjectExecuteShaderNV = 5264,
+    OpHitObjectGetCurrentTimeNV = 5265,
+    OpHitObjectGetAttributesNV = 5266,
+    OpHitObjectGetHitKindNV = 5267,
+    OpHitObjectGetPrimitiveIndexNV = 5268,
+    OpHitObjectGetGeometryIndexNV = 5269,
+    OpHitObjectGetInstanceIdNV = 5270,
+    OpHitObjectGetInstanceCustomIndexNV = 5271,
+    OpHitObjectGetWorldRayDirectionNV = 5272,
+    OpHitObjectGetWorldRayOriginNV = 5273,
+    OpHitObjectGetRayTMaxNV = 5274,
+    OpHitObjectGetRayTMinNV = 5275,
+    OpHitObjectIsEmptyNV = 5276,
+    OpHitObjectIsHitNV = 5277,
+    OpHitObjectIsMissNV = 5278,
+    OpReorderThreadWithHitObjectNV = 5279,
+    OpReorderThreadWithHintNV = 5280,
+    OpTypeHitObjectNV = 5281,
     OpImageSampleFootprintNV = 5283,
+    OpCooperativeMatrixConvertNV = 5293,
     OpEmitMeshTasksEXT = 5294,
     OpSetMeshOutputsEXT = 5295,
     OpGroupNonUniformPartitionNV = 5296,
     OpWritePackedPrimitiveIndices4x8NV = 5299,
+    OpFetchMicroTriangleVertexPositionNV = 5300,
+    OpFetchMicroTriangleVertexBarycentricNV = 5301,
     OpReportIntersectionKHR = 5334,
     OpReportIntersectionNV = 5334,
     OpIgnoreIntersectionNV = 5335,
@@ -1630,6 +1954,7 @@ enum Op {
     OpTraceNV = 5337,
     OpTraceMotionNV = 5338,
     OpTraceRayMotionNV = 5339,
+    OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
     OpTypeAccelerationStructureKHR = 5341,
     OpTypeAccelerationStructureNV = 5341,
     OpExecuteCallableNV = 5344,
@@ -1640,9 +1965,26 @@ enum Op {
     OpCooperativeMatrixLengthNV = 5362,
     OpBeginInvocationInterlockEXT = 5364,
     OpEndInvocationInterlockEXT = 5365,
+    OpCooperativeMatrixReduceNV = 5366,
+    OpCooperativeMatrixLoadTensorNV = 5367,
+    OpCooperativeMatrixStoreTensorNV = 5368,
+    OpCooperativeMatrixPerElementOpNV = 5369,
+    OpTypeTensorLayoutNV = 5370,
+    OpTypeTensorViewNV = 5371,
+    OpCreateTensorLayoutNV = 5372,
+    OpTensorLayoutSetDimensionNV = 5373,
+    OpTensorLayoutSetStrideNV = 5374,
+    OpTensorLayoutSliceNV = 5375,
+    OpTensorLayoutSetClampValueNV = 5376,
+    OpCreateTensorViewNV = 5377,
+    OpTensorViewSetDimensionNV = 5378,
+    OpTensorViewSetStrideNV = 5379,
     OpDemoteToHelperInvocation = 5380,
     OpDemoteToHelperInvocationEXT = 5380,
     OpIsHelperInvocationEXT = 5381,
+    OpTensorViewSetClipNV = 5382,
+    OpTensorLayoutSetBlockSizeNV = 5384,
+    OpCooperativeMatrixTransposeNV = 5390,
     OpConvertUToImageNV = 5391,
     OpConvertUToSamplerNV = 5392,
     OpConvertImageToUNV = 5393,
@@ -1650,6 +1992,7 @@ enum Op {
     OpConvertUToSampledImageNV = 5395,
     OpConvertSampledImageToUNV = 5396,
     OpSamplerImageAddressingModeNV = 5397,
+    OpRawAccessChainNV = 5398,
     OpSubgroupShuffleINTEL = 5571,
     OpSubgroupShuffleDownINTEL = 5572,
     OpSubgroupShuffleUpINTEL = 5573,
@@ -1891,8 +2234,13 @@ enum Op {
     OpTypeStructContinuedINTEL = 6090,
     OpConstantCompositeContinuedINTEL = 6091,
     OpSpecConstantCompositeContinuedINTEL = 6092,
+    OpCompositeConstructContinuedINTEL = 6096,
+    OpConvertFToBF16INTEL = 6116,
+    OpConvertBF16ToFINTEL = 6117,
     OpControlBarrierArriveINTEL = 6142,
     OpControlBarrierWaitINTEL = 6143,
+    OpArithmeticFenceEXT = 6145,
+    OpSubgroupBlockPrefetchINTEL = 6221,
     OpGroupIMulKHR = 6401,
     OpGroupFMulKHR = 6402,
     OpGroupBitwiseAndKHR = 6403,
@@ -1901,6 +2249,8 @@ enum Op {
     OpGroupLogicalAndKHR = 6406,
     OpGroupLogicalOrKHR = 6407,
     OpGroupLogicalXorKHR = 6408,
+    OpMaskedGatherINTEL = 6428,
+    OpMaskedScatterINTEL = 6429,
     OpMax = 0x7fffffff,
 };
 
@@ -2256,14 +2606,26 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
     case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
     case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
+    case OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case OpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
     case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
+    case OpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break;
+    case OpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break;
     case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break;
     case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
     case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
     case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
@@ -2275,6 +2637,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpSDotAccSat: *hasResult = true; *hasResultType = true; break;
     case OpUDotAccSat: *hasResult = true; *hasResultType = true; break;
     case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
+    case OpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break;
+    case OpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break;
+    case OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case OpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break;
     case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
@@ -2301,18 +2671,65 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
     case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
     case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
+    case OpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break;
+    case OpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break;
+    case OpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case OpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case OpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break;
+    case OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break;
+    case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
+    case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
     case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break;
     case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
     case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
     case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
     case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
-    case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break;
+    case OpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break;
+    case OpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break;
     case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
     case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
     case OpTraceNV: *hasResult = false; *hasResultType = false; break;
     case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
     case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
+    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
+    case OpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break;
     case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
     case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
     case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
@@ -2321,8 +2738,25 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
     case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
     case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case OpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break;
+    case OpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break;
+    case OpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break;
+    case OpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break;
+    case OpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break;
+    case OpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break;
     case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
     case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+    case OpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
@@ -2330,6 +2764,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
     case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
+    case OpRawAccessChainNV: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2569,8 +3004,13 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
     case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
     case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break;
+    case OpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break;
     case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
     case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break;
     case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
@@ -2579,22 +3019,1916 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
+    case OpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break;
+    }
+}
+inline const char* SourceLanguageToString(SourceLanguage value) {
+    switch (value) {
+    case SourceLanguageUnknown: return "Unknown";
+    case SourceLanguageESSL: return "ESSL";
+    case SourceLanguageGLSL: return "GLSL";
+    case SourceLanguageOpenCL_C: return "OpenCL_C";
+    case SourceLanguageOpenCL_CPP: return "OpenCL_CPP";
+    case SourceLanguageHLSL: return "HLSL";
+    case SourceLanguageCPP_for_OpenCL: return "CPP_for_OpenCL";
+    case SourceLanguageSYCL: return "SYCL";
+    case SourceLanguageHERO_C: return "HERO_C";
+    case SourceLanguageNZSL: return "NZSL";
+    case SourceLanguageWGSL: return "WGSL";
+    case SourceLanguageSlang: return "Slang";
+    case SourceLanguageZig: return "Zig";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ExecutionModelToString(ExecutionModel value) {
+    switch (value) {
+    case ExecutionModelVertex: return "Vertex";
+    case ExecutionModelTessellationControl: return "TessellationControl";
+    case ExecutionModelTessellationEvaluation: return "TessellationEvaluation";
+    case ExecutionModelGeometry: return "Geometry";
+    case ExecutionModelFragment: return "Fragment";
+    case ExecutionModelGLCompute: return "GLCompute";
+    case ExecutionModelKernel: return "Kernel";
+    case ExecutionModelTaskNV: return "TaskNV";
+    case ExecutionModelMeshNV: return "MeshNV";
+    case ExecutionModelRayGenerationKHR: return "RayGenerationKHR";
+    case ExecutionModelIntersectionKHR: return "IntersectionKHR";
+    case ExecutionModelAnyHitKHR: return "AnyHitKHR";
+    case ExecutionModelClosestHitKHR: return "ClosestHitKHR";
+    case ExecutionModelMissKHR: return "MissKHR";
+    case ExecutionModelCallableKHR: return "CallableKHR";
+    case ExecutionModelTaskEXT: return "TaskEXT";
+    case ExecutionModelMeshEXT: return "MeshEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* AddressingModelToString(AddressingModel value) {
+    switch (value) {
+    case AddressingModelLogical: return "Logical";
+    case AddressingModelPhysical32: return "Physical32";
+    case AddressingModelPhysical64: return "Physical64";
+    case AddressingModelPhysicalStorageBuffer64: return "PhysicalStorageBuffer64";
+    default: return "Unknown";
+    }
+}
+
+inline const char* MemoryModelToString(MemoryModel value) {
+    switch (value) {
+    case MemoryModelSimple: return "Simple";
+    case MemoryModelGLSL450: return "GLSL450";
+    case MemoryModelOpenCL: return "OpenCL";
+    case MemoryModelVulkan: return "Vulkan";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ExecutionModeToString(ExecutionMode value) {
+    switch (value) {
+    case ExecutionModeInvocations: return "Invocations";
+    case ExecutionModeSpacingEqual: return "SpacingEqual";
+    case ExecutionModeSpacingFractionalEven: return "SpacingFractionalEven";
+    case ExecutionModeSpacingFractionalOdd: return "SpacingFractionalOdd";
+    case ExecutionModeVertexOrderCw: return "VertexOrderCw";
+    case ExecutionModeVertexOrderCcw: return "VertexOrderCcw";
+    case ExecutionModePixelCenterInteger: return "PixelCenterInteger";
+    case ExecutionModeOriginUpperLeft: return "OriginUpperLeft";
+    case ExecutionModeOriginLowerLeft: return "OriginLowerLeft";
+    case ExecutionModeEarlyFragmentTests: return "EarlyFragmentTests";
+    case ExecutionModePointMode: return "PointMode";
+    case ExecutionModeXfb: return "Xfb";
+    case ExecutionModeDepthReplacing: return "DepthReplacing";
+    case ExecutionModeDepthGreater: return "DepthGreater";
+    case ExecutionModeDepthLess: return "DepthLess";
+    case ExecutionModeDepthUnchanged: return "DepthUnchanged";
+    case ExecutionModeLocalSize: return "LocalSize";
+    case ExecutionModeLocalSizeHint: return "LocalSizeHint";
+    case ExecutionModeInputPoints: return "InputPoints";
+    case ExecutionModeInputLines: return "InputLines";
+    case ExecutionModeInputLinesAdjacency: return "InputLinesAdjacency";
+    case ExecutionModeTriangles: return "Triangles";
+    case ExecutionModeInputTrianglesAdjacency: return "InputTrianglesAdjacency";
+    case ExecutionModeQuads: return "Quads";
+    case ExecutionModeIsolines: return "Isolines";
+    case ExecutionModeOutputVertices: return "OutputVertices";
+    case ExecutionModeOutputPoints: return "OutputPoints";
+    case ExecutionModeOutputLineStrip: return "OutputLineStrip";
+    case ExecutionModeOutputTriangleStrip: return "OutputTriangleStrip";
+    case ExecutionModeVecTypeHint: return "VecTypeHint";
+    case ExecutionModeContractionOff: return "ContractionOff";
+    case ExecutionModeInitializer: return "Initializer";
+    case ExecutionModeFinalizer: return "Finalizer";
+    case ExecutionModeSubgroupSize: return "SubgroupSize";
+    case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup";
+    case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId";
+    case ExecutionModeLocalSizeId: return "LocalSizeId";
+    case ExecutionModeLocalSizeHintId: return "LocalSizeHintId";
+    case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT";
+    case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT";
+    case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT";
+    case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR";
+    case ExecutionModePostDepthCoverage: return "PostDepthCoverage";
+    case ExecutionModeDenormPreserve: return "DenormPreserve";
+    case ExecutionModeDenormFlushToZero: return "DenormFlushToZero";
+    case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case ExecutionModeRoundingModeRTE: return "RoundingModeRTE";
+    case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ";
+    case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD";
+    case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT";
+    case ExecutionModeCoalescingAMDX: return "CoalescingAMDX";
+    case ExecutionModeIsApiEntryAMDX: return "IsApiEntryAMDX";
+    case ExecutionModeMaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX";
+    case ExecutionModeStaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX";
+    case ExecutionModeShaderIndexAMDX: return "ShaderIndexAMDX";
+    case ExecutionModeMaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX";
+    case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD";
+    case ExecutionModeStencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD";
+    case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD";
+    case ExecutionModeStencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD";
+    case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD";
+    case ExecutionModeStencilRefLessBackAMD: return "StencilRefLessBackAMD";
+    case ExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR";
+    case ExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR";
+    case ExecutionModeSharesInputWithAMDX: return "SharesInputWithAMDX";
+    case ExecutionModeOutputLinesEXT: return "OutputLinesEXT";
+    case ExecutionModeOutputPrimitivesEXT: return "OutputPrimitivesEXT";
+    case ExecutionModeDerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR";
+    case ExecutionModeDerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR";
+    case ExecutionModeOutputTrianglesEXT: return "OutputTrianglesEXT";
+    case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";
+    case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";
+    case ExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT";
+    case ExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT";
+    case ExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT";
+    case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
+    case ExecutionModeSharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL";
+    case ExecutionModeRoundingModeRTPINTEL: return "RoundingModeRTPINTEL";
+    case ExecutionModeRoundingModeRTNINTEL: return "RoundingModeRTNINTEL";
+    case ExecutionModeFloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL";
+    case ExecutionModeFloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL";
+    case ExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL";
+    case ExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL";
+    case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL";
+    case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL";
+    case ExecutionModeSchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL";
+    case ExecutionModeMaximallyReconvergesKHR: return "MaximallyReconvergesKHR";
+    case ExecutionModeFPFastMathDefault: return "FPFastMathDefault";
+    case ExecutionModeStreamingInterfaceINTEL: return "StreamingInterfaceINTEL";
+    case ExecutionModeRegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL";
+    case ExecutionModeNamedBarrierCountINTEL: return "NamedBarrierCountINTEL";
+    case ExecutionModeMaximumRegistersINTEL: return "MaximumRegistersINTEL";
+    case ExecutionModeMaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL";
+    case ExecutionModeNamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* StorageClassToString(StorageClass value) {
+    switch (value) {
+    case StorageClassUniformConstant: return "UniformConstant";
+    case StorageClassInput: return "Input";
+    case StorageClassUniform: return "Uniform";
+    case StorageClassOutput: return "Output";
+    case StorageClassWorkgroup: return "Workgroup";
+    case StorageClassCrossWorkgroup: return "CrossWorkgroup";
+    case StorageClassPrivate: return "Private";
+    case StorageClassFunction: return "Function";
+    case StorageClassGeneric: return "Generic";
+    case StorageClassPushConstant: return "PushConstant";
+    case StorageClassAtomicCounter: return "AtomicCounter";
+    case StorageClassImage: return "Image";
+    case StorageClassStorageBuffer: return "StorageBuffer";
+    case StorageClassTileImageEXT: return "TileImageEXT";
+    case StorageClassNodePayloadAMDX: return "NodePayloadAMDX";
+    case StorageClassCallableDataKHR: return "CallableDataKHR";
+    case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR";
+    case StorageClassRayPayloadKHR: return "RayPayloadKHR";
+    case StorageClassHitAttributeKHR: return "HitAttributeKHR";
+    case StorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR";
+    case StorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR";
+    case StorageClassPhysicalStorageBuffer: return "PhysicalStorageBuffer";
+    case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV";
+    case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT";
+    case StorageClassCodeSectionINTEL: return "CodeSectionINTEL";
+    case StorageClassDeviceOnlyINTEL: return "DeviceOnlyINTEL";
+    case StorageClassHostOnlyINTEL: return "HostOnlyINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* DimToString(Dim value) {
+    switch (value) {
+    case Dim1D: return "1D";
+    case Dim2D: return "2D";
+    case Dim3D: return "3D";
+    case DimCube: return "Cube";
+    case DimRect: return "Rect";
+    case DimBuffer: return "Buffer";
+    case DimSubpassData: return "SubpassData";
+    case DimTileImageDataEXT: return "TileImageDataEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SamplerAddressingModeToString(SamplerAddressingMode value) {
+    switch (value) {
+    case SamplerAddressingModeNone: return "None";
+    case SamplerAddressingModeClampToEdge: return "ClampToEdge";
+    case SamplerAddressingModeClamp: return "Clamp";
+    case SamplerAddressingModeRepeat: return "Repeat";
+    case SamplerAddressingModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SamplerFilterModeToString(SamplerFilterMode value) {
+    switch (value) {
+    case SamplerFilterModeNearest: return "Nearest";
+    case SamplerFilterModeLinear: return "Linear";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ImageFormatToString(ImageFormat value) {
+    switch (value) {
+    case ImageFormatUnknown: return "Unknown";
+    case ImageFormatRgba32f: return "Rgba32f";
+    case ImageFormatRgba16f: return "Rgba16f";
+    case ImageFormatR32f: return "R32f";
+    case ImageFormatRgba8: return "Rgba8";
+    case ImageFormatRgba8Snorm: return "Rgba8Snorm";
+    case ImageFormatRg32f: return "Rg32f";
+    case ImageFormatRg16f: return "Rg16f";
+    case ImageFormatR11fG11fB10f: return "R11fG11fB10f";
+    case ImageFormatR16f: return "R16f";
+    case ImageFormatRgba16: return "Rgba16";
+    case ImageFormatRgb10A2: return "Rgb10A2";
+    case ImageFormatRg16: return "Rg16";
+    case ImageFormatRg8: return "Rg8";
+    case ImageFormatR16: return "R16";
+    case ImageFormatR8: return "R8";
+    case ImageFormatRgba16Snorm: return "Rgba16Snorm";
+    case ImageFormatRg16Snorm: return "Rg16Snorm";
+    case ImageFormatRg8Snorm: return "Rg8Snorm";
+    case ImageFormatR16Snorm: return "R16Snorm";
+    case ImageFormatR8Snorm: return "R8Snorm";
+    case ImageFormatRgba32i: return "Rgba32i";
+    case ImageFormatRgba16i: return "Rgba16i";
+    case ImageFormatRgba8i: return "Rgba8i";
+    case ImageFormatR32i: return "R32i";
+    case ImageFormatRg32i: return "Rg32i";
+    case ImageFormatRg16i: return "Rg16i";
+    case ImageFormatRg8i: return "Rg8i";
+    case ImageFormatR16i: return "R16i";
+    case ImageFormatR8i: return "R8i";
+    case ImageFormatRgba32ui: return "Rgba32ui";
+    case ImageFormatRgba16ui: return "Rgba16ui";
+    case ImageFormatRgba8ui: return "Rgba8ui";
+    case ImageFormatR32ui: return "R32ui";
+    case ImageFormatRgb10a2ui: return "Rgb10a2ui";
+    case ImageFormatRg32ui: return "Rg32ui";
+    case ImageFormatRg16ui: return "Rg16ui";
+    case ImageFormatRg8ui: return "Rg8ui";
+    case ImageFormatR16ui: return "R16ui";
+    case ImageFormatR8ui: return "R8ui";
+    case ImageFormatR64ui: return "R64ui";
+    case ImageFormatR64i: return "R64i";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ImageChannelOrderToString(ImageChannelOrder value) {
+    switch (value) {
+    case ImageChannelOrderR: return "R";
+    case ImageChannelOrderA: return "A";
+    case ImageChannelOrderRG: return "RG";
+    case ImageChannelOrderRA: return "RA";
+    case ImageChannelOrderRGB: return "RGB";
+    case ImageChannelOrderRGBA: return "RGBA";
+    case ImageChannelOrderBGRA: return "BGRA";
+    case ImageChannelOrderARGB: return "ARGB";
+    case ImageChannelOrderIntensity: return "Intensity";
+    case ImageChannelOrderLuminance: return "Luminance";
+    case ImageChannelOrderRx: return "Rx";
+    case ImageChannelOrderRGx: return "RGx";
+    case ImageChannelOrderRGBx: return "RGBx";
+    case ImageChannelOrderDepth: return "Depth";
+    case ImageChannelOrderDepthStencil: return "DepthStencil";
+    case ImageChannelOrdersRGB: return "sRGB";
+    case ImageChannelOrdersRGBx: return "sRGBx";
+    case ImageChannelOrdersRGBA: return "sRGBA";
+    case ImageChannelOrdersBGRA: return "sBGRA";
+    case ImageChannelOrderABGR: return "ABGR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ImageChannelDataTypeToString(ImageChannelDataType value) {
+    switch (value) {
+    case ImageChannelDataTypeSnormInt8: return "SnormInt8";
+    case ImageChannelDataTypeSnormInt16: return "SnormInt16";
+    case ImageChannelDataTypeUnormInt8: return "UnormInt8";
+    case ImageChannelDataTypeUnormInt16: return "UnormInt16";
+    case ImageChannelDataTypeUnormShort565: return "UnormShort565";
+    case ImageChannelDataTypeUnormShort555: return "UnormShort555";
+    case ImageChannelDataTypeUnormInt101010: return "UnormInt101010";
+    case ImageChannelDataTypeSignedInt8: return "SignedInt8";
+    case ImageChannelDataTypeSignedInt16: return "SignedInt16";
+    case ImageChannelDataTypeSignedInt32: return "SignedInt32";
+    case ImageChannelDataTypeUnsignedInt8: return "UnsignedInt8";
+    case ImageChannelDataTypeUnsignedInt16: return "UnsignedInt16";
+    case ImageChannelDataTypeUnsignedInt32: return "UnsignedInt32";
+    case ImageChannelDataTypeHalfFloat: return "HalfFloat";
+    case ImageChannelDataTypeFloat: return "Float";
+    case ImageChannelDataTypeUnormInt24: return "UnormInt24";
+    case ImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2";
+    case ImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT";
+    case ImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT";
+    case ImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPRoundingModeToString(FPRoundingMode value) {
+    switch (value) {
+    case FPRoundingModeRTE: return "RTE";
+    case FPRoundingModeRTZ: return "RTZ";
+    case FPRoundingModeRTP: return "RTP";
+    case FPRoundingModeRTN: return "RTN";
+    default: return "Unknown";
+    }
+}
+
+inline const char* LinkageTypeToString(LinkageType value) {
+    switch (value) {
+    case LinkageTypeExport: return "Export";
+    case LinkageTypeImport: return "Import";
+    case LinkageTypeLinkOnceODR: return "LinkOnceODR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* AccessQualifierToString(AccessQualifier value) {
+    switch (value) {
+    case AccessQualifierReadOnly: return "ReadOnly";
+    case AccessQualifierWriteOnly: return "WriteOnly";
+    case AccessQualifierReadWrite: return "ReadWrite";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FunctionParameterAttributeToString(FunctionParameterAttribute value) {
+    switch (value) {
+    case FunctionParameterAttributeZext: return "Zext";
+    case FunctionParameterAttributeSext: return "Sext";
+    case FunctionParameterAttributeByVal: return "ByVal";
+    case FunctionParameterAttributeSret: return "Sret";
+    case FunctionParameterAttributeNoAlias: return "NoAlias";
+    case FunctionParameterAttributeNoCapture: return "NoCapture";
+    case FunctionParameterAttributeNoWrite: return "NoWrite";
+    case FunctionParameterAttributeNoReadWrite: return "NoReadWrite";
+    case FunctionParameterAttributeRuntimeAlignedINTEL: return "RuntimeAlignedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* DecorationToString(Decoration value) {
+    switch (value) {
+    case DecorationRelaxedPrecision: return "RelaxedPrecision";
+    case DecorationSpecId: return "SpecId";
+    case DecorationBlock: return "Block";
+    case DecorationBufferBlock: return "BufferBlock";
+    case DecorationRowMajor: return "RowMajor";
+    case DecorationColMajor: return "ColMajor";
+    case DecorationArrayStride: return "ArrayStride";
+    case DecorationMatrixStride: return "MatrixStride";
+    case DecorationGLSLShared: return "GLSLShared";
+    case DecorationGLSLPacked: return "GLSLPacked";
+    case DecorationCPacked: return "CPacked";
+    case DecorationBuiltIn: return "BuiltIn";
+    case DecorationNoPerspective: return "NoPerspective";
+    case DecorationFlat: return "Flat";
+    case DecorationPatch: return "Patch";
+    case DecorationCentroid: return "Centroid";
+    case DecorationSample: return "Sample";
+    case DecorationInvariant: return "Invariant";
+    case DecorationRestrict: return "Restrict";
+    case DecorationAliased: return "Aliased";
+    case DecorationVolatile: return "Volatile";
+    case DecorationConstant: return "Constant";
+    case DecorationCoherent: return "Coherent";
+    case DecorationNonWritable: return "NonWritable";
+    case DecorationNonReadable: return "NonReadable";
+    case DecorationUniform: return "Uniform";
+    case DecorationUniformId: return "UniformId";
+    case DecorationSaturatedConversion: return "SaturatedConversion";
+    case DecorationStream: return "Stream";
+    case DecorationLocation: return "Location";
+    case DecorationComponent: return "Component";
+    case DecorationIndex: return "Index";
+    case DecorationBinding: return "Binding";
+    case DecorationDescriptorSet: return "DescriptorSet";
+    case DecorationOffset: return "Offset";
+    case DecorationXfbBuffer: return "XfbBuffer";
+    case DecorationXfbStride: return "XfbStride";
+    case DecorationFuncParamAttr: return "FuncParamAttr";
+    case DecorationFPRoundingMode: return "FPRoundingMode";
+    case DecorationFPFastMathMode: return "FPFastMathMode";
+    case DecorationLinkageAttributes: return "LinkageAttributes";
+    case DecorationNoContraction: return "NoContraction";
+    case DecorationInputAttachmentIndex: return "InputAttachmentIndex";
+    case DecorationAlignment: return "Alignment";
+    case DecorationMaxByteOffset: return "MaxByteOffset";
+    case DecorationAlignmentId: return "AlignmentId";
+    case DecorationMaxByteOffsetId: return "MaxByteOffsetId";
+    case DecorationNoSignedWrap: return "NoSignedWrap";
+    case DecorationNoUnsignedWrap: return "NoUnsignedWrap";
+    case DecorationWeightTextureQCOM: return "WeightTextureQCOM";
+    case DecorationBlockMatchTextureQCOM: return "BlockMatchTextureQCOM";
+    case DecorationBlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM";
+    case DecorationExplicitInterpAMD: return "ExplicitInterpAMD";
+    case DecorationNodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX";
+    case DecorationNodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX";
+    case DecorationTrackFinishWritingAMDX: return "TrackFinishWritingAMDX";
+    case DecorationPayloadNodeNameAMDX: return "PayloadNodeNameAMDX";
+    case DecorationPayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX";
+    case DecorationPayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX";
+    case DecorationPayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX";
+    case DecorationPayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX";
+    case DecorationOverrideCoverageNV: return "OverrideCoverageNV";
+    case DecorationPassthroughNV: return "PassthroughNV";
+    case DecorationViewportRelativeNV: return "ViewportRelativeNV";
+    case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
+    case DecorationPerPrimitiveEXT: return "PerPrimitiveEXT";
+    case DecorationPerViewNV: return "PerViewNV";
+    case DecorationPerTaskNV: return "PerTaskNV";
+    case DecorationPerVertexKHR: return "PerVertexKHR";
+    case DecorationNonUniform: return "NonUniform";
+    case DecorationRestrictPointer: return "RestrictPointer";
+    case DecorationAliasedPointer: return "AliasedPointer";
+    case DecorationHitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV";
+    case DecorationBindlessSamplerNV: return "BindlessSamplerNV";
+    case DecorationBindlessImageNV: return "BindlessImageNV";
+    case DecorationBoundSamplerNV: return "BoundSamplerNV";
+    case DecorationBoundImageNV: return "BoundImageNV";
+    case DecorationSIMTCallINTEL: return "SIMTCallINTEL";
+    case DecorationReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL";
+    case DecorationClobberINTEL: return "ClobberINTEL";
+    case DecorationSideEffectsINTEL: return "SideEffectsINTEL";
+    case DecorationVectorComputeVariableINTEL: return "VectorComputeVariableINTEL";
+    case DecorationFuncParamIOKindINTEL: return "FuncParamIOKindINTEL";
+    case DecorationVectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL";
+    case DecorationStackCallINTEL: return "StackCallINTEL";
+    case DecorationGlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL";
+    case DecorationCounterBuffer: return "CounterBuffer";
+    case DecorationHlslSemanticGOOGLE: return "HlslSemanticGOOGLE";
+    case DecorationUserTypeGOOGLE: return "UserTypeGOOGLE";
+    case DecorationFunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL";
+    case DecorationFunctionDenormModeINTEL: return "FunctionDenormModeINTEL";
+    case DecorationRegisterINTEL: return "RegisterINTEL";
+    case DecorationMemoryINTEL: return "MemoryINTEL";
+    case DecorationNumbanksINTEL: return "NumbanksINTEL";
+    case DecorationBankwidthINTEL: return "BankwidthINTEL";
+    case DecorationMaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL";
+    case DecorationSinglepumpINTEL: return "SinglepumpINTEL";
+    case DecorationDoublepumpINTEL: return "DoublepumpINTEL";
+    case DecorationMaxReplicatesINTEL: return "MaxReplicatesINTEL";
+    case DecorationSimpleDualPortINTEL: return "SimpleDualPortINTEL";
+    case DecorationMergeINTEL: return "MergeINTEL";
+    case DecorationBankBitsINTEL: return "BankBitsINTEL";
+    case DecorationForcePow2DepthINTEL: return "ForcePow2DepthINTEL";
+    case DecorationStridesizeINTEL: return "StridesizeINTEL";
+    case DecorationWordsizeINTEL: return "WordsizeINTEL";
+    case DecorationTrueDualPortINTEL: return "TrueDualPortINTEL";
+    case DecorationBurstCoalesceINTEL: return "BurstCoalesceINTEL";
+    case DecorationCacheSizeINTEL: return "CacheSizeINTEL";
+    case DecorationDontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL";
+    case DecorationPrefetchINTEL: return "PrefetchINTEL";
+    case DecorationStallEnableINTEL: return "StallEnableINTEL";
+    case DecorationFuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL";
+    case DecorationMathOpDSPModeINTEL: return "MathOpDSPModeINTEL";
+    case DecorationAliasScopeINTEL: return "AliasScopeINTEL";
+    case DecorationNoAliasINTEL: return "NoAliasINTEL";
+    case DecorationInitiationIntervalINTEL: return "InitiationIntervalINTEL";
+    case DecorationMaxConcurrencyINTEL: return "MaxConcurrencyINTEL";
+    case DecorationPipelineEnableINTEL: return "PipelineEnableINTEL";
+    case DecorationBufferLocationINTEL: return "BufferLocationINTEL";
+    case DecorationIOPipeStorageINTEL: return "IOPipeStorageINTEL";
+    case DecorationFunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL";
+    case DecorationSingleElementVectorINTEL: return "SingleElementVectorINTEL";
+    case DecorationVectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL";
+    case DecorationMediaBlockIOINTEL: return "MediaBlockIOINTEL";
+    case DecorationStallFreeINTEL: return "StallFreeINTEL";
+    case DecorationFPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL";
+    case DecorationLatencyControlLabelINTEL: return "LatencyControlLabelINTEL";
+    case DecorationLatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL";
+    case DecorationConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL";
+    case DecorationRegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL";
+    case DecorationMMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL";
+    case DecorationMMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL";
+    case DecorationMMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL";
+    case DecorationMMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL";
+    case DecorationMMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL";
+    case DecorationMMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL";
+    case DecorationStableKernelArgumentINTEL: return "StableKernelArgumentINTEL";
+    case DecorationHostAccessINTEL: return "HostAccessINTEL";
+    case DecorationInitModeINTEL: return "InitModeINTEL";
+    case DecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL";
+    case DecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL";
+    case DecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* BuiltInToString(BuiltIn value) {
+    switch (value) {
+    case BuiltInPosition: return "Position";
+    case BuiltInPointSize: return "PointSize";
+    case BuiltInClipDistance: return "ClipDistance";
+    case BuiltInCullDistance: return "CullDistance";
+    case BuiltInVertexId: return "VertexId";
+    case BuiltInInstanceId: return "InstanceId";
+    case BuiltInPrimitiveId: return "PrimitiveId";
+    case BuiltInInvocationId: return "InvocationId";
+    case BuiltInLayer: return "Layer";
+    case BuiltInViewportIndex: return "ViewportIndex";
+    case BuiltInTessLevelOuter: return "TessLevelOuter";
+    case BuiltInTessLevelInner: return "TessLevelInner";
+    case BuiltInTessCoord: return "TessCoord";
+    case BuiltInPatchVertices: return "PatchVertices";
+    case BuiltInFragCoord: return "FragCoord";
+    case BuiltInPointCoord: return "PointCoord";
+    case BuiltInFrontFacing: return "FrontFacing";
+    case BuiltInSampleId: return "SampleId";
+    case BuiltInSamplePosition: return "SamplePosition";
+    case BuiltInSampleMask: return "SampleMask";
+    case BuiltInFragDepth: return "FragDepth";
+    case BuiltInHelperInvocation: return "HelperInvocation";
+    case BuiltInNumWorkgroups: return "NumWorkgroups";
+    case BuiltInWorkgroupSize: return "WorkgroupSize";
+    case BuiltInWorkgroupId: return "WorkgroupId";
+    case BuiltInLocalInvocationId: return "LocalInvocationId";
+    case BuiltInGlobalInvocationId: return "GlobalInvocationId";
+    case BuiltInLocalInvocationIndex: return "LocalInvocationIndex";
+    case BuiltInWorkDim: return "WorkDim";
+    case BuiltInGlobalSize: return "GlobalSize";
+    case BuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize";
+    case BuiltInGlobalOffset: return "GlobalOffset";
+    case BuiltInGlobalLinearId: return "GlobalLinearId";
+    case BuiltInSubgroupSize: return "SubgroupSize";
+    case BuiltInSubgroupMaxSize: return "SubgroupMaxSize";
+    case BuiltInNumSubgroups: return "NumSubgroups";
+    case BuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups";
+    case BuiltInSubgroupId: return "SubgroupId";
+    case BuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId";
+    case BuiltInVertexIndex: return "VertexIndex";
+    case BuiltInInstanceIndex: return "InstanceIndex";
+    case BuiltInCoreIDARM: return "CoreIDARM";
+    case BuiltInCoreCountARM: return "CoreCountARM";
+    case BuiltInCoreMaxIDARM: return "CoreMaxIDARM";
+    case BuiltInWarpIDARM: return "WarpIDARM";
+    case BuiltInWarpMaxIDARM: return "WarpMaxIDARM";
+    case BuiltInSubgroupEqMask: return "SubgroupEqMask";
+    case BuiltInSubgroupGeMask: return "SubgroupGeMask";
+    case BuiltInSubgroupGtMask: return "SubgroupGtMask";
+    case BuiltInSubgroupLeMask: return "SubgroupLeMask";
+    case BuiltInSubgroupLtMask: return "SubgroupLtMask";
+    case BuiltInBaseVertex: return "BaseVertex";
+    case BuiltInBaseInstance: return "BaseInstance";
+    case BuiltInDrawIndex: return "DrawIndex";
+    case BuiltInPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR";
+    case BuiltInDeviceIndex: return "DeviceIndex";
+    case BuiltInViewIndex: return "ViewIndex";
+    case BuiltInShadingRateKHR: return "ShadingRateKHR";
+    case BuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD";
+    case BuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD";
+    case BuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD";
+    case BuiltInBaryCoordSmoothAMD: return "BaryCoordSmoothAMD";
+    case BuiltInBaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD";
+    case BuiltInBaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD";
+    case BuiltInBaryCoordPullModelAMD: return "BaryCoordPullModelAMD";
+    case BuiltInFragStencilRefEXT: return "FragStencilRefEXT";
+    case BuiltInRemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX";
+    case BuiltInShaderIndexAMDX: return "ShaderIndexAMDX";
+    case BuiltInViewportMaskNV: return "ViewportMaskNV";
+    case BuiltInSecondaryPositionNV: return "SecondaryPositionNV";
+    case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
+    case BuiltInPositionPerViewNV: return "PositionPerViewNV";
+    case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
+    case BuiltInFullyCoveredEXT: return "FullyCoveredEXT";
+    case BuiltInTaskCountNV: return "TaskCountNV";
+    case BuiltInPrimitiveCountNV: return "PrimitiveCountNV";
+    case BuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV";
+    case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV";
+    case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV";
+    case BuiltInLayerPerViewNV: return "LayerPerViewNV";
+    case BuiltInMeshViewCountNV: return "MeshViewCountNV";
+    case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV";
+    case BuiltInBaryCoordKHR: return "BaryCoordKHR";
+    case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR";
+    case BuiltInFragSizeEXT: return "FragSizeEXT";
+    case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
+    case BuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT";
+    case BuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT";
+    case BuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
+    case BuiltInCullPrimitiveEXT: return "CullPrimitiveEXT";
+    case BuiltInLaunchIdKHR: return "LaunchIdKHR";
+    case BuiltInLaunchSizeKHR: return "LaunchSizeKHR";
+    case BuiltInWorldRayOriginKHR: return "WorldRayOriginKHR";
+    case BuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR";
+    case BuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR";
+    case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR";
+    case BuiltInRayTminKHR: return "RayTminKHR";
+    case BuiltInRayTmaxKHR: return "RayTmaxKHR";
+    case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR";
+    case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR";
+    case BuiltInWorldToObjectKHR: return "WorldToObjectKHR";
+    case BuiltInHitTNV: return "HitTNV";
+    case BuiltInHitKindKHR: return "HitKindKHR";
+    case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV";
+    case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
+    case BuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV";
+    case BuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV";
+    case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";
+    case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";
+    case BuiltInWarpsPerSMNV: return "WarpsPerSMNV";
+    case BuiltInSMCountNV: return "SMCountNV";
+    case BuiltInWarpIDNV: return "WarpIDNV";
+    case BuiltInSMIDNV: return "SMIDNV";
+    case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV";
+    case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV";
+    case BuiltInCullMaskKHR: return "CullMaskKHR";
+    default: return "Unknown";
     }
 }
+
+inline const char* ScopeToString(Scope value) {
+    switch (value) {
+    case ScopeCrossDevice: return "CrossDevice";
+    case ScopeDevice: return "Device";
+    case ScopeWorkgroup: return "Workgroup";
+    case ScopeSubgroup: return "Subgroup";
+    case ScopeInvocation: return "Invocation";
+    case ScopeQueueFamily: return "QueueFamily";
+    case ScopeShaderCallKHR: return "ShaderCallKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* GroupOperationToString(GroupOperation value) {
+    switch (value) {
+    case GroupOperationReduce: return "Reduce";
+    case GroupOperationInclusiveScan: return "InclusiveScan";
+    case GroupOperationExclusiveScan: return "ExclusiveScan";
+    case GroupOperationClusteredReduce: return "ClusteredReduce";
+    case GroupOperationPartitionedReduceNV: return "PartitionedReduceNV";
+    case GroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV";
+    case GroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV";
+    default: return "Unknown";
+    }
+}
+
+inline const char* KernelEnqueueFlagsToString(KernelEnqueueFlags value) {
+    switch (value) {
+    case KernelEnqueueFlagsNoWait: return "NoWait";
+    case KernelEnqueueFlagsWaitKernel: return "WaitKernel";
+    case KernelEnqueueFlagsWaitWorkGroup: return "WaitWorkGroup";
+    default: return "Unknown";
+    }
+}
+
+inline const char* CapabilityToString(Capability value) {
+    switch (value) {
+    case CapabilityMatrix: return "Matrix";
+    case CapabilityShader: return "Shader";
+    case CapabilityGeometry: return "Geometry";
+    case CapabilityTessellation: return "Tessellation";
+    case CapabilityAddresses: return "Addresses";
+    case CapabilityLinkage: return "Linkage";
+    case CapabilityKernel: return "Kernel";
+    case CapabilityVector16: return "Vector16";
+    case CapabilityFloat16Buffer: return "Float16Buffer";
+    case CapabilityFloat16: return "Float16";
+    case CapabilityFloat64: return "Float64";
+    case CapabilityInt64: return "Int64";
+    case CapabilityInt64Atomics: return "Int64Atomics";
+    case CapabilityImageBasic: return "ImageBasic";
+    case CapabilityImageReadWrite: return "ImageReadWrite";
+    case CapabilityImageMipmap: return "ImageMipmap";
+    case CapabilityPipes: return "Pipes";
+    case CapabilityGroups: return "Groups";
+    case CapabilityDeviceEnqueue: return "DeviceEnqueue";
+    case CapabilityLiteralSampler: return "LiteralSampler";
+    case CapabilityAtomicStorage: return "AtomicStorage";
+    case CapabilityInt16: return "Int16";
+    case CapabilityTessellationPointSize: return "TessellationPointSize";
+    case CapabilityGeometryPointSize: return "GeometryPointSize";
+    case CapabilityImageGatherExtended: return "ImageGatherExtended";
+    case CapabilityStorageImageMultisample: return "StorageImageMultisample";
+    case CapabilityUniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing";
+    case CapabilitySampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing";
+    case CapabilityStorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing";
+    case CapabilityStorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing";
+    case CapabilityClipDistance: return "ClipDistance";
+    case CapabilityCullDistance: return "CullDistance";
+    case CapabilityImageCubeArray: return "ImageCubeArray";
+    case CapabilitySampleRateShading: return "SampleRateShading";
+    case CapabilityImageRect: return "ImageRect";
+    case CapabilitySampledRect: return "SampledRect";
+    case CapabilityGenericPointer: return "GenericPointer";
+    case CapabilityInt8: return "Int8";
+    case CapabilityInputAttachment: return "InputAttachment";
+    case CapabilitySparseResidency: return "SparseResidency";
+    case CapabilityMinLod: return "MinLod";
+    case CapabilitySampled1D: return "Sampled1D";
+    case CapabilityImage1D: return "Image1D";
+    case CapabilitySampledCubeArray: return "SampledCubeArray";
+    case CapabilitySampledBuffer: return "SampledBuffer";
+    case CapabilityImageBuffer: return "ImageBuffer";
+    case CapabilityImageMSArray: return "ImageMSArray";
+    case CapabilityStorageImageExtendedFormats: return "StorageImageExtendedFormats";
+    case CapabilityImageQuery: return "ImageQuery";
+    case CapabilityDerivativeControl: return "DerivativeControl";
+    case CapabilityInterpolationFunction: return "InterpolationFunction";
+    case CapabilityTransformFeedback: return "TransformFeedback";
+    case CapabilityGeometryStreams: return "GeometryStreams";
+    case CapabilityStorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat";
+    case CapabilityStorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat";
+    case CapabilityMultiViewport: return "MultiViewport";
+    case CapabilitySubgroupDispatch: return "SubgroupDispatch";
+    case CapabilityNamedBarrier: return "NamedBarrier";
+    case CapabilityPipeStorage: return "PipeStorage";
+    case CapabilityGroupNonUniform: return "GroupNonUniform";
+    case CapabilityGroupNonUniformVote: return "GroupNonUniformVote";
+    case CapabilityGroupNonUniformArithmetic: return "GroupNonUniformArithmetic";
+    case CapabilityGroupNonUniformBallot: return "GroupNonUniformBallot";
+    case CapabilityGroupNonUniformShuffle: return "GroupNonUniformShuffle";
+    case CapabilityGroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative";
+    case CapabilityGroupNonUniformClustered: return "GroupNonUniformClustered";
+    case CapabilityGroupNonUniformQuad: return "GroupNonUniformQuad";
+    case CapabilityShaderLayer: return "ShaderLayer";
+    case CapabilityShaderViewportIndex: return "ShaderViewportIndex";
+    case CapabilityUniformDecoration: return "UniformDecoration";
+    case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM";
+    case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT";
+    case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT";
+    case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT";
+    case CapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM";
+    case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR";
+    case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
+    case CapabilityDrawParameters: return "DrawParameters";
+    case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR";
+    case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
+    case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
+    case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR";
+    case CapabilityStorageBuffer16BitAccess: return "StorageBuffer16BitAccess";
+    case CapabilityStorageUniform16: return "StorageUniform16";
+    case CapabilityStoragePushConstant16: return "StoragePushConstant16";
+    case CapabilityStorageInputOutput16: return "StorageInputOutput16";
+    case CapabilityDeviceGroup: return "DeviceGroup";
+    case CapabilityMultiView: return "MultiView";
+    case CapabilityVariablePointersStorageBuffer: return "VariablePointersStorageBuffer";
+    case CapabilityVariablePointers: return "VariablePointers";
+    case CapabilityAtomicStorageOps: return "AtomicStorageOps";
+    case CapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage";
+    case CapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess";
+    case CapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess";
+    case CapabilityStoragePushConstant8: return "StoragePushConstant8";
+    case CapabilityDenormPreserve: return "DenormPreserve";
+    case CapabilityDenormFlushToZero: return "DenormFlushToZero";
+    case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case CapabilityRoundingModeRTE: return "RoundingModeRTE";
+    case CapabilityRoundingModeRTZ: return "RoundingModeRTZ";
+    case CapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR";
+    case CapabilityRayQueryKHR: return "RayQueryKHR";
+    case CapabilityUntypedPointersKHR: return "UntypedPointersKHR";
+    case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
+    case CapabilityRayTracingKHR: return "RayTracingKHR";
+    case CapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM";
+    case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
+    case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
+    case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
+    case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
+    case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
+    case CapabilityFragmentMaskAMD: return "FragmentMaskAMD";
+    case CapabilityStencilExportEXT: return "StencilExportEXT";
+    case CapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD";
+    case CapabilityInt64ImageEXT: return "Int64ImageEXT";
+    case CapabilityShaderClockKHR: return "ShaderClockKHR";
+    case CapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX";
+    case CapabilityQuadControlKHR: return "QuadControlKHR";
+    case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";
+    case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
+    case CapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT";
+    case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV";
+    case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV";
+    case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";
+    case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
+    case CapabilityMeshShadingNV: return "MeshShadingNV";
+    case CapabilityImageFootprintNV: return "ImageFootprintNV";
+    case CapabilityMeshShadingEXT: return "MeshShadingEXT";
+    case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR";
+    case CapabilityComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR";
+    case CapabilityFragmentDensityEXT: return "FragmentDensityEXT";
+    case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
+    case CapabilityShaderNonUniform: return "ShaderNonUniform";
+    case CapabilityRuntimeDescriptorArray: return "RuntimeDescriptorArray";
+    case CapabilityInputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing";
+    case CapabilityUniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing";
+    case CapabilityStorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing";
+    case CapabilityUniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing";
+    case CapabilitySampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing";
+    case CapabilityStorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing";
+    case CapabilityStorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing";
+    case CapabilityInputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing";
+    case CapabilityUniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing";
+    case CapabilityStorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing";
+    case CapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR";
+    case CapabilityRayTracingNV: return "RayTracingNV";
+    case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV";
+    case CapabilityVulkanMemoryModel: return "VulkanMemoryModel";
+    case CapabilityVulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope";
+    case CapabilityPhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses";
+    case CapabilityComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR";
+    case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR";
+    case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV";
+    case CapabilityFragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT";
+    case CapabilityFragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT";
+    case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV";
+    case CapabilityFragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT";
+    case CapabilityDemoteToHelperInvocation: return "DemoteToHelperInvocation";
+    case CapabilityDisplacementMicromapNV: return "DisplacementMicromapNV";
+    case CapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT";
+    case CapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV";
+    case CapabilityBindlessTextureNV: return "BindlessTextureNV";
+    case CapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR";
+    case CapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV";
+    case CapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV";
+    case CapabilityRawAccessChainsNV: return "RawAccessChainsNV";
+    case CapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV";
+    case CapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV";
+    case CapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV";
+    case CapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV";
+    case CapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV";
+    case CapabilityTensorAddressingNV: return "TensorAddressingNV";
+    case CapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL";
+    case CapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL";
+    case CapabilitySubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL";
+    case CapabilitySubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL";
+    case CapabilityRoundToInfinityINTEL: return "RoundToInfinityINTEL";
+    case CapabilityFloatingPointModeINTEL: return "FloatingPointModeINTEL";
+    case CapabilityIntegerFunctions2INTEL: return "IntegerFunctions2INTEL";
+    case CapabilityFunctionPointersINTEL: return "FunctionPointersINTEL";
+    case CapabilityIndirectReferencesINTEL: return "IndirectReferencesINTEL";
+    case CapabilityAsmINTEL: return "AsmINTEL";
+    case CapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT";
+    case CapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT";
+    case CapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT";
+    case CapabilityVectorComputeINTEL: return "VectorComputeINTEL";
+    case CapabilityVectorAnyINTEL: return "VectorAnyINTEL";
+    case CapabilityExpectAssumeKHR: return "ExpectAssumeKHR";
+    case CapabilitySubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL";
+    case CapabilitySubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL";
+    case CapabilitySubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL";
+    case CapabilityVariableLengthArrayINTEL: return "VariableLengthArrayINTEL";
+    case CapabilityFunctionFloatControlINTEL: return "FunctionFloatControlINTEL";
+    case CapabilityFPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL";
+    case CapabilityFPFastMathModeINTEL: return "FPFastMathModeINTEL";
+    case CapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL";
+    case CapabilityArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL";
+    case CapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL";
+    case CapabilityFPGALoopControlsINTEL: return "FPGALoopControlsINTEL";
+    case CapabilityKernelAttributesINTEL: return "KernelAttributesINTEL";
+    case CapabilityFPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL";
+    case CapabilityFPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL";
+    case CapabilityFPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL";
+    case CapabilityLoopFuseINTEL: return "LoopFuseINTEL";
+    case CapabilityFPGADSPControlINTEL: return "FPGADSPControlINTEL";
+    case CapabilityMemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL";
+    case CapabilityFPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL";
+    case CapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL";
+    case CapabilityArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL";
+    case CapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL";
+    case CapabilityRuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL";
+    case CapabilityIOPipesINTEL: return "IOPipesINTEL";
+    case CapabilityBlockingPipesINTEL: return "BlockingPipesINTEL";
+    case CapabilityFPGARegINTEL: return "FPGARegINTEL";
+    case CapabilityDotProductInputAll: return "DotProductInputAll";
+    case CapabilityDotProductInput4x8Bit: return "DotProductInput4x8Bit";
+    case CapabilityDotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked";
+    case CapabilityDotProduct: return "DotProduct";
+    case CapabilityRayCullMaskKHR: return "RayCullMaskKHR";
+    case CapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR";
+    case CapabilityReplicatedCompositesEXT: return "ReplicatedCompositesEXT";
+    case CapabilityBitInstructions: return "BitInstructions";
+    case CapabilityGroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR";
+    case CapabilityFloatControls2: return "FloatControls2";
+    case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";
+    case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";
+    case CapabilityLongCompositesINTEL: return "LongCompositesINTEL";
+    case CapabilityOptNoneEXT: return "OptNoneEXT";
+    case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT";
+    case CapabilityDebugInfoModuleINTEL: return "DebugInfoModuleINTEL";
+    case CapabilityBFloat16ConversionINTEL: return "BFloat16ConversionINTEL";
+    case CapabilitySplitBarrierINTEL: return "SplitBarrierINTEL";
+    case CapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT";
+    case CapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL";
+    case CapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL";
+    case CapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL";
+    case CapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL";
+    case CapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL";
+    case CapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL";
+    case CapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL";
+    case CapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL";
+    case CapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR";
+    case CapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL";
+    case CapabilityCacheControlsINTEL: return "CacheControlsINTEL";
+    case CapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* RayQueryIntersectionToString(RayQueryIntersection value) {
+    switch (value) {
+    case RayQueryIntersectionRayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR";
+    case RayQueryIntersectionRayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* RayQueryCommittedIntersectionTypeToString(RayQueryCommittedIntersectionType value) {
+    switch (value) {
+    case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR";
+    case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR";
+    case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* RayQueryCandidateIntersectionTypeToString(RayQueryCandidateIntersectionType value) {
+    switch (value) {
+    case RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR";
+    case RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPDenormModeToString(FPDenormMode value) {
+    switch (value) {
+    case FPDenormModePreserve: return "Preserve";
+    case FPDenormModeFlushToZero: return "FlushToZero";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPOperationModeToString(FPOperationMode value) {
+    switch (value) {
+    case FPOperationModeIEEE: return "IEEE";
+    case FPOperationModeALT: return "ALT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* QuantizationModesToString(QuantizationModes value) {
+    switch (value) {
+    case QuantizationModesTRN: return "TRN";
+    case QuantizationModesTRN_ZERO: return "TRN_ZERO";
+    case QuantizationModesRND: return "RND";
+    case QuantizationModesRND_ZERO: return "RND_ZERO";
+    case QuantizationModesRND_INF: return "RND_INF";
+    case QuantizationModesRND_MIN_INF: return "RND_MIN_INF";
+    case QuantizationModesRND_CONV: return "RND_CONV";
+    case QuantizationModesRND_CONV_ODD: return "RND_CONV_ODD";
+    default: return "Unknown";
+    }
+}
+
+inline const char* OverflowModesToString(OverflowModes value) {
+    switch (value) {
+    case OverflowModesWRAP: return "WRAP";
+    case OverflowModesSAT: return "SAT";
+    case OverflowModesSAT_ZERO: return "SAT_ZERO";
+    case OverflowModesSAT_SYM: return "SAT_SYM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* PackedVectorFormatToString(PackedVectorFormat value) {
+    switch (value) {
+    case PackedVectorFormatPackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit";
+    default: return "Unknown";
+    }
+}
+
+inline const char* CooperativeMatrixLayoutToString(CooperativeMatrixLayout value) {
+    switch (value) {
+    case CooperativeMatrixLayoutRowMajorKHR: return "RowMajorKHR";
+    case CooperativeMatrixLayoutColumnMajorKHR: return "ColumnMajorKHR";
+    case CooperativeMatrixLayoutRowBlockedInterleavedARM: return "RowBlockedInterleavedARM";
+    case CooperativeMatrixLayoutColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* CooperativeMatrixUseToString(CooperativeMatrixUse value) {
+    switch (value) {
+    case CooperativeMatrixUseMatrixAKHR: return "MatrixAKHR";
+    case CooperativeMatrixUseMatrixBKHR: return "MatrixBKHR";
+    case CooperativeMatrixUseMatrixAccumulatorKHR: return "MatrixAccumulatorKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* TensorClampModeToString(TensorClampMode value) {
+    switch (value) {
+    case TensorClampModeUndefined: return "Undefined";
+    case TensorClampModeConstant: return "Constant";
+    case TensorClampModeClampToEdge: return "ClampToEdge";
+    case TensorClampModeRepeat: return "Repeat";
+    case TensorClampModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* InitializationModeQualifierToString(InitializationModeQualifier value) {
+    switch (value) {
+    case InitializationModeQualifierInitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL";
+    case InitializationModeQualifierInitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* HostAccessQualifierToString(HostAccessQualifier value) {
+    switch (value) {
+    case HostAccessQualifierNoneINTEL: return "NoneINTEL";
+    case HostAccessQualifierReadINTEL: return "ReadINTEL";
+    case HostAccessQualifierWriteINTEL: return "WriteINTEL";
+    case HostAccessQualifierReadWriteINTEL: return "ReadWriteINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* LoadCacheControlToString(LoadCacheControl value) {
+    switch (value) {
+    case LoadCacheControlUncachedINTEL: return "UncachedINTEL";
+    case LoadCacheControlCachedINTEL: return "CachedINTEL";
+    case LoadCacheControlStreamingINTEL: return "StreamingINTEL";
+    case LoadCacheControlInvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL";
+    case LoadCacheControlConstCachedINTEL: return "ConstCachedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* StoreCacheControlToString(StoreCacheControl value) {
+    switch (value) {
+    case StoreCacheControlUncachedINTEL: return "UncachedINTEL";
+    case StoreCacheControlWriteThroughINTEL: return "WriteThroughINTEL";
+    case StoreCacheControlWriteBackINTEL: return "WriteBackINTEL";
+    case StoreCacheControlStreamingINTEL: return "StreamingINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* NamedMaximumNumberOfRegistersToString(NamedMaximumNumberOfRegisters value) {
+    switch (value) {
+    case NamedMaximumNumberOfRegistersAutoINTEL: return "AutoINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPEncodingToString(FPEncoding value) {
+    switch (value) {
+    default: return "Unknown";
+    }
+}
+
+inline const char* OpToString(Op value) {
+    switch (value) {
+    case OpNop: return "OpNop";
+    case OpUndef: return "OpUndef";
+    case OpSourceContinued: return "OpSourceContinued";
+    case OpSource: return "OpSource";
+    case OpSourceExtension: return "OpSourceExtension";
+    case OpName: return "OpName";
+    case OpMemberName: return "OpMemberName";
+    case OpString: return "OpString";
+    case OpLine: return "OpLine";
+    case OpExtension: return "OpExtension";
+    case OpExtInstImport: return "OpExtInstImport";
+    case OpExtInst: return "OpExtInst";
+    case OpMemoryModel: return "OpMemoryModel";
+    case OpEntryPoint: return "OpEntryPoint";
+    case OpExecutionMode: return "OpExecutionMode";
+    case OpCapability: return "OpCapability";
+    case OpTypeVoid: return "OpTypeVoid";
+    case OpTypeBool: return "OpTypeBool";
+    case OpTypeInt: return "OpTypeInt";
+    case OpTypeFloat: return "OpTypeFloat";
+    case OpTypeVector: return "OpTypeVector";
+    case OpTypeMatrix: return "OpTypeMatrix";
+    case OpTypeImage: return "OpTypeImage";
+    case OpTypeSampler: return "OpTypeSampler";
+    case OpTypeSampledImage: return "OpTypeSampledImage";
+    case OpTypeArray: return "OpTypeArray";
+    case OpTypeRuntimeArray: return "OpTypeRuntimeArray";
+    case OpTypeStruct: return "OpTypeStruct";
+    case OpTypeOpaque: return "OpTypeOpaque";
+    case OpTypePointer: return "OpTypePointer";
+    case OpTypeFunction: return "OpTypeFunction";
+    case OpTypeEvent: return "OpTypeEvent";
+    case OpTypeDeviceEvent: return "OpTypeDeviceEvent";
+    case OpTypeReserveId: return "OpTypeReserveId";
+    case OpTypeQueue: return "OpTypeQueue";
+    case OpTypePipe: return "OpTypePipe";
+    case OpTypeForwardPointer: return "OpTypeForwardPointer";
+    case OpConstantTrue: return "OpConstantTrue";
+    case OpConstantFalse: return "OpConstantFalse";
+    case OpConstant: return "OpConstant";
+    case OpConstantComposite: return "OpConstantComposite";
+    case OpConstantSampler: return "OpConstantSampler";
+    case OpConstantNull: return "OpConstantNull";
+    case OpSpecConstantTrue: return "OpSpecConstantTrue";
+    case OpSpecConstantFalse: return "OpSpecConstantFalse";
+    case OpSpecConstant: return "OpSpecConstant";
+    case OpSpecConstantComposite: return "OpSpecConstantComposite";
+    case OpSpecConstantOp: return "OpSpecConstantOp";
+    case OpFunction: return "OpFunction";
+    case OpFunctionParameter: return "OpFunctionParameter";
+    case OpFunctionEnd: return "OpFunctionEnd";
+    case OpFunctionCall: return "OpFunctionCall";
+    case OpVariable: return "OpVariable";
+    case OpImageTexelPointer: return "OpImageTexelPointer";
+    case OpLoad: return "OpLoad";
+    case OpStore: return "OpStore";
+    case OpCopyMemory: return "OpCopyMemory";
+    case OpCopyMemorySized: return "OpCopyMemorySized";
+    case OpAccessChain: return "OpAccessChain";
+    case OpInBoundsAccessChain: return "OpInBoundsAccessChain";
+    case OpPtrAccessChain: return "OpPtrAccessChain";
+    case OpArrayLength: return "OpArrayLength";
+    case OpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics";
+    case OpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain";
+    case OpDecorate: return "OpDecorate";
+    case OpMemberDecorate: return "OpMemberDecorate";
+    case OpDecorationGroup: return "OpDecorationGroup";
+    case OpGroupDecorate: return "OpGroupDecorate";
+    case OpGroupMemberDecorate: return "OpGroupMemberDecorate";
+    case OpVectorExtractDynamic: return "OpVectorExtractDynamic";
+    case OpVectorInsertDynamic: return "OpVectorInsertDynamic";
+    case OpVectorShuffle: return "OpVectorShuffle";
+    case OpCompositeConstruct: return "OpCompositeConstruct";
+    case OpCompositeExtract: return "OpCompositeExtract";
+    case OpCompositeInsert: return "OpCompositeInsert";
+    case OpCopyObject: return "OpCopyObject";
+    case OpTranspose: return "OpTranspose";
+    case OpSampledImage: return "OpSampledImage";
+    case OpImageSampleImplicitLod: return "OpImageSampleImplicitLod";
+    case OpImageSampleExplicitLod: return "OpImageSampleExplicitLod";
+    case OpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod";
+    case OpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod";
+    case OpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod";
+    case OpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod";
+    case OpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod";
+    case OpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod";
+    case OpImageFetch: return "OpImageFetch";
+    case OpImageGather: return "OpImageGather";
+    case OpImageDrefGather: return "OpImageDrefGather";
+    case OpImageRead: return "OpImageRead";
+    case OpImageWrite: return "OpImageWrite";
+    case OpImage: return "OpImage";
+    case OpImageQueryFormat: return "OpImageQueryFormat";
+    case OpImageQueryOrder: return "OpImageQueryOrder";
+    case OpImageQuerySizeLod: return "OpImageQuerySizeLod";
+    case OpImageQuerySize: return "OpImageQuerySize";
+    case OpImageQueryLod: return "OpImageQueryLod";
+    case OpImageQueryLevels: return "OpImageQueryLevels";
+    case OpImageQuerySamples: return "OpImageQuerySamples";
+    case OpConvertFToU: return "OpConvertFToU";
+    case OpConvertFToS: return "OpConvertFToS";
+    case OpConvertSToF: return "OpConvertSToF";
+    case OpConvertUToF: return "OpConvertUToF";
+    case OpUConvert: return "OpUConvert";
+    case OpSConvert: return "OpSConvert";
+    case OpFConvert: return "OpFConvert";
+    case OpQuantizeToF16: return "OpQuantizeToF16";
+    case OpConvertPtrToU: return "OpConvertPtrToU";
+    case OpSatConvertSToU: return "OpSatConvertSToU";
+    case OpSatConvertUToS: return "OpSatConvertUToS";
+    case OpConvertUToPtr: return "OpConvertUToPtr";
+    case OpPtrCastToGeneric: return "OpPtrCastToGeneric";
+    case OpGenericCastToPtr: return "OpGenericCastToPtr";
+    case OpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit";
+    case OpBitcast: return "OpBitcast";
+    case OpSNegate: return "OpSNegate";
+    case OpFNegate: return "OpFNegate";
+    case OpIAdd: return "OpIAdd";
+    case OpFAdd: return "OpFAdd";
+    case OpISub: return "OpISub";
+    case OpFSub: return "OpFSub";
+    case OpIMul: return "OpIMul";
+    case OpFMul: return "OpFMul";
+    case OpUDiv: return "OpUDiv";
+    case OpSDiv: return "OpSDiv";
+    case OpFDiv: return "OpFDiv";
+    case OpUMod: return "OpUMod";
+    case OpSRem: return "OpSRem";
+    case OpSMod: return "OpSMod";
+    case OpFRem: return "OpFRem";
+    case OpFMod: return "OpFMod";
+    case OpVectorTimesScalar: return "OpVectorTimesScalar";
+    case OpMatrixTimesScalar: return "OpMatrixTimesScalar";
+    case OpVectorTimesMatrix: return "OpVectorTimesMatrix";
+    case OpMatrixTimesVector: return "OpMatrixTimesVector";
+    case OpMatrixTimesMatrix: return "OpMatrixTimesMatrix";
+    case OpOuterProduct: return "OpOuterProduct";
+    case OpDot: return "OpDot";
+    case OpIAddCarry: return "OpIAddCarry";
+    case OpISubBorrow: return "OpISubBorrow";
+    case OpUMulExtended: return "OpUMulExtended";
+    case OpSMulExtended: return "OpSMulExtended";
+    case OpAny: return "OpAny";
+    case OpAll: return "OpAll";
+    case OpIsNan: return "OpIsNan";
+    case OpIsInf: return "OpIsInf";
+    case OpIsFinite: return "OpIsFinite";
+    case OpIsNormal: return "OpIsNormal";
+    case OpSignBitSet: return "OpSignBitSet";
+    case OpLessOrGreater: return "OpLessOrGreater";
+    case OpOrdered: return "OpOrdered";
+    case OpUnordered: return "OpUnordered";
+    case OpLogicalEqual: return "OpLogicalEqual";
+    case OpLogicalNotEqual: return "OpLogicalNotEqual";
+    case OpLogicalOr: return "OpLogicalOr";
+    case OpLogicalAnd: return "OpLogicalAnd";
+    case OpLogicalNot: return "OpLogicalNot";
+    case OpSelect: return "OpSelect";
+    case OpIEqual: return "OpIEqual";
+    case OpINotEqual: return "OpINotEqual";
+    case OpUGreaterThan: return "OpUGreaterThan";
+    case OpSGreaterThan: return "OpSGreaterThan";
+    case OpUGreaterThanEqual: return "OpUGreaterThanEqual";
+    case OpSGreaterThanEqual: return "OpSGreaterThanEqual";
+    case OpULessThan: return "OpULessThan";
+    case OpSLessThan: return "OpSLessThan";
+    case OpULessThanEqual: return "OpULessThanEqual";
+    case OpSLessThanEqual: return "OpSLessThanEqual";
+    case OpFOrdEqual: return "OpFOrdEqual";
+    case OpFUnordEqual: return "OpFUnordEqual";
+    case OpFOrdNotEqual: return "OpFOrdNotEqual";
+    case OpFUnordNotEqual: return "OpFUnordNotEqual";
+    case OpFOrdLessThan: return "OpFOrdLessThan";
+    case OpFUnordLessThan: return "OpFUnordLessThan";
+    case OpFOrdGreaterThan: return "OpFOrdGreaterThan";
+    case OpFUnordGreaterThan: return "OpFUnordGreaterThan";
+    case OpFOrdLessThanEqual: return "OpFOrdLessThanEqual";
+    case OpFUnordLessThanEqual: return "OpFUnordLessThanEqual";
+    case OpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual";
+    case OpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual";
+    case OpShiftRightLogical: return "OpShiftRightLogical";
+    case OpShiftRightArithmetic: return "OpShiftRightArithmetic";
+    case OpShiftLeftLogical: return "OpShiftLeftLogical";
+    case OpBitwiseOr: return "OpBitwiseOr";
+    case OpBitwiseXor: return "OpBitwiseXor";
+    case OpBitwiseAnd: return "OpBitwiseAnd";
+    case OpNot: return "OpNot";
+    case OpBitFieldInsert: return "OpBitFieldInsert";
+    case OpBitFieldSExtract: return "OpBitFieldSExtract";
+    case OpBitFieldUExtract: return "OpBitFieldUExtract";
+    case OpBitReverse: return "OpBitReverse";
+    case OpBitCount: return "OpBitCount";
+    case OpDPdx: return "OpDPdx";
+    case OpDPdy: return "OpDPdy";
+    case OpFwidth: return "OpFwidth";
+    case OpDPdxFine: return "OpDPdxFine";
+    case OpDPdyFine: return "OpDPdyFine";
+    case OpFwidthFine: return "OpFwidthFine";
+    case OpDPdxCoarse: return "OpDPdxCoarse";
+    case OpDPdyCoarse: return "OpDPdyCoarse";
+    case OpFwidthCoarse: return "OpFwidthCoarse";
+    case OpEmitVertex: return "OpEmitVertex";
+    case OpEndPrimitive: return "OpEndPrimitive";
+    case OpEmitStreamVertex: return "OpEmitStreamVertex";
+    case OpEndStreamPrimitive: return "OpEndStreamPrimitive";
+    case OpControlBarrier: return "OpControlBarrier";
+    case OpMemoryBarrier: return "OpMemoryBarrier";
+    case OpAtomicLoad: return "OpAtomicLoad";
+    case OpAtomicStore: return "OpAtomicStore";
+    case OpAtomicExchange: return "OpAtomicExchange";
+    case OpAtomicCompareExchange: return "OpAtomicCompareExchange";
+    case OpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak";
+    case OpAtomicIIncrement: return "OpAtomicIIncrement";
+    case OpAtomicIDecrement: return "OpAtomicIDecrement";
+    case OpAtomicIAdd: return "OpAtomicIAdd";
+    case OpAtomicISub: return "OpAtomicISub";
+    case OpAtomicSMin: return "OpAtomicSMin";
+    case OpAtomicUMin: return "OpAtomicUMin";
+    case OpAtomicSMax: return "OpAtomicSMax";
+    case OpAtomicUMax: return "OpAtomicUMax";
+    case OpAtomicAnd: return "OpAtomicAnd";
+    case OpAtomicOr: return "OpAtomicOr";
+    case OpAtomicXor: return "OpAtomicXor";
+    case OpPhi: return "OpPhi";
+    case OpLoopMerge: return "OpLoopMerge";
+    case OpSelectionMerge: return "OpSelectionMerge";
+    case OpLabel: return "OpLabel";
+    case OpBranch: return "OpBranch";
+    case OpBranchConditional: return "OpBranchConditional";
+    case OpSwitch: return "OpSwitch";
+    case OpKill: return "OpKill";
+    case OpReturn: return "OpReturn";
+    case OpReturnValue: return "OpReturnValue";
+    case OpUnreachable: return "OpUnreachable";
+    case OpLifetimeStart: return "OpLifetimeStart";
+    case OpLifetimeStop: return "OpLifetimeStop";
+    case OpGroupAsyncCopy: return "OpGroupAsyncCopy";
+    case OpGroupWaitEvents: return "OpGroupWaitEvents";
+    case OpGroupAll: return "OpGroupAll";
+    case OpGroupAny: return "OpGroupAny";
+    case OpGroupBroadcast: return "OpGroupBroadcast";
+    case OpGroupIAdd: return "OpGroupIAdd";
+    case OpGroupFAdd: return "OpGroupFAdd";
+    case OpGroupFMin: return "OpGroupFMin";
+    case OpGroupUMin: return "OpGroupUMin";
+    case OpGroupSMin: return "OpGroupSMin";
+    case OpGroupFMax: return "OpGroupFMax";
+    case OpGroupUMax: return "OpGroupUMax";
+    case OpGroupSMax: return "OpGroupSMax";
+    case OpReadPipe: return "OpReadPipe";
+    case OpWritePipe: return "OpWritePipe";
+    case OpReservedReadPipe: return "OpReservedReadPipe";
+    case OpReservedWritePipe: return "OpReservedWritePipe";
+    case OpReserveReadPipePackets: return "OpReserveReadPipePackets";
+    case OpReserveWritePipePackets: return "OpReserveWritePipePackets";
+    case OpCommitReadPipe: return "OpCommitReadPipe";
+    case OpCommitWritePipe: return "OpCommitWritePipe";
+    case OpIsValidReserveId: return "OpIsValidReserveId";
+    case OpGetNumPipePackets: return "OpGetNumPipePackets";
+    case OpGetMaxPipePackets: return "OpGetMaxPipePackets";
+    case OpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets";
+    case OpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets";
+    case OpGroupCommitReadPipe: return "OpGroupCommitReadPipe";
+    case OpGroupCommitWritePipe: return "OpGroupCommitWritePipe";
+    case OpEnqueueMarker: return "OpEnqueueMarker";
+    case OpEnqueueKernel: return "OpEnqueueKernel";
+    case OpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount";
+    case OpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize";
+    case OpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize";
+    case OpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple";
+    case OpRetainEvent: return "OpRetainEvent";
+    case OpReleaseEvent: return "OpReleaseEvent";
+    case OpCreateUserEvent: return "OpCreateUserEvent";
+    case OpIsValidEvent: return "OpIsValidEvent";
+    case OpSetUserEventStatus: return "OpSetUserEventStatus";
+    case OpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo";
+    case OpGetDefaultQueue: return "OpGetDefaultQueue";
+    case OpBuildNDRange: return "OpBuildNDRange";
+    case OpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod";
+    case OpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod";
+    case OpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod";
+    case OpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod";
+    case OpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod";
+    case OpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod";
+    case OpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod";
+    case OpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod";
+    case OpImageSparseFetch: return "OpImageSparseFetch";
+    case OpImageSparseGather: return "OpImageSparseGather";
+    case OpImageSparseDrefGather: return "OpImageSparseDrefGather";
+    case OpImageSparseTexelsResident: return "OpImageSparseTexelsResident";
+    case OpNoLine: return "OpNoLine";
+    case OpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet";
+    case OpAtomicFlagClear: return "OpAtomicFlagClear";
+    case OpImageSparseRead: return "OpImageSparseRead";
+    case OpSizeOf: return "OpSizeOf";
+    case OpTypePipeStorage: return "OpTypePipeStorage";
+    case OpConstantPipeStorage: return "OpConstantPipeStorage";
+    case OpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage";
+    case OpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount";
+    case OpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups";
+    case OpTypeNamedBarrier: return "OpTypeNamedBarrier";
+    case OpNamedBarrierInitialize: return "OpNamedBarrierInitialize";
+    case OpMemoryNamedBarrier: return "OpMemoryNamedBarrier";
+    case OpModuleProcessed: return "OpModuleProcessed";
+    case OpExecutionModeId: return "OpExecutionModeId";
+    case OpDecorateId: return "OpDecorateId";
+    case OpGroupNonUniformElect: return "OpGroupNonUniformElect";
+    case OpGroupNonUniformAll: return "OpGroupNonUniformAll";
+    case OpGroupNonUniformAny: return "OpGroupNonUniformAny";
+    case OpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual";
+    case OpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast";
+    case OpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst";
+    case OpGroupNonUniformBallot: return "OpGroupNonUniformBallot";
+    case OpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot";
+    case OpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract";
+    case OpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount";
+    case OpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB";
+    case OpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB";
+    case OpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle";
+    case OpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor";
+    case OpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp";
+    case OpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown";
+    case OpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd";
+    case OpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd";
+    case OpGroupNonUniformIMul: return "OpGroupNonUniformIMul";
+    case OpGroupNonUniformFMul: return "OpGroupNonUniformFMul";
+    case OpGroupNonUniformSMin: return "OpGroupNonUniformSMin";
+    case OpGroupNonUniformUMin: return "OpGroupNonUniformUMin";
+    case OpGroupNonUniformFMin: return "OpGroupNonUniformFMin";
+    case OpGroupNonUniformSMax: return "OpGroupNonUniformSMax";
+    case OpGroupNonUniformUMax: return "OpGroupNonUniformUMax";
+    case OpGroupNonUniformFMax: return "OpGroupNonUniformFMax";
+    case OpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd";
+    case OpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr";
+    case OpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor";
+    case OpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd";
+    case OpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr";
+    case OpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor";
+    case OpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast";
+    case OpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap";
+    case OpCopyLogical: return "OpCopyLogical";
+    case OpPtrEqual: return "OpPtrEqual";
+    case OpPtrNotEqual: return "OpPtrNotEqual";
+    case OpPtrDiff: return "OpPtrDiff";
+    case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT";
+    case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT";
+    case OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT";
+    case OpTerminateInvocation: return "OpTerminateInvocation";
+    case OpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR";
+    case OpUntypedVariableKHR: return "OpUntypedVariableKHR";
+    case OpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR";
+    case OpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR";
+    case OpSubgroupBallotKHR: return "OpSubgroupBallotKHR";
+    case OpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR";
+    case OpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR";
+    case OpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR";
+    case OpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR";
+    case OpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR";
+    case OpSubgroupAllKHR: return "OpSubgroupAllKHR";
+    case OpSubgroupAnyKHR: return "OpSubgroupAnyKHR";
+    case OpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR";
+    case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
+    case OpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR";
+    case OpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR";
+    case OpTraceRayKHR: return "OpTraceRayKHR";
+    case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
+    case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
+    case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
+    case OpTerminateRayKHR: return "OpTerminateRayKHR";
+    case OpSDot: return "OpSDot";
+    case OpUDot: return "OpUDot";
+    case OpSUDot: return "OpSUDot";
+    case OpSDotAccSat: return "OpSDotAccSat";
+    case OpUDotAccSat: return "OpUDotAccSat";
+    case OpSUDotAccSat: return "OpSUDotAccSat";
+    case OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR";
+    case OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR";
+    case OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR";
+    case OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR";
+    case OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR";
+    case OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT";
+    case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT";
+    case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT";
+    case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
+    case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
+    case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
+    case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";
+    case OpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR";
+    case OpRayQueryProceedKHR: return "OpRayQueryProceedKHR";
+    case OpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR";
+    case OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM";
+    case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
+    case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
+    case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
+    case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
+    case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
+    case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
+    case OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
+    case OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
+    case OpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD";
+    case OpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD";
+    case OpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD";
+    case OpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD";
+    case OpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD";
+    case OpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD";
+    case OpFragmentFetchAMD: return "OpFragmentFetchAMD";
+    case OpReadClockKHR: return "OpReadClockKHR";
+    case OpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX";
+    case OpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX";
+    case OpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX";
+    case OpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX";
+    case OpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX";
+    case OpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX";
+    case OpConstantStringAMDX: return "OpConstantStringAMDX";
+    case OpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX";
+    case OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR";
+    case OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR";
+    case OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV";
+    case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
+    case OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV";
+    case OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV";
+    case OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV";
+    case OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV";
+    case OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV";
+    case OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV";
+    case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV";
+    case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
+    case OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV";
+    case OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV";
+    case OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV";
+    case OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV";
+    case OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV";
+    case OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV";
+    case OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV";
+    case OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV";
+    case OpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV";
+    case OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV";
+    case OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV";
+    case OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV";
+    case OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV";
+    case OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV";
+    case OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV";
+    case OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV";
+    case OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV";
+    case OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV";
+    case OpHitObjectIsHitNV: return "OpHitObjectIsHitNV";
+    case OpHitObjectIsMissNV: return "OpHitObjectIsMissNV";
+    case OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV";
+    case OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV";
+    case OpTypeHitObjectNV: return "OpTypeHitObjectNV";
+    case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
+    case OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV";
+    case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
+    case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
+    case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
+    case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
+    case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV";
+    case OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV";
+    case OpReportIntersectionKHR: return "OpReportIntersectionKHR";
+    case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
+    case OpTerminateRayNV: return "OpTerminateRayNV";
+    case OpTraceNV: return "OpTraceNV";
+    case OpTraceMotionNV: return "OpTraceMotionNV";
+    case OpTraceRayMotionNV: return "OpTraceRayMotionNV";
+    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
+    case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
+    case OpExecuteCallableNV: return "OpExecuteCallableNV";
+    case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV";
+    case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV";
+    case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV";
+    case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV";
+    case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV";
+    case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT";
+    case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT";
+    case OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV";
+    case OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV";
+    case OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV";
+    case OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV";
+    case OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV";
+    case OpTypeTensorViewNV: return "OpTypeTensorViewNV";
+    case OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV";
+    case OpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV";
+    case OpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV";
+    case OpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV";
+    case OpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV";
+    case OpCreateTensorViewNV: return "OpCreateTensorViewNV";
+    case OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV";
+    case OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV";
+    case OpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation";
+    case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT";
+    case OpTensorViewSetClipNV: return "OpTensorViewSetClipNV";
+    case OpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV";
+    case OpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV";
+    case OpConvertUToImageNV: return "OpConvertUToImageNV";
+    case OpConvertUToSamplerNV: return "OpConvertUToSamplerNV";
+    case OpConvertImageToUNV: return "OpConvertImageToUNV";
+    case OpConvertSamplerToUNV: return "OpConvertSamplerToUNV";
+    case OpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV";
+    case OpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV";
+    case OpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV";
+    case OpRawAccessChainNV: return "OpRawAccessChainNV";
+    case OpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL";
+    case OpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL";
+    case OpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL";
+    case OpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL";
+    case OpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL";
+    case OpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL";
+    case OpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL";
+    case OpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL";
+    case OpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL";
+    case OpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL";
+    case OpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL";
+    case OpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL";
+    case OpAbsISubINTEL: return "OpAbsISubINTEL";
+    case OpAbsUSubINTEL: return "OpAbsUSubINTEL";
+    case OpIAddSatINTEL: return "OpIAddSatINTEL";
+    case OpUAddSatINTEL: return "OpUAddSatINTEL";
+    case OpIAverageINTEL: return "OpIAverageINTEL";
+    case OpUAverageINTEL: return "OpUAverageINTEL";
+    case OpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL";
+    case OpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL";
+    case OpISubSatINTEL: return "OpISubSatINTEL";
+    case OpUSubSatINTEL: return "OpUSubSatINTEL";
+    case OpIMul32x16INTEL: return "OpIMul32x16INTEL";
+    case OpUMul32x16INTEL: return "OpUMul32x16INTEL";
+    case OpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL";
+    case OpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL";
+    case OpAsmTargetINTEL: return "OpAsmTargetINTEL";
+    case OpAsmINTEL: return "OpAsmINTEL";
+    case OpAsmCallINTEL: return "OpAsmCallINTEL";
+    case OpAtomicFMinEXT: return "OpAtomicFMinEXT";
+    case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
+    case OpAssumeTrueKHR: return "OpAssumeTrueKHR";
+    case OpExpectKHR: return "OpExpectKHR";
+    case OpDecorateString: return "OpDecorateString";
+    case OpMemberDecorateString: return "OpMemberDecorateString";
+    case OpVmeImageINTEL: return "OpVmeImageINTEL";
+    case OpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL";
+    case OpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL";
+    case OpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL";
+    case OpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL";
+    case OpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL";
+    case OpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL";
+    case OpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL";
+    case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL";
+    case OpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL";
+    case OpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL";
+    case OpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL";
+    case OpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL";
+    case OpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL";
+    case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL";
+    case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL";
+    case OpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL";
+    case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL";
+    case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL";
+    case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL";
+    case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL";
+    case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL";
+    case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL";
+    case OpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL";
+    case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL";
+    case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL";
+    case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL";
+    case OpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL";
+    case OpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL";
+    case OpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL";
+    case OpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL";
+    case OpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL";
+    case OpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL";
+    case OpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL";
+    case OpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL";
+    case OpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL";
+    case OpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL";
+    case OpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL";
+    case OpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL";
+    case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL";
+    case OpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL";
+    case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL";
+    case OpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL";
+    case OpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL";
+    case OpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL";
+    case OpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL";
+    case OpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL";
+    case OpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL";
+    case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL";
+    case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL";
+    case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL";
+    case OpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL";
+    case OpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL";
+    case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL";
+    case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL";
+    case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL";
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL";
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL";
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL";
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL";
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL";
+    case OpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL";
+    case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL";
+    case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL";
+    case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL";
+    case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL";
+    case OpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL";
+    case OpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL";
+    case OpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL";
+    case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL";
+    case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL";
+    case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL";
+    case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL";
+    case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL";
+    case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL";
+    case OpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL";
+    case OpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL";
+    case OpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL";
+    case OpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL";
+    case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL";
+    case OpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL";
+    case OpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL";
+    case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL";
+    case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL";
+    case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL";
+    case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL";
+    case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL";
+    case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL";
+    case OpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL";
+    case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL";
+    case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL";
+    case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL";
+    case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL";
+    case OpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL";
+    case OpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL";
+    case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL";
+    case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL";
+    case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL";
+    case OpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL";
+    case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL";
+    case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL";
+    case OpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL";
+    case OpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL";
+    case OpSaveMemoryINTEL: return "OpSaveMemoryINTEL";
+    case OpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL";
+    case OpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL";
+    case OpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL";
+    case OpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL";
+    case OpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL";
+    case OpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL";
+    case OpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL";
+    case OpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL";
+    case OpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL";
+    case OpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL";
+    case OpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL";
+    case OpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL";
+    case OpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL";
+    case OpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL";
+    case OpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL";
+    case OpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL";
+    case OpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL";
+    case OpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL";
+    case OpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL";
+    case OpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL";
+    case OpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL";
+    case OpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL";
+    case OpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL";
+    case OpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL";
+    case OpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL";
+    case OpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL";
+    case OpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL";
+    case OpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL";
+    case OpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL";
+    case OpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL";
+    case OpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL";
+    case OpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL";
+    case OpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL";
+    case OpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL";
+    case OpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL";
+    case OpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL";
+    case OpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL";
+    case OpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL";
+    case OpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL";
+    case OpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL";
+    case OpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL";
+    case OpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL";
+    case OpLoopControlINTEL: return "OpLoopControlINTEL";
+    case OpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL";
+    case OpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL";
+    case OpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL";
+    case OpFixedSqrtINTEL: return "OpFixedSqrtINTEL";
+    case OpFixedRecipINTEL: return "OpFixedRecipINTEL";
+    case OpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL";
+    case OpFixedSinINTEL: return "OpFixedSinINTEL";
+    case OpFixedCosINTEL: return "OpFixedCosINTEL";
+    case OpFixedSinCosINTEL: return "OpFixedSinCosINTEL";
+    case OpFixedSinPiINTEL: return "OpFixedSinPiINTEL";
+    case OpFixedCosPiINTEL: return "OpFixedCosPiINTEL";
+    case OpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL";
+    case OpFixedLogINTEL: return "OpFixedLogINTEL";
+    case OpFixedExpINTEL: return "OpFixedExpINTEL";
+    case OpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL";
+    case OpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL";
+    case OpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL";
+    case OpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL";
+    case OpFPGARegINTEL: return "OpFPGARegINTEL";
+    case OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR";
+    case OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR";
+    case OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR";
+    case OpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
+    case OpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR";
+    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
+    case OpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR";
+    case OpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
+    case OpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR";
+    case OpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR";
+    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
+    case OpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
+    case OpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR";
+    case OpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR";
+    case OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR";
+    case OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR";
+    case OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR";
+    case OpAtomicFAddEXT: return "OpAtomicFAddEXT";
+    case OpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL";
+    case OpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL";
+    case OpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL";
+    case OpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL";
+    case OpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL";
+    case OpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL";
+    case OpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL";
+    case OpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL";
+    case OpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL";
+    case OpArithmeticFenceEXT: return "OpArithmeticFenceEXT";
+    case OpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL";
+    case OpGroupIMulKHR: return "OpGroupIMulKHR";
+    case OpGroupFMulKHR: return "OpGroupFMulKHR";
+    case OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR";
+    case OpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR";
+    case OpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR";
+    case OpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR";
+    case OpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR";
+    case OpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR";
+    case OpMaskedGatherINTEL: return "OpMaskedGatherINTEL";
+    case OpMaskedScatterINTEL: return "OpMaskedScatterINTEL";
+    default: return "Unknown";
+    }
+}
+
 #endif /* SPV_ENABLE_UTILITY_CODE */
 
-// Overload operator| for mask bit combining
+// Overload bitwise operators for mask bit combining
 
 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
+inline ImageOperandsMask operator&(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) & unsigned(b)); }
+inline ImageOperandsMask operator^(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline ImageOperandsMask operator~(ImageOperandsMask a) { return ImageOperandsMask(~unsigned(a)); }
 inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
+inline FPFastMathModeMask operator&(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) & unsigned(b)); }
+inline FPFastMathModeMask operator^(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) ^ unsigned(b)); }
+inline FPFastMathModeMask operator~(FPFastMathModeMask a) { return FPFastMathModeMask(~unsigned(a)); }
 inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
+inline SelectionControlMask operator&(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) & unsigned(b)); }
+inline SelectionControlMask operator^(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) ^ unsigned(b)); }
+inline SelectionControlMask operator~(SelectionControlMask a) { return SelectionControlMask(~unsigned(a)); }
 inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
+inline LoopControlMask operator&(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) & unsigned(b)); }
+inline LoopControlMask operator^(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) ^ unsigned(b)); }
+inline LoopControlMask operator~(LoopControlMask a) { return LoopControlMask(~unsigned(a)); }
 inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
+inline FunctionControlMask operator&(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) & unsigned(b)); }
+inline FunctionControlMask operator^(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) ^ unsigned(b)); }
+inline FunctionControlMask operator~(FunctionControlMask a) { return FunctionControlMask(~unsigned(a)); }
 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
+inline MemorySemanticsMask operator&(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) & unsigned(b)); }
+inline MemorySemanticsMask operator^(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) ^ unsigned(b)); }
+inline MemorySemanticsMask operator~(MemorySemanticsMask a) { return MemorySemanticsMask(~unsigned(a)); }
 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
+inline MemoryAccessMask operator&(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) & unsigned(b)); }
+inline MemoryAccessMask operator^(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) ^ unsigned(b)); }
+inline MemoryAccessMask operator~(MemoryAccessMask a) { return MemoryAccessMask(~unsigned(a)); }
 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
+inline KernelProfilingInfoMask operator&(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) & unsigned(b)); }
+inline KernelProfilingInfoMask operator^(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) ^ unsigned(b)); }
+inline KernelProfilingInfoMask operator~(KernelProfilingInfoMask a) { return KernelProfilingInfoMask(~unsigned(a)); }
 inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
+inline RayFlagsMask operator&(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) & unsigned(b)); }
+inline RayFlagsMask operator^(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) ^ unsigned(b)); }
+inline RayFlagsMask operator~(RayFlagsMask a) { return RayFlagsMask(~unsigned(a)); }
 inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }
+inline FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); }
+inline FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); }
+inline FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); }
+inline CooperativeMatrixOperandsMask operator|(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) | unsigned(b)); }
+inline CooperativeMatrixOperandsMask operator&(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) & unsigned(b)); }
+inline CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); }
+inline CooperativeMatrixReduceMask operator|(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) | unsigned(b)); }
+inline CooperativeMatrixReduceMask operator&(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) & unsigned(b)); }
+inline CooperativeMatrixReduceMask operator^(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) ^ unsigned(b)); }
+inline CooperativeMatrixReduceMask operator~(CooperativeMatrixReduceMask a) { return CooperativeMatrixReduceMask(~unsigned(a)); }
+inline TensorAddressingOperandsMask operator|(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) | unsigned(b)); }
+inline TensorAddressingOperandsMask operator&(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) & unsigned(b)); }
+inline TensorAddressingOperandsMask operator^(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline TensorAddressingOperandsMask operator~(TensorAddressingOperandsMask a) { return TensorAddressingOperandsMask(~unsigned(a)); }
+inline RawAccessChainOperandsMask operator|(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) | unsigned(b)); }
+inline RawAccessChainOperandsMask operator&(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) & unsigned(b)); }
+inline RawAccessChainOperandsMask operator^(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline RawAccessChainOperandsMask operator~(RawAccessChainOperandsMask a) { return RawAccessChainOperandsMask(~unsigned(a)); }
 
 }  // end namespace spv
 

+ 4 - 0
3rdparty/spirv-cross/spirv_common.hpp

@@ -1410,6 +1410,10 @@ struct SPIRConstant : IVariant
 	// If true, this is a LUT, and should always be declared in the outer scope.
 	bool is_used_as_lut = false;
 
+	// If this is a null constant of array type with specialized length.
+	// May require special handling in initializer
+	bool is_null_array_specialized_length = false;
+
 	// For composites which are constant arrays, etc.
 	SmallVector<ConstantID> subconstants;
 

+ 10 - 6
3rdparty/spirv-cross/spirv_cross.cpp

@@ -587,6 +587,7 @@ const SPIRType &Compiler::expression_type(uint32_t id) const
 bool Compiler::expression_is_lvalue(uint32_t id) const
 {
 	auto &type = expression_type(id);
+
 	switch (type.basetype)
 	{
 	case SPIRType::SampledImage:
@@ -4910,13 +4911,16 @@ void Compiler::make_constant_null(uint32_t id, uint32_t type)
 		uint32_t parent_id = ir.increase_bound_by(1);
 		make_constant_null(parent_id, constant_type.parent_type);
 
-		if (!constant_type.array_size_literal.back())
-			SPIRV_CROSS_THROW("Array size of OpConstantNull must be a literal.");
-
-		SmallVector<uint32_t> elements(constant_type.array.back());
-		for (uint32_t i = 0; i < constant_type.array.back(); i++)
+		// The array size of OpConstantNull can be either literal or specialization constant.
+		// In the latter case, we cannot take the value as-is, as it can be changed to anything.
+		// Rather, we assume it to be *one* for the sake of initializer.
+		bool is_literal_array_size = constant_type.array_size_literal.back();
+		uint32_t count = is_literal_array_size ? constant_type.array.back() : 1;
+		SmallVector<uint32_t> elements(count);
+		for (uint32_t i = 0; i < count; i++)
 			elements[i] = parent_id;
-		set<SPIRConstant>(id, type, elements.data(), uint32_t(elements.size()), false);
+		auto &constant = set<SPIRConstant>(id, type, elements.data(), uint32_t(elements.size()), false);
+		constant.is_null_array_specialized_length = !is_literal_array_size;
 	}
 	else if (!constant_type.member_types.empty())
 	{

+ 11 - 6
3rdparty/spirv-cross/spirv_cross_parsed_ir.cpp

@@ -1050,16 +1050,21 @@ void ParsedIR::make_constant_null(uint32_t id, uint32_t type, bool add_to_typed_
 		uint32_t parent_id = increase_bound_by(1);
 		make_constant_null(parent_id, constant_type.parent_type, add_to_typed_id_set);
 
-		if (!constant_type.array_size_literal.back())
-			SPIRV_CROSS_THROW("Array size of OpConstantNull must be a literal.");
-
-		SmallVector<uint32_t> elements(constant_type.array.back());
-		for (uint32_t i = 0; i < constant_type.array.back(); i++)
+		// The array size of OpConstantNull can be either literal or specialization constant.
+		// In the latter case, we cannot take the value as-is, as it can be changed to anything.
+		// Rather, we assume it to be *one* for the sake of initializer.
+		bool is_literal_array_size = constant_type.array_size_literal.back();
+		uint32_t count = is_literal_array_size ? constant_type.array.back() : 1;
+
+		SmallVector<uint32_t> elements(count);
+		for (uint32_t i = 0; i < count; i++)
 			elements[i] = parent_id;
 
 		if (add_to_typed_id_set)
 			add_typed_id(TypeConstant, id);
-		variant_set<SPIRConstant>(ids[id], type, elements.data(), uint32_t(elements.size()), false).self = id;
+		auto& constant = variant_set<SPIRConstant>(ids[id], type, elements.data(), uint32_t(elements.size()), false);
+		constant.self = id;
+		constant.is_null_array_specialized_length = !is_literal_array_size;
 	}
 	else if (!constant_type.member_types.empty())
 	{

+ 102 - 16
3rdparty/spirv-cross/spirv_glsl.cpp

@@ -681,6 +681,8 @@ string CompilerGLSL::compile()
 	backend.requires_relaxed_precision_analysis = options.es || options.vulkan_semantics;
 	backend.support_precise_qualifier =
 			(!options.es && options.version >= 400) || (options.es && options.version >= 320);
+	backend.constant_null_initializer = "{ }";
+	backend.requires_matching_array_initializer = true;
 
 	if (is_legacy_es())
 		backend.support_case_fallthrough = false;
@@ -2841,7 +2843,7 @@ void CompilerGLSL::emit_uniform(const SPIRVariable &var)
 	statement(layout_for_variable(var), variable_decl(var), ";");
 }
 
-string CompilerGLSL::constant_value_macro_name(uint32_t id)
+string CompilerGLSL::constant_value_macro_name(uint32_t id) const
 {
 	return join("SPIRV_CROSS_CONSTANT_ID_", id);
 }
@@ -4955,12 +4957,16 @@ void CompilerGLSL::emit_polyfills(uint32_t polyfills, bool relaxed)
 // Subclasses may override to modify the return value.
 string CompilerGLSL::to_func_call_arg(const SPIRFunction::Parameter &, uint32_t id)
 {
+	// BDA expects pointers through function interface.
+	if (is_physical_pointer(expression_type(id)))
+		return to_pointer_expression(id);
+
 	// Make sure that we use the name of the original variable, and not the parameter alias.
 	uint32_t name_id = id;
 	auto *var = maybe_get<SPIRVariable>(id);
 	if (var && var->basevariable)
 		name_id = var->basevariable;
-	return to_expression(name_id);
+	return to_unpacked_expression(name_id);
 }
 
 void CompilerGLSL::force_temporary_and_recompile(uint32_t id)
@@ -5391,6 +5397,15 @@ string CompilerGLSL::to_non_uniform_aware_expression(uint32_t id)
 	return expr;
 }
 
+string CompilerGLSL::to_atomic_ptr_expression(uint32_t id)
+{
+	string expr = to_non_uniform_aware_expression(id);
+	// If we have naked pointer to POD, we need to dereference to get the proper ".value" resolve.
+	if (should_dereference(id))
+		expr = dereference_expression(expression_type(id), expr);
+	return expr;
+}
+
 string CompilerGLSL::to_expression(uint32_t id, bool register_expression_read)
 {
 	auto itr = invalid_expressions.find(id);
@@ -5898,6 +5913,11 @@ string CompilerGLSL::constant_expression(const SPIRConstant &c,
 	{
 		return backend.null_pointer_literal;
 	}
+	else if (c.is_null_array_specialized_length && backend.requires_matching_array_initializer)
+	{
+		require_extension_internal("GL_EXT_null_initializer");
+		return backend.constant_null_initializer;
+	}
 	else if (!c.subconstants.empty())
 	{
 		// Handles Arrays and structures.
@@ -6988,9 +7008,12 @@ void CompilerGLSL::emit_atomic_func_op(uint32_t result_type, uint32_t result_id,
 		require_extension_internal("GL_EXT_shader_atomic_float");
 	}
 
+	if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64)
+		require_extension_internal("GL_EXT_shader_atomic_int64");
+
 	forced_temporaries.insert(result_id);
 	emit_op(result_type, result_id,
-	        join(op, "(", to_non_uniform_aware_expression(op0), ", ",
+	        join(op, "(", to_atomic_ptr_expression(op0), ", ",
 	             to_unpacked_expression(op1), ")"), false);
 	flush_all_atomic_capable_variables();
 }
@@ -11249,7 +11272,7 @@ bool CompilerGLSL::should_dereference(uint32_t id)
 {
 	const auto &type = expression_type(id);
 	// Non-pointer expressions don't need to be dereferenced.
-	if (!type.pointer)
+	if (!is_pointer(type))
 		return false;
 
 	// Handles shouldn't be dereferenced either.
@@ -11257,8 +11280,9 @@ bool CompilerGLSL::should_dereference(uint32_t id)
 		return false;
 
 	// If id is a variable but not a phi variable, we should not dereference it.
+	// BDA passed around as parameters are always pointers.
 	if (auto *var = maybe_get<SPIRVariable>(id))
-		return var->phi_variable;
+		return (var->parameter && is_physical_pointer(type)) || var->phi_variable;
 
 	if (auto *expr = maybe_get<SPIRExpression>(id))
 	{
@@ -11291,6 +11315,16 @@ bool CompilerGLSL::should_dereference(uint32_t id)
 	return true;
 }
 
+bool CompilerGLSL::should_dereference_caller_param(uint32_t id)
+{
+	const auto &type = expression_type(id);
+	// BDA is always passed around as pointers.
+	if (is_physical_pointer(type))
+		return false;
+
+	return should_dereference(id);
+}
+
 bool CompilerGLSL::should_forward(uint32_t id) const
 {
 	// If id is a variable we will try to forward it regardless of force_temporary check below
@@ -13853,8 +13887,11 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
 		const char *increment = unsigned_type ? "0u" : "0";
 		emit_op(ops[0], ops[1],
 		        join(op, "(",
-		             to_non_uniform_aware_expression(ops[2]), ", ", increment, ")"), false);
+		             to_atomic_ptr_expression(ops[2]), ", ", increment, ")"), false);
 		flush_all_atomic_capable_variables();
+
+		if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64)
+			require_extension_internal("GL_EXT_shader_atomic_int64");
 		break;
 	}
 
@@ -13866,8 +13903,12 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
 		// Ignore semantics for now, probably only relevant to CL.
 		uint32_t val = ops[3];
 		const char *op = check_atomic_image(ptr) ? "imageAtomicExchange" : "atomicExchange";
-		statement(op, "(", to_non_uniform_aware_expression(ptr), ", ", to_expression(val), ");");
+		statement(op, "(", to_atomic_ptr_expression(ptr), ", ", to_expression(val), ");");
 		flush_all_atomic_capable_variables();
+
+		auto &type = expression_type(ptr);
+		if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64)
+			require_extension_internal("GL_EXT_shader_atomic_int64");
 		break;
 	}
 
@@ -13902,7 +13943,10 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
 				increment = "-1";
 
 			emit_op(ops[0], ops[1],
-			        join(op, "(", to_non_uniform_aware_expression(ops[2]), ", ", increment, ")"), false);
+			        join(op, "(", to_atomic_ptr_expression(ops[2]), ", ", increment, ")"), false);
+
+			if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64)
+				require_extension_internal("GL_EXT_shader_atomic_int64");
 		}
 
 		flush_all_atomic_capable_variables();
@@ -13921,9 +13965,13 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
 	{
 		const char *op = check_atomic_image(ops[2]) ? "imageAtomicAdd" : "atomicAdd";
 		forced_temporaries.insert(ops[1]);
-		auto expr = join(op, "(", to_non_uniform_aware_expression(ops[2]), ", -", to_enclosed_expression(ops[5]), ")");
+		auto expr = join(op, "(", to_atomic_ptr_expression(ops[2]), ", -", to_enclosed_expression(ops[5]), ")");
 		emit_op(ops[0], ops[1], expr, should_forward(ops[2]) && should_forward(ops[5]));
 		flush_all_atomic_capable_variables();
+
+		auto &type = get<SPIRType>(ops[0]);
+		if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64)
+			require_extension_internal("GL_EXT_shader_atomic_int64");
 		break;
 	}
 
@@ -14727,6 +14775,20 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction)
 		break;
 	}
 
+	case OpExtInstWithForwardRefsKHR:
+	{
+		uint32_t extension_set = ops[2];
+		auto ext = get<SPIRExtension>(extension_set).ext;
+		if (ext != SPIRExtension::SPV_debug_info &&
+		    ext != SPIRExtension::NonSemanticShaderDebugInfo &&
+		    ext != SPIRExtension::NonSemanticGeneric)
+		{
+			SPIRV_CROSS_THROW("Unexpected use of ExtInstWithForwardRefsKHR.");
+		}
+
+		break;
+	}
+
 	case OpExtInst:
 	{
 		uint32_t extension_set = ops[2];
@@ -15699,7 +15761,10 @@ string CompilerGLSL::argument_decl(const SPIRFunction::Parameter &arg)
 	auto &type = expression_type(arg.id);
 	const char *direction = "";
 
-	if (type.pointer)
+	if (is_pointer(type) &&
+	    (type.storage == StorageClassFunction ||
+	     type.storage == StorageClassPrivate ||
+	     type.storage == StorageClassOutput))
 	{
 		// If we're passing around block types to function, we really mean reference in a pointer sense,
 		// but DXC does not like inout for mesh blocks, so workaround that. out is technically not correct,
@@ -15773,13 +15838,24 @@ string CompilerGLSL::variable_decl(const SPIRVariable &variable)
 		else if (options.force_zero_initialized_variables && type_can_zero_initialize(type))
 			res += join(" = ", to_zero_initialized_expression(get_variable_data_type_id(variable)));
 	}
-	else if (variable.initializer && !variable_decl_is_remapped_storage(variable, StorageClassWorkgroup))
+	else if (variable.initializer)
 	{
-		uint32_t expr = variable.initializer;
-		if (ir.ids[expr].get_type() != TypeUndef)
-			res += join(" = ", to_initializer_expression(variable));
-		else if (options.force_zero_initialized_variables && type_can_zero_initialize(type))
-			res += join(" = ", to_zero_initialized_expression(get_variable_data_type_id(variable)));
+		if (!variable_decl_is_remapped_storage(variable, StorageClassWorkgroup))
+		{
+			uint32_t expr = variable.initializer;
+			if (ir.ids[expr].get_type() != TypeUndef)
+				res += join(" = ", to_initializer_expression(variable));
+			else if (options.force_zero_initialized_variables && type_can_zero_initialize(type))
+				res += join(" = ", to_zero_initialized_expression(get_variable_data_type_id(variable)));
+		}
+		else
+		{
+			// Workgroup memory requires special handling. First, it can only be Null-Initialized.
+			// GLSL will handle this with null initializer, while others require more work after the decl
+			require_extension_internal("GL_EXT_null_initializer");
+			if (!backend.constant_null_initializer.empty())
+				res += join(" = ", backend.constant_null_initializer);
+		}
 	}
 
 	return res;
@@ -16540,6 +16616,12 @@ void CompilerGLSL::emit_function(SPIRFunction &func, const Bitset &return_flags)
 			// Comes from MSL which can push global variables as local variables in main function.
 			add_local_variable_name(var.self);
 			statement(variable_decl(var), ";");
+
+			// "Real" workgroup variables in compute shaders needs extra caretaking.
+			// They need to be initialized with an extra routine as they come in arbitrary form.
+			if (var.storage == StorageClassWorkgroup && var.initializer)
+				emit_workgroup_initialization(var);
+
 			var.deferred_declaration = false;
 		}
 		else if (var.storage == StorageClassPrivate)
@@ -16646,6 +16728,10 @@ void CompilerGLSL::emit_fixup()
 	}
 }
 
+void CompilerGLSL::emit_workgroup_initialization(const SPIRVariable &)
+{
+}
+
 void CompilerGLSL::flush_phi(BlockID from, BlockID to)
 {
 	auto &child = get<SPIRBlock>(to);

+ 8 - 1
3rdparty/spirv-cross/spirv_glsl.hpp

@@ -297,6 +297,9 @@ public:
 		float_formatter = formatter;
 	}
 
+	// Returns the macro name corresponding to constant id
+	std::string constant_value_macro_name(uint32_t id) const;
+
 protected:
 	struct ShaderSubgroupSupportHelper
 	{
@@ -450,6 +453,7 @@ protected:
 	virtual std::string variable_decl(const SPIRType &type, const std::string &name, uint32_t id = 0);
 	virtual bool variable_decl_is_remapped_storage(const SPIRVariable &var, spv::StorageClass storage) const;
 	virtual std::string to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_t id);
+	virtual void emit_workgroup_initialization(const SPIRVariable &var);
 
 	struct TextureFunctionBaseArguments
 	{
@@ -622,6 +626,7 @@ protected:
 		const char *uint16_t_literal_suffix = "us";
 		const char *nonuniform_qualifier = "nonuniformEXT";
 		const char *boolean_mix_function = "mix";
+		std::string constant_null_initializer = "";
 		SPIRType::BaseType boolean_in_struct_remapped_type = SPIRType::Boolean;
 		bool swizzle_is_function = false;
 		bool shared_is_implied = false;
@@ -629,6 +634,7 @@ protected:
 		bool explicit_struct_type = false;
 		bool use_initializer_list = false;
 		bool use_typed_initializer_list = false;
+		bool requires_matching_array_initializer = false;
 		bool can_declare_struct_inline = true;
 		bool can_declare_arrays_inline = true;
 		bool native_row_major_matrix = true;
@@ -679,7 +685,6 @@ protected:
 	                                    const SmallVector<uint32_t> &indices);
 	void emit_block_chain(SPIRBlock &block);
 	void emit_hoisted_temporaries(SmallVector<std::pair<TypeID, ID>> &temporaries);
-	std::string constant_value_macro_name(uint32_t id);
 	int get_constant_mapping_to_workgroup_component(const SPIRConstant &constant) const;
 	void emit_constant(const SPIRConstant &constant);
 	void emit_specialization_constant_op(const SPIRConstantOp &constant);
@@ -695,6 +700,7 @@ protected:
 	void emit_variable_temporary_copies(const SPIRVariable &var);
 
 	bool should_dereference(uint32_t id);
+	bool should_dereference_caller_param(uint32_t id);
 	bool should_forward(uint32_t id) const;
 	bool should_suppress_usage_tracking(uint32_t id) const;
 	void emit_mix_op(uint32_t result_type, uint32_t id, uint32_t left, uint32_t right, uint32_t lerp);
@@ -794,6 +800,7 @@ protected:
 	SPIRExpression &emit_uninitialized_temporary_expression(uint32_t type, uint32_t id);
 	void append_global_func_args(const SPIRFunction &func, uint32_t index, SmallVector<std::string> &arglist);
 	std::string to_non_uniform_aware_expression(uint32_t id);
+	std::string to_atomic_ptr_expression(uint32_t id);
 	std::string to_expression(uint32_t id, bool register_expression_read = true);
 	std::string to_composite_constructor_expression(const SPIRType &parent_type, uint32_t id, bool block_like_type);
 	std::string to_rerolled_array_expression(const SPIRType &parent_type, const std::string &expr, const SPIRType &type);

+ 2 - 0
3rdparty/spirv-cross/spirv_hlsl.cpp

@@ -2476,12 +2476,14 @@ void CompilerHLSL::analyze_meshlet_writes()
 			set_decoration(op_type, DecorationPerPrimitiveEXT);
 
 		auto &arr = set<SPIRType>(op_arr, type);
+		arr.op = OpTypeArray;
 		arr.parent_type = type.self;
 		arr.array.push_back(per_primitive ? execution.output_primitives : execution.output_vertices);
 		arr.array_size_literal.push_back(true);
 
 		auto &ptr = set<SPIRType>(op_ptr, arr);
 		ptr.parent_type = arr.self;
+		ptr.op = OpTypePointer;
 		ptr.pointer = true;
 		ptr.pointer_depth++;
 		ptr.storage = StorageClassOutput;

+ 239 - 99
3rdparty/spirv-cross/spirv_msl.cpp

@@ -272,7 +272,9 @@ void CompilerMSL::build_implicit_builtins()
 	    (active_input_builtins.get(BuiltInVertexId) || active_input_builtins.get(BuiltInVertexIndex) ||
 	     active_input_builtins.get(BuiltInBaseVertex) || active_input_builtins.get(BuiltInInstanceId) ||
 	     active_input_builtins.get(BuiltInInstanceIndex) || active_input_builtins.get(BuiltInBaseInstance));
-	bool need_local_invocation_index = (msl_options.emulate_subgroups && active_input_builtins.get(BuiltInSubgroupId)) || is_mesh_shader();
+	bool need_local_invocation_index =
+		(msl_options.emulate_subgroups && active_input_builtins.get(BuiltInSubgroupId)) || is_mesh_shader() ||
+		needs_workgroup_zero_init;
 	bool need_workgroup_size = msl_options.emulate_subgroups && active_input_builtins.get(BuiltInNumSubgroups);
 	bool force_frag_depth_passthrough =
 	    get_execution_model() == ExecutionModelFragment && !uses_explicit_early_fragment_test() && need_subpass_input &&
@@ -1611,7 +1613,7 @@ string CompilerMSL::compile()
 	backend.nonuniform_qualifier = "";
 	backend.support_small_type_sampling_result = true;
 	backend.force_merged_mesh_block = false;
-	backend.force_gl_in_out_block = get_execution_model() == ExecutionModelMeshEXT;
+	backend.force_gl_in_out_block = false;
 	backend.supports_empty_struct = true;
 	backend.support_64bit_switch = true;
 	backend.boolean_in_struct_remapped_type = SPIRType::Short;
@@ -1649,6 +1651,7 @@ string CompilerMSL::compile()
 	analyze_image_and_sampler_usage();
 	analyze_sampled_image_usage();
 	analyze_interlocked_resource_usage();
+	analyze_workgroup_variables();
 	preprocess_op_codes();
 	build_implicit_builtins();
 
@@ -2322,7 +2325,14 @@ void CompilerMSL::extract_global_variables_from_function(uint32_t func_id, std::
 				v.storage = StorageClassWorkgroup;
 
 				// Ensure the existing variable has a valid name and the new variable has all the same meta info
-				set_name(arg_id, ensure_valid_name(to_name(arg_id), "v"));
+				if (ir.meta[arg_id].decoration.builtin)
+				{
+					set_name(arg_id, builtin_to_glsl(bi_type, var.storage));
+				}
+				else
+				{
+					set_name(arg_id, ensure_valid_name(to_name(arg_id), "v"));
+				}
 				ir.meta[next_id] = ir.meta[arg_id];
 			}
 			else if (is_builtin && has_decoration(p_type->self, DecorationBlock))
@@ -3187,41 +3197,58 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass
 		string mbr_name = ensure_valid_name(append_member_name(mbr_name_qual, var_type, mbr_idx) + (mbr_is_indexable ? join("_", i) : ""), "m");
 		set_member_name(ib_type.self, ib_mbr_idx, mbr_name);
 
+		// The SPIRV location of interface variable, used to obtain the initial
+		// MSL location (the location variable) and interface matching
+		uint32_t ir_location = UINT32_MAX;
+		bool has_member_loc_decor = has_member_decoration(var_type.self, mbr_idx, DecorationLocation);
+		bool has_var_loc_decor = has_decoration(var.self, DecorationLocation);
+		uint32_t orig_vecsize = UINT32_MAX;
+
+		if (has_member_loc_decor)
+			ir_location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation);
+		else if (has_var_loc_decor)
+			ir_location = get_accumulated_member_location(var, mbr_idx, meta.strip_array);
+		else if (is_builtin)
+		{
+			if (is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
+				ir_location = inputs_by_builtin[builtin].location;
+			else if (capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin))
+				ir_location = outputs_by_builtin[builtin].location;
+		}
+
 		// Once we determine the location of the first member within nested structures,
 		// from a var of the topmost structure, the remaining flattened members of
 		// the nested structures will have consecutive location values. At this point,
 		// we've recursively tunnelled into structs, arrays, and matrices, and are
 		// down to a single location for each member now.
-		if (!is_builtin && location != UINT32_MAX)
-		{
-			set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-			mark_location_as_used_by_shader(location, *usable_type, storage);
-			location++;
-		}
-		else if (has_member_decoration(var_type.self, mbr_idx, DecorationLocation))
-		{
-			location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation) + i;
-			set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-			mark_location_as_used_by_shader(location, *usable_type, storage);
-			location++;
-		}
-		else if (has_decoration(var.self, DecorationLocation))
-		{
-			location = get_accumulated_member_location(var, mbr_idx, meta.strip_array) + i;
-			set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-			mark_location_as_used_by_shader(location, *usable_type, storage);
-			location++;
-		}
-		else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
+		if (location == UINT32_MAX && ir_location != UINT32_MAX)
+			location = ir_location + i;
+
+		if (storage == StorageClassInput && (has_member_loc_decor || has_var_loc_decor))
 		{
-			location = inputs_by_builtin[builtin].location + i;
-			set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-			mark_location_as_used_by_shader(location, *usable_type, storage);
-			location++;
+			uint32_t component = 0;
+			uint32_t orig_mbr_type_id = usable_type->self;
+
+			if (has_member_loc_decor)
+				component = get_member_decoration(var_type.self, mbr_idx, DecorationComponent);
+
+			var.basetype = ensure_correct_input_type(var.basetype, location, component, 0, meta.strip_array);
+			mbr_type_id = ensure_correct_input_type(usable_type->self, location, component, 0, meta.strip_array);
+
+			// For members of the composite interface block, we only change the interface block type
+			// when interface matching happens. In the meantime, we store the original vector size
+			// and insert a swizzle when loading from metal interface block (see fixup below)
+			if (mbr_type_id != orig_mbr_type_id)
+				orig_vecsize = get<SPIRType>(orig_mbr_type_id).vecsize;
+
+			if (storage == StorageClassInput && pull_model_inputs.count(var.self))
+				ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective);
+			else
+				ib_type.member_types[ib_mbr_idx] = mbr_type_id;
 		}
-		else if (is_builtin && capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin))
+
+		if ((!is_builtin && location != UINT32_MAX) || (is_builtin && ir_location != UINT32_MAX))
 		{
-			location = outputs_by_builtin[builtin].location + i;
 			set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
 			mark_location_as_used_by_shader(location, *usable_type, storage);
 			location++;
@@ -3261,6 +3288,7 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass
 			case StorageClassInput:
 				entry_func.fixup_hooks_in.push_back([=, &var]() {
 					string lerp_call;
+					string swizzle;
 					if (pull_model_inputs.count(var.self))
 					{
 						if (is_centroid)
@@ -3270,7 +3298,9 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass
 						else
 							lerp_call = ".interpolate_at_center()";
 					}
-					statement(var_chain, " = ", ib_var_ref, ".", mbr_name, lerp_call, ";");
+					if (orig_vecsize != UINT32_MAX)
+						swizzle = vector_swizzle(orig_vecsize, 0);
+					statement(var_chain, " = ", ib_var_ref, ".", mbr_name, lerp_call, swizzle, ";");
 				});
 				break;
 
@@ -3338,6 +3368,55 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor
 			qual_var_name += ".interpolate_at_center()";
 	}
 
+	// The SPIRV location of interface variable, used to obtain the initial
+	// MSL location (the location variable) and interface matching
+	uint32_t ir_location = UINT32_MAX;
+	bool has_member_loc_decor = has_member_decoration(var_type.self, mbr_idx, DecorationLocation);
+	bool has_var_loc_decor = has_decoration(var.self, DecorationLocation);
+	uint32_t orig_vecsize = UINT32_MAX;
+
+	if (has_member_loc_decor)
+		ir_location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation);
+	else if (has_var_loc_decor)
+		ir_location = get_accumulated_member_location(var, mbr_idx, meta.strip_array);
+	else if (is_builtin)
+	{
+		if (is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
+			ir_location = inputs_by_builtin[builtin].location;
+		else if (capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin))
+			ir_location = outputs_by_builtin[builtin].location;
+	}
+
+	// Once we determine the location of the first member within nested structures,
+	// from a var of the topmost structure, the remaining flattened members of
+	// the nested structures will have consecutive location values. At this point,
+	// we've recursively tunnelled into structs, arrays, and matrices, and are
+	// down to a single location for each member now.
+	if (location == UINT32_MAX && ir_location != UINT32_MAX)
+		location = ir_location;
+
+	if (storage == StorageClassInput && (has_member_loc_decor || has_var_loc_decor))
+	{
+		uint32_t component = 0;
+		uint32_t orig_mbr_type_id = mbr_type_id;
+
+		if (has_member_loc_decor)
+			component = get_member_decoration(var_type.self, mbr_idx, DecorationComponent);
+
+		mbr_type_id = ensure_correct_input_type(mbr_type_id, location, component, 0, meta.strip_array);
+
+		// For members of the composite interface block, we only change the interface block type
+		// when interface matching happens. In the meantime, we store the original vector size
+		// and insert a swizzle when loading from metal interface block (see fixup below)
+		if (mbr_type_id != orig_mbr_type_id)
+			orig_vecsize = get<SPIRType>(orig_mbr_type_id).vecsize;
+
+		if (storage == StorageClassInput && pull_model_inputs.count(var.self))
+			ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective);
+		else
+			ib_type.member_types[ib_mbr_idx] = mbr_type_id;
+	}
+
 	bool flatten_stage_out = false;
 	string var_chain = var_chain_qual + "." + to_member_name(var_type, mbr_idx);
 	if (is_builtin && !meta.strip_array)
@@ -3353,7 +3432,11 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor
 		{
 		case StorageClassInput:
 			entry_func.fixup_hooks_in.push_back([=]() {
-				statement(var_chain, " = ", qual_var_name, ";");
+				string swizzle;
+				// Insert swizzle for widened interface block vector from interface matching
+				if (orig_vecsize != UINT32_MAX)
+					swizzle = vector_swizzle(orig_vecsize, 0);
+				statement(var_chain, " = ", qual_var_name, swizzle, ";");
 			});
 			break;
 
@@ -3369,64 +3452,12 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor
 		}
 	}
 
-	// Once we determine the location of the first member within nested structures,
-	// from a var of the topmost structure, the remaining flattened members of
-	// the nested structures will have consecutive location values. At this point,
-	// we've recursively tunnelled into structs, arrays, and matrices, and are
-	// down to a single location for each member now.
-	if (!is_builtin && location != UINT32_MAX)
+	if ((!is_builtin && location != UINT32_MAX) || (is_builtin && ir_location != UINT32_MAX))
 	{
 		set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
 		mark_location_as_used_by_shader(location, get<SPIRType>(mbr_type_id), storage);
 		location += type_to_location_count(get<SPIRType>(mbr_type_id));
 	}
-	else if (has_member_decoration(var_type.self, mbr_idx, DecorationLocation))
-	{
-		location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation);
-		uint32_t comp = get_member_decoration(var_type.self, mbr_idx, DecorationComponent);
-		if (storage == StorageClassInput)
-		{
-			mbr_type_id = ensure_correct_input_type(mbr_type_id, location, comp, 0, meta.strip_array);
-			var_type.member_types[mbr_idx] = mbr_type_id;
-			if (storage == StorageClassInput && pull_model_inputs.count(var.self))
-				ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective);
-			else
-				ib_type.member_types[ib_mbr_idx] = mbr_type_id;
-		}
-		set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-		mark_location_as_used_by_shader(location, get<SPIRType>(mbr_type_id), storage);
-		location += type_to_location_count(get<SPIRType>(mbr_type_id));
-	}
-	else if (has_decoration(var.self, DecorationLocation))
-	{
-		location = get_accumulated_member_location(var, mbr_idx, meta.strip_array);
-		if (storage == StorageClassInput)
-		{
-			mbr_type_id = ensure_correct_input_type(mbr_type_id, location, 0, 0, meta.strip_array);
-			var_type.member_types[mbr_idx] = mbr_type_id;
-			if (storage == StorageClassInput && pull_model_inputs.count(var.self))
-				ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective);
-			else
-				ib_type.member_types[ib_mbr_idx] = mbr_type_id;
-		}
-		set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-		mark_location_as_used_by_shader(location, get<SPIRType>(mbr_type_id), storage);
-		location += type_to_location_count(get<SPIRType>(mbr_type_id));
-	}
-	else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
-	{
-		location = inputs_by_builtin[builtin].location;
-		set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-		mark_location_as_used_by_shader(location, get<SPIRType>(mbr_type_id), storage);
-		location += type_to_location_count(get<SPIRType>(mbr_type_id));
-	}
-	else if (is_builtin && capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin))
-	{
-		location = outputs_by_builtin[builtin].location;
-		set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location);
-		mark_location_as_used_by_shader(location, get<SPIRType>(mbr_type_id), storage);
-		location += type_to_location_count(get<SPIRType>(mbr_type_id));
-	}
 
 	// Copy the component location, if present.
 	if (has_member_decoration(var_type.self, mbr_idx, DecorationComponent))
@@ -5550,6 +5581,10 @@ void CompilerMSL::emit_header()
 	if (suppress_incompatible_pointer_types_discard_qualifiers)
 		statement("#pragma clang diagnostic ignored \"-Wincompatible-pointer-types-discards-qualifiers\"");
 
+	// Disable warning about "sometimes unitialized" when zero-initializing simple threadgroup variables
+	if (suppress_sometimes_unitialized)
+		statement("#pragma clang diagnostic ignored \"-Wsometimes-uninitialized\"");
+
 	// Disable warning about missing braces for array<T> template to make arrays a value type
 	if (spv_function_implementations.count(SPVFuncImplUnsafeArray) != 0)
 		statement("#pragma clang diagnostic ignored \"-Wmissing-braces\"");
@@ -7916,8 +7951,16 @@ void CompilerMSL::emit_specialization_constants_and_structs()
 {
 	SpecializationConstant wg_x, wg_y, wg_z;
 	ID workgroup_size_id = get_work_group_size_specialization_constants(wg_x, wg_y, wg_z);
-	bool emitted = false;
+	if (workgroup_size_id == 0 && is_mesh_shader())
+	{
+		auto &execution = get_entry_point();
+		statement("constant uint3 ", builtin_to_glsl(BuiltInWorkgroupSize, StorageClassWorkgroup),
+		          " [[maybe_unused]] = ", "uint3(", execution.workgroup_size.x, ", ", execution.workgroup_size.y, ", ",
+		          execution.workgroup_size.z, ");");
+		statement("");
+	}
 
+	bool emitted = false;
 	unordered_set<uint32_t> declared_structs;
 	unordered_set<uint32_t> aligned_structs;
 
@@ -8022,14 +8065,18 @@ void CompilerMSL::emit_specialization_constants_and_structs()
 				else if (has_decoration(c.self, DecorationSpecId))
 				{
 					// Fallback to macro overrides.
+					uint32_t constant_id = get_decoration(c.self, DecorationSpecId);
 					c.specialization_constant_macro_name =
-					    constant_value_macro_name(get_decoration(c.self, DecorationSpecId));
+					    constant_value_macro_name(constant_id);
 
 					statement("#ifndef ", c.specialization_constant_macro_name);
 					statement("#define ", c.specialization_constant_macro_name, " ", constant_expression(c));
 					statement("#endif");
 					statement("constant ", sc_type_name, " ", sc_name, " = ", c.specialization_constant_macro_name,
 					          ";");
+
+					// Record the usage of macro
+					constant_macro_ids.insert(constant_id);
 				}
 				else
 				{
@@ -9978,11 +10025,11 @@ void CompilerMSL::emit_instruction(const Instruction &instruction)
 		auto &type = get<SPIRType>(ops[0]);
 		auto &input_type = expression_type(ops[2]);
 
-		if (opcode != OpBitcast || type.pointer || input_type.pointer)
+		if (opcode != OpBitcast || is_pointer(type) || is_pointer(input_type))
 		{
 			string op;
 
-			if (type.vecsize == 1 && input_type.vecsize == 1)
+			if ((type.vecsize == 1 || is_pointer(type)) && (input_type.vecsize == 1 || is_pointer(input_type)))
 				op = join("reinterpret_cast<", type_to_glsl(type), ">(", to_unpacked_expression(ops[2]), ")");
 			else if (input_type.vecsize == 2)
 				op = join("reinterpret_cast<", type_to_glsl(type), ">(as_type<ulong>(", to_unpacked_expression(ops[2]), "))");
@@ -12317,7 +12364,7 @@ string CompilerMSL::to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_
 	}
 	// Dereference pointer variables where needed.
 	// FIXME: This dereference is actually backwards. We should really just support passing pointer variables between functions.
-	else if (should_dereference(id))
+	else if (should_dereference_caller_param(id))
 		arg_str += dereference_expression(type, CompilerGLSL::to_func_call_arg(arg, id));
 	else
 		arg_str += CompilerGLSL::to_func_call_arg(arg, id);
@@ -13405,6 +13452,9 @@ bool CompilerMSL::uses_explicit_early_fragment_test()
 string CompilerMSL::get_argument_address_space(const SPIRVariable &argument)
 {
 	const auto &type = get<SPIRType>(argument.basetype);
+	// BDA is always passed around by value. There is no storage class for the argument itself.
+	if (is_physical_pointer(type))
+		return "";
 	return get_type_address_space(type, argument.self, true);
 }
 
@@ -15140,17 +15190,21 @@ const char *CompilerMSL::descriptor_address_space(uint32_t id, StorageClass stor
 string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg)
 {
 	auto &var = get<SPIRVariable>(arg.id);
-	auto &type = get_variable_data_type(var);
 	auto &var_type = get<SPIRType>(arg.type);
 	StorageClass type_storage = var_type.storage;
 
+	// Physical pointer types are passed by pointer, not reference.
+	auto &data_type = get_variable_data_type(var);
+	bool passed_by_value = is_physical_pointer(var_type);
+	auto &type = passed_by_value ? var_type : data_type;
+
 	// If we need to modify the name of the variable, make sure we use the original variable.
 	// Our alias is just a shadow variable.
 	uint32_t name_id = var.self;
 	if (arg.alias_global_variable && var.basevariable)
 		name_id = var.basevariable;
 
-	bool constref = !arg.alias_global_variable && is_pointer(var_type) && arg.write_count == 0;
+	bool constref = !arg.alias_global_variable && !passed_by_value && is_pointer(var_type) && arg.write_count == 0;
 	// Framebuffer fetch is plain value, const looks out of place, but it is not wrong.
 	if (type_is_msl_framebuffer_fetch(type))
 		constref = false;
@@ -15181,8 +15235,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg)
 
 	if (var.basevariable && (var.basevariable == stage_in_ptr_var_id || var.basevariable == stage_out_ptr_var_id))
 		decl = join(cv_qualifier, type_to_glsl(type, arg.id));
-	else if (builtin && builtin_type != spv::BuiltInPrimitiveTriangleIndicesEXT &&
-	         builtin_type != spv::BuiltInPrimitiveLineIndicesEXT && builtin_type != spv::BuiltInPrimitivePointIndicesEXT)
+	else if (builtin && !is_mesh_shader())
 	{
 		// Only use templated array for Clip/Cull distance when feasible.
 		// In other scenarios, we need need to override array length for tess levels (if used as outputs),
@@ -15234,7 +15287,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg)
 	else
 	{
 		// The type is a pointer type we need to emit cv_qualifier late.
-		if (is_pointer(type))
+		if (is_pointer(data_type))
 		{
 			decl = type_to_glsl(type, arg.id);
 			if (*cv_qualifier != '\0')
@@ -15246,8 +15299,8 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg)
 		}
 	}
 
-	if (!builtin && !is_pointer(var_type) &&
-	    (type_storage == StorageClassFunction || type_storage == StorageClassGeneric))
+	if (passed_by_value || (!builtin && !is_pointer(var_type) &&
+	                        (type_storage == StorageClassFunction || type_storage == StorageClassGeneric)))
 	{
 		// If the argument is a pure value and not an opaque type, we will pass by value.
 		if (msl_options.force_native_arrays && is_array(type))
@@ -15348,7 +15401,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg)
 		// for the reference has to go before the '&', but after the '*'.
 		if (!address_space.empty())
 		{
-			if (is_pointer(type))
+			if (is_pointer(data_type))
 			{
 				if (*cv_qualifier == '\0')
 					decl += ' ';
@@ -15357,6 +15410,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg)
 			else
 				decl = join(address_space, " ", decl);
 		}
+
 		decl += "&";
 		decl += " ";
 		decl += to_restrict(name_id, true);
@@ -17608,6 +17662,23 @@ void CompilerMSL::analyze_sampled_image_usage()
 	}
 }
 
+void CompilerMSL::analyze_workgroup_variables()
+{
+	ir.for_each_typed_id<SPIRVariable>([&](uint32_t, SPIRVariable &var) {
+		// If workgroup variables have initializer, it can only be ConstantNull (zero init)
+		if (var.storage == StorageClassWorkgroup && var.initializer)
+		{
+			needs_workgroup_zero_init = true;
+
+			// MSL compiler does not like the routine to initialize simple threadgroup variables,
+			// falsely claiming it is "sometimes uninitialized". Suppress it.
+			auto &type = get_variable_data_type(var);
+			if (type.array.empty() && type.member_types.empty())
+				suppress_sometimes_unitialized = true;
+		}
+	});
+}
+
 bool CompilerMSL::SampledImageScanner::handle(spv::Op opcode, const uint32_t *args, uint32_t length)
 {
 	switch (opcode)
@@ -19007,7 +19078,7 @@ void CompilerMSL::analyze_argument_buffers()
 				set_extended_member_decoration(buffer_type.self, member_index, SPIRVCrossDecorationOverlappingBinding);
 			member_index++;
 		}
-		
+
 		if (msl_options.replace_recursive_inputs && type_contains_recursion(buffer_type))
 		{
 			recursive_inputs.insert(type_id);
@@ -19167,6 +19238,11 @@ const char *CompilerMSL::get_combined_sampler_suffix() const
 	return sampler_name_suffix.c_str();
 }
 
+bool CompilerMSL::specialization_constant_is_macro(uint32_t const_id) const
+{
+	return constant_macro_ids.find(const_id) != constant_macro_ids.end();
+}
+
 void CompilerMSL::emit_block_hints(const SPIRBlock &)
 {
 }
@@ -19389,6 +19465,70 @@ void CompilerMSL::emit_mesh_tasks(SPIRBlock &block)
 	statement("return;");
 }
 
+void CompilerMSL::emit_workgroup_initialization(const SPIRVariable &var)
+{
+	auto &type = get_variable_data_type(var);
+
+	begin_scope();
+
+	if (type.array.empty() && type.member_types.empty())
+	{
+		// For simple shared variables, we just initialize it in thread 0 of the block
+		// We use short to represent bool for threadgroup variable to workaround compiler bug,
+		// so we do a temporary fixup here. Alas. (see the type_to_glsl method)
+		bool is_boolean = type.basetype == SPIRType::Boolean;
+		if (is_boolean)
+			type.basetype = SPIRType::Short;
+
+		statement("if (gl_LocalInvocationIndex == 0)");
+		begin_scope();
+		statement(to_name(var.self), " = ", to_initializer_expression(var), ";");
+		end_scope();
+
+		if (is_boolean)
+			type.basetype = SPIRType::Boolean;
+	}
+	else
+	{
+		// Otherwise, we use a loop to cooperatively initialize the memory within the group
+
+		// First, we define a few variable names;
+		string var_name = to_name(var.self);
+		string var_ptr_name = join(var_name, "_ptr");
+		string var_size_name = join(var_name, "_sz");
+		string var_pos_name = join(var_name, "_pos");
+		string var_stride_name = join(var_name, "_stride");
+		string var_ptr2_name = join(var_name, "_ptr2");
+
+		statement("threadgroup uint *", var_ptr_name, " = (threadgroup uint *)&", var_name, ";");
+		statement("uint ", var_size_name, " = ", "sizeof(", var_name, ");");
+		statement("uint ", var_pos_name, " = gl_LocalInvocationIndex;");
+		statement("uint ", var_stride_name, " = gl_WorkGroupSize.x * gl_WorkGroupSize.y * gl_WorkGroupSize.z;");
+
+		statement("while (sizeof(uint) * ", var_pos_name, " < ", var_size_name, ")");
+		begin_scope();
+		statement(var_ptr_name, "[", var_pos_name, "] = 0u;");
+		statement(var_pos_name, " += ", var_stride_name, ";");
+		end_scope();
+
+		statement("if (gl_LocalInvocationIndex == 0)");
+		begin_scope();
+		statement(var_pos_name, " = (", var_size_name, " / sizeof(uint)) * sizeof(uint);");
+		statement("threadgroup uchar *", var_ptr2_name, " = (threadgroup uchar *)&", var_name, ";");
+
+		statement("while (", var_pos_name, " < ", var_size_name, ")");
+		begin_scope();
+		statement(var_ptr2_name, "[", var_pos_name, "] = '\\0';");
+		statement(var_pos_name, "++;");
+		end_scope();
+		end_scope();
+	}
+
+	statement("threadgroup_barrier(mem_flags::mem_threadgroup);");
+
+	end_scope();
+}
+
 string CompilerMSL::additional_fixed_sample_mask_str() const
 {
 	char print_buffer[32];

+ 10 - 0
3rdparty/spirv-cross/spirv_msl.hpp

@@ -760,6 +760,11 @@ public:
 	void set_combined_sampler_suffix(const char *suffix);
 	const char *get_combined_sampler_suffix() const;
 
+	// Information about specialization constants that are translated into MSL macros
+	// instead of using function constant
+	// These must only be called after a successful call to CompilerMSL::compile().
+	bool specialization_constant_is_macro(uint32_t constant_id) const;
+
 protected:
 	// An enum of SPIR-V functions that are implemented in additional
 	// source code that is added to the shader if necessary.
@@ -876,6 +881,7 @@ protected:
 	void emit_mesh_entry_point();
 	void emit_mesh_outputs();
 	void emit_mesh_tasks(SPIRBlock &block) override;
+	void emit_workgroup_initialization(const SPIRVariable &var) override;
 
 	// Allow Metal to use the array<T> template to make arrays a value type
 	std::string type_to_array_glsl(const SPIRType &type, uint32_t variable_id) override;
@@ -1137,6 +1143,7 @@ protected:
 	void emit_store_statement(uint32_t lhs_expression, uint32_t rhs_expression) override;
 
 	void analyze_sampled_image_usage();
+	void analyze_workgroup_variables();
 
 	bool access_chain_needs_stage_io_builtin_translation(uint32_t base) override;
 	bool prepare_access_chain_for_scalar_access(std::string &expr, const SPIRType &type, spv::StorageClass storage,
@@ -1171,6 +1178,7 @@ protected:
 	std::set<std::string> pragma_lines;
 	std::set<std::string> typedef_lines;
 	SmallVector<uint32_t> vars_needing_early_declaration;
+	std::unordered_set<uint32_t> constant_macro_ids;
 
 	std::unordered_map<StageSetBinding, std::pair<MSLResourceBinding, bool>, InternalHasher> resource_bindings;
 	std::unordered_map<StageSetBinding, uint32_t, InternalHasher> resource_arg_buff_idx_to_binding_number;
@@ -1218,6 +1226,7 @@ protected:
 	bool needs_subgroup_size = false;
 	bool needs_sample_id = false;
 	bool needs_helper_invocation = false;
+	bool needs_workgroup_zero_init = false;
 	bool writes_to_depth = false;
 	std::string qual_pos_var_name;
 	std::string stage_in_var_name = "in";
@@ -1280,6 +1289,7 @@ protected:
 
 	bool suppress_missing_prototypes = false;
 	bool suppress_incompatible_pointer_types_discard_qualifiers = false;
+	bool suppress_sometimes_unitialized = false;
 
 	void add_spv_func_and_recompile(SPVFuncImpl spv_func);
 

+ 1 - 0
3rdparty/spirv-cross/spirv_parser.cpp

@@ -305,6 +305,7 @@ void Parser::parse(const Instruction &instruction)
 	}
 
 	case OpExtInst:
+	case OpExtInstWithForwardRefsKHR:
 	{
 		// The SPIR-V debug information extended instructions might come at global scope.
 		if (current_block)