yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Spencer Frickeremove trailing whitespace6309d623

main
270.7 KiB4203 linesraw
1//
2// Copyright (C) 2014-2015 LunarG, Inc.
3// Copyright (C) 2022-2025 Arm Limited.
4// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
5//
6// All rights reserved.
7//
8// Redistribution and use in source and binary forms, with or without
9// modification, are permitted provided that the following conditions
10// are met:
11//
12//    Redistributions of source code must retain the above copyright
13//    notice, this list of conditions and the following disclaimer.
14//
15//    Redistributions in binary form must reproduce the above
16//    copyright notice, this list of conditions and the following
17//    disclaimer in the documentation and/or other materials provided
18//    with the distribution.
19//
20//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
21//    contributors may be used to endorse or promote products derived
22//    from this software without specific prior written permission.
23//
24// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35// POSSIBILITY OF SUCH DAMAGE.
36
37//
38// 1) Programmatically fill in instruction/operand information.
39//    This can be used for disassembly, printing documentation, etc.
40//
41// 2) Print documentation from this parameterization.
42//
43
44#include "doc.h"
45#include "spvUtil.h"
46
47#include <cstdio>
48#include <cstring>
49#include <algorithm>
50#include <mutex>
51
52namespace spv {
53    extern "C" {
54        // Include C-based headers that don't have a namespace
55        #include "GLSL.ext.KHR.h"
56        #include "GLSL.ext.EXT.h"
57        #include "GLSL.ext.AMD.h"
58        #include "GLSL.ext.NV.h"
59        #include "GLSL.ext.ARM.h"
60        #include "GLSL.ext.QCOM.h"
61    }
62}
63
64namespace spv {
65
66//
67// Whole set of functions that translate enumerants to their text strings for
68// the specification (or their sanitized versions for auto-generating the
69// spirv headers.
70//
71// Also, for masks the ceilings are declared next to these, to help keep them in sync.
72// Ceilings should be
73//  - one more than the maximum value an enumerant takes on, for non-mask enumerants
74//    (for non-sparse enums, this is the number of enumerants)
75//  - the number of bits consumed by the set of masks
76//    (for non-sparse mask enums, this is the number of enumerants)
77//
78
79const char* SourceString(int source)
80{
81    switch (source) {
82    case 0:  return "Unknown";
83    case 1:  return "ESSL";
84    case 2:  return "GLSL";
85    case 3:  return "OpenCL_C";
86    case 4:  return "OpenCL_CPP";
87    case 5:  return "HLSL";
88
89    default: return "Bad";
90    }
91}
92
93const char* ExecutionModelString(int model)
94{
95    switch (model) {
96    case 0:  return "Vertex";
97    case 1:  return "TessellationControl";
98    case 2:  return "TessellationEvaluation";
99    case 3:  return "Geometry";
100    case 4:  return "Fragment";
101    case 5:  return "GLCompute";
102    case 6:  return "Kernel";
103    case (int)ExecutionModel::TaskNV: return "TaskNV";
104    case (int)ExecutionModel::MeshNV: return "MeshNV";
105    case (int)ExecutionModel::TaskEXT: return "TaskEXT";
106    case (int)ExecutionModel::MeshEXT: return "MeshEXT";
107
108    default: return "Bad";
109
110    case (int)ExecutionModel::RayGenerationKHR: return "RayGenerationKHR";
111    case (int)ExecutionModel::IntersectionKHR:  return "IntersectionKHR";
112    case (int)ExecutionModel::AnyHitKHR:        return "AnyHitKHR";
113    case (int)ExecutionModel::ClosestHitKHR:    return "ClosestHitKHR";
114    case (int)ExecutionModel::MissKHR:          return "MissKHR";
115    case (int)ExecutionModel::CallableKHR:      return "CallableKHR";
116    }
117}
118
119const char* AddressingString(int addr)
120{
121    switch (addr) {
122    case 0:  return "Logical";
123    case 1:  return "Physical32";
124    case 2:  return "Physical64";
125
126    case (int)AddressingModel::PhysicalStorageBuffer64EXT: return "PhysicalStorageBuffer64EXT";
127
128    default: return "Bad";
129    }
130}
131
132const char* MemoryString(int mem)
133{
134    switch (mem) {
135    case (int)MemoryModel::Simple:     return "Simple";
136    case (int)MemoryModel::GLSL450:    return "GLSL450";
137    case (int)MemoryModel::OpenCL:     return "OpenCL";
138    case (int)MemoryModel::VulkanKHR:  return "VulkanKHR";
139
140    default: return "Bad";
141    }
142}
143
144const int ExecutionModeCeiling = 40;
145
146const char* ExecutionModeString(int mode)
147{
148    switch (mode) {
149    case 0:  return "Invocations";
150    case 1:  return "SpacingEqual";
151    case 2:  return "SpacingFractionalEven";
152    case 3:  return "SpacingFractionalOdd";
153    case 4:  return "VertexOrderCw";
154    case 5:  return "VertexOrderCcw";
155    case 6:  return "PixelCenterInteger";
156    case 7:  return "OriginUpperLeft";
157    case 8:  return "OriginLowerLeft";
158    case 9:  return "EarlyFragmentTests";
159    case 10: return "PointMode";
160    case 11: return "Xfb";
161    case 12: return "DepthReplacing";
162    case 13: return "Bad";
163    case 14: return "DepthGreater";
164    case 15: return "DepthLess";
165    case 16: return "DepthUnchanged";
166    case 17: return "LocalSize";
167    case 18: return "LocalSizeHint";
168    case 19: return "InputPoints";
169    case 20: return "InputLines";
170    case 21: return "InputLinesAdjacency";
171    case 22: return "Triangles";
172    case 23: return "InputTrianglesAdjacency";
173    case 24: return "Quads";
174    case 25: return "Isolines";
175    case 26: return "OutputVertices";
176    case 27: return "OutputPoints";
177    case 28: return "OutputLineStrip";
178    case 29: return "OutputTriangleStrip";
179    case 30: return "VecTypeHint";
180    case 31: return "ContractionOff";
181    case 32: return "Bad";
182
183    case (int)ExecutionMode::Initializer:                   return "Initializer";
184    case (int)ExecutionMode::Finalizer:                     return "Finalizer";
185    case (int)ExecutionMode::SubgroupSize:                  return "SubgroupSize";
186    case (int)ExecutionMode::SubgroupsPerWorkgroup:         return "SubgroupsPerWorkgroup";
187    case (int)ExecutionMode::SubgroupsPerWorkgroupId:       return "SubgroupsPerWorkgroupId";
188    case (int)ExecutionMode::LocalSizeId:                   return "LocalSizeId";
189    case (int)ExecutionMode::LocalSizeHintId:               return "LocalSizeHintId";
190
191    case (int)ExecutionMode::PostDepthCoverage:             return "PostDepthCoverage";
192    case (int)ExecutionMode::DenormPreserve:                return "DenormPreserve";
193    case (int)ExecutionMode::DenormFlushToZero:             return "DenormFlushToZero";
194    case (int)ExecutionMode::SignedZeroInfNanPreserve:      return "SignedZeroInfNanPreserve";
195    case (int)ExecutionMode::RoundingModeRTE:               return "RoundingModeRTE";
196    case (int)ExecutionMode::RoundingModeRTZ:               return "RoundingModeRTZ";
197
198    case (int)ExecutionMode::NonCoherentTileAttachmentReadQCOM: return "NonCoherentTileAttachmentReadQCOM";
199    case (int)ExecutionMode::TileShadingRateQCOM:               return "TileShadingRateQCOM";
200
201    case (int)ExecutionMode::EarlyAndLateFragmentTestsAMD:  return "EarlyAndLateFragmentTestsAMD";
202    case (int)ExecutionMode::StencilRefUnchangedFrontAMD:   return "StencilRefUnchangedFrontAMD";
203    case (int)ExecutionMode::StencilRefLessFrontAMD:        return "StencilRefLessFrontAMD";
204    case (int)ExecutionMode::StencilRefGreaterBackAMD:      return "StencilRefGreaterBackAMD";
205    case (int)ExecutionMode::StencilRefReplacingEXT:        return "StencilRefReplacingEXT";
206    case (int)ExecutionMode::SubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow";
207    case (int)ExecutionMode::MaximallyReconvergesKHR:       return "MaximallyReconverges";
208
209    case (int)ExecutionMode::OutputLinesNV:                 return "OutputLinesNV";
210    case (int)ExecutionMode::OutputPrimitivesNV:            return "OutputPrimitivesNV";
211    case (int)ExecutionMode::OutputTrianglesNV:             return "OutputTrianglesNV";
212
213    // DerivativeGroupQuadsKHR is an alias of DerivativeGroupQuadsNV
214    case (int)ExecutionMode::DerivativeGroupQuadsKHR:       return "DerivativeGroupQuadsKHR";
215    // DerivativeGroupLinearKHR is an alias of DerivativeGroupLinearNV
216    case (int)ExecutionMode::DerivativeGroupLinearKHR:      return "DerivativeGroupLinearKHR";
217
218    case (int)ExecutionMode::PixelInterlockOrderedEXT:         return "PixelInterlockOrderedEXT";
219    case (int)ExecutionMode::PixelInterlockUnorderedEXT:       return "PixelInterlockUnorderedEXT";
220    case (int)ExecutionMode::SampleInterlockOrderedEXT:        return "SampleInterlockOrderedEXT";
221    case (int)ExecutionMode::SampleInterlockUnorderedEXT:      return "SampleInterlockUnorderedEXT";
222    case (int)ExecutionMode::ShadingRateInterlockOrderedEXT:   return "ShadingRateInterlockOrderedEXT";
223    case (int)ExecutionMode::ShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
224
225    case (int)ExecutionMode::MaxWorkgroupSizeINTEL:    return "MaxWorkgroupSizeINTEL";
226    case (int)ExecutionMode::MaxWorkDimINTEL:          return "MaxWorkDimINTEL";
227    case (int)ExecutionMode::NoGlobalOffsetINTEL:      return "NoGlobalOffsetINTEL";
228    case (int)ExecutionMode::NumSIMDWorkitemsINTEL:    return "NumSIMDWorkitemsINTEL";
229
230    case (int)ExecutionMode::RequireFullQuadsKHR:      return "RequireFullQuadsKHR";
231    case (int)ExecutionMode::QuadDerivativesKHR:       return "QuadDerivativesKHR";
232
233    case (int)ExecutionMode::NonCoherentColorAttachmentReadEXT:        return "NonCoherentColorAttachmentReadEXT";
234    case (int)ExecutionMode::NonCoherentDepthAttachmentReadEXT:        return "NonCoherentDepthAttachmentReadEXT";
235    case (int)ExecutionMode::NonCoherentStencilAttachmentReadEXT:      return "NonCoherentStencilAttachmentReadEXT";
236
237    case (int)ExecutionMode::Shader64BitIndexingEXT:                   return "Shader64BitIndexingEXT";
238
239    case (int)ExecutionMode::OpacityMicromapIdKHR:                     return "OpacityMicromapIdKHR";
240
241    case ExecutionModeCeiling:
242    default: return "Bad";
243    }
244}
245
246const char* StorageClassString(int StorageClass)
247{
248    switch (StorageClass) {
249    case 0:  return "UniformConstant";
250    case 1:  return "Input";
251    case 2:  return "Uniform";
252    case 3:  return "Output";
253    case 4:  return "Workgroup";
254    case 5:  return "CrossWorkgroup";
255    case 6:  return "Private";
256    case 7:  return "Function";
257    case 8:  return "Generic";
258    case 9:  return "PushConstant";
259    case 10: return "AtomicCounter";
260    case 11: return "Image";
261    case 12: return "StorageBuffer";
262
263    case (int)StorageClass::TileAttachmentQCOM:       return "TileAttachmentQCOM";
264    case (int)StorageClass::RayPayloadKHR:            return "RayPayloadKHR";
265    case (int)StorageClass::HitAttributeKHR:          return "HitAttributeKHR";
266    case (int)StorageClass::IncomingRayPayloadKHR:    return "IncomingRayPayloadKHR";
267    case (int)StorageClass::ShaderRecordBufferKHR:    return "ShaderRecordBufferKHR";
268    case (int)StorageClass::CallableDataKHR:          return "CallableDataKHR";
269    case (int)StorageClass::IncomingCallableDataKHR:  return "IncomingCallableDataKHR";
270
271    case (int)StorageClass::PhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
272    case (int)StorageClass::TaskPayloadWorkgroupEXT:  return "TaskPayloadWorkgroupEXT";
273    case (int)StorageClass::HitObjectAttributeNV:     return "HitObjectAttributeNV";
274    case (int)StorageClass::TileImageEXT:             return "TileImageEXT";
275    case (int)StorageClass::HitObjectAttributeEXT:    return "HitObjectAttributeEXT";
276    default: return "Bad";
277    }
278}
279
280const int DecorationCeiling = 45;
281
282const char* DecorationString(int decoration)
283{
284    switch (decoration) {
285    case 0:  return "RelaxedPrecision";
286    case 1:  return "SpecId";
287    case 2:  return "Block";
288    case 3:  return "BufferBlock";
289    case 4:  return "RowMajor";
290    case 5:  return "ColMajor";
291    case 6:  return "ArrayStride";
292    case 7:  return "MatrixStride";
293    case 8:  return "GLSLShared";
294    case 9:  return "GLSLPacked";
295    case 10: return "CPacked";
296    case 11: return "BuiltIn";
297    case 12: return "Bad";
298    case 13: return "NoPerspective";
299    case 14: return "Flat";
300    case 15: return "Patch";
301    case 16: return "Centroid";
302    case 17: return "Sample";
303    case 18: return "Invariant";
304    case 19: return "Restrict";
305    case 20: return "Aliased";
306    case 21: return "Volatile";
307    case 22: return "Constant";
308    case 23: return "Coherent";
309    case 24: return "NonWritable";
310    case 25: return "NonReadable";
311    case 26: return "Uniform";
312    case 27: return "Bad";
313    case 28: return "SaturatedConversion";
314    case 29: return "Stream";
315    case 30: return "Location";
316    case 31: return "Component";
317    case 32: return "Index";
318    case 33: return "Binding";
319    case 34: return "DescriptorSet";
320    case 35: return "Offset";
321    case 36: return "XfbBuffer";
322    case 37: return "XfbStride";
323    case 38: return "FuncParamAttr";
324    case 39: return "FP Rounding Mode";
325    case 40: return "FP Fast Math Mode";
326    case 41: return "Linkage Attributes";
327    case 42: return "NoContraction";
328    case 43: return "InputAttachmentIndex";
329    case 44: return "Alignment";
330
331    case DecorationCeiling:
332    default:  return "Bad";
333
334    case (int)Decoration::WeightTextureQCOM:           return "DecorationWeightTextureQCOM";
335    case (int)Decoration::BlockMatchTextureQCOM:       return "DecorationBlockMatchTextureQCOM";
336    case (int)Decoration::BlockMatchSamplerQCOM:       return "DecorationBlockMatchSamplerQCOM";
337    case (int)Decoration::ExplicitInterpAMD:           return "ExplicitInterpAMD";
338    case (int)Decoration::OverrideCoverageNV:          return "OverrideCoverageNV";
339    case (int)Decoration::PassthroughNV:               return "PassthroughNV";
340    case (int)Decoration::ViewportRelativeNV:          return "ViewportRelativeNV";
341    case (int)Decoration::SecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
342    case (int)Decoration::PerPrimitiveNV:              return "PerPrimitiveNV";
343    case (int)Decoration::PerViewNV:                   return "PerViewNV";
344    case (int)Decoration::PerTaskNV:                   return "PerTaskNV";
345
346    case (int)Decoration::PerVertexKHR:                return "PerVertexKHR";
347
348    case (int)Decoration::NonUniformEXT:           return "DecorationNonUniformEXT";
349    case (int)Decoration::HlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
350    case (int)Decoration::HlslSemanticGOOGLE:      return "DecorationHlslSemanticGOOGLE";
351    case (int)Decoration::RestrictPointerEXT:      return "DecorationRestrictPointerEXT";
352    case (int)Decoration::AliasedPointerEXT:       return "DecorationAliasedPointerEXT";
353
354    case (int)Decoration::HitObjectShaderRecordBufferNV:  return "DecorationHitObjectShaderRecordBufferNV";
355    case (int)Decoration::HitObjectShaderRecordBufferEXT:  return "DecorationHitObjectShaderRecordBufferEXT";
356
357    case (int)Decoration::SaturatedToLargestFloat8NormalConversionEXT: return "DecorationSaturatedToLargestFloat8NormalConversionEXT";
358
359    case (int)Decoration::BankNV:                        return "BankNV";
360    case (int)Decoration::MemberOffsetNV:                return "MemberOffsetNV";
361
362    case (int)Decoration::ArrayStrideIdEXT:        return "ArrayStrideIdEXT";
363    case (int)Decoration::OffsetIdEXT:             return "OffsetIdEXT";
364    case (int)Decoration::UTFEncodedKHR:           return "UTFEncodedKHR";
365
366    case (int)Decoration::CooperativeMatrixTransposeEXT: return "DecorationCooperativeMatrixTransposeEXT";
367    }
368}
369
370const char* BuiltInString(int builtIn)
371{
372    switch (builtIn) {
373    case 0:  return "Position";
374    case 1:  return "PointSize";
375    case 2:  return "Bad";
376    case 3:  return "ClipDistance";
377    case 4:  return "CullDistance";
378    case 5:  return "VertexId";
379    case 6:  return "InstanceId";
380    case 7:  return "PrimitiveId";
381    case 8:  return "InvocationId";
382    case 9:  return "Layer";
383    case 10: return "ViewportIndex";
384    case 11: return "TessLevelOuter";
385    case 12: return "TessLevelInner";
386    case 13: return "TessCoord";
387    case 14: return "PatchVertices";
388    case 15: return "FragCoord";
389    case 16: return "PointCoord";
390    case 17: return "FrontFacing";
391    case 18: return "SampleId";
392    case 19: return "SamplePosition";
393    case 20: return "SampleMask";
394    case 21: return "Bad";
395    case 22: return "FragDepth";
396    case 23: return "HelperInvocation";
397    case 24: return "NumWorkgroups";
398    case 25: return "WorkgroupSize";
399    case 26: return "WorkgroupId";
400    case 27: return "LocalInvocationId";
401    case 28: return "GlobalInvocationId";
402    case 29: return "LocalInvocationIndex";
403    case 30: return "WorkDim";
404    case 31: return "GlobalSize";
405    case 32: return "EnqueuedWorkgroupSize";
406    case 33: return "GlobalOffset";
407    case 34: return "GlobalLinearId";
408    case 35: return "Bad";
409    case 36: return "SubgroupSize";
410    case 37: return "SubgroupMaxSize";
411    case 38: return "NumSubgroups";
412    case 39: return "NumEnqueuedSubgroups";
413    case 40: return "SubgroupId";
414    case 41: return "SubgroupLocalInvocationId";
415    case 42: return "VertexIndex";                 // TBD: put next to VertexId?
416    case 43: return "InstanceIndex";               // TBD: put next to InstanceId?
417
418    case 4416: return "SubgroupEqMaskKHR";
419    case 4417: return "SubgroupGeMaskKHR";
420    case 4418: return "SubgroupGtMaskKHR";
421    case 4419: return "SubgroupLeMaskKHR";
422    case 4420: return "SubgroupLtMaskKHR";
423    case 4438: return "DeviceIndex";
424    case 4440: return "ViewIndex";
425    case 4424: return "BaseVertex";
426    case 4425: return "BaseInstance";
427    case 4426: return "DrawIndex";
428    case 4432: return "PrimitiveShadingRateKHR";
429    case 4444: return "ShadingRateKHR";
430    case 5014: return "FragStencilRefEXT";
431
432    case (int)BuiltIn::TileOffsetQCOM:     return "TileOffsetQCOM";
433    case (int)BuiltIn::TileDimensionQCOM:  return "TileDimensionQCOM";
434    case (int)BuiltIn::TileApronSizeQCOM:  return "TileApronSizeQCOM";
435
436    case 4992: return "BaryCoordNoPerspAMD";
437    case 4993: return "BaryCoordNoPerspCentroidAMD";
438    case 4994: return "BaryCoordNoPerspSampleAMD";
439    case 4995: return "BaryCoordSmoothAMD";
440    case 4996: return "BaryCoordSmoothCentroidAMD";
441    case 4997: return "BaryCoordSmoothSampleAMD";
442    case 4998: return "BaryCoordPullModelAMD";
443    case (int)BuiltIn::LaunchIdKHR:                 return "LaunchIdKHR";
444    case (int)BuiltIn::LaunchSizeKHR:               return "LaunchSizeKHR";
445    case (int)BuiltIn::WorldRayOriginKHR:           return "WorldRayOriginKHR";
446    case (int)BuiltIn::WorldRayDirectionKHR:        return "WorldRayDirectionKHR";
447    case (int)BuiltIn::ObjectRayOriginKHR:          return "ObjectRayOriginKHR";
448    case (int)BuiltIn::ObjectRayDirectionKHR:       return "ObjectRayDirectionKHR";
449    case (int)BuiltIn::RayTminKHR:                  return "RayTminKHR";
450    case (int)BuiltIn::RayTmaxKHR:                  return "RayTmaxKHR";
451    case (int)BuiltIn::CullMaskKHR:                 return "CullMaskKHR";
452    case (int)BuiltIn::HitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
453    case (int)BuiltIn::HitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV";
454    case (int)BuiltIn::HitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV";
455    case (int)BuiltIn::HitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV";
456    case (int)BuiltIn::HitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV";
457    case (int)BuiltIn::HitIsSphereNV:               return "HitIsSphereNV";
458    case (int)BuiltIn::HitIsLSSNV:                  return "HitIsLSSNV";
459    case (int)BuiltIn::HitSpherePositionNV:         return "HitSpherePositionNV";
460    case (int)BuiltIn::HitSphereRadiusNV:           return "HitSphereRadiusNV";
461    case (int)BuiltIn::HitLSSPositionsNV:           return "HitLSSPositionsNV";
462    case (int)BuiltIn::HitLSSRadiiNV:               return "HitLLSSRadiiNV";
463    case (int)BuiltIn::InstanceCustomIndexKHR:      return "InstanceCustomIndexKHR";
464    case (int)BuiltIn::RayGeometryIndexKHR:         return "RayGeometryIndexKHR";
465    case (int)BuiltIn::ObjectToWorldKHR:            return "ObjectToWorldKHR";
466    case (int)BuiltIn::WorldToObjectKHR:            return "WorldToObjectKHR";
467    case (int)BuiltIn::HitTNV:                      return "HitTNV";
468    case (int)BuiltIn::HitKindKHR:                  return "HitKindKHR";
469    case (int)BuiltIn::IncomingRayFlagsKHR:         return "IncomingRayFlagsKHR";
470    case (int)BuiltIn::ViewportMaskNV:              return "ViewportMaskNV";
471    case (int)BuiltIn::SecondaryPositionNV:         return "SecondaryPositionNV";
472    case (int)BuiltIn::SecondaryViewportMaskNV:     return "SecondaryViewportMaskNV";
473    case (int)BuiltIn::PositionPerViewNV:           return "PositionPerViewNV";
474    case (int)BuiltIn::ViewportMaskPerViewNV:       return "ViewportMaskPerViewNV";
475//    case (int)BuiltIn::FragmentSizeNV:             return "FragmentSizeNV";        // superseded by BuiltInFragSizeEXT
476//    case (int)BuiltIn::InvocationsPerPixelNV:      return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
477    case (int)BuiltIn::BaryCoordKHR:                return "BaryCoordKHR";
478    case (int)BuiltIn::BaryCoordNoPerspKHR:         return "BaryCoordNoPerspKHR";
479    case (int)BuiltIn::ClusterIDNV:                 return "ClusterIDNV";
480
481    case (int)BuiltIn::FragSizeEXT:                 return "FragSizeEXT";
482    case (int)BuiltIn::FragInvocationCountEXT:      return "FragInvocationCountEXT";
483
484    case 5264: return "FullyCoveredEXT";
485
486    case (int)BuiltIn::TaskCountNV:           return "TaskCountNV";
487    case (int)BuiltIn::PrimitiveCountNV:      return "PrimitiveCountNV";
488    case (int)BuiltIn::PrimitiveIndicesNV:    return "PrimitiveIndicesNV";
489    case (int)BuiltIn::ClipDistancePerViewNV: return "ClipDistancePerViewNV";
490    case (int)BuiltIn::CullDistancePerViewNV: return "CullDistancePerViewNV";
491    case (int)BuiltIn::LayerPerViewNV:        return "LayerPerViewNV";
492    case (int)BuiltIn::MeshViewCountNV:       return "MeshViewCountNV";
493    case (int)BuiltIn::MeshViewIndicesNV:     return "MeshViewIndicesNV";
494    case (int)BuiltIn::WarpsPerSMNV:           return "WarpsPerSMNV";
495    case (int)BuiltIn::SMCountNV:              return "SMCountNV";
496    case (int)BuiltIn::WarpIDNV:               return "WarpIDNV";
497    case (int)BuiltIn::SMIDNV:                 return "SMIDNV";
498    case (int)BuiltIn::CurrentRayTimeNV:       return "CurrentRayTimeNV";
499    case (int)BuiltIn::PrimitivePointIndicesEXT:        return "PrimitivePointIndicesEXT";
500    case (int)BuiltIn::PrimitiveLineIndicesEXT:         return "PrimitiveLineIndicesEXT";
501    case (int)BuiltIn::PrimitiveTriangleIndicesEXT:     return "PrimitiveTriangleIndicesEXT";
502    case (int)BuiltIn::CullPrimitiveEXT:                return "CullPrimitiveEXT";
503    case (int)BuiltIn::CoreCountARM:           return "CoreCountARM";
504    case (int)BuiltIn::CoreIDARM:              return "CoreIDARM";
505    case (int)BuiltIn::CoreMaxIDARM:           return "CoreMaxIDARM";
506    case (int)BuiltIn::WarpIDARM:              return "WarpIDARM";
507    case (int)BuiltIn::WarpMaxIDARM:           return "BuiltInWarpMaxIDARM";
508    case (int)BuiltIn::SamplerHeapEXT:         return "SamplerHeapEXT";
509    case (int)BuiltIn::ResourceHeapEXT:        return "ResourceHeapEXT";
510
511    default: return "Bad";
512    }
513}
514
515const char* DimensionString(int dim)
516{
517    switch (dim) {
518    case 0:  return "1D";
519    case 1:  return "2D";
520    case 2:  return "3D";
521    case 3:  return "Cube";
522    case 4:  return "Rect";
523    case 5:  return "Buffer";
524    case 6:  return "SubpassData";
525    case (int)Dim::TileImageDataEXT:  return "TileImageDataEXT";
526
527    default: return "Bad";
528    }
529}
530
531const char* SamplerAddressingModeString(int mode)
532{
533    switch (mode) {
534    case 0:  return "None";
535    case 1:  return "ClampToEdge";
536    case 2:  return "Clamp";
537    case 3:  return "Repeat";
538    case 4:  return "RepeatMirrored";
539
540    default: return "Bad";
541    }
542}
543
544const char* SamplerFilterModeString(int mode)
545{
546    switch (mode) {
547    case 0: return "Nearest";
548    case 1: return "Linear";
549
550    default: return "Bad";
551    }
552}
553
554const char* ImageFormatString(int format)
555{
556    switch (format) {
557    case  0: return "Unknown";
558
559    // ES/Desktop float
560    case  1: return "Rgba32f";
561    case  2: return "Rgba16f";
562    case  3: return "R32f";
563    case  4: return "Rgba8";
564    case  5: return "Rgba8Snorm";
565
566    // Desktop float
567    case  6: return "Rg32f";
568    case  7: return "Rg16f";
569    case  8: return "R11fG11fB10f";
570    case  9: return "R16f";
571    case 10: return "Rgba16";
572    case 11: return "Rgb10A2";
573    case 12: return "Rg16";
574    case 13: return "Rg8";
575    case 14: return "R16";
576    case 15: return "R8";
577    case 16: return "Rgba16Snorm";
578    case 17: return "Rg16Snorm";
579    case 18: return "Rg8Snorm";
580    case 19: return "R16Snorm";
581    case 20: return "R8Snorm";
582
583    // ES/Desktop int
584    case 21: return "Rgba32i";
585    case 22: return "Rgba16i";
586    case 23: return "Rgba8i";
587    case 24: return "R32i";
588
589    // Desktop int
590    case 25: return "Rg32i";
591    case 26: return "Rg16i";
592    case 27: return "Rg8i";
593    case 28: return "R16i";
594    case 29: return "R8i";
595
596    // ES/Desktop uint
597    case 30: return "Rgba32ui";
598    case 31: return "Rgba16ui";
599    case 32: return "Rgba8ui";
600    case 33: return "R32ui";
601
602    // Desktop uint
603    case 34: return "Rgb10a2ui";
604    case 35: return "Rg32ui";
605    case 36: return "Rg16ui";
606    case 37: return "Rg8ui";
607    case 38: return "R16ui";
608    case 39: return "R8ui";
609    case 40: return "R64ui";
610    case 41: return "R64i";
611
612    default:
613        return "Bad";
614    }
615}
616
617const char* ImageChannelOrderString(int format)
618{
619    switch (format) {
620    case 0:  return "R";
621    case 1:  return "A";
622    case 2:  return "RG";
623    case 3:  return "RA";
624    case 4:  return "RGB";
625    case 5:  return "RGBA";
626    case 6:  return "BGRA";
627    case 7:  return "ARGB";
628    case 8:  return "Intensity";
629    case 9:  return "Luminance";
630    case 10: return "Rx";
631    case 11: return "RGx";
632    case 12: return "RGBx";
633    case 13: return "Depth";
634    case 14: return "DepthStencil";
635    case 15: return "sRGB";
636    case 16: return "sRGBx";
637    case 17: return "sRGBA";
638    case 18: return "sBGRA";
639
640    default:
641        return "Bad";
642    }
643}
644
645const char* ImageChannelDataTypeString(int type)
646{
647    switch (type)
648    {
649    case 0: return "SnormInt8";
650    case 1: return "SnormInt16";
651    case 2: return "UnormInt8";
652    case 3: return "UnormInt16";
653    case 4: return "UnormShort565";
654    case 5: return "UnormShort555";
655    case 6: return "UnormInt101010";
656    case 7: return "SignedInt8";
657    case 8: return "SignedInt16";
658    case 9: return "SignedInt32";
659    case 10: return "UnsignedInt8";
660    case 11: return "UnsignedInt16";
661    case 12: return "UnsignedInt32";
662    case 13: return "HalfFloat";
663    case 14: return "Float";
664    case 15: return "UnormInt24";
665    case 16: return "UnormInt101010_2";
666
667    default:
668        return "Bad";
669    }
670}
671
672const int ImageOperandsCeiling = 17;
673
674const char* ImageOperandsString(int format)
675{
676    switch (format) {
677    case (int)ImageOperandsShift::Bias:                    return "Bias";
678    case (int)ImageOperandsShift::Lod:                     return "Lod";
679    case (int)ImageOperandsShift::Grad:                    return "Grad";
680    case (int)ImageOperandsShift::ConstOffset:             return "ConstOffset";
681    case (int)ImageOperandsShift::Offset:                  return "Offset";
682    case (int)ImageOperandsShift::ConstOffsets:            return "ConstOffsets";
683    case (int)ImageOperandsShift::Sample:                  return "Sample";
684    case (int)ImageOperandsShift::MinLod:                  return "MinLod";
685    case (int)ImageOperandsShift::MakeTexelAvailableKHR:   return "MakeTexelAvailableKHR";
686    case (int)ImageOperandsShift::MakeTexelVisibleKHR:     return "MakeTexelVisibleKHR";
687    case (int)ImageOperandsShift::NonPrivateTexelKHR:      return "NonPrivateTexelKHR";
688    case (int)ImageOperandsShift::VolatileTexelKHR:        return "VolatileTexelKHR";
689    case (int)ImageOperandsShift::SignExtend:              return "SignExtend";
690    case (int)ImageOperandsShift::ZeroExtend:              return "ZeroExtend";
691    case (int)ImageOperandsShift::Nontemporal:             return "Nontemporal";
692    case (int)ImageOperandsShift::Offsets:                 return "Offsets";
693
694    case ImageOperandsCeiling:
695    default:
696        return "Bad";
697    }
698}
699
700const char* FPFastMathString(int mode)
701{
702    switch (mode) {
703    case 0: return "NotNaN";
704    case 1: return "NotInf";
705    case 2: return "NSZ";
706    case 3: return "AllowRecip";
707    case 4: return "Fast";
708
709    default:     return "Bad";
710    }
711}
712
713const char* FPRoundingModeString(int mode)
714{
715    switch (mode) {
716    case 0:  return "RTE";
717    case 1:  return "RTZ";
718    case 2:  return "RTP";
719    case 3:  return "RTN";
720
721    default: return "Bad";
722    }
723}
724
725const char* LinkageTypeString(int type)
726{
727    switch (type) {
728    case 0:  return "Export";
729    case 1:  return "Import";
730
731    default: return "Bad";
732    }
733}
734
735const char* FuncParamAttrString(int attr)
736{
737    switch (attr) {
738    case 0:  return "Zext";
739    case 1:  return "Sext";
740    case 2:  return "ByVal";
741    case 3:  return "Sret";
742    case 4:  return "NoAlias";
743    case 5:  return "NoCapture";
744    case 6:  return "NoWrite";
745    case 7:  return "NoReadWrite";
746
747    default: return "Bad";
748    }
749}
750
751const char* AccessQualifierString(int attr)
752{
753    switch (attr) {
754    case 0:  return "ReadOnly";
755    case 1:  return "WriteOnly";
756    case 2:  return "ReadWrite";
757
758    default: return "Bad";
759    }
760}
761
762const int SelectControlCeiling = 2;
763
764const char* SelectControlString(int cont)
765{
766    switch (cont) {
767    case 0:  return "Flatten";
768    case 1:  return "DontFlatten";
769
770    case SelectControlCeiling:
771    default: return "Bad";
772    }
773}
774
775const int LoopControlCeiling = (int)LoopControlShift::PartialCount + 1;
776
777const char* LoopControlString(int cont)
778{
779    switch (cont) {
780    case (int)LoopControlShift::Unroll:             return "Unroll";
781    case (int)LoopControlShift::DontUnroll:         return "DontUnroll";
782    case (int)LoopControlShift::DependencyInfinite: return "DependencyInfinite";
783    case (int)LoopControlShift::DependencyLength:   return "DependencyLength";
784    case (int)LoopControlShift::MinIterations:      return "MinIterations";
785    case (int)LoopControlShift::MaxIterations:      return "MaxIterations";
786    case (int)LoopControlShift::IterationMultiple:  return "IterationMultiple";
787    case (int)LoopControlShift::PeelCount:          return "PeelCount";
788    case (int)LoopControlShift::PartialCount:       return "PartialCount";
789    case (int)LoopControlShift::MultipleWaitQueuesQCOM: return "MultipeWaitQueuesQCOM";
790
791    case LoopControlCeiling:
792    default: return "Bad";
793    }
794}
795
796const int FunctionControlCeiling = 4;
797
798const char* FunctionControlString(int cont)
799{
800    switch (cont) {
801    case 0:  return "Inline";
802    case 1:  return "DontInline";
803    case 2:  return "Pure";
804    case 3:  return "Const";
805
806    case FunctionControlCeiling:
807    default: return "Bad";
808    }
809}
810
811const char* MemorySemanticsString(int mem)
812{
813    // Note: No bits set (None) means "Relaxed"
814    switch (mem) {
815    case 0: return "Bad"; // Note: this is a placeholder for 'Consume'
816    case 1: return "Acquire";
817    case 2: return "Release";
818    case 3: return "AcquireRelease";
819    case 4: return "SequentiallyConsistent";
820    case 5: return "Bad"; // Note: reserved for future expansion
821    case 6: return "UniformMemory";
822    case 7: return "SubgroupMemory";
823    case 8: return "WorkgroupMemory";
824    case 9: return "CrossWorkgroupMemory";
825    case 10: return "AtomicCounterMemory";
826    case 11: return "ImageMemory";
827
828    default:     return "Bad";
829    }
830}
831
832const int MemoryAccessCeiling = 6;
833
834const char* MemoryAccessString(int mem)
835{
836    switch (mem) {
837    case (int)MemoryAccessShift::Volatile:                 return "Volatile";
838    case (int)MemoryAccessShift::Aligned:                  return "Aligned";
839    case (int)MemoryAccessShift::Nontemporal:              return "Nontemporal";
840    case (int)MemoryAccessShift::MakePointerAvailableKHR:  return "MakePointerAvailableKHR";
841    case (int)MemoryAccessShift::MakePointerVisibleKHR:    return "MakePointerVisibleKHR";
842    case (int)MemoryAccessShift::NonPrivatePointerKHR:     return "NonPrivatePointerKHR";
843
844    default: return "Bad";
845    }
846}
847
848const int CooperativeMatrixOperandsCeiling = 6;
849
850const char* CooperativeMatrixOperandsString(int op)
851{
852    switch (op) {
853    case (int)CooperativeMatrixOperandsShift::MatrixASignedComponentsKHR:  return "ASignedComponentsKHR";
854    case (int)CooperativeMatrixOperandsShift::MatrixBSignedComponentsKHR:  return "BSignedComponentsKHR";
855    case (int)CooperativeMatrixOperandsShift::MatrixCSignedComponentsKHR:  return "CSignedComponentsKHR";
856    case (int)CooperativeMatrixOperandsShift::MatrixResultSignedComponentsKHR:  return "ResultSignedComponentsKHR";
857    case (int)CooperativeMatrixOperandsShift::SaturatingAccumulationKHR:   return "SaturatingAccumulationKHR";
858
859    default: return "Bad";
860    }
861}
862
863const int TensorAddressingOperandsCeiling = 4;
864
865const char* TensorAddressingOperandsString(int op)
866{
867    switch (op) {
868    case (int)TensorAddressingOperandsShift::TensorView:        return "TensorView";
869    case (int)TensorAddressingOperandsShift::DecodeFunc:        return "DecodeFunc";
870    case (int)TensorAddressingOperandsShift::DecodeVectorFunc:  return "DecodeVectorFunc";
871
872    default: return "Bad";
873    }
874}
875
876const char* ScopeString(int mem)
877{
878    switch (mem) {
879    case 0:  return "CrossDevice";
880    case 1:  return "Device";
881    case 2:  return "Workgroup";
882    case 3:  return "Subgroup";
883    case 4:  return "Invocation";
884
885    default: return "Bad";
886    }
887}
888
889const char* GroupOperationString(int gop)
890{
891
892    switch (gop)
893    {
894    case (int)GroupOperation::Reduce:  return "Reduce";
895    case (int)GroupOperation::InclusiveScan:  return "InclusiveScan";
896    case (int)GroupOperation::ExclusiveScan:  return "ExclusiveScan";
897    case (int)GroupOperation::ClusteredReduce:  return "ClusteredReduce";
898    case (int)GroupOperation::PartitionedReduceNV:  return "PartitionedReduceNV";
899    case (int)GroupOperation::PartitionedInclusiveScanNV:  return "PartitionedInclusiveScanNV";
900    case (int)GroupOperation::PartitionedExclusiveScanNV:  return "PartitionedExclusiveScanNV";
901
902    default: return "Bad";
903    }
904}
905
906const char* KernelEnqueueFlagsString(int flag)
907{
908    switch (flag)
909    {
910    case 0:  return "NoWait";
911    case 1:  return "WaitKernel";
912    case 2:  return "WaitWorkGroup";
913
914    default: return "Bad";
915    }
916}
917
918const char* KernelProfilingInfoString(int info)
919{
920    switch (info)
921    {
922    case 0:  return "CmdExecTime";
923
924    default: return "Bad";
925    }
926}
927
928const char* CapabilityString(int info)
929{
930    switch (info)
931    {
932    case 0:  return "Matrix";
933    case 1:  return "Shader";
934    case 2:  return "Geometry";
935    case 3:  return "Tessellation";
936    case 4:  return "Addresses";
937    case 5:  return "Linkage";
938    case 6:  return "Kernel";
939    case 7:  return "Vector16";
940    case 8:  return "Float16Buffer";
941    case 9:  return "Float16";
942    case 10: return "Float64";
943    case 11: return "Int64";
944    case 12: return "Int64Atomics";
945    case 13: return "ImageBasic";
946    case 14: return "ImageReadWrite";
947    case 15: return "ImageMipmap";
948    case 16: return "Bad";
949    case 17: return "Pipes";
950    case 18: return "Groups";
951    case 19: return "DeviceEnqueue";
952    case 20: return "LiteralSampler";
953    case 21: return "AtomicStorage";
954    case 22: return "Int16";
955    case 23: return "TessellationPointSize";
956    case 24: return "GeometryPointSize";
957    case 25: return "ImageGatherExtended";
958    case 26: return "Bad";
959    case 27: return "StorageImageMultisample";
960    case 28: return "UniformBufferArrayDynamicIndexing";
961    case 29: return "SampledImageArrayDynamicIndexing";
962    case 30: return "StorageBufferArrayDynamicIndexing";
963    case 31: return "StorageImageArrayDynamicIndexing";
964    case 32: return "ClipDistance";
965    case 33: return "CullDistance";
966    case 34: return "ImageCubeArray";
967    case 35: return "SampleRateShading";
968    case 36: return "ImageRect";
969    case 37: return "SampledRect";
970    case 38: return "GenericPointer";
971    case 39: return "Int8";
972    case 40: return "InputAttachment";
973    case 41: return "SparseResidency";
974    case 42: return "MinLod";
975    case 43: return "Sampled1D";
976    case 44: return "Image1D";
977    case 45: return "SampledCubeArray";
978    case 46: return "SampledBuffer";
979    case 47: return "ImageBuffer";
980    case 48: return "ImageMSArray";
981    case 49: return "StorageImageExtendedFormats";
982    case 50: return "ImageQuery";
983    case 51: return "DerivativeControl";
984    case 52: return "InterpolationFunction";
985    case 53: return "TransformFeedback";
986    case 54: return "GeometryStreams";
987    case 55: return "StorageImageReadWithoutFormat";
988    case 56: return "StorageImageWriteWithoutFormat";
989    case 57: return "MultiViewport";
990    case 61: return "GroupNonUniform";
991    case 62: return "GroupNonUniformVote";
992    case 63: return "GroupNonUniformArithmetic";
993    case 64: return "GroupNonUniformBallot";
994    case 65: return "GroupNonUniformShuffle";
995    case 66: return "GroupNonUniformShuffleRelative";
996    case 67: return "GroupNonUniformClustered";
997    case 68: return "GroupNonUniformQuad";
998
999    case (int)Capability::SubgroupBallotKHR: return "SubgroupBallotKHR";
1000    case (int)Capability::DrawParameters:    return "DrawParameters";
1001    case (int)Capability::SubgroupVoteKHR:   return "SubgroupVoteKHR";
1002    case (int)Capability::GroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR";
1003
1004    case (int)Capability::StorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
1005    case (int)Capability::StorageUniform16:            return "StorageUniform16";
1006    case (int)Capability::StoragePushConstant16:       return "StoragePushConstant16";
1007    case (int)Capability::StorageInputOutput16:        return "StorageInputOutput16";
1008
1009    case (int)Capability::StorageBuffer8BitAccess:             return "StorageBuffer8BitAccess";
1010    case (int)Capability::UniformAndStorageBuffer8BitAccess:   return "UniformAndStorageBuffer8BitAccess";
1011    case (int)Capability::StoragePushConstant8:                return "StoragePushConstant8";
1012
1013    case (int)Capability::DeviceGroup: return "DeviceGroup";
1014    case (int)Capability::MultiView:   return "MultiView";
1015
1016    case (int)Capability::DenormPreserve:           return "DenormPreserve";
1017    case (int)Capability::DenormFlushToZero:        return "DenormFlushToZero";
1018    case (int)Capability::SignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
1019    case (int)Capability::RoundingModeRTE:          return "RoundingModeRTE";
1020    case (int)Capability::RoundingModeRTZ:          return "RoundingModeRTZ";
1021
1022    case (int)Capability::StencilExportEXT: return "StencilExportEXT";
1023
1024    case (int)Capability::Float16ImageAMD:       return "Float16ImageAMD";
1025    case (int)Capability::ImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
1026    case (int)Capability::FragmentMaskAMD:       return "FragmentMaskAMD";
1027    case (int)Capability::ImageReadWriteLodAMD:  return "ImageReadWriteLodAMD";
1028
1029    case (int)Capability::AtomicStorageOps:             return "AtomicStorageOps";
1030
1031    case (int)Capability::SampleMaskPostDepthCoverage:  return "SampleMaskPostDepthCoverage";
1032    case (int)Capability::GeometryShaderPassthroughNV:     return "GeometryShaderPassthroughNV";
1033    case (int)Capability::ShaderViewportIndexLayerNV:      return "ShaderViewportIndexLayerNV";
1034    case (int)Capability::ShaderViewportMaskNV:            return "ShaderViewportMaskNV";
1035    case (int)Capability::ShaderStereoViewNV:              return "ShaderStereoViewNV";
1036    case (int)Capability::PerViewAttributesNV:             return "PerViewAttributesNV";
1037    case (int)Capability::GroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
1038    case (int)Capability::RayTracingNV:                    return "RayTracingNV";
1039    case (int)Capability::RayTracingMotionBlurNV:          return "RayTracingMotionBlurNV";
1040    case (int)Capability::RayTracingKHR:                   return "RayTracingKHR";
1041    case (int)Capability::RayCullMaskKHR:                  return "RayCullMaskKHR";
1042    case (int)Capability::RayQueryKHR:                     return "RayQueryKHR";
1043    case (int)Capability::RayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
1044    case (int)Capability::RayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
1045    case (int)Capability::RayTracingPositionFetchKHR:      return "RayTracingPositionFetchKHR";
1046    case (int)Capability::DisplacementMicromapNV:           return "DisplacementMicromapNV";
1047    case (int)Capability::RayTracingOpacityMicromapEXT:    return "RayTracingOpacityMicromapEXT";
1048    case (int)Capability::RayTracingOpacityMicromapExecutionModeKHR: return "RayTracingOpacityMicromapExecutionModeKHR";
1049    case (int)Capability::RayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV";
1050    case (int)Capability::RayQueryPositionFetchKHR:        return "RayQueryPositionFetchKHR";
1051    // ComputeDerivativeGroupQuadsKHR is an alias of ComputeDerivativeGroupQuadsNV
1052    case (int)Capability::ComputeDerivativeGroupQuadsKHR:   return "ComputeDerivativeGroupQuadsKHR";
1053   // ComputeDerivativeGroupLinearKHR is an alias of ComputeDerivativeGroupLinearNV
1054    case (int)Capability::ComputeDerivativeGroupLinearKHR:  return "ComputeDerivativeGroupLinearKHR";
1055    case (int)Capability::FragmentBarycentricKHR:          return "FragmentBarycentricKHR";
1056    case (int)Capability::MeshShadingNV:                   return "MeshShadingNV";
1057    case (int)Capability::ImageFootprintNV:                return "ImageFootprintNV";
1058    case (int)Capability::MeshShadingEXT:                  return "MeshShadingEXT";
1059//    case (int)Capability::ShadingRateNV:                   return "ShadingRateNV";  // superseded by FragmentDensityEXT
1060    case (int)Capability::SampleMaskOverrideCoverageNV:    return "SampleMaskOverrideCoverageNV";
1061    case (int)Capability::FragmentDensityEXT:              return "FragmentDensityEXT";
1062
1063    case (int)Capability::FragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
1064
1065    case (int)Capability::ShaderNonUniformEXT:                          return "ShaderNonUniformEXT";
1066    case (int)Capability::RuntimeDescriptorArrayEXT:                    return "RuntimeDescriptorArrayEXT";
1067    case (int)Capability::InputAttachmentArrayDynamicIndexingEXT:       return "InputAttachmentArrayDynamicIndexingEXT";
1068    case (int)Capability::UniformTexelBufferArrayDynamicIndexingEXT:    return "UniformTexelBufferArrayDynamicIndexingEXT";
1069    case (int)Capability::StorageTexelBufferArrayDynamicIndexingEXT:    return "StorageTexelBufferArrayDynamicIndexingEXT";
1070    case (int)Capability::UniformBufferArrayNonUniformIndexingEXT:      return "UniformBufferArrayNonUniformIndexingEXT";
1071    case (int)Capability::SampledImageArrayNonUniformIndexingEXT:       return "SampledImageArrayNonUniformIndexingEXT";
1072    case (int)Capability::StorageBufferArrayNonUniformIndexingEXT:      return "StorageBufferArrayNonUniformIndexingEXT";
1073    case (int)Capability::StorageImageArrayNonUniformIndexingEXT:       return "StorageImageArrayNonUniformIndexingEXT";
1074    case (int)Capability::InputAttachmentArrayNonUniformIndexingEXT:    return "InputAttachmentArrayNonUniformIndexingEXT";
1075    case (int)Capability::UniformTexelBufferArrayNonUniformIndexingEXT: return "UniformTexelBufferArrayNonUniformIndexingEXT";
1076    case (int)Capability::StorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT";
1077
1078    case (int)Capability::VulkanMemoryModelKHR:                return "VulkanMemoryModelKHR";
1079    case (int)Capability::VulkanMemoryModelDeviceScopeKHR:     return "VulkanMemoryModelDeviceScopeKHR";
1080
1081    case (int)Capability::PhysicalStorageBufferAddressesEXT:   return "PhysicalStorageBufferAddressesEXT";
1082
1083    case (int)Capability::VariablePointers:                    return "VariablePointers";
1084
1085    case (int)Capability::CooperativeMatrixNV:     return "CooperativeMatrixNV";
1086    case (int)Capability::CooperativeMatrixKHR:    return "CooperativeMatrixKHR";
1087    case (int)Capability::CooperativeMatrixReductionsNV:           return "CooperativeMatrixReductionsNV";
1088    case (int)Capability::CooperativeMatrixConversionsNV:          return "CooperativeMatrixConversionsNV";
1089    case (int)Capability::CooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV";
1090    case (int)Capability::CooperativeMatrixTensorAddressingNV:     return "CooperativeMatrixTensorAddressingNV";
1091    case (int)Capability::CooperativeMatrixBlockLoadsNV:           return "CooperativeMatrixBlockLoadsNV";
1092    case (int)Capability::CooperativeMatrixDecodeVectorNV:         return "CooperativeMatrixDecodeVectorNV";
1093    case (int)Capability::TensorAddressingNV:                      return "TensorAddressingNV";
1094    case (int)Capability::CooperativeMatrixConversionsEXT:         return "CooperativeMatrixConversionsEXT";
1095    case (int)Capability::CooperativeMatrixGetCoordinateEXT:       return "CooperativeMatrixGetCoordinateEXT";
1096
1097    case (int)Capability::ShaderSMBuiltinsNV:      return "ShaderSMBuiltinsNV";
1098
1099    case (int)Capability::CooperativeVectorNV:                     return "CooperativeVectorNV";
1100    case (int)Capability::CooperativeVectorTrainingNV:             return "CooperativeVectorTrainingNV";
1101
1102    case (int)Capability::FragmentShaderSampleInterlockEXT:        return "FragmentShaderSampleInterlockEXT";
1103    case (int)Capability::FragmentShaderPixelInterlockEXT:         return "FragmentShaderPixelInterlockEXT";
1104    case (int)Capability::FragmentShaderShadingRateInterlockEXT:   return "FragmentShaderShadingRateInterlockEXT";
1105
1106    case (int)Capability::TileImageColorReadAccessEXT:           return "TileImageColorReadAccessEXT";
1107    case (int)Capability::TileImageDepthReadAccessEXT:           return "TileImageDepthReadAccessEXT";
1108    case (int)Capability::TileImageStencilReadAccessEXT:         return "TileImageStencilReadAccessEXT";
1109
1110    case (int)Capability::CooperativeMatrixLayoutsARM:             return "CooperativeMatrixLayoutsARM";
1111    case (int)Capability::TensorsARM:                              return "TensorsARM";
1112
1113    case (int)Capability::FragmentShadingRateKHR:                  return "FragmentShadingRateKHR";
1114
1115    case (int)Capability::DemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
1116    case (int)Capability::AtomicFloat16VectorNV:                   return "AtomicFloat16VectorNV";
1117    case (int)Capability::ShaderClockKHR:                          return "ShaderClockKHR";
1118    case (int)Capability::QuadControlKHR:                          return "QuadControlKHR";
1119    case (int)Capability::Int64ImageEXT:                           return "Int64ImageEXT";
1120    case (int)Capability::DescriptorHeapEXT:                       return "DescriptorHeapEXT";
1121    case (int)Capability::UntypedPointersKHR:                      return "UntypedPointersKHR";
1122
1123    case (int)Capability::IntegerFunctions2INTEL:              return "IntegerFunctions2INTEL";
1124
1125    case (int)Capability::ExpectAssumeKHR:                         return "ExpectAssumeKHR";
1126    case (int)Capability::AbortKHR:                                return "AbortKHR";
1127    case (int)Capability::ConstantDataKHR:                         return "ConstantDataKHR";
1128
1129    case (int)Capability::AtomicFloat16AddEXT:                     return "AtomicFloat16AddEXT";
1130    case (int)Capability::AtomicFloat32AddEXT:                     return "AtomicFloat32AddEXT";
1131    case (int)Capability::AtomicFloat64AddEXT:                     return "AtomicFloat64AddEXT";
1132    case (int)Capability::AtomicFloat16MinMaxEXT:                  return "AtomicFloat16MinMaxEXT";
1133    case (int)Capability::AtomicFloat32MinMaxEXT:                  return "AtomicFloat32MinMaxEXT";
1134    case (int)Capability::AtomicFloat64MinMaxEXT:                  return "AtomicFloat64MinMaxEXT";
1135
1136    case (int)Capability::WorkgroupMemoryExplicitLayoutKHR:            return "WorkgroupMemoryExplicitLayoutKHR";
1137    case (int)Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR:  return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
1138    case (int)Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
1139    case (int)Capability::CoreBuiltinsARM:                             return "CoreBuiltinsARM";
1140
1141    case (int)Capability::ShaderInvocationReorderNV:                return "ShaderInvocationReorderNV";
1142    case (int)Capability::ShaderInvocationReorderEXT:               return "ShaderInvocationReorderEXT";
1143
1144    case (int)Capability::TextureSampleWeightedQCOM:           return "TextureSampleWeightedQCOM";
1145    case (int)Capability::TextureBoxFilterQCOM:                return "TextureBoxFilterQCOM";
1146    case (int)Capability::TextureBlockMatchQCOM:               return "TextureBlockMatchQCOM";
1147    case (int)Capability::TileShadingQCOM:                     return "TileShadingQCOM";
1148    case (int)Capability::TextureBlockMatch2QCOM:              return "TextureBlockMatch2QCOM";
1149
1150    case (int)Capability::CooperativeMatrixConversionQCOM:     return "CooperativeMatrixConversionQCOM";
1151    case (int)Capability::ImageGatherLinearQCOM:               return "ImageGatherLinearQCOM";
1152    case (int)Capability::ImageGatherExtendedModesQCOM:        return "ImageGatherExtendedModesQCOM";
1153
1154    case (int)Capability::ReplicatedCompositesEXT:             return "ReplicatedCompositesEXT";
1155
1156    case (int)Capability::DotProductKHR:                       return "DotProductKHR";
1157    case (int)Capability::DotProductInputAllKHR:               return "DotProductInputAllKHR";
1158    case (int)Capability::DotProductInput4x8BitKHR:            return "DotProductInput4x8BitKHR";
1159    case (int)Capability::DotProductInput4x8BitPackedKHR:      return "DotProductInput4x8BitPackedKHR";
1160
1161    case (int)Capability::RayTracingClusterAccelerationStructureNV:   return "RayTracingClusterAccelerationStructureNV";
1162
1163    case (int)Capability::RayTracingSpheresGeometryNV:             return "RayTracingSpheresGeometryNV";
1164    case (int)Capability::RayTracingLinearSweptSpheresGeometryNV:  return "RayTracingLinearSweptSpheresGeometryNV";
1165
1166    case (int)Capability::BFloat16TypeKHR:                     return "BFloat16TypeKHR";
1167    case (int)Capability::BFloat16DotProductKHR:               return "BFloat16DotProductKHR";
1168    case (int)Capability::BFloat16CooperativeMatrixKHR:        return "BFloat16CooperativeMatrixKHR";
1169
1170    case (int)Capability::Float8EXT:                           return "Float8EXT";
1171    case (int)Capability::Float8CooperativeMatrixEXT:          return "Float8CooperativeMatrixEXT";
1172
1173    case (int)Capability::PushConstantBanksNV:                 return "PushConstantBanksNV";
1174
1175    case (int)Capability::Shader64BitIndexingEXT:              return "CapabilityShader64BitIndexingEXT";
1176    case (int)Capability::LongVectorEXT:                       return "LongVectorEXT";
1177    case (int)Capability::SplitBarrierEXT:                     return "SplitBarrierEXT";
1178
1179    case (int)Capability::Float4EXT:                           return "Float4EXT";
1180    case (int)Capability::Float6EXT:                           return "Float6EXT";
1181    case (int)Capability::Float8UnsignedE8M0EXT:               return "Float8UnsignedE8M0EXT";
1182    case (int)Capability::MXInt8EXT:                           return "MXInt8EXT";
1183    case (int)Capability::BitcastExtractEXT:                   return "BitcastExtractEXT";
1184
1185    default: return "Bad";
1186    }
1187}
1188
1189const char* OpcodeString(int op)
1190{
1191    switch (op) {
1192    case 0:   return "OpNop";
1193    case 1:   return "OpUndef";
1194    case 2:   return "OpSourceContinued";
1195    case 3:   return "OpSource";
1196    case 4:   return "OpSourceExtension";
1197    case 5:   return "OpName";
1198    case 6:   return "OpMemberName";
1199    case 7:   return "OpString";
1200    case 8:   return "OpLine";
1201    case 9:   return "Bad";
1202    case 10:  return "OpExtension";
1203    case 11:  return "OpExtInstImport";
1204    case 12:  return "OpExtInst";
1205    case 13:  return "Bad";
1206    case 14:  return "OpMemoryModel";
1207    case 15:  return "OpEntryPoint";
1208    case 16:  return "OpExecutionMode";
1209    case 17:  return "OpCapability";
1210    case 18:  return "Bad";
1211    case 19:  return "OpTypeVoid";
1212    case 20:  return "OpTypeBool";
1213    case 21:  return "OpTypeInt";
1214    case 22:  return "OpTypeFloat";
1215    case 23:  return "OpTypeVector";
1216    case 24:  return "OpTypeMatrix";
1217    case 25:  return "OpTypeImage";
1218    case 26:  return "OpTypeSampler";
1219    case 27:  return "OpTypeSampledImage";
1220    case 28:  return "OpTypeArray";
1221    case 29:  return "OpTypeRuntimeArray";
1222    case 30:  return "OpTypeStruct";
1223    case 31:  return "OpTypeOpaque";
1224    case 32:  return "OpTypePointer";
1225    case 33:  return "OpTypeFunction";
1226    case 34:  return "OpTypeEvent";
1227    case 35:  return "OpTypeDeviceEvent";
1228    case 36:  return "OpTypeReserveId";
1229    case 37:  return "OpTypeQueue";
1230    case 38:  return "OpTypePipe";
1231    case 39:  return "OpTypeForwardPointer";
1232    case 40:  return "Bad";
1233    case 41:  return "OpConstantTrue";
1234    case 42:  return "OpConstantFalse";
1235    case 43:  return "OpConstant";
1236    case 44:  return "OpConstantComposite";
1237    case 45:  return "OpConstantSampler";
1238    case 46:  return "OpConstantNull";
1239    case 47:  return "Bad";
1240    case 48:  return "OpSpecConstantTrue";
1241    case 49:  return "OpSpecConstantFalse";
1242    case 50:  return "OpSpecConstant";
1243    case 51:  return "OpSpecConstantComposite";
1244    case 52:  return "OpSpecConstantOp";
1245    case 53:  return "Bad";
1246    case 54:  return "OpFunction";
1247    case 55:  return "OpFunctionParameter";
1248    case 56:  return "OpFunctionEnd";
1249    case 57:  return "OpFunctionCall";
1250    case 58:  return "Bad";
1251    case 59:  return "OpVariable";
1252    case 60:  return "OpImageTexelPointer";
1253    case 61:  return "OpLoad";
1254    case 62:  return "OpStore";
1255    case 63:  return "OpCopyMemory";
1256    case 64:  return "OpCopyMemorySized";
1257    case 65:  return "OpAccessChain";
1258    case 66:  return "OpInBoundsAccessChain";
1259    case 67:  return "OpPtrAccessChain";
1260    case 68:  return "OpArrayLength";
1261    case 69:  return "OpGenericPtrMemSemantics";
1262    case 70:  return "OpInBoundsPtrAccessChain";
1263    case 71:  return "OpDecorate";
1264    case 72:  return "OpMemberDecorate";
1265    case 73:  return "OpDecorationGroup";
1266    case 74:  return "OpGroupDecorate";
1267    case 75:  return "OpGroupMemberDecorate";
1268    case 76:  return "Bad";
1269    case 77:  return "OpVectorExtractDynamic";
1270    case 78:  return "OpVectorInsertDynamic";
1271    case 79:  return "OpVectorShuffle";
1272    case 80:  return "OpCompositeConstruct";
1273    case 81:  return "OpCompositeExtract";
1274    case 82:  return "OpCompositeInsert";
1275    case 83:  return "OpCopyObject";
1276    case 84:  return "OpTranspose";
1277    case (int)Op::OpCopyLogical: return "OpCopyLogical";
1278    case 85:  return "Bad";
1279    case 86:  return "OpSampledImage";
1280    case 87:  return "OpImageSampleImplicitLod";
1281    case 88:  return "OpImageSampleExplicitLod";
1282    case 89:  return "OpImageSampleDrefImplicitLod";
1283    case 90:  return "OpImageSampleDrefExplicitLod";
1284    case 91:  return "OpImageSampleProjImplicitLod";
1285    case 92:  return "OpImageSampleProjExplicitLod";
1286    case 93:  return "OpImageSampleProjDrefImplicitLod";
1287    case 94:  return "OpImageSampleProjDrefExplicitLod";
1288    case 95:  return "OpImageFetch";
1289    case 96:  return "OpImageGather";
1290    case 97:  return "OpImageDrefGather";
1291    case 98:  return "OpImageRead";
1292    case 99:  return "OpImageWrite";
1293    case 100: return "OpImage";
1294    case 101: return "OpImageQueryFormat";
1295    case 102: return "OpImageQueryOrder";
1296    case 103: return "OpImageQuerySizeLod";
1297    case 104: return "OpImageQuerySize";
1298    case 105: return "OpImageQueryLod";
1299    case 106: return "OpImageQueryLevels";
1300    case 107: return "OpImageQuerySamples";
1301    case 108: return "Bad";
1302    case 109: return "OpConvertFToU";
1303    case 110: return "OpConvertFToS";
1304    case 111: return "OpConvertSToF";
1305    case 112: return "OpConvertUToF";
1306    case 113: return "OpUConvert";
1307    case 114: return "OpSConvert";
1308    case 115: return "OpFConvert";
1309    case 116: return "OpQuantizeToF16";
1310    case 117: return "OpConvertPtrToU";
1311    case 118: return "OpSatConvertSToU";
1312    case 119: return "OpSatConvertUToS";
1313    case 120: return "OpConvertUToPtr";
1314    case 121: return "OpPtrCastToGeneric";
1315    case 122: return "OpGenericCastToPtr";
1316    case 123: return "OpGenericCastToPtrExplicit";
1317    case 124: return "OpBitcast";
1318    case 125: return "Bad";
1319    case 126: return "OpSNegate";
1320    case 127: return "OpFNegate";
1321    case 128: return "OpIAdd";
1322    case 129: return "OpFAdd";
1323    case 130: return "OpISub";
1324    case 131: return "OpFSub";
1325    case 132: return "OpIMul";
1326    case 133: return "OpFMul";
1327    case 134: return "OpUDiv";
1328    case 135: return "OpSDiv";
1329    case 136: return "OpFDiv";
1330    case 137: return "OpUMod";
1331    case 138: return "OpSRem";
1332    case 139: return "OpSMod";
1333    case 140: return "OpFRem";
1334    case 141: return "OpFMod";
1335    case 142: return "OpVectorTimesScalar";
1336    case 143: return "OpMatrixTimesScalar";
1337    case 144: return "OpVectorTimesMatrix";
1338    case 145: return "OpMatrixTimesVector";
1339    case 146: return "OpMatrixTimesMatrix";
1340    case 147: return "OpOuterProduct";
1341    case 148: return "OpDot";
1342    case 149: return "OpIAddCarry";
1343    case 150: return "OpISubBorrow";
1344    case 151: return "OpUMulExtended";
1345    case 152: return "OpSMulExtended";
1346    case 153: return "Bad";
1347    case 154: return "OpAny";
1348    case 155: return "OpAll";
1349    case 156: return "OpIsNan";
1350    case 157: return "OpIsInf";
1351    case 158: return "OpIsFinite";
1352    case 159: return "OpIsNormal";
1353    case 160: return "OpSignBitSet";
1354    case 161: return "OpLessOrGreater";
1355    case 162: return "OpOrdered";
1356    case 163: return "OpUnordered";
1357    case 164: return "OpLogicalEqual";
1358    case 165: return "OpLogicalNotEqual";
1359    case 166: return "OpLogicalOr";
1360    case 167: return "OpLogicalAnd";
1361    case 168: return "OpLogicalNot";
1362    case 169: return "OpSelect";
1363    case 170: return "OpIEqual";
1364    case 171: return "OpINotEqual";
1365    case 172: return "OpUGreaterThan";
1366    case 173: return "OpSGreaterThan";
1367    case 174: return "OpUGreaterThanEqual";
1368    case 175: return "OpSGreaterThanEqual";
1369    case 176: return "OpULessThan";
1370    case 177: return "OpSLessThan";
1371    case 178: return "OpULessThanEqual";
1372    case 179: return "OpSLessThanEqual";
1373    case 180: return "OpFOrdEqual";
1374    case 181: return "OpFUnordEqual";
1375    case 182: return "OpFOrdNotEqual";
1376    case 183: return "OpFUnordNotEqual";
1377    case 184: return "OpFOrdLessThan";
1378    case 185: return "OpFUnordLessThan";
1379    case 186: return "OpFOrdGreaterThan";
1380    case 187: return "OpFUnordGreaterThan";
1381    case 188: return "OpFOrdLessThanEqual";
1382    case 189: return "OpFUnordLessThanEqual";
1383    case 190: return "OpFOrdGreaterThanEqual";
1384    case 191: return "OpFUnordGreaterThanEqual";
1385    case 192: return "Bad";
1386    case 193: return "Bad";
1387    case 194: return "OpShiftRightLogical";
1388    case 195: return "OpShiftRightArithmetic";
1389    case 196: return "OpShiftLeftLogical";
1390    case 197: return "OpBitwiseOr";
1391    case 198: return "OpBitwiseXor";
1392    case 199: return "OpBitwiseAnd";
1393    case 200: return "OpNot";
1394    case 201: return "OpBitFieldInsert";
1395    case 202: return "OpBitFieldSExtract";
1396    case 203: return "OpBitFieldUExtract";
1397    case 204: return "OpBitReverse";
1398    case 205: return "OpBitCount";
1399    case 206: return "Bad";
1400    case 207: return "OpDPdx";
1401    case 208: return "OpDPdy";
1402    case 209: return "OpFwidth";
1403    case 210: return "OpDPdxFine";
1404    case 211: return "OpDPdyFine";
1405    case 212: return "OpFwidthFine";
1406    case 213: return "OpDPdxCoarse";
1407    case 214: return "OpDPdyCoarse";
1408    case 215: return "OpFwidthCoarse";
1409    case 216: return "Bad";
1410    case 217: return "Bad";
1411    case 218: return "OpEmitVertex";
1412    case 219: return "OpEndPrimitive";
1413    case 220: return "OpEmitStreamVertex";
1414    case 221: return "OpEndStreamPrimitive";
1415    case 222: return "Bad";
1416    case 223: return "Bad";
1417    case 224: return "OpControlBarrier";
1418    case 225: return "OpMemoryBarrier";
1419    case 226: return "Bad";
1420    case 227: return "OpAtomicLoad";
1421    case 228: return "OpAtomicStore";
1422    case 229: return "OpAtomicExchange";
1423    case 230: return "OpAtomicCompareExchange";
1424    case 231: return "OpAtomicCompareExchangeWeak";
1425    case 232: return "OpAtomicIIncrement";
1426    case 233: return "OpAtomicIDecrement";
1427    case 234: return "OpAtomicIAdd";
1428    case 235: return "OpAtomicISub";
1429    case 236: return "OpAtomicSMin";
1430    case 237: return "OpAtomicUMin";
1431    case 238: return "OpAtomicSMax";
1432    case 239: return "OpAtomicUMax";
1433    case 240: return "OpAtomicAnd";
1434    case 241: return "OpAtomicOr";
1435    case 242: return "OpAtomicXor";
1436    case 243: return "Bad";
1437    case 244: return "Bad";
1438    case 245: return "OpPhi";
1439    case 246: return "OpLoopMerge";
1440    case 247: return "OpSelectionMerge";
1441    case 248: return "OpLabel";
1442    case 249: return "OpBranch";
1443    case 250: return "OpBranchConditional";
1444    case 251: return "OpSwitch";
1445    case 252: return "OpKill";
1446    case 253: return "OpReturn";
1447    case 254: return "OpReturnValue";
1448    case 255: return "OpUnreachable";
1449    case 256: return "OpLifetimeStart";
1450    case 257: return "OpLifetimeStop";
1451    case 258: return "Bad";
1452    case 259: return "OpGroupAsyncCopy";
1453    case 260: return "OpGroupWaitEvents";
1454    case 261: return "OpGroupAll";
1455    case 262: return "OpGroupAny";
1456    case 263: return "OpGroupBroadcast";
1457    case 264: return "OpGroupIAdd";
1458    case 265: return "OpGroupFAdd";
1459    case 266: return "OpGroupFMin";
1460    case 267: return "OpGroupUMin";
1461    case 268: return "OpGroupSMin";
1462    case 269: return "OpGroupFMax";
1463    case 270: return "OpGroupUMax";
1464    case 271: return "OpGroupSMax";
1465    case 272: return "Bad";
1466    case 273: return "Bad";
1467    case 274: return "OpReadPipe";
1468    case 275: return "OpWritePipe";
1469    case 276: return "OpReservedReadPipe";
1470    case 277: return "OpReservedWritePipe";
1471    case 278: return "OpReserveReadPipePackets";
1472    case 279: return "OpReserveWritePipePackets";
1473    case 280: return "OpCommitReadPipe";
1474    case 281: return "OpCommitWritePipe";
1475    case 282: return "OpIsValidReserveId";
1476    case 283: return "OpGetNumPipePackets";
1477    case 284: return "OpGetMaxPipePackets";
1478    case 285: return "OpGroupReserveReadPipePackets";
1479    case 286: return "OpGroupReserveWritePipePackets";
1480    case 287: return "OpGroupCommitReadPipe";
1481    case 288: return "OpGroupCommitWritePipe";
1482    case 289: return "Bad";
1483    case 290: return "Bad";
1484    case 291: return "OpEnqueueMarker";
1485    case 292: return "OpEnqueueKernel";
1486    case 293: return "OpGetKernelNDrangeSubGroupCount";
1487    case 294: return "OpGetKernelNDrangeMaxSubGroupSize";
1488    case 295: return "OpGetKernelWorkGroupSize";
1489    case 296: return "OpGetKernelPreferredWorkGroupSizeMultiple";
1490    case 297: return "OpRetainEvent";
1491    case 298: return "OpReleaseEvent";
1492    case 299: return "OpCreateUserEvent";
1493    case 300: return "OpIsValidEvent";
1494    case 301: return "OpSetUserEventStatus";
1495    case 302: return "OpCaptureEventProfilingInfo";
1496    case 303: return "OpGetDefaultQueue";
1497    case 304: return "OpBuildNDRange";
1498    case 305: return "OpImageSparseSampleImplicitLod";
1499    case 306: return "OpImageSparseSampleExplicitLod";
1500    case 307: return "OpImageSparseSampleDrefImplicitLod";
1501    case 308: return "OpImageSparseSampleDrefExplicitLod";
1502    case 309: return "OpImageSparseSampleProjImplicitLod";
1503    case 310: return "OpImageSparseSampleProjExplicitLod";
1504    case 311: return "OpImageSparseSampleProjDrefImplicitLod";
1505    case 312: return "OpImageSparseSampleProjDrefExplicitLod";
1506    case 313: return "OpImageSparseFetch";
1507    case 314: return "OpImageSparseGather";
1508    case 315: return "OpImageSparseDrefGather";
1509    case 316: return "OpImageSparseTexelsResident";
1510    case 317: return "OpNoLine";
1511    case 318: return "OpAtomicFlagTestAndSet";
1512    case 319: return "OpAtomicFlagClear";
1513    case 320: return "OpImageSparseRead";
1514
1515    case (int)Op::OpModuleProcessed: return "OpModuleProcessed";
1516    case (int)Op::OpExecutionModeId: return "OpExecutionModeId";
1517    case (int)Op::OpDecorateId:      return "OpDecorateId";
1518
1519    case 333: return "OpGroupNonUniformElect";
1520    case 334: return "OpGroupNonUniformAll";
1521    case 335: return "OpGroupNonUniformAny";
1522    case 336: return "OpGroupNonUniformAllEqual";
1523    case 337: return "OpGroupNonUniformBroadcast";
1524    case 338: return "OpGroupNonUniformBroadcastFirst";
1525    case 339: return "OpGroupNonUniformBallot";
1526    case 340: return "OpGroupNonUniformInverseBallot";
1527    case 341: return "OpGroupNonUniformBallotBitExtract";
1528    case 342: return "OpGroupNonUniformBallotBitCount";
1529    case 343: return "OpGroupNonUniformBallotFindLSB";
1530    case 344: return "OpGroupNonUniformBallotFindMSB";
1531    case 345: return "OpGroupNonUniformShuffle";
1532    case 346: return "OpGroupNonUniformShuffleXor";
1533    case 347: return "OpGroupNonUniformShuffleUp";
1534    case 348: return "OpGroupNonUniformShuffleDown";
1535    case 349: return "OpGroupNonUniformIAdd";
1536    case 350: return "OpGroupNonUniformFAdd";
1537    case 351: return "OpGroupNonUniformIMul";
1538    case 352: return "OpGroupNonUniformFMul";
1539    case 353: return "OpGroupNonUniformSMin";
1540    case 354: return "OpGroupNonUniformUMin";
1541    case 355: return "OpGroupNonUniformFMin";
1542    case 356: return "OpGroupNonUniformSMax";
1543    case 357: return "OpGroupNonUniformUMax";
1544    case 358: return "OpGroupNonUniformFMax";
1545    case 359: return "OpGroupNonUniformBitwiseAnd";
1546    case 360: return "OpGroupNonUniformBitwiseOr";
1547    case 361: return "OpGroupNonUniformBitwiseXor";
1548    case 362: return "OpGroupNonUniformLogicalAnd";
1549    case 363: return "OpGroupNonUniformLogicalOr";
1550    case 364: return "OpGroupNonUniformLogicalXor";
1551    case 365: return "OpGroupNonUniformQuadBroadcast";
1552    case 366: return "OpGroupNonUniformQuadSwap";
1553
1554    case (int)Op::OpTerminateInvocation: return "OpTerminateInvocation";
1555
1556    case 4421: return "OpSubgroupBallotKHR";
1557    case 4422: return "OpSubgroupFirstInvocationKHR";
1558    case 4428: return "OpSubgroupAllKHR";
1559    case 4429: return "OpSubgroupAnyKHR";
1560    case 4430: return "OpSubgroupAllEqualKHR";
1561    case 4432: return "OpSubgroupReadInvocationKHR";
1562    case 4433: return "OpExtInstWithForwardRefsKHR";
1563
1564    case (int)Op::OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR";
1565    case (int)Op::OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR";
1566    case (int)Op::OpBufferPointerEXT:          return "OpBufferPointerEXT";
1567    case (int)Op::OpConstantSizeOfEXT:         return "OpConstantSizeOfEXT";
1568    case (int)Op::OpTypeBufferEXT:             return "OpTypeBufferEXT";
1569    case (int)Op::OpUntypedAccessChainKHR:     return "OpUntypedAccessChainKHR";
1570    case (int)Op::OpUntypedVariableKHR:        return "OpUntypedVariableKHR";
1571    case (int)Op::OpTypeUntypedPointerKHR:     return "OpTypeUntypedPointerKHR";
1572    case (int)Op::OpMemberDecorateIdEXT:       return "OpMemberDecorateIdEXT";
1573    case (int)Op::OpUntypedImageTexelPointerEXT:     return "OpUntypedImageTexelPointerEXT";
1574
1575    case (int)Op::OpAbortKHR:            return "OpAbortKHR";
1576    case (int)Op::OpConstantDataKHR:     return "OpConstantDataKHR";
1577    case (int)Op::OpSpecConstantDataKHR: return "OpSpecConstantDataKHR";
1578
1579    case (int)Op::OpAtomicFAddEXT: return "OpAtomicFAddEXT";
1580    case (int)Op::OpAtomicFMinEXT: return "OpAtomicFMinEXT";
1581    case (int)Op::OpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
1582
1583    case (int)Op::OpAssumeTrueKHR: return "OpAssumeTrueKHR";
1584    case (int)Op::OpExpectKHR: return "OpExpectKHR";
1585
1586    case 5000: return "OpGroupIAddNonUniformAMD";
1587    case 5001: return "OpGroupFAddNonUniformAMD";
1588    case 5002: return "OpGroupFMinNonUniformAMD";
1589    case 5003: return "OpGroupUMinNonUniformAMD";
1590    case 5004: return "OpGroupSMinNonUniformAMD";
1591    case 5005: return "OpGroupFMaxNonUniformAMD";
1592    case 5006: return "OpGroupUMaxNonUniformAMD";
1593    case 5007: return "OpGroupSMaxNonUniformAMD";
1594
1595    case 5011: return "OpFragmentMaskFetchAMD";
1596    case 5012: return "OpFragmentFetchAMD";
1597
1598    case (int)Op::OpReadClockKHR:               return "OpReadClockKHR";
1599
1600    case (int)Op::OpDecorateStringGOOGLE:       return "OpDecorateStringGOOGLE";
1601    case (int)Op::OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
1602
1603    case (int)Op::OpReportIntersectionKHR:             return "OpReportIntersectionKHR";
1604    case (int)Op::OpIgnoreIntersectionNV:              return "OpIgnoreIntersectionNV";
1605    case (int)Op::OpIgnoreIntersectionKHR:             return "OpIgnoreIntersectionKHR";
1606    case (int)Op::OpTerminateRayNV:                    return "OpTerminateRayNV";
1607    case (int)Op::OpTerminateRayKHR:                   return "OpTerminateRayKHR";
1608    case (int)Op::OpTraceNV:                           return "OpTraceNV";
1609    case (int)Op::OpTraceRayMotionNV:                  return "OpTraceRayMotionNV";
1610    case (int)Op::OpTraceRayKHR:                       return "OpTraceRayKHR";
1611    case (int)Op::OpTypeAccelerationStructureKHR:      return "OpTypeAccelerationStructureKHR";
1612    case (int)Op::OpExecuteCallableNV:                 return "OpExecuteCallableNV";
1613    case (int)Op::OpExecuteCallableKHR:                return "OpExecuteCallableKHR";
1614    case (int)Op::OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
1615
1616    case (int)Op::OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
1617    case (int)Op::OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
1618    case (int)Op::OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
1619    case (int)Op::OpEmitMeshTasksEXT:                 return "OpEmitMeshTasksEXT";
1620    case (int)Op::OpSetMeshOutputsEXT:                return "OpSetMeshOutputsEXT";
1621
1622    case (int)Op::OpGroupNonUniformRotateKHR:         return "OpGroupNonUniformRotateKHR";
1623
1624    case (int)Op::OpTypeRayQueryKHR:                                                   return "OpTypeRayQueryKHR";
1625    case (int)Op::OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
1626    case (int)Op::OpRayQueryTerminateKHR:                                              return "OpRayQueryTerminateKHR";
1627    case (int)Op::OpRayQueryGenerateIntersectionKHR:                                   return "OpRayQueryGenerateIntersectionKHR";
1628    case (int)Op::OpRayQueryConfirmIntersectionKHR:                                    return "OpRayQueryConfirmIntersectionKHR";
1629    case (int)Op::OpRayQueryProceedKHR:                                                return "OpRayQueryProceedKHR";
1630    case (int)Op::OpRayQueryGetIntersectionTypeKHR:                                    return "OpRayQueryGetIntersectionTypeKHR";
1631    case (int)Op::OpRayQueryGetRayTMinKHR:                                             return "OpRayQueryGetRayTMinKHR";
1632    case (int)Op::OpRayQueryGetRayFlagsKHR:                                            return "OpRayQueryGetRayFlagsKHR";
1633    case (int)Op::OpRayQueryGetIntersectionTKHR:                                       return "OpRayQueryGetIntersectionTKHR";
1634    case (int)Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR:                     return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
1635    case (int)Op::OpRayQueryGetIntersectionInstanceIdKHR:                              return "OpRayQueryGetIntersectionInstanceIdKHR";
1636    case (int)Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:  return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
1637    case (int)Op::OpRayQueryGetIntersectionGeometryIndexKHR:                           return "OpRayQueryGetIntersectionGeometryIndexKHR";
1638    case (int)Op::OpRayQueryGetIntersectionPrimitiveIndexKHR:                          return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
1639    case (int)Op::OpRayQueryGetIntersectionBarycentricsKHR:                            return "OpRayQueryGetIntersectionBarycentricsKHR";
1640    case (int)Op::OpRayQueryGetIntersectionFrontFaceKHR:                               return "OpRayQueryGetIntersectionFrontFaceKHR";
1641    case (int)Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR:                     return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
1642    case (int)Op::OpRayQueryGetIntersectionObjectRayDirectionKHR:                      return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
1643    case (int)Op::OpRayQueryGetIntersectionObjectRayOriginKHR:                         return "OpRayQueryGetIntersectionObjectRayOriginKHR";
1644    case (int)Op::OpRayQueryGetWorldRayDirectionKHR:                                   return "OpRayQueryGetWorldRayDirectionKHR";
1645    case (int)Op::OpRayQueryGetWorldRayOriginKHR:                                      return "OpRayQueryGetWorldRayOriginKHR";
1646    case (int)Op::OpRayQueryGetIntersectionObjectToWorldKHR:                           return "OpRayQueryGetIntersectionObjectToWorldKHR";
1647    case (int)Op::OpRayQueryGetIntersectionWorldToObjectKHR:                           return "OpRayQueryGetIntersectionWorldToObjectKHR";
1648    case (int)Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR:                 return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
1649    case (int)Op::OpRayQueryGetClusterIdNV:                                            return "OpRayQueryGetIntersectionClusterIdNV";
1650
1651    case (int)Op::OpRayQueryGetIntersectionSpherePositionNV:                           return "OpRayQueryGetIntersectionSpherePositionNV";
1652    case (int)Op::OpRayQueryGetIntersectionSphereRadiusNV:                             return "OpRayQueryGetIntersectionSphereRadiusNV";
1653    case (int)Op::OpRayQueryGetIntersectionLSSHitValueNV:                              return "OpRayQueryGetIntersectionLSSHitValueNV";
1654    case (int)Op::OpRayQueryGetIntersectionLSSPositionsNV:                             return "OpRayQueryGetIntersectionLSSPositionsNV";
1655    case (int)Op::OpRayQueryGetIntersectionLSSRadiiNV:                                 return "OpRayQueryGetIntersectionLSSRadiiNV";
1656    case (int)Op::OpRayQueryIsSphereHitNV:                                             return "OpRayQueryIsSphereHitNV";
1657    case (int)Op::OpRayQueryIsLSSHitNV:                                                return "OpRayQueryIsLSSHitNV";
1658
1659    case (int)Op::OpTypeCooperativeMatrixNV:         return "OpTypeCooperativeMatrixNV";
1660    case (int)Op::OpCooperativeMatrixLoadNV:         return "OpCooperativeMatrixLoadNV";
1661    case (int)Op::OpCooperativeMatrixStoreNV:        return "OpCooperativeMatrixStoreNV";
1662    case (int)Op::OpCooperativeMatrixMulAddNV:       return "OpCooperativeMatrixMulAddNV";
1663    case (int)Op::OpCooperativeMatrixLengthNV:       return "OpCooperativeMatrixLengthNV";
1664    case (int)Op::OpTypeCooperativeMatrixKHR:        return "OpTypeCooperativeMatrixKHR";
1665    case (int)Op::OpCooperativeMatrixLoadKHR:        return "OpCooperativeMatrixLoadKHR";
1666    case (int)Op::OpCooperativeMatrixStoreKHR:       return "OpCooperativeMatrixStoreKHR";
1667    case (int)Op::OpCooperativeMatrixMulAddKHR:      return "OpCooperativeMatrixMulAddKHR";
1668    case (int)Op::OpCooperativeMatrixLengthKHR:      return "OpCooperativeMatrixLengthKHR";
1669    case (int)Op::OpDemoteToHelperInvocationEXT:     return "OpDemoteToHelperInvocationEXT";
1670    case (int)Op::OpIsHelperInvocationEXT:           return "OpIsHelperInvocationEXT";
1671
1672    case (int)Op::OpCooperativeMatrixConvertNV:      return "OpCooperativeMatrixConvertNV";
1673    case (int)Op::OpCooperativeMatrixTransposeNV:    return "OpCooperativeMatrixTransposeNV";
1674    case (int)Op::OpCooperativeMatrixReduceNV:       return "OpCooperativeMatrixReduceNV";
1675    case (int)Op::OpCooperativeMatrixLoadTensorNV:   return "OpCooperativeMatrixLoadTensorNV";
1676    case (int)Op::OpCooperativeMatrixStoreTensorNV:  return "OpCooperativeMatrixStoreTensorNV";
1677    case (int)Op::OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV";
1678    case (int)Op::OpTypeTensorLayoutNV:              return "OpTypeTensorLayoutNV";
1679    case (int)Op::OpTypeTensorViewNV:                return "OpTypeTensorViewNV";
1680    case (int)Op::OpCreateTensorLayoutNV:            return "OpCreateTensorLayoutNV";
1681    case (int)Op::OpTensorLayoutSetBlockSizeNV:      return "OpTensorLayoutSetBlockSizeNV";
1682    case (int)Op::OpTensorLayoutSetDimensionNV:      return "OpTensorLayoutSetDimensionNV";
1683    case (int)Op::OpTensorLayoutSetStrideNV:         return "OpTensorLayoutSetStrideNV";
1684    case (int)Op::OpTensorLayoutSliceNV:             return "OpTensorLayoutSliceNV";
1685    case (int)Op::OpTensorLayoutSetClampValueNV:     return "OpTensorLayoutSetClampValueNV";
1686    case (int)Op::OpCreateTensorViewNV:              return "OpCreateTensorViewNV";
1687    case (int)Op::OpTensorViewSetDimensionNV:        return "OpTensorViewSetDimensionNV";
1688    case (int)Op::OpTensorViewSetStrideNV:           return "OpTensorViewSetStrideNV";
1689    case (int)Op::OpTensorViewSetClipNV:             return "OpTensorViewSetClipNV";
1690    case (int)Op::OpCooperativeMatrixGetCoordinateEXT: return "OpCooperativeMatrixGetCoordinateEXT";
1691
1692    case (int)Op::OpTypeTensorARM:                   return "OpTypeTensorARM";
1693    case (int)Op::OpTensorReadARM:                   return "OpTensorReadARM";
1694    case (int)Op::OpTensorWriteARM:                  return "OpTensorWriteARM";
1695    case (int)Op::OpTensorQuerySizeARM:              return "OpTensorQuerySizeARM";
1696
1697    case (int)Op::OpTypeCooperativeVectorNV:         return "OpTypeCooperativeVectorNV";
1698    case (int)Op::OpCooperativeVectorMatrixMulNV:    return "OpCooperativeVectorMatrixMulNV";
1699    case (int)Op::OpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV";
1700    case (int)Op::OpCooperativeVectorLoadNV:         return "OpCooperativeVectorLoadNV";
1701    case (int)Op::OpCooperativeVectorStoreNV:        return "OpCooperativeVectorStoreNV";
1702    case (int)Op::OpCooperativeVectorOuterProductAccumulateNV:   return "OpCooperativeVectorOuterProductAccumulateNV";
1703    case (int)Op::OpCooperativeVectorReduceSumAccumulateNV:      return "OpCooperativeVectorReduceSumAccumulateNV";
1704
1705    case (int)Op::OpBeginInvocationInterlockEXT:     return "OpBeginInvocationInterlockEXT";
1706    case (int)Op::OpEndInvocationInterlockEXT:       return "OpEndInvocationInterlockEXT";
1707
1708    case (int)Op::OpTypeHitObjectNV:                     return "OpTypeHitObjectNV";
1709    case (int)Op::OpHitObjectTraceRayNV:                 return "OpHitObjectTraceRayNV";
1710    case (int)Op::OpHitObjectTraceRayMotionNV:           return "OpHitObjectTraceRayMotionNV";
1711    case (int)Op::OpHitObjectRecordHitNV:                return "OpHitObjectRecordHitNV";
1712    case (int)Op::OpHitObjectRecordHitMotionNV:          return "OpHitObjectRecordHitMotionNV";
1713    case (int)Op::OpHitObjectRecordHitWithIndexNV:       return "OpHitObjectRecordHitWithIndexNV";
1714    case (int)Op::OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
1715    case (int)Op::OpHitObjectRecordMissNV:               return "OpHitObjectRecordMissNV";
1716    case (int)Op::OpHitObjectRecordMissMotionNV:         return "OpHitObjectRecordMissMotionNV";
1717    case (int)Op::OpHitObjectRecordEmptyNV:              return "OpHitObjectRecordEmptyNV";
1718    case (int)Op::OpHitObjectExecuteShaderNV:            return "OpHitObjectExecuteShaderNV";
1719    case (int)Op::OpReorderThreadWithHintNV:             return "OpReorderThreadWithHintNV";
1720    case (int)Op::OpReorderThreadWithHitObjectNV:        return "OpReorderThreadWithHitObjectNV";
1721    case (int)Op::OpHitObjectGetCurrentTimeNV:           return "OpHitObjectGetCurrentTimeNV";
1722    case (int)Op::OpHitObjectGetAttributesNV:            return "OpHitObjectGetAttributesNV";
1723    case (int)Op::OpHitObjectGetHitKindNV:               return "OpHitObjectGetFrontFaceNV";
1724    case (int)Op::OpHitObjectGetPrimitiveIndexNV:        return "OpHitObjectGetPrimitiveIndexNV";
1725    case (int)Op::OpHitObjectGetGeometryIndexNV:         return "OpHitObjectGetGeometryIndexNV";
1726    case (int)Op::OpHitObjectGetInstanceIdNV:            return "OpHitObjectGetInstanceIdNV";
1727    case (int)Op::OpHitObjectGetInstanceCustomIndexNV:   return "OpHitObjectGetInstanceCustomIndexNV";
1728    case (int)Op::OpHitObjectGetObjectRayDirectionNV:    return "OpHitObjectGetObjectRayDirectionNV";
1729    case (int)Op::OpHitObjectGetObjectRayOriginNV:       return "OpHitObjectGetObjectRayOriginNV";
1730    case (int)Op::OpHitObjectGetWorldRayDirectionNV:     return "OpHitObjectGetWorldRayDirectionNV";
1731    case (int)Op::OpHitObjectGetWorldRayOriginNV:        return "OpHitObjectGetWorldRayOriginNV";
1732    case (int)Op::OpHitObjectGetWorldToObjectNV:         return "OpHitObjectGetWorldToObjectNV";
1733    case (int)Op::OpHitObjectGetObjectToWorldNV:         return "OpHitObjectGetObjectToWorldNV";
1734    case (int)Op::OpHitObjectGetRayTMaxNV:               return "OpHitObjectGetRayTMaxNV";
1735    case (int)Op::OpHitObjectGetRayTMinNV:               return "OpHitObjectGetRayTMinNV";
1736    case (int)Op::OpHitObjectIsEmptyNV:                  return "OpHitObjectIsEmptyNV";
1737    case (int)Op::OpHitObjectIsHitNV:                    return "OpHitObjectIsHitNV";
1738    case (int)Op::OpHitObjectIsMissNV:                   return "OpHitObjectIsMissNV";
1739    case (int)Op::OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
1740    case (int)Op::OpHitObjectGetShaderRecordBufferHandleNV:   return "OpHitObjectGetShaderRecordBufferHandleNV";
1741    case (int)Op::OpHitObjectGetClusterIdNV:             return "OpHitObjectGetClusterIdNV";
1742    case (int)Op::OpHitObjectGetSpherePositionNV:        return "OpHitObjectGetSpherePositionNV";
1743    case (int)Op::OpHitObjectGetSphereRadiusNV:          return "OpHitObjectGetSphereRadiusNV";
1744    case (int)Op::OpHitObjectGetLSSPositionsNV:          return "OpHitObjectGetLSSPositionsNV";
1745    case (int)Op::OpHitObjectGetLSSRadiiNV:              return "OpHitObjectGetLSSRadiiNV";
1746    case (int)Op::OpHitObjectIsSphereHitNV:              return "OpHitObjectIsSphereHitNV";
1747    case (int)Op::OpHitObjectIsLSSHitNV:                 return "OpHitObjectIsLSSHitNV";
1748
1749    case (int)Op::OpFetchMicroTriangleVertexBarycentricNV:       return "OpFetchMicroTriangleVertexBarycentricNV";
1750    case (int)Op::OpFetchMicroTriangleVertexPositionNV:    return "OpFetchMicroTriangleVertexPositionNV";
1751
1752    case (int)Op::OpColorAttachmentReadEXT:          return "OpColorAttachmentReadEXT";
1753    case (int)Op::OpDepthAttachmentReadEXT:          return "OpDepthAttachmentReadEXT";
1754    case (int)Op::OpStencilAttachmentReadEXT:        return "OpStencilAttachmentReadEXT";
1755
1756    case (int)Op::OpImageSampleWeightedQCOM:         return "OpImageSampleWeightedQCOM";
1757    case (int)Op::OpImageBoxFilterQCOM:              return "OpImageBoxFilterQCOM";
1758    case (int)Op::OpImageBlockMatchSADQCOM:          return "OpImageBlockMatchSADQCOM";
1759    case (int)Op::OpImageBlockMatchSSDQCOM:          return "OpImageBlockMatchSSDQCOM";
1760    case (int)Op::OpImageBlockMatchWindowSSDQCOM:    return "OpImageBlockMatchWindowSSDQCOM";
1761    case (int)Op::OpImageBlockMatchWindowSADQCOM:    return "OpImageBlockMatchWindowSADQCOM";
1762    case (int)Op::OpImageBlockMatchGatherSSDQCOM:    return "OpImageBlockMatchGatherSSDQCOM";
1763    case (int)Op::OpImageBlockMatchGatherSADQCOM:    return "OpImageBlockMatchGatherSADQCOM";
1764    case (int)Op::OpImageGatherQCOM:                 return "OpImageGatherQCOM";
1765
1766    case (int)Op::OpBitCastArrayQCOM:                return "OpBitCastArrayQCOM";
1767    case (int)Op::OpCompositeConstructCoopMatQCOM:   return "OpCompositeConstructCoopMatQCOM";
1768    case (int)Op::OpCompositeExtractCoopMatQCOM:     return "OpCompositeExtractCoopMatQCOM";
1769    case (int)Op::OpExtractSubArrayQCOM:             return "OpExtractSubArrayQCOM";
1770
1771    case (int)Op::OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT";
1772    case (int)Op::OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT";
1773    case (int)Op::OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT";
1774
1775    case (int)Op::OpSDotKHR: return "OpSDotKHR";
1776    case (int)Op::OpUDotKHR: return "OpUDotKHR";
1777    case (int)Op::OpSUDotKHR: return "OpSUDotKHR";
1778    case (int)Op::OpSDotAccSatKHR: return "OpSDotAccSatKHR";
1779    case (int)Op::OpUDotAccSatKHR: return "OpUDotAccSatKHR";
1780    case (int)Op::OpSUDotAccSatKHR: return "OpSUDotAccSatKHR";
1781
1782    case (int)Op::OpTypeHitObjectEXT:                     return "OpTypeHitObjectEXT";
1783    case (int)Op::OpHitObjectTraceRayEXT:                 return "OpHitObjectTraceRayEXT";
1784    case (int)Op::OpHitObjectTraceRayMotionEXT:           return "OpHitObjectTraceRayMotionEXT";
1785    case (int)Op::OpHitObjectRecordMissEXT:               return "OpHitObjectRecordMissEXT";
1786    case (int)Op::OpHitObjectRecordMissMotionEXT:         return "OpHitObjectRecordMissMotionEXT";
1787    case (int)Op::OpHitObjectRecordEmptyEXT:              return "OpHitObjectRecordEmptyEXT";
1788    case (int)Op::OpHitObjectExecuteShaderEXT:            return "OpHitObjectExecuteShaderEXT";
1789    case (int)Op::OpReorderThreadWithHintEXT:             return "OpReorderThreadWithHintEXT";
1790    case (int)Op::OpReorderThreadWithHitObjectEXT:        return "OpReorderThreadWithHitObjectEXT";
1791    case (int)Op::OpHitObjectGetCurrentTimeEXT:           return "OpHitObjectGetCurrentTimeEXT";
1792    case (int)Op::OpHitObjectGetAttributesEXT:            return "OpHitObjectGetAttributesEXT";
1793    case (int)Op::OpHitObjectGetHitKindEXT:               return "OpHitObjectGetHitKindEXT";
1794    case (int)Op::OpHitObjectGetPrimitiveIndexEXT:        return "OpHitObjectGetPrimitiveIndexEXT";
1795    case (int)Op::OpHitObjectGetGeometryIndexEXT:         return "OpHitObjectGetGeometryIndexEXT";
1796    case (int)Op::OpHitObjectGetInstanceIdEXT:            return "OpHitObjectGetInstanceIdEXT";
1797    case (int)Op::OpHitObjectGetInstanceCustomIndexEXT:   return "OpHitObjectGetInstanceCustomIndexEXT";
1798    case (int)Op::OpHitObjectGetObjectRayDirectionEXT:    return "OpHitObjectGetObjectRayDirectionEXT";
1799    case (int)Op::OpHitObjectGetObjectRayOriginEXT:       return "OpHitObjectGetObjectRayOriginEXT";
1800    case (int)Op::OpHitObjectGetWorldRayDirectionEXT:     return "OpHitObjectGetWorldRayDirectionEXT";
1801    case (int)Op::OpHitObjectGetWorldRayOriginEXT:        return "OpHitObjectGetWorldRayOriginEXT";
1802    case (int)Op::OpHitObjectGetWorldToObjectEXT:         return "OpHitObjectGetWorldToObjectEXT";
1803    case (int)Op::OpHitObjectGetObjectToWorldEXT:         return "OpHitObjectGetObjectToWorldEXT";
1804    case (int)Op::OpHitObjectGetRayTMaxEXT:               return "OpHitObjectGetRayTMaxEXT";
1805    case (int)Op::OpHitObjectGetRayTMinEXT:               return "OpHitObjectGetRayTMinEXT";
1806    case (int)Op::OpHitObjectGetRayFlagsEXT:              return "OpHitObjectGetRayFlagsEXT";
1807    case (int)Op::OpHitObjectIsEmptyEXT:                  return "OpHitObjectIsEmptyEXT";
1808    case (int)Op::OpHitObjectIsHitEXT:                    return "OpHitObjectIsHitEXT";
1809    case (int)Op::OpHitObjectIsMissEXT:                   return "OpHitObjectIsMissEXT";
1810    case (int)Op::OpHitObjectGetShaderBindingTableRecordIndexEXT: return "OpHitObjectGetShaderBindingTableRecordIndexEXT";
1811    case (int)Op::OpHitObjectGetShaderRecordBufferHandleEXT:   return "OpHitObjectGetShaderRecordBufferHandleEXT";
1812    case (int)Op::OpHitObjectSetShaderBindingTableRecordIndexEXT: return "OpHitObjectSetShaderBindingTableRecordIndexEXT";
1813    case (int)Op::OpHitObjectReorderExecuteShaderEXT:     return "OpHitObjectReorderExecuteEXT";
1814    case (int)Op::OpHitObjectTraceReorderExecuteEXT:      return "OpHitObjectTraceReorderExecuteEXT";
1815    case (int)Op::OpHitObjectTraceMotionReorderExecuteEXT: return "OpHitObjectTraceMotionReorderExecuteEXT";
1816    case (int)Op::OpHitObjectRecordFromQueryEXT:          return "OpHitObjectRecordFromQueryEXT";
1817    case (int)Op::OpHitObjectGetIntersectionTriangleVertexPositionsEXT: return "OpHitObjectGetIntersectionTriangleVertexPositionsEXT";
1818
1819    case (int)Op::OpBitcastExtractEXT:                    return "OpBitcastExtractEXT";
1820    case (int)Op::OpControlBarrierArriveEXT: return "OpControlBarrierArriveEXT";
1821    case (int)Op::OpControlBarrierWaitEXT: return "OpControlBarrierWaitEXT";
1822
1823    default:
1824        return "Bad";
1825    }
1826}
1827
1828// The set of objects that hold all the instruction/operand
1829// parameterization information.
1830InstructionParameters InstructionDesc[OpCodeMask + 1];
1831OperandParameters ExecutionModeOperands[ExecutionModeCeiling];
1832OperandParameters DecorationOperands[DecorationCeiling];
1833
1834EnumDefinition OperandClassParams[OperandCount];
1835EnumParameters ExecutionModeParams[ExecutionModeCeiling];
1836EnumParameters ImageOperandsParams[ImageOperandsCeiling];
1837EnumParameters DecorationParams[DecorationCeiling];
1838EnumParameters LoopControlParams[FunctionControlCeiling];
1839EnumParameters SelectionControlParams[SelectControlCeiling];
1840EnumParameters FunctionControlParams[FunctionControlCeiling];
1841EnumParameters MemoryAccessParams[MemoryAccessCeiling];
1842EnumParameters CooperativeMatrixOperandsParams[CooperativeMatrixOperandsCeiling];
1843EnumParameters TensorAddressingOperandsParams[TensorAddressingOperandsCeiling];
1844
1845// Set up all the parameterizing descriptions of the opcodes, operands, etc.
1846void Parameterize()
1847{
1848    // only do this once.
1849    static std::once_flag initialized;
1850    std::call_once(initialized, [](){
1851
1852        // Exceptions to having a result <id> and a resulting type <id>.
1853        // (Everything is initialized to have both).
1854
1855        InstructionDesc[enumCast(Op::OpNop)].setResultAndType(false, false);
1856        InstructionDesc[enumCast(Op::OpSource)].setResultAndType(false, false);
1857        InstructionDesc[enumCast(Op::OpSourceContinued)].setResultAndType(false, false);
1858        InstructionDesc[enumCast(Op::OpSourceExtension)].setResultAndType(false, false);
1859        InstructionDesc[enumCast(Op::OpExtension)].setResultAndType(false, false);
1860        InstructionDesc[enumCast(Op::OpExtInstImport)].setResultAndType(true, false);
1861        InstructionDesc[enumCast(Op::OpCapability)].setResultAndType(false, false);
1862        InstructionDesc[enumCast(Op::OpMemoryModel)].setResultAndType(false, false);
1863        InstructionDesc[enumCast(Op::OpEntryPoint)].setResultAndType(false, false);
1864        InstructionDesc[enumCast(Op::OpExecutionMode)].setResultAndType(false, false);
1865        InstructionDesc[enumCast(Op::OpExecutionModeId)].setResultAndType(false, false);
1866        InstructionDesc[enumCast(Op::OpTypeVoid)].setResultAndType(true, false);
1867        InstructionDesc[enumCast(Op::OpTypeBool)].setResultAndType(true, false);
1868        InstructionDesc[enumCast(Op::OpTypeInt)].setResultAndType(true, false);
1869        InstructionDesc[enumCast(Op::OpTypeFloat)].setResultAndType(true, false);
1870        InstructionDesc[enumCast(Op::OpTypeVector)].setResultAndType(true, false);
1871        InstructionDesc[enumCast(Op::OpTypeMatrix)].setResultAndType(true, false);
1872        InstructionDesc[enumCast(Op::OpTypeImage)].setResultAndType(true, false);
1873        InstructionDesc[enumCast(Op::OpTypeSampler)].setResultAndType(true, false);
1874        InstructionDesc[enumCast(Op::OpTypeSampledImage)].setResultAndType(true, false);
1875        InstructionDesc[enumCast(Op::OpTypeArray)].setResultAndType(true, false);
1876        InstructionDesc[enumCast(Op::OpTypeRuntimeArray)].setResultAndType(true, false);
1877        InstructionDesc[enumCast(Op::OpTypeStruct)].setResultAndType(true, false);
1878        InstructionDesc[enumCast(Op::OpTypeOpaque)].setResultAndType(true, false);
1879        InstructionDesc[enumCast(Op::OpTypePointer)].setResultAndType(true, false);
1880        InstructionDesc[enumCast(Op::OpTypeUntypedPointerKHR)].setResultAndType(true, false);
1881        InstructionDesc[enumCast(Op::OpTypeForwardPointer)].setResultAndType(false, false);
1882        InstructionDesc[enumCast(Op::OpTypeFunction)].setResultAndType(true, false);
1883        InstructionDesc[enumCast(Op::OpTypeEvent)].setResultAndType(true, false);
1884        InstructionDesc[enumCast(Op::OpTypeDeviceEvent)].setResultAndType(true, false);
1885        InstructionDesc[enumCast(Op::OpTypeReserveId)].setResultAndType(true, false);
1886        InstructionDesc[enumCast(Op::OpTypeQueue)].setResultAndType(true, false);
1887        InstructionDesc[enumCast(Op::OpTypePipe)].setResultAndType(true, false);
1888        InstructionDesc[enumCast(Op::OpFunctionEnd)].setResultAndType(false, false);
1889        InstructionDesc[enumCast(Op::OpStore)].setResultAndType(false, false);
1890        InstructionDesc[enumCast(Op::OpImageWrite)].setResultAndType(false, false);
1891        InstructionDesc[enumCast(Op::OpDecorationGroup)].setResultAndType(true, false);
1892        InstructionDesc[enumCast(Op::OpDecorate)].setResultAndType(false, false);
1893        InstructionDesc[enumCast(Op::OpDecorateId)].setResultAndType(false, false);
1894        InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].setResultAndType(false, false);
1895        InstructionDesc[enumCast(Op::OpMemberDecorate)].setResultAndType(false, false);
1896        InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].setResultAndType(false, false);
1897        InstructionDesc[enumCast(Op::OpGroupDecorate)].setResultAndType(false, false);
1898        InstructionDesc[enumCast(Op::OpGroupMemberDecorate)].setResultAndType(false, false);
1899        InstructionDesc[enumCast(Op::OpName)].setResultAndType(false, false);
1900        InstructionDesc[enumCast(Op::OpMemberName)].setResultAndType(false, false);
1901        InstructionDesc[enumCast(Op::OpString)].setResultAndType(true, false);
1902        InstructionDesc[enumCast(Op::OpLine)].setResultAndType(false, false);
1903        InstructionDesc[enumCast(Op::OpNoLine)].setResultAndType(false, false);
1904        InstructionDesc[enumCast(Op::OpCopyMemory)].setResultAndType(false, false);
1905        InstructionDesc[enumCast(Op::OpCopyMemorySized)].setResultAndType(false, false);
1906        InstructionDesc[enumCast(Op::OpEmitVertex)].setResultAndType(false, false);
1907        InstructionDesc[enumCast(Op::OpEndPrimitive)].setResultAndType(false, false);
1908        InstructionDesc[enumCast(Op::OpEmitStreamVertex)].setResultAndType(false, false);
1909        InstructionDesc[enumCast(Op::OpEndStreamPrimitive)].setResultAndType(false, false);
1910        InstructionDesc[enumCast(Op::OpControlBarrier)].setResultAndType(false, false);
1911        InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].setResultAndType(false, false);
1912        InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].setResultAndType(false, false);
1913        InstructionDesc[enumCast(Op::OpMemoryBarrier)].setResultAndType(false, false);
1914        InstructionDesc[enumCast(Op::OpAtomicStore)].setResultAndType(false, false);
1915        InstructionDesc[enumCast(Op::OpLoopMerge)].setResultAndType(false, false);
1916        InstructionDesc[enumCast(Op::OpSelectionMerge)].setResultAndType(false, false);
1917        InstructionDesc[enumCast(Op::OpLabel)].setResultAndType(true, false);
1918        InstructionDesc[enumCast(Op::OpBranch)].setResultAndType(false, false);
1919        InstructionDesc[enumCast(Op::OpBranchConditional)].setResultAndType(false, false);
1920        InstructionDesc[enumCast(Op::OpSwitch)].setResultAndType(false, false);
1921        InstructionDesc[enumCast(Op::OpKill)].setResultAndType(false, false);
1922        InstructionDesc[enumCast(Op::OpTerminateInvocation)].setResultAndType(false, false);
1923        InstructionDesc[enumCast(Op::OpReturn)].setResultAndType(false, false);
1924        InstructionDesc[enumCast(Op::OpReturnValue)].setResultAndType(false, false);
1925        InstructionDesc[enumCast(Op::OpUnreachable)].setResultAndType(false, false);
1926        InstructionDesc[enumCast(Op::OpLifetimeStart)].setResultAndType(false, false);
1927        InstructionDesc[enumCast(Op::OpLifetimeStop)].setResultAndType(false, false);
1928        InstructionDesc[enumCast(Op::OpCommitReadPipe)].setResultAndType(false, false);
1929        InstructionDesc[enumCast(Op::OpCommitWritePipe)].setResultAndType(false, false);
1930        InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].setResultAndType(false, false);
1931        InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].setResultAndType(false, false);
1932        InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].setResultAndType(false, false);
1933        InstructionDesc[enumCast(Op::OpSetUserEventStatus)].setResultAndType(false, false);
1934        InstructionDesc[enumCast(Op::OpRetainEvent)].setResultAndType(false, false);
1935        InstructionDesc[enumCast(Op::OpReleaseEvent)].setResultAndType(false, false);
1936        InstructionDesc[enumCast(Op::OpGroupWaitEvents)].setResultAndType(false, false);
1937        InstructionDesc[enumCast(Op::OpAtomicFlagClear)].setResultAndType(false, false);
1938        InstructionDesc[enumCast(Op::OpModuleProcessed)].setResultAndType(false, false);
1939        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].setResultAndType(true, false);
1940        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].setResultAndType(false, false);
1941        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].setResultAndType(true, false);
1942        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].setResultAndType(false, false);
1943        InstructionDesc[enumCast(Op::OpBeginInvocationInterlockEXT)].setResultAndType(false, false);
1944        InstructionDesc[enumCast(Op::OpEndInvocationInterlockEXT)].setResultAndType(false, false);
1945        InstructionDesc[enumCast(Op::OpAssumeTrueKHR)].setResultAndType(false, false);
1946        InstructionDesc[enumCast(Op::OpTypeTensorLayoutNV)].setResultAndType(true, false);
1947        InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].setResultAndType(true, false);
1948        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].setResultAndType(false, false);
1949        InstructionDesc[enumCast(Op::OpTypeCooperativeVectorNV)].setResultAndType(true, false);
1950        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].setResultAndType(false, false);
1951        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].setResultAndType(false, false);
1952        InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].setResultAndType(false, false);
1953        InstructionDesc[enumCast(Op::OpMemberDecorateIdEXT)].setResultAndType(false, false);
1954
1955        InstructionDesc[enumCast(Op::OpTypeTensorARM)].setResultAndType(true, false);
1956        InstructionDesc[enumCast(Op::OpTensorReadARM)].setResultAndType(true, true);
1957        InstructionDesc[enumCast(Op::OpTensorWriteARM)].setResultAndType(false, false);
1958
1959        // Specific additional context-dependent operands
1960
1961        ExecutionModeOperands[enumCast(ExecutionMode::Invocations)].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
1962
1963        ExecutionModeOperands[enumCast(ExecutionMode::LocalSize)].push(OperandLiteralNumber, "'x size'");
1964        ExecutionModeOperands[enumCast(ExecutionMode::LocalSize)].push(OperandLiteralNumber, "'y size'");
1965        ExecutionModeOperands[enumCast(ExecutionMode::LocalSize)].push(OperandLiteralNumber, "'z size'");
1966
1967        ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'x size'");
1968        ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'y size'");
1969        ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'z size'");
1970
1971        ExecutionModeOperands[enumCast(ExecutionMode::OutputVertices)].push(OperandLiteralNumber, "'Vertex count'");
1972        ExecutionModeOperands[enumCast(ExecutionMode::VecTypeHint)].push(OperandLiteralNumber, "'Vector type'");
1973
1974        DecorationOperands[enumCast(Decoration::Stream)].push(OperandLiteralNumber, "'Stream Number'");
1975        DecorationOperands[enumCast(Decoration::Location)].push(OperandLiteralNumber, "'Location'");
1976        DecorationOperands[enumCast(Decoration::Component)].push(OperandLiteralNumber, "'Component'");
1977        DecorationOperands[enumCast(Decoration::Index)].push(OperandLiteralNumber, "'Index'");
1978        DecorationOperands[enumCast(Decoration::Binding)].push(OperandLiteralNumber, "'Binding Point'");
1979        DecorationOperands[enumCast(Decoration::DescriptorSet)].push(OperandLiteralNumber, "'Descriptor Set'");
1980        DecorationOperands[enumCast(Decoration::Offset)].push(OperandLiteralNumber, "'Byte Offset'");
1981        DecorationOperands[enumCast(Decoration::XfbBuffer)].push(OperandLiteralNumber, "'XFB Buffer Number'");
1982        DecorationOperands[enumCast(Decoration::XfbStride)].push(OperandLiteralNumber, "'XFB Stride'");
1983        DecorationOperands[enumCast(Decoration::ArrayStride)].push(OperandLiteralNumber, "'Array Stride'");
1984        DecorationOperands[enumCast(Decoration::MatrixStride)].push(OperandLiteralNumber, "'Matrix Stride'");
1985        DecorationOperands[enumCast(Decoration::BuiltIn)].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
1986        DecorationOperands[enumCast(Decoration::FPRoundingMode)].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
1987        DecorationOperands[enumCast(Decoration::FPFastMathMode)].push(OperandFPFastMath, "'Fast-Math Mode'");
1988        DecorationOperands[enumCast(Decoration::LinkageAttributes)].push(OperandLiteralString, "'Name'");
1989        DecorationOperands[enumCast(Decoration::LinkageAttributes)].push(OperandLinkageType, "'Linkage Type'");
1990        DecorationOperands[enumCast(Decoration::FuncParamAttr)].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
1991        DecorationOperands[enumCast(Decoration::SpecId)].push(OperandLiteralNumber, "'Specialization Constant ID'");
1992        DecorationOperands[enumCast(Decoration::InputAttachmentIndex)].push(OperandLiteralNumber, "'Attachment Index'");
1993        DecorationOperands[enumCast(Decoration::Alignment)].push(OperandLiteralNumber, "'Alignment'");
1994
1995        OperandClassParams[OperandSource].set(0, SourceString, nullptr);
1996        OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
1997        OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
1998        OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
1999        OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
2000        OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
2001        OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
2002        OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
2003        OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
2004        OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
2005        OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
2006        OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
2007        OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
2008        OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
2009        OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
2010        OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
2011        OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
2012        OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
2013        OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
2014        OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
2015        OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
2016        OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
2017        OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
2018        OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
2019        OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
2020        OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
2021        OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
2022        OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
2023        OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
2024        OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
2025        OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
2026        OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
2027        OperandClassParams[OperandCooperativeMatrixOperands].set(CooperativeMatrixOperandsCeiling, CooperativeMatrixOperandsString, CooperativeMatrixOperandsParams, true);
2028        OperandClassParams[OperandTensorAddressingOperands].set(TensorAddressingOperandsCeiling, TensorAddressingOperandsString, TensorAddressingOperandsParams, true);
2029        OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);
2030
2031        // set name of operator, an initial set of <id> style operands, and the description
2032
2033        InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandSource, "");
2034        InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandLiteralNumber, "'Version'");
2035        InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandId, "'File'", true);
2036        InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandLiteralString, "'Source'", true);
2037
2038        InstructionDesc[enumCast(Op::OpSourceContinued)].operands.push(OperandLiteralString, "'Continued Source'");
2039
2040        InstructionDesc[enumCast(Op::OpSourceExtension)].operands.push(OperandLiteralString, "'Extension'");
2041
2042        InstructionDesc[enumCast(Op::OpName)].operands.push(OperandId, "'Target'");
2043        InstructionDesc[enumCast(Op::OpName)].operands.push(OperandLiteralString, "'Name'");
2044
2045        InstructionDesc[enumCast(Op::OpMemberName)].operands.push(OperandId, "'Type'");
2046        InstructionDesc[enumCast(Op::OpMemberName)].operands.push(OperandLiteralNumber, "'Member'");
2047        InstructionDesc[enumCast(Op::OpMemberName)].operands.push(OperandLiteralString, "'Name'");
2048
2049        InstructionDesc[enumCast(Op::OpString)].operands.push(OperandLiteralString, "'String'");
2050
2051        InstructionDesc[enumCast(Op::OpLine)].operands.push(OperandId, "'File'");
2052        InstructionDesc[enumCast(Op::OpLine)].operands.push(OperandLiteralNumber, "'Line'");
2053        InstructionDesc[enumCast(Op::OpLine)].operands.push(OperandLiteralNumber, "'Column'");
2054
2055        InstructionDesc[enumCast(Op::OpExtension)].operands.push(OperandLiteralString, "'Name'");
2056
2057        InstructionDesc[enumCast(Op::OpExtInstImport)].operands.push(OperandLiteralString, "'Name'");
2058
2059        InstructionDesc[enumCast(Op::OpCapability)].operands.push(OperandCapability, "'Capability'");
2060
2061        InstructionDesc[enumCast(Op::OpMemoryModel)].operands.push(OperandAddressing, "");
2062        InstructionDesc[enumCast(Op::OpMemoryModel)].operands.push(OperandMemory, "");
2063
2064        InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandExecutionModel, "");
2065        InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandId, "'Entry Point'");
2066        InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandLiteralString, "'Name'");
2067        InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandVariableIds, "'Interface'");
2068
2069        InstructionDesc[enumCast(Op::OpExecutionMode)].operands.push(OperandId, "'Entry Point'");
2070        InstructionDesc[enumCast(Op::OpExecutionMode)].operands.push(OperandExecutionMode, "'Mode'");
2071        InstructionDesc[enumCast(Op::OpExecutionMode)].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
2072
2073        InstructionDesc[enumCast(Op::OpExecutionModeId)].operands.push(OperandId, "'Entry Point'");
2074        InstructionDesc[enumCast(Op::OpExecutionModeId)].operands.push(OperandExecutionMode, "'Mode'");
2075        InstructionDesc[enumCast(Op::OpExecutionModeId)].operands.push(OperandVariableIds, "See <<Execution_Mode,Execution Mode>>");
2076
2077        InstructionDesc[enumCast(Op::OpTypeInt)].operands.push(OperandLiteralNumber, "'Width'");
2078        InstructionDesc[enumCast(Op::OpTypeInt)].operands.push(OperandLiteralNumber, "'Signedness'");
2079
2080        InstructionDesc[enumCast(Op::OpTypeFloat)].operands.push(OperandLiteralNumber, "'Width'");
2081        InstructionDesc[enumCast(Op::OpTypeFloat)].operands.push(OperandOptionalLiteral, "'FP Encoding'");
2082
2083        InstructionDesc[enumCast(Op::OpTypeVector)].operands.push(OperandId, "'Component Type'");
2084        InstructionDesc[enumCast(Op::OpTypeVector)].operands.push(OperandLiteralNumber, "'Component Count'");
2085
2086        InstructionDesc[enumCast(Op::OpTypeMatrix)].operands.push(OperandId, "'Column Type'");
2087        InstructionDesc[enumCast(Op::OpTypeMatrix)].operands.push(OperandLiteralNumber, "'Column Count'");
2088
2089        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandId, "'Sampled Type'");
2090        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandDimensionality, "");
2091        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'Depth'");
2092        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'Arrayed'");
2093        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'MS'");
2094        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'Sampled'");
2095        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandSamplerImageFormat, "");
2096        InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandAccessQualifier, "", true);
2097
2098        InstructionDesc[enumCast(Op::OpTypeSampledImage)].operands.push(OperandId, "'Image Type'");
2099
2100        InstructionDesc[enumCast(Op::OpTypeArray)].operands.push(OperandId, "'Element Type'");
2101        InstructionDesc[enumCast(Op::OpTypeArray)].operands.push(OperandId, "'Length'");
2102
2103        InstructionDesc[enumCast(Op::OpTypeRuntimeArray)].operands.push(OperandId, "'Element Type'");
2104
2105        InstructionDesc[enumCast(Op::OpTypeStruct)].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
2106
2107        InstructionDesc[enumCast(Op::OpTypeOpaque)].operands.push(OperandLiteralString, "The name of the opaque type.");
2108        InstructionDesc[enumCast(Op::OpTypeUntypedPointerKHR)].operands.push(OperandStorage, "");
2109
2110        InstructionDesc[enumCast(Op::OpTypePointer)].operands.push(OperandStorage, "");
2111        InstructionDesc[enumCast(Op::OpTypePointer)].operands.push(OperandId, "'Type'");
2112
2113        InstructionDesc[enumCast(Op::OpTypeForwardPointer)].operands.push(OperandId, "'Pointer Type'");
2114        InstructionDesc[enumCast(Op::OpTypeForwardPointer)].operands.push(OperandStorage, "");
2115
2116        InstructionDesc[enumCast(Op::OpTypePipe)].operands.push(OperandAccessQualifier, "'Qualifier'");
2117
2118        InstructionDesc[enumCast(Op::OpTypeFunction)].operands.push(OperandId, "'Return Type'");
2119        InstructionDesc[enumCast(Op::OpTypeFunction)].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
2120
2121        InstructionDesc[enumCast(Op::OpConstant)].operands.push(OperandVariableLiterals, "'Value'");
2122
2123        InstructionDesc[enumCast(Op::OpConstantComposite)].operands.push(OperandVariableIds, "'Constituents'");
2124
2125        InstructionDesc[enumCast(Op::OpConstantSampler)].operands.push(OperandSamplerAddressingMode, "");
2126        InstructionDesc[enumCast(Op::OpConstantSampler)].operands.push(OperandLiteralNumber, "'Param'");
2127        InstructionDesc[enumCast(Op::OpConstantSampler)].operands.push(OperandSamplerFilterMode, "");
2128
2129        InstructionDesc[enumCast(Op::OpSpecConstant)].operands.push(OperandVariableLiterals, "'Value'");
2130
2131        InstructionDesc[enumCast(Op::OpSpecConstantComposite)].operands.push(OperandVariableIds, "'Constituents'");
2132
2133        InstructionDesc[enumCast(Op::OpSpecConstantOp)].operands.push(OperandLiteralNumber, "'Opcode'");
2134        InstructionDesc[enumCast(Op::OpSpecConstantOp)].operands.push(OperandVariableIds, "'Operands'");
2135
2136        InstructionDesc[enumCast(Op::OpUntypedVariableKHR)].operands.push(OperandStorage, "");
2137        InstructionDesc[enumCast(Op::OpUntypedVariableKHR)].operands.push(OperandId, "'Type'", true);
2138        InstructionDesc[enumCast(Op::OpUntypedVariableKHR)].operands.push(OperandId, "'Initializer'", true);
2139        InstructionDesc[enumCast(Op::OpVariable)].operands.push(OperandStorage, "");
2140        InstructionDesc[enumCast(Op::OpVariable)].operands.push(OperandId, "'Initializer'", true);
2141
2142        InstructionDesc[enumCast(Op::OpFunction)].operands.push(OperandFunction, "");
2143        InstructionDesc[enumCast(Op::OpFunction)].operands.push(OperandId, "'Function Type'");
2144
2145        InstructionDesc[enumCast(Op::OpFunctionCall)].operands.push(OperandId, "'Function'");
2146        InstructionDesc[enumCast(Op::OpFunctionCall)].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
2147
2148        InstructionDesc[enumCast(Op::OpExtInst)].operands.push(OperandId, "'Set'");
2149        InstructionDesc[enumCast(Op::OpExtInst)].operands.push(OperandLiteralNumber, "'Instruction'");
2150        InstructionDesc[enumCast(Op::OpExtInst)].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
2151
2152        InstructionDesc[enumCast(Op::OpExtInstWithForwardRefsKHR)].operands.push(OperandId, "'Set'");
2153        InstructionDesc[enumCast(Op::OpExtInstWithForwardRefsKHR)].operands.push(OperandLiteralNumber, "'Instruction'");
2154        InstructionDesc[enumCast(Op::OpExtInstWithForwardRefsKHR)].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
2155
2156        InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandId, "'Pointer'");
2157        InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandMemoryAccess, "", true);
2158        InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandLiteralNumber, "", true);
2159        InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandId, "", true);
2160
2161        InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandId, "'Pointer'");
2162        InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandId, "'Object'");
2163        InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandMemoryAccess, "", true);
2164        InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandLiteralNumber, "", true);
2165        InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandId, "", true);
2166
2167        InstructionDesc[enumCast(Op::OpPhi)].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
2168
2169        InstructionDesc[enumCast(Op::OpDecorate)].operands.push(OperandId, "'Target'");
2170        InstructionDesc[enumCast(Op::OpDecorate)].operands.push(OperandDecoration, "");
2171        InstructionDesc[enumCast(Op::OpDecorate)].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
2172
2173        InstructionDesc[enumCast(Op::OpDecorateId)].operands.push(OperandId, "'Target'");
2174        InstructionDesc[enumCast(Op::OpDecorateId)].operands.push(OperandDecoration, "");
2175        InstructionDesc[enumCast(Op::OpDecorateId)].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
2176
2177        InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].operands.push(OperandId, "'Target'");
2178        InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].operands.push(OperandDecoration, "");
2179        InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
2180
2181        InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandId, "'Structure Type'");
2182        InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandLiteralNumber, "'Member'");
2183        InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandDecoration, "");
2184        InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
2185
2186        InstructionDesc[enumCast(Op::OpMemberDecorateIdEXT)].operands.push(OperandId, "'Structure Type'");
2187        InstructionDesc[enumCast(Op::OpMemberDecorateIdEXT)].operands.push(OperandLiteralNumber, "'Member'");
2188        InstructionDesc[enumCast(Op::OpMemberDecorateIdEXT)].operands.push(OperandDecoration, "");
2189        InstructionDesc[enumCast(Op::OpMemberDecorateIdEXT)].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
2190
2191        InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandId, "'Structure Type'");
2192        InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandLiteralNumber, "'Member'");
2193        InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandDecoration, "");
2194        InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
2195
2196        InstructionDesc[enumCast(Op::OpGroupDecorate)].operands.push(OperandId, "'Decoration Group'");
2197        InstructionDesc[enumCast(Op::OpGroupDecorate)].operands.push(OperandVariableIds, "'Targets'");
2198
2199        InstructionDesc[enumCast(Op::OpGroupMemberDecorate)].operands.push(OperandId, "'Decoration Group'");
2200        InstructionDesc[enumCast(Op::OpGroupMemberDecorate)].operands.push(OperandVariableIdLiteral, "'Targets'");
2201
2202        InstructionDesc[enumCast(Op::OpVectorExtractDynamic)].operands.push(OperandId, "'Vector'");
2203        InstructionDesc[enumCast(Op::OpVectorExtractDynamic)].operands.push(OperandId, "'Index'");
2204
2205        InstructionDesc[enumCast(Op::OpVectorInsertDynamic)].operands.push(OperandId, "'Vector'");
2206        InstructionDesc[enumCast(Op::OpVectorInsertDynamic)].operands.push(OperandId, "'Component'");
2207        InstructionDesc[enumCast(Op::OpVectorInsertDynamic)].operands.push(OperandId, "'Index'");
2208
2209        InstructionDesc[enumCast(Op::OpVectorShuffle)].operands.push(OperandId, "'Vector 1'");
2210        InstructionDesc[enumCast(Op::OpVectorShuffle)].operands.push(OperandId, "'Vector 2'");
2211        InstructionDesc[enumCast(Op::OpVectorShuffle)].operands.push(OperandVariableLiterals, "'Components'");
2212
2213        InstructionDesc[enumCast(Op::OpCompositeConstruct)].operands.push(OperandVariableIds, "'Constituents'");
2214
2215        InstructionDesc[enumCast(Op::OpCompositeExtract)].operands.push(OperandId, "'Composite'");
2216        InstructionDesc[enumCast(Op::OpCompositeExtract)].operands.push(OperandVariableLiterals, "'Indexes'");
2217
2218        InstructionDesc[enumCast(Op::OpCompositeInsert)].operands.push(OperandId, "'Object'");
2219        InstructionDesc[enumCast(Op::OpCompositeInsert)].operands.push(OperandId, "'Composite'");
2220        InstructionDesc[enumCast(Op::OpCompositeInsert)].operands.push(OperandVariableLiterals, "'Indexes'");
2221
2222        InstructionDesc[enumCast(Op::OpCopyObject)].operands.push(OperandId, "'Operand'");
2223
2224        InstructionDesc[enumCast(Op::OpCopyMemory)].operands.push(OperandId, "'Target'");
2225        InstructionDesc[enumCast(Op::OpCopyMemory)].operands.push(OperandId, "'Source'");
2226        InstructionDesc[enumCast(Op::OpCopyMemory)].operands.push(OperandMemoryAccess, "", true);
2227
2228        InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandId, "'Target'");
2229        InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandId, "'Source'");
2230        InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandId, "'Size'");
2231        InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandMemoryAccess, "", true);
2232
2233        InstructionDesc[enumCast(Op::OpSampledImage)].operands.push(OperandId, "'Image'");
2234        InstructionDesc[enumCast(Op::OpSampledImage)].operands.push(OperandId, "'Sampler'");
2235
2236        InstructionDesc[enumCast(Op::OpImage)].operands.push(OperandId, "'Sampled Image'");
2237
2238        InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandId, "'Image'");
2239        InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandId, "'Coordinate'");
2240        InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandImageOperands, "", true);
2241        InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandVariableIds, "", true);
2242
2243        InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandId, "'Image'");
2244        InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandId, "'Coordinate'");
2245        InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandId, "'Texel'");
2246        InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandImageOperands, "", true);
2247        InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandVariableIds, "", true);
2248
2249        InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2250        InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandId, "'Coordinate'");
2251        InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandImageOperands, "", true);
2252        InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandVariableIds, "", true);
2253
2254        InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2255        InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandId, "'Coordinate'");
2256        InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandImageOperands, "", true);
2257        InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandVariableIds, "", true);
2258
2259        InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2260        InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandId, "'Coordinate'");
2261        InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandId, "'D~ref~'");
2262        InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandImageOperands, "", true);
2263        InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandVariableIds, "", true);
2264
2265        InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2266        InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandId, "'Coordinate'");
2267        InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandId, "'D~ref~'");
2268        InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandImageOperands, "", true);
2269        InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandVariableIds, "", true);
2270
2271        InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2272        InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandId, "'Coordinate'");
2273        InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandImageOperands, "", true);
2274        InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandVariableIds, "", true);
2275
2276        InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2277        InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandId, "'Coordinate'");
2278        InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandImageOperands, "", true);
2279        InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandVariableIds, "", true);
2280
2281        InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2282        InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandId, "'Coordinate'");
2283        InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandId, "'D~ref~'");
2284        InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandImageOperands, "", true);
2285        InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandVariableIds, "", true);
2286
2287        InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2288        InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandId, "'Coordinate'");
2289        InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandId, "'D~ref~'");
2290        InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandImageOperands, "", true);
2291        InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandVariableIds, "", true);
2292
2293        InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandId, "'Image'");
2294        InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandId, "'Coordinate'");
2295        InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandImageOperands, "", true);
2296        InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandVariableIds, "", true);
2297
2298        InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandId, "'Sampled Image'");
2299        InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandId, "'Coordinate'");
2300        InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandId, "'Component'");
2301        InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandImageOperands, "", true);
2302        InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandVariableIds, "", true);
2303
2304        InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandId, "'Sampled Image'");
2305        InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandId, "'Coordinate'");
2306        InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandId, "'D~ref~'");
2307        InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandImageOperands, "", true);
2308        InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandVariableIds, "", true);
2309
2310        InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2311        InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandId, "'Coordinate'");
2312        InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandImageOperands, "", true);
2313        InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandVariableIds, "", true);
2314
2315        InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2316        InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandId, "'Coordinate'");
2317        InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandImageOperands, "", true);
2318        InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandVariableIds, "", true);
2319
2320        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2321        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandId, "'Coordinate'");
2322        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandId, "'D~ref~'");
2323        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandImageOperands, "", true);
2324        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandVariableIds, "", true);
2325
2326        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2327        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandId, "'Coordinate'");
2328        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandId, "'D~ref~'");
2329        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandImageOperands, "", true);
2330        InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandVariableIds, "", true);
2331
2332        InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2333        InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandId, "'Coordinate'");
2334        InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandImageOperands, "", true);
2335        InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandVariableIds, "", true);
2336
2337        InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2338        InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandId, "'Coordinate'");
2339        InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandImageOperands, "", true);
2340        InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandVariableIds, "", true);
2341
2342        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'");
2343        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandId, "'Coordinate'");
2344        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandId, "'D~ref~'");
2345        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandImageOperands, "", true);
2346        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandVariableIds, "", true);
2347
2348        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'");
2349        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandId, "'Coordinate'");
2350        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandId, "'D~ref~'");
2351        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandImageOperands, "", true);
2352        InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandVariableIds, "", true);
2353
2354        InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandId, "'Image'");
2355        InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandId, "'Coordinate'");
2356        InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandImageOperands, "", true);
2357        InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandVariableIds, "", true);
2358
2359        InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandId, "'Sampled Image'");
2360        InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandId, "'Coordinate'");
2361        InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandId, "'Component'");
2362        InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandImageOperands, "", true);
2363        InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandVariableIds, "", true);
2364
2365        InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandId, "'Sampled Image'");
2366        InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandId, "'Coordinate'");
2367        InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandId, "'D~ref~'");
2368        InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandImageOperands, "", true);
2369        InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandVariableIds, "", true);
2370
2371        InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandId, "'Image'");
2372        InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandId, "'Coordinate'");
2373        InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandImageOperands, "", true);
2374        InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandVariableIds, "", true);
2375
2376        InstructionDesc[enumCast(Op::OpImageSparseTexelsResident)].operands.push(OperandId, "'Resident Code'");
2377
2378        InstructionDesc[enumCast(Op::OpImageQuerySizeLod)].operands.push(OperandId, "'Image'");
2379        InstructionDesc[enumCast(Op::OpImageQuerySizeLod)].operands.push(OperandId, "'Level of Detail'");
2380
2381        InstructionDesc[enumCast(Op::OpImageQuerySize)].operands.push(OperandId, "'Image'");
2382
2383        InstructionDesc[enumCast(Op::OpImageQueryLod)].operands.push(OperandId, "'Image'");
2384        InstructionDesc[enumCast(Op::OpImageQueryLod)].operands.push(OperandId, "'Coordinate'");
2385
2386        InstructionDesc[enumCast(Op::OpImageQueryLevels)].operands.push(OperandId, "'Image'");
2387
2388        InstructionDesc[enumCast(Op::OpImageQuerySamples)].operands.push(OperandId, "'Image'");
2389
2390        InstructionDesc[enumCast(Op::OpImageQueryFormat)].operands.push(OperandId, "'Image'");
2391
2392        InstructionDesc[enumCast(Op::OpImageQueryOrder)].operands.push(OperandId, "'Image'");
2393
2394        InstructionDesc[enumCast(Op::OpAccessChain)].operands.push(OperandId, "'Base'");
2395        InstructionDesc[enumCast(Op::OpAccessChain)].operands.push(OperandVariableIds, "'Indexes'");
2396
2397        InstructionDesc[enumCast(Op::OpUntypedAccessChainKHR)].operands.push(OperandId, "'Base Type'");
2398        InstructionDesc[enumCast(Op::OpUntypedAccessChainKHR)].operands.push(OperandId, "'Base'");
2399        InstructionDesc[enumCast(Op::OpUntypedAccessChainKHR)].operands.push(OperandVariableIds, "'Indexes'");
2400        InstructionDesc[enumCast(Op::OpInBoundsAccessChain)].operands.push(OperandId, "'Base'");
2401        InstructionDesc[enumCast(Op::OpInBoundsAccessChain)].operands.push(OperandVariableIds, "'Indexes'");
2402
2403        InstructionDesc[enumCast(Op::OpPtrAccessChain)].operands.push(OperandId, "'Base'");
2404        InstructionDesc[enumCast(Op::OpPtrAccessChain)].operands.push(OperandId, "'Element'");
2405        InstructionDesc[enumCast(Op::OpPtrAccessChain)].operands.push(OperandVariableIds, "'Indexes'");
2406
2407        InstructionDesc[enumCast(Op::OpInBoundsPtrAccessChain)].operands.push(OperandId, "'Base'");
2408        InstructionDesc[enumCast(Op::OpInBoundsPtrAccessChain)].operands.push(OperandId, "'Element'");
2409        InstructionDesc[enumCast(Op::OpInBoundsPtrAccessChain)].operands.push(OperandVariableIds, "'Indexes'");
2410
2411        InstructionDesc[enumCast(Op::OpSNegate)].operands.push(OperandId, "'Operand'");
2412
2413        InstructionDesc[enumCast(Op::OpFNegate)].operands.push(OperandId, "'Operand'");
2414
2415        InstructionDesc[enumCast(Op::OpNot)].operands.push(OperandId, "'Operand'");
2416
2417        InstructionDesc[enumCast(Op::OpAny)].operands.push(OperandId, "'Vector'");
2418
2419        InstructionDesc[enumCast(Op::OpAll)].operands.push(OperandId, "'Vector'");
2420
2421        InstructionDesc[enumCast(Op::OpConvertFToU)].operands.push(OperandId, "'Float Value'");
2422
2423        InstructionDesc[enumCast(Op::OpConvertFToS)].operands.push(OperandId, "'Float Value'");
2424
2425        InstructionDesc[enumCast(Op::OpConvertSToF)].operands.push(OperandId, "'Signed Value'");
2426
2427        InstructionDesc[enumCast(Op::OpConvertUToF)].operands.push(OperandId, "'Unsigned Value'");
2428
2429        InstructionDesc[enumCast(Op::OpUConvert)].operands.push(OperandId, "'Unsigned Value'");
2430
2431        InstructionDesc[enumCast(Op::OpSConvert)].operands.push(OperandId, "'Signed Value'");
2432
2433        InstructionDesc[enumCast(Op::OpFConvert)].operands.push(OperandId, "'Float Value'");
2434
2435        InstructionDesc[enumCast(Op::OpSatConvertSToU)].operands.push(OperandId, "'Signed Value'");
2436
2437        InstructionDesc[enumCast(Op::OpSatConvertUToS)].operands.push(OperandId, "'Unsigned Value'");
2438
2439        InstructionDesc[enumCast(Op::OpConvertPtrToU)].operands.push(OperandId, "'Pointer'");
2440
2441        InstructionDesc[enumCast(Op::OpConvertUToPtr)].operands.push(OperandId, "'Integer Value'");
2442
2443        InstructionDesc[enumCast(Op::OpPtrCastToGeneric)].operands.push(OperandId, "'Pointer'");
2444
2445        InstructionDesc[enumCast(Op::OpGenericCastToPtr)].operands.push(OperandId, "'Pointer'");
2446
2447        InstructionDesc[enumCast(Op::OpGenericCastToPtrExplicit)].operands.push(OperandId, "'Pointer'");
2448        InstructionDesc[enumCast(Op::OpGenericCastToPtrExplicit)].operands.push(OperandStorage, "'Storage'");
2449
2450        InstructionDesc[enumCast(Op::OpGenericPtrMemSemantics)].operands.push(OperandId, "'Pointer'");
2451
2452        InstructionDesc[enumCast(Op::OpBitcast)].operands.push(OperandId, "'Operand'");
2453
2454        InstructionDesc[enumCast(Op::OpQuantizeToF16)].operands.push(OperandId, "'Value'");
2455
2456        InstructionDesc[enumCast(Op::OpTranspose)].operands.push(OperandId, "'Matrix'");
2457
2458        InstructionDesc[enumCast(Op::OpCopyLogical)].operands.push(OperandId, "'Operand'");
2459
2460        InstructionDesc[enumCast(Op::OpIsNan)].operands.push(OperandId, "'x'");
2461
2462        InstructionDesc[enumCast(Op::OpIsInf)].operands.push(OperandId, "'x'");
2463
2464        InstructionDesc[enumCast(Op::OpIsFinite)].operands.push(OperandId, "'x'");
2465
2466        InstructionDesc[enumCast(Op::OpIsNormal)].operands.push(OperandId, "'x'");
2467
2468        InstructionDesc[enumCast(Op::OpSignBitSet)].operands.push(OperandId, "'x'");
2469
2470        InstructionDesc[enumCast(Op::OpLessOrGreater)].operands.push(OperandId, "'x'");
2471        InstructionDesc[enumCast(Op::OpLessOrGreater)].operands.push(OperandId, "'y'");
2472
2473        InstructionDesc[enumCast(Op::OpOrdered)].operands.push(OperandId, "'x'");
2474        InstructionDesc[enumCast(Op::OpOrdered)].operands.push(OperandId, "'y'");
2475
2476        InstructionDesc[enumCast(Op::OpUnordered)].operands.push(OperandId, "'x'");
2477        InstructionDesc[enumCast(Op::OpUnordered)].operands.push(OperandId, "'y'");
2478
2479        InstructionDesc[enumCast(Op::OpArrayLength)].operands.push(OperandId, "'Structure'");
2480        InstructionDesc[enumCast(Op::OpArrayLength)].operands.push(OperandLiteralNumber, "'Array member'");
2481
2482        InstructionDesc[enumCast(Op::OpIAdd)].operands.push(OperandId, "'Operand 1'");
2483        InstructionDesc[enumCast(Op::OpIAdd)].operands.push(OperandId, "'Operand 2'");
2484
2485        InstructionDesc[enumCast(Op::OpFAdd)].operands.push(OperandId, "'Operand 1'");
2486        InstructionDesc[enumCast(Op::OpFAdd)].operands.push(OperandId, "'Operand 2'");
2487
2488        InstructionDesc[enumCast(Op::OpISub)].operands.push(OperandId, "'Operand 1'");
2489        InstructionDesc[enumCast(Op::OpISub)].operands.push(OperandId, "'Operand 2'");
2490
2491        InstructionDesc[enumCast(Op::OpFSub)].operands.push(OperandId, "'Operand 1'");
2492        InstructionDesc[enumCast(Op::OpFSub)].operands.push(OperandId, "'Operand 2'");
2493
2494        InstructionDesc[enumCast(Op::OpIMul)].operands.push(OperandId, "'Operand 1'");
2495        InstructionDesc[enumCast(Op::OpIMul)].operands.push(OperandId, "'Operand 2'");
2496
2497        InstructionDesc[enumCast(Op::OpFMul)].operands.push(OperandId, "'Operand 1'");
2498        InstructionDesc[enumCast(Op::OpFMul)].operands.push(OperandId, "'Operand 2'");
2499
2500        InstructionDesc[enumCast(Op::OpUDiv)].operands.push(OperandId, "'Operand 1'");
2501        InstructionDesc[enumCast(Op::OpUDiv)].operands.push(OperandId, "'Operand 2'");
2502
2503        InstructionDesc[enumCast(Op::OpSDiv)].operands.push(OperandId, "'Operand 1'");
2504        InstructionDesc[enumCast(Op::OpSDiv)].operands.push(OperandId, "'Operand 2'");
2505
2506        InstructionDesc[enumCast(Op::OpFDiv)].operands.push(OperandId, "'Operand 1'");
2507        InstructionDesc[enumCast(Op::OpFDiv)].operands.push(OperandId, "'Operand 2'");
2508
2509        InstructionDesc[enumCast(Op::OpUMod)].operands.push(OperandId, "'Operand 1'");
2510        InstructionDesc[enumCast(Op::OpUMod)].operands.push(OperandId, "'Operand 2'");
2511
2512        InstructionDesc[enumCast(Op::OpSRem)].operands.push(OperandId, "'Operand 1'");
2513        InstructionDesc[enumCast(Op::OpSRem)].operands.push(OperandId, "'Operand 2'");
2514
2515        InstructionDesc[enumCast(Op::OpSMod)].operands.push(OperandId, "'Operand 1'");
2516        InstructionDesc[enumCast(Op::OpSMod)].operands.push(OperandId, "'Operand 2'");
2517
2518        InstructionDesc[enumCast(Op::OpFRem)].operands.push(OperandId, "'Operand 1'");
2519        InstructionDesc[enumCast(Op::OpFRem)].operands.push(OperandId, "'Operand 2'");
2520
2521        InstructionDesc[enumCast(Op::OpFMod)].operands.push(OperandId, "'Operand 1'");
2522        InstructionDesc[enumCast(Op::OpFMod)].operands.push(OperandId, "'Operand 2'");
2523
2524        InstructionDesc[enumCast(Op::OpVectorTimesScalar)].operands.push(OperandId, "'Vector'");
2525        InstructionDesc[enumCast(Op::OpVectorTimesScalar)].operands.push(OperandId, "'Scalar'");
2526
2527        InstructionDesc[enumCast(Op::OpMatrixTimesScalar)].operands.push(OperandId, "'Matrix'");
2528        InstructionDesc[enumCast(Op::OpMatrixTimesScalar)].operands.push(OperandId, "'Scalar'");
2529
2530        InstructionDesc[enumCast(Op::OpVectorTimesMatrix)].operands.push(OperandId, "'Vector'");
2531        InstructionDesc[enumCast(Op::OpVectorTimesMatrix)].operands.push(OperandId, "'Matrix'");
2532
2533        InstructionDesc[enumCast(Op::OpMatrixTimesVector)].operands.push(OperandId, "'Matrix'");
2534        InstructionDesc[enumCast(Op::OpMatrixTimesVector)].operands.push(OperandId, "'Vector'");
2535
2536        InstructionDesc[enumCast(Op::OpMatrixTimesMatrix)].operands.push(OperandId, "'LeftMatrix'");
2537        InstructionDesc[enumCast(Op::OpMatrixTimesMatrix)].operands.push(OperandId, "'RightMatrix'");
2538
2539        InstructionDesc[enumCast(Op::OpOuterProduct)].operands.push(OperandId, "'Vector 1'");
2540        InstructionDesc[enumCast(Op::OpOuterProduct)].operands.push(OperandId, "'Vector 2'");
2541
2542        InstructionDesc[enumCast(Op::OpDot)].operands.push(OperandId, "'Vector 1'");
2543        InstructionDesc[enumCast(Op::OpDot)].operands.push(OperandId, "'Vector 2'");
2544
2545        InstructionDesc[enumCast(Op::OpIAddCarry)].operands.push(OperandId, "'Operand 1'");
2546        InstructionDesc[enumCast(Op::OpIAddCarry)].operands.push(OperandId, "'Operand 2'");
2547
2548        InstructionDesc[enumCast(Op::OpISubBorrow)].operands.push(OperandId, "'Operand 1'");
2549        InstructionDesc[enumCast(Op::OpISubBorrow)].operands.push(OperandId, "'Operand 2'");
2550
2551        InstructionDesc[enumCast(Op::OpUMulExtended)].operands.push(OperandId, "'Operand 1'");
2552        InstructionDesc[enumCast(Op::OpUMulExtended)].operands.push(OperandId, "'Operand 2'");
2553
2554        InstructionDesc[enumCast(Op::OpSMulExtended)].operands.push(OperandId, "'Operand 1'");
2555        InstructionDesc[enumCast(Op::OpSMulExtended)].operands.push(OperandId, "'Operand 2'");
2556
2557        InstructionDesc[enumCast(Op::OpShiftRightLogical)].operands.push(OperandId, "'Base'");
2558        InstructionDesc[enumCast(Op::OpShiftRightLogical)].operands.push(OperandId, "'Shift'");
2559
2560        InstructionDesc[enumCast(Op::OpShiftRightArithmetic)].operands.push(OperandId, "'Base'");
2561        InstructionDesc[enumCast(Op::OpShiftRightArithmetic)].operands.push(OperandId, "'Shift'");
2562
2563        InstructionDesc[enumCast(Op::OpShiftLeftLogical)].operands.push(OperandId, "'Base'");
2564        InstructionDesc[enumCast(Op::OpShiftLeftLogical)].operands.push(OperandId, "'Shift'");
2565
2566        InstructionDesc[enumCast(Op::OpLogicalOr)].operands.push(OperandId, "'Operand 1'");
2567        InstructionDesc[enumCast(Op::OpLogicalOr)].operands.push(OperandId, "'Operand 2'");
2568
2569        InstructionDesc[enumCast(Op::OpLogicalAnd)].operands.push(OperandId, "'Operand 1'");
2570        InstructionDesc[enumCast(Op::OpLogicalAnd)].operands.push(OperandId, "'Operand 2'");
2571
2572        InstructionDesc[enumCast(Op::OpLogicalEqual)].operands.push(OperandId, "'Operand 1'");
2573        InstructionDesc[enumCast(Op::OpLogicalEqual)].operands.push(OperandId, "'Operand 2'");
2574
2575        InstructionDesc[enumCast(Op::OpLogicalNotEqual)].operands.push(OperandId, "'Operand 1'");
2576        InstructionDesc[enumCast(Op::OpLogicalNotEqual)].operands.push(OperandId, "'Operand 2'");
2577
2578        InstructionDesc[enumCast(Op::OpLogicalNot)].operands.push(OperandId, "'Operand'");
2579
2580        InstructionDesc[enumCast(Op::OpBitwiseOr)].operands.push(OperandId, "'Operand 1'");
2581        InstructionDesc[enumCast(Op::OpBitwiseOr)].operands.push(OperandId, "'Operand 2'");
2582
2583        InstructionDesc[enumCast(Op::OpBitwiseXor)].operands.push(OperandId, "'Operand 1'");
2584        InstructionDesc[enumCast(Op::OpBitwiseXor)].operands.push(OperandId, "'Operand 2'");
2585
2586        InstructionDesc[enumCast(Op::OpBitwiseAnd)].operands.push(OperandId, "'Operand 1'");
2587        InstructionDesc[enumCast(Op::OpBitwiseAnd)].operands.push(OperandId, "'Operand 2'");
2588
2589        InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Base'");
2590        InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Insert'");
2591        InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Offset'");
2592        InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Count'");
2593
2594        InstructionDesc[enumCast(Op::OpBitFieldSExtract)].operands.push(OperandId, "'Base'");
2595        InstructionDesc[enumCast(Op::OpBitFieldSExtract)].operands.push(OperandId, "'Offset'");
2596        InstructionDesc[enumCast(Op::OpBitFieldSExtract)].operands.push(OperandId, "'Count'");
2597
2598        InstructionDesc[enumCast(Op::OpBitFieldUExtract)].operands.push(OperandId, "'Base'");
2599        InstructionDesc[enumCast(Op::OpBitFieldUExtract)].operands.push(OperandId, "'Offset'");
2600        InstructionDesc[enumCast(Op::OpBitFieldUExtract)].operands.push(OperandId, "'Count'");
2601
2602        InstructionDesc[enumCast(Op::OpBitReverse)].operands.push(OperandId, "'Base'");
2603
2604        InstructionDesc[enumCast(Op::OpBitCount)].operands.push(OperandId, "'Base'");
2605
2606        InstructionDesc[enumCast(Op::OpSelect)].operands.push(OperandId, "'Condition'");
2607        InstructionDesc[enumCast(Op::OpSelect)].operands.push(OperandId, "'Object 1'");
2608        InstructionDesc[enumCast(Op::OpSelect)].operands.push(OperandId, "'Object 2'");
2609
2610        InstructionDesc[enumCast(Op::OpIEqual)].operands.push(OperandId, "'Operand 1'");
2611        InstructionDesc[enumCast(Op::OpIEqual)].operands.push(OperandId, "'Operand 2'");
2612
2613        InstructionDesc[enumCast(Op::OpFOrdEqual)].operands.push(OperandId, "'Operand 1'");
2614        InstructionDesc[enumCast(Op::OpFOrdEqual)].operands.push(OperandId, "'Operand 2'");
2615
2616        InstructionDesc[enumCast(Op::OpFUnordEqual)].operands.push(OperandId, "'Operand 1'");
2617        InstructionDesc[enumCast(Op::OpFUnordEqual)].operands.push(OperandId, "'Operand 2'");
2618
2619        InstructionDesc[enumCast(Op::OpINotEqual)].operands.push(OperandId, "'Operand 1'");
2620        InstructionDesc[enumCast(Op::OpINotEqual)].operands.push(OperandId, "'Operand 2'");
2621
2622        InstructionDesc[enumCast(Op::OpFOrdNotEqual)].operands.push(OperandId, "'Operand 1'");
2623        InstructionDesc[enumCast(Op::OpFOrdNotEqual)].operands.push(OperandId, "'Operand 2'");
2624
2625        InstructionDesc[enumCast(Op::OpFUnordNotEqual)].operands.push(OperandId, "'Operand 1'");
2626        InstructionDesc[enumCast(Op::OpFUnordNotEqual)].operands.push(OperandId, "'Operand 2'");
2627
2628        InstructionDesc[enumCast(Op::OpULessThan)].operands.push(OperandId, "'Operand 1'");
2629        InstructionDesc[enumCast(Op::OpULessThan)].operands.push(OperandId, "'Operand 2'");
2630
2631        InstructionDesc[enumCast(Op::OpSLessThan)].operands.push(OperandId, "'Operand 1'");
2632        InstructionDesc[enumCast(Op::OpSLessThan)].operands.push(OperandId, "'Operand 2'");
2633
2634        InstructionDesc[enumCast(Op::OpFOrdLessThan)].operands.push(OperandId, "'Operand 1'");
2635        InstructionDesc[enumCast(Op::OpFOrdLessThan)].operands.push(OperandId, "'Operand 2'");
2636
2637        InstructionDesc[enumCast(Op::OpFUnordLessThan)].operands.push(OperandId, "'Operand 1'");
2638        InstructionDesc[enumCast(Op::OpFUnordLessThan)].operands.push(OperandId, "'Operand 2'");
2639
2640        InstructionDesc[enumCast(Op::OpUGreaterThan)].operands.push(OperandId, "'Operand 1'");
2641        InstructionDesc[enumCast(Op::OpUGreaterThan)].operands.push(OperandId, "'Operand 2'");
2642
2643        InstructionDesc[enumCast(Op::OpSGreaterThan)].operands.push(OperandId, "'Operand 1'");
2644        InstructionDesc[enumCast(Op::OpSGreaterThan)].operands.push(OperandId, "'Operand 2'");
2645
2646        InstructionDesc[enumCast(Op::OpFOrdGreaterThan)].operands.push(OperandId, "'Operand 1'");
2647        InstructionDesc[enumCast(Op::OpFOrdGreaterThan)].operands.push(OperandId, "'Operand 2'");
2648
2649        InstructionDesc[enumCast(Op::OpFUnordGreaterThan)].operands.push(OperandId, "'Operand 1'");
2650        InstructionDesc[enumCast(Op::OpFUnordGreaterThan)].operands.push(OperandId, "'Operand 2'");
2651
2652        InstructionDesc[enumCast(Op::OpULessThanEqual)].operands.push(OperandId, "'Operand 1'");
2653        InstructionDesc[enumCast(Op::OpULessThanEqual)].operands.push(OperandId, "'Operand 2'");
2654
2655        InstructionDesc[enumCast(Op::OpSLessThanEqual)].operands.push(OperandId, "'Operand 1'");
2656        InstructionDesc[enumCast(Op::OpSLessThanEqual)].operands.push(OperandId, "'Operand 2'");
2657
2658        InstructionDesc[enumCast(Op::OpFOrdLessThanEqual)].operands.push(OperandId, "'Operand 1'");
2659        InstructionDesc[enumCast(Op::OpFOrdLessThanEqual)].operands.push(OperandId, "'Operand 2'");
2660
2661        InstructionDesc[enumCast(Op::OpFUnordLessThanEqual)].operands.push(OperandId, "'Operand 1'");
2662        InstructionDesc[enumCast(Op::OpFUnordLessThanEqual)].operands.push(OperandId, "'Operand 2'");
2663
2664        InstructionDesc[enumCast(Op::OpUGreaterThanEqual)].operands.push(OperandId, "'Operand 1'");
2665        InstructionDesc[enumCast(Op::OpUGreaterThanEqual)].operands.push(OperandId, "'Operand 2'");
2666
2667        InstructionDesc[enumCast(Op::OpSGreaterThanEqual)].operands.push(OperandId, "'Operand 1'");
2668        InstructionDesc[enumCast(Op::OpSGreaterThanEqual)].operands.push(OperandId, "'Operand 2'");
2669
2670        InstructionDesc[enumCast(Op::OpFOrdGreaterThanEqual)].operands.push(OperandId, "'Operand 1'");
2671        InstructionDesc[enumCast(Op::OpFOrdGreaterThanEqual)].operands.push(OperandId, "'Operand 2'");
2672
2673        InstructionDesc[enumCast(Op::OpFUnordGreaterThanEqual)].operands.push(OperandId, "'Operand 1'");
2674        InstructionDesc[enumCast(Op::OpFUnordGreaterThanEqual)].operands.push(OperandId, "'Operand 2'");
2675
2676        InstructionDesc[enumCast(Op::OpDPdx)].operands.push(OperandId, "'P'");
2677
2678        InstructionDesc[enumCast(Op::OpDPdy)].operands.push(OperandId, "'P'");
2679
2680        InstructionDesc[enumCast(Op::OpFwidth)].operands.push(OperandId, "'P'");
2681
2682        InstructionDesc[enumCast(Op::OpDPdxFine)].operands.push(OperandId, "'P'");
2683
2684        InstructionDesc[enumCast(Op::OpDPdyFine)].operands.push(OperandId, "'P'");
2685
2686        InstructionDesc[enumCast(Op::OpFwidthFine)].operands.push(OperandId, "'P'");
2687
2688        InstructionDesc[enumCast(Op::OpDPdxCoarse)].operands.push(OperandId, "'P'");
2689
2690        InstructionDesc[enumCast(Op::OpDPdyCoarse)].operands.push(OperandId, "'P'");
2691
2692        InstructionDesc[enumCast(Op::OpFwidthCoarse)].operands.push(OperandId, "'P'");
2693
2694        InstructionDesc[enumCast(Op::OpEmitStreamVertex)].operands.push(OperandId, "'Stream'");
2695
2696        InstructionDesc[enumCast(Op::OpEndStreamPrimitive)].operands.push(OperandId, "'Stream'");
2697
2698        InstructionDesc[enumCast(Op::OpControlBarrier)].operands.push(OperandScope, "'Execution'");
2699        InstructionDesc[enumCast(Op::OpControlBarrier)].operands.push(OperandScope, "'Memory'");
2700        InstructionDesc[enumCast(Op::OpControlBarrier)].operands.push(OperandMemorySemantics, "'Semantics'");
2701
2702        InstructionDesc[enumCast(Op::OpMemoryBarrier)].operands.push(OperandScope, "'Memory'");
2703        InstructionDesc[enumCast(Op::OpMemoryBarrier)].operands.push(OperandMemorySemantics, "'Semantics'");
2704
2705        InstructionDesc[enumCast(Op::OpImageTexelPointer)].operands.push(OperandId, "'Image'");
2706        InstructionDesc[enumCast(Op::OpImageTexelPointer)].operands.push(OperandId, "'Coordinate'");
2707        InstructionDesc[enumCast(Op::OpImageTexelPointer)].operands.push(OperandId, "'Sample'");
2708
2709        InstructionDesc[enumCast(Op::OpAtomicLoad)].operands.push(OperandId, "'Pointer'");
2710        InstructionDesc[enumCast(Op::OpAtomicLoad)].operands.push(OperandScope, "'Scope'");
2711        InstructionDesc[enumCast(Op::OpAtomicLoad)].operands.push(OperandMemorySemantics, "'Semantics'");
2712
2713        InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandId, "'Pointer'");
2714        InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandScope, "'Scope'");
2715        InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandMemorySemantics, "'Semantics'");
2716        InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandId, "'Value'");
2717
2718        InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandId, "'Pointer'");
2719        InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandScope, "'Scope'");
2720        InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandMemorySemantics, "'Semantics'");
2721        InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandId, "'Value'");
2722
2723        InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandId, "'Pointer'");
2724        InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandScope, "'Scope'");
2725        InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandMemorySemantics, "'Equal'");
2726        InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandMemorySemantics, "'Unequal'");
2727        InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandId, "'Value'");
2728        InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandId, "'Comparator'");
2729
2730        InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandId, "'Pointer'");
2731        InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandScope, "'Scope'");
2732        InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandMemorySemantics, "'Equal'");
2733        InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandMemorySemantics, "'Unequal'");
2734        InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandId, "'Value'");
2735        InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandId, "'Comparator'");
2736
2737        InstructionDesc[enumCast(Op::OpAtomicIIncrement)].operands.push(OperandId, "'Pointer'");
2738        InstructionDesc[enumCast(Op::OpAtomicIIncrement)].operands.push(OperandScope, "'Scope'");
2739        InstructionDesc[enumCast(Op::OpAtomicIIncrement)].operands.push(OperandMemorySemantics, "'Semantics'");
2740
2741        InstructionDesc[enumCast(Op::OpAtomicIDecrement)].operands.push(OperandId, "'Pointer'");
2742        InstructionDesc[enumCast(Op::OpAtomicIDecrement)].operands.push(OperandScope, "'Scope'");
2743        InstructionDesc[enumCast(Op::OpAtomicIDecrement)].operands.push(OperandMemorySemantics, "'Semantics'");
2744
2745        InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandId, "'Pointer'");
2746        InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandScope, "'Scope'");
2747        InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandMemorySemantics, "'Semantics'");
2748        InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandId, "'Value'");
2749
2750        InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandId, "'Pointer'");
2751        InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandScope, "'Scope'");
2752        InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandMemorySemantics, "'Semantics'");
2753        InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandId, "'Value'");
2754
2755        InstructionDesc[enumCast(Op::OpAssumeTrueKHR)].operands.push(OperandId, "'Condition'");
2756
2757        InstructionDesc[enumCast(Op::OpExpectKHR)].operands.push(OperandId, "'Value'");
2758        InstructionDesc[enumCast(Op::OpExpectKHR)].operands.push(OperandId, "'ExpectedValue'");
2759
2760        InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandId, "'Pointer'");
2761        InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandScope, "'Scope'");
2762        InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandMemorySemantics, "'Semantics'");
2763        InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandId, "'Value'");
2764
2765        InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandId, "'Pointer'");
2766        InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandScope, "'Scope'");
2767        InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandMemorySemantics, "'Semantics'");
2768        InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandId, "'Value'");
2769
2770        InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandId, "'Pointer'");
2771        InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandScope, "'Scope'");
2772        InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandMemorySemantics, "'Semantics'");
2773        InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandId, "'Value'");
2774
2775        InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandId, "'Pointer'");
2776        InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandScope, "'Scope'");
2777        InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandMemorySemantics, "'Semantics'");
2778        InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandId, "'Value'");
2779
2780        InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandId, "'Pointer'");
2781        InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandScope, "'Scope'");
2782        InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandMemorySemantics, "'Semantics'");
2783        InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandId, "'Value'");
2784
2785        InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandId, "'Pointer'");
2786        InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandScope, "'Scope'");
2787        InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandMemorySemantics, "'Semantics'");
2788        InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandId, "'Value'");
2789
2790        InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandId, "'Pointer'");
2791        InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandScope, "'Scope'");
2792        InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandMemorySemantics, "'Semantics'");
2793        InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandId, "'Value'");
2794
2795        InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandId, "'Pointer'");
2796        InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandScope, "'Scope'");
2797        InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandMemorySemantics, "'Semantics'");
2798        InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandId, "'Value'");
2799
2800        InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandId, "'Pointer'");
2801        InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandScope, "'Scope'");
2802        InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandMemorySemantics, "'Semantics'");
2803        InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandId, "'Value'");
2804
2805        InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandId, "'Pointer'");
2806        InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandScope, "'Scope'");
2807        InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandMemorySemantics, "'Semantics'");
2808        InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandId, "'Value'");
2809
2810        InstructionDesc[enumCast(Op::OpAtomicFlagTestAndSet)].operands.push(OperandId, "'Pointer'");
2811        InstructionDesc[enumCast(Op::OpAtomicFlagTestAndSet)].operands.push(OperandScope, "'Scope'");
2812        InstructionDesc[enumCast(Op::OpAtomicFlagTestAndSet)].operands.push(OperandMemorySemantics, "'Semantics'");
2813
2814        InstructionDesc[enumCast(Op::OpAtomicFlagClear)].operands.push(OperandId, "'Pointer'");
2815        InstructionDesc[enumCast(Op::OpAtomicFlagClear)].operands.push(OperandScope, "'Scope'");
2816        InstructionDesc[enumCast(Op::OpAtomicFlagClear)].operands.push(OperandMemorySemantics, "'Semantics'");
2817
2818        InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandId, "'Merge Block'");
2819        InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandId, "'Continue Target'");
2820        InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandLoop, "");
2821        InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandOptionalLiteral, "");
2822
2823        InstructionDesc[enumCast(Op::OpSelectionMerge)].operands.push(OperandId, "'Merge Block'");
2824        InstructionDesc[enumCast(Op::OpSelectionMerge)].operands.push(OperandSelect, "");
2825
2826        InstructionDesc[enumCast(Op::OpBranch)].operands.push(OperandId, "'Target Label'");
2827
2828        InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandId, "'Condition'");
2829        InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandId, "'True Label'");
2830        InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandId, "'False Label'");
2831        InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandVariableLiterals, "'Branch weights'");
2832
2833        InstructionDesc[enumCast(Op::OpSwitch)].operands.push(OperandId, "'Selector'");
2834        InstructionDesc[enumCast(Op::OpSwitch)].operands.push(OperandId, "'Default'");
2835        InstructionDesc[enumCast(Op::OpSwitch)].operands.push(OperandVariableLiteralId, "'Target'");
2836
2837
2838        InstructionDesc[enumCast(Op::OpReturnValue)].operands.push(OperandId, "'Value'");
2839
2840        InstructionDesc[enumCast(Op::OpLifetimeStart)].operands.push(OperandId, "'Pointer'");
2841        InstructionDesc[enumCast(Op::OpLifetimeStart)].operands.push(OperandLiteralNumber, "'Size'");
2842
2843        InstructionDesc[enumCast(Op::OpLifetimeStop)].operands.push(OperandId, "'Pointer'");
2844        InstructionDesc[enumCast(Op::OpLifetimeStop)].operands.push(OperandLiteralNumber, "'Size'");
2845
2846        InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandScope, "'Execution'");
2847        InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Destination'");
2848        InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Source'");
2849        InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Num Elements'");
2850        InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Stride'");
2851        InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Event'");
2852
2853        InstructionDesc[enumCast(Op::OpGroupWaitEvents)].operands.push(OperandScope, "'Execution'");
2854        InstructionDesc[enumCast(Op::OpGroupWaitEvents)].operands.push(OperandId, "'Num Events'");
2855        InstructionDesc[enumCast(Op::OpGroupWaitEvents)].operands.push(OperandId, "'Events List'");
2856
2857        InstructionDesc[enumCast(Op::OpGroupAll)].operands.push(OperandScope, "'Execution'");
2858        InstructionDesc[enumCast(Op::OpGroupAll)].operands.push(OperandId, "'Predicate'");
2859
2860        InstructionDesc[enumCast(Op::OpGroupAny)].operands.push(OperandScope, "'Execution'");
2861        InstructionDesc[enumCast(Op::OpGroupAny)].operands.push(OperandId, "'Predicate'");
2862
2863        InstructionDesc[enumCast(Op::OpGroupBroadcast)].operands.push(OperandScope, "'Execution'");
2864        InstructionDesc[enumCast(Op::OpGroupBroadcast)].operands.push(OperandId, "'Value'");
2865        InstructionDesc[enumCast(Op::OpGroupBroadcast)].operands.push(OperandId, "'LocalId'");
2866
2867        InstructionDesc[enumCast(Op::OpGroupIAdd)].operands.push(OperandScope, "'Execution'");
2868        InstructionDesc[enumCast(Op::OpGroupIAdd)].operands.push(OperandGroupOperation, "'Operation'");
2869        InstructionDesc[enumCast(Op::OpGroupIAdd)].operands.push(OperandId, "'X'");
2870
2871        InstructionDesc[enumCast(Op::OpGroupFAdd)].operands.push(OperandScope, "'Execution'");
2872        InstructionDesc[enumCast(Op::OpGroupFAdd)].operands.push(OperandGroupOperation, "'Operation'");
2873        InstructionDesc[enumCast(Op::OpGroupFAdd)].operands.push(OperandId, "'X'");
2874
2875        InstructionDesc[enumCast(Op::OpGroupUMin)].operands.push(OperandScope, "'Execution'");
2876        InstructionDesc[enumCast(Op::OpGroupUMin)].operands.push(OperandGroupOperation, "'Operation'");
2877        InstructionDesc[enumCast(Op::OpGroupUMin)].operands.push(OperandId, "'X'");
2878
2879        InstructionDesc[enumCast(Op::OpGroupSMin)].operands.push(OperandScope, "'Execution'");
2880        InstructionDesc[enumCast(Op::OpGroupSMin)].operands.push(OperandGroupOperation, "'Operation'");
2881        InstructionDesc[enumCast(Op::OpGroupSMin)].operands.push(OperandId, "X");
2882
2883        InstructionDesc[enumCast(Op::OpGroupFMin)].operands.push(OperandScope, "'Execution'");
2884        InstructionDesc[enumCast(Op::OpGroupFMin)].operands.push(OperandGroupOperation, "'Operation'");
2885        InstructionDesc[enumCast(Op::OpGroupFMin)].operands.push(OperandId, "X");
2886
2887        InstructionDesc[enumCast(Op::OpGroupUMax)].operands.push(OperandScope, "'Execution'");
2888        InstructionDesc[enumCast(Op::OpGroupUMax)].operands.push(OperandGroupOperation, "'Operation'");
2889        InstructionDesc[enumCast(Op::OpGroupUMax)].operands.push(OperandId, "X");
2890
2891        InstructionDesc[enumCast(Op::OpGroupSMax)].operands.push(OperandScope, "'Execution'");
2892        InstructionDesc[enumCast(Op::OpGroupSMax)].operands.push(OperandGroupOperation, "'Operation'");
2893        InstructionDesc[enumCast(Op::OpGroupSMax)].operands.push(OperandId, "X");
2894
2895        InstructionDesc[enumCast(Op::OpGroupFMax)].operands.push(OperandScope, "'Execution'");
2896        InstructionDesc[enumCast(Op::OpGroupFMax)].operands.push(OperandGroupOperation, "'Operation'");
2897        InstructionDesc[enumCast(Op::OpGroupFMax)].operands.push(OperandId, "X");
2898
2899        InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Pipe'");
2900        InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Pointer'");
2901        InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Packet Size'");
2902        InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Packet Alignment'");
2903
2904        InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Pipe'");
2905        InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Pointer'");
2906        InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Packet Size'");
2907        InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Packet Alignment'");
2908
2909        InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Pipe'");
2910        InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Reserve Id'");
2911        InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Index'");
2912        InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Pointer'");
2913        InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Packet Size'");
2914        InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Packet Alignment'");
2915
2916        InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Pipe'");
2917        InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Reserve Id'");
2918        InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Index'");
2919        InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Pointer'");
2920        InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Packet Size'");
2921        InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Packet Alignment'");
2922
2923        InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Pipe'");
2924        InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Num Packets'");
2925        InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Packet Size'");
2926        InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Packet Alignment'");
2927
2928        InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Pipe'");
2929        InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Num Packets'");
2930        InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Packet Size'");
2931        InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Packet Alignment'");
2932
2933        InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Pipe'");
2934        InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Reserve Id'");
2935        InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Packet Size'");
2936        InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Packet Alignment'");
2937
2938        InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Pipe'");
2939        InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Reserve Id'");
2940        InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Packet Size'");
2941        InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Packet Alignment'");
2942
2943        InstructionDesc[enumCast(Op::OpIsValidReserveId)].operands.push(OperandId, "'Reserve Id'");
2944
2945        InstructionDesc[enumCast(Op::OpGetNumPipePackets)].operands.push(OperandId, "'Pipe'");
2946        InstructionDesc[enumCast(Op::OpGetNumPipePackets)].operands.push(OperandId, "'Packet Size'");
2947        InstructionDesc[enumCast(Op::OpGetNumPipePackets)].operands.push(OperandId, "'Packet Alignment'");
2948
2949        InstructionDesc[enumCast(Op::OpGetMaxPipePackets)].operands.push(OperandId, "'Pipe'");
2950        InstructionDesc[enumCast(Op::OpGetMaxPipePackets)].operands.push(OperandId, "'Packet Size'");
2951        InstructionDesc[enumCast(Op::OpGetMaxPipePackets)].operands.push(OperandId, "'Packet Alignment'");
2952
2953        InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandScope, "'Execution'");
2954        InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Pipe'");
2955        InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Num Packets'");
2956        InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Packet Size'");
2957        InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Packet Alignment'");
2958
2959        InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandScope, "'Execution'");
2960        InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Pipe'");
2961        InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Num Packets'");
2962        InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Packet Size'");
2963        InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Packet Alignment'");
2964
2965        InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandScope, "'Execution'");
2966        InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Pipe'");
2967        InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Reserve Id'");
2968        InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Packet Size'");
2969        InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Packet Alignment'");
2970
2971        InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandScope, "'Execution'");
2972        InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Pipe'");
2973        InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Reserve Id'");
2974        InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Packet Size'");
2975        InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Packet Alignment'");
2976
2977        InstructionDesc[enumCast(Op::OpBuildNDRange)].operands.push(OperandId, "'GlobalWorkSize'");
2978        InstructionDesc[enumCast(Op::OpBuildNDRange)].operands.push(OperandId, "'LocalWorkSize'");
2979        InstructionDesc[enumCast(Op::OpBuildNDRange)].operands.push(OperandId, "'GlobalWorkOffset'");
2980
2981        InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].operands.push(OperandId, "'Event'");
2982        InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].operands.push(OperandId, "'Profiling Info'");
2983        InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].operands.push(OperandId, "'Value'");
2984
2985        InstructionDesc[enumCast(Op::OpSetUserEventStatus)].operands.push(OperandId, "'Event'");
2986        InstructionDesc[enumCast(Op::OpSetUserEventStatus)].operands.push(OperandId, "'Status'");
2987
2988        InstructionDesc[enumCast(Op::OpIsValidEvent)].operands.push(OperandId, "'Event'");
2989
2990        InstructionDesc[enumCast(Op::OpRetainEvent)].operands.push(OperandId, "'Event'");
2991
2992        InstructionDesc[enumCast(Op::OpReleaseEvent)].operands.push(OperandId, "'Event'");
2993
2994        InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Invoke'");
2995        InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Param'");
2996        InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Param Size'");
2997        InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Param Align'");
2998
2999        InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Invoke'");
3000        InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Param'");
3001        InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Param Size'");
3002        InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Param Align'");
3003
3004        InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'ND Range'");
3005        InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Invoke'");
3006        InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Param'");
3007        InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Param Size'");
3008        InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Param Align'");
3009
3010        InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'ND Range'");
3011        InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Invoke'");
3012        InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Param'");
3013        InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Param Size'");
3014        InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Param Align'");
3015
3016        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Queue'");
3017        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Flags'");
3018        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'ND Range'");
3019        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Num Events'");
3020        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Wait Events'");
3021        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Ret Event'");
3022        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Invoke'");
3023        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Param'");
3024        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Param Size'");
3025        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Param Align'");
3026        InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandVariableIds, "'Local Size'");
3027
3028        InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Queue'");
3029        InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Num Events'");
3030        InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Wait Events'");
3031        InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Ret Event'");
3032
3033        InstructionDesc[enumCast(Op::OpGroupNonUniformElect)].operands.push(OperandScope, "'Execution'");
3034
3035        InstructionDesc[enumCast(Op::OpGroupNonUniformAll)].operands.push(OperandScope, "'Execution'");
3036        InstructionDesc[enumCast(Op::OpGroupNonUniformAll)].operands.push(OperandId, "X");
3037
3038        InstructionDesc[enumCast(Op::OpGroupNonUniformAny)].operands.push(OperandScope, "'Execution'");
3039        InstructionDesc[enumCast(Op::OpGroupNonUniformAny)].operands.push(OperandId, "X");
3040
3041        InstructionDesc[enumCast(Op::OpGroupNonUniformAllEqual)].operands.push(OperandScope, "'Execution'");
3042        InstructionDesc[enumCast(Op::OpGroupNonUniformAllEqual)].operands.push(OperandId, "X");
3043
3044        InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcast)].operands.push(OperandScope, "'Execution'");
3045        InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcast)].operands.push(OperandId, "X");
3046        InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcast)].operands.push(OperandId, "ID");
3047
3048        InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcastFirst)].operands.push(OperandScope, "'Execution'");
3049        InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcastFirst)].operands.push(OperandId, "X");
3050
3051        InstructionDesc[enumCast(Op::OpGroupNonUniformBallot)].operands.push(OperandScope, "'Execution'");
3052        InstructionDesc[enumCast(Op::OpGroupNonUniformBallot)].operands.push(OperandId, "X");
3053
3054        InstructionDesc[enumCast(Op::OpGroupNonUniformInverseBallot)].operands.push(OperandScope, "'Execution'");
3055        InstructionDesc[enumCast(Op::OpGroupNonUniformInverseBallot)].operands.push(OperandId, "X");
3056
3057        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitExtract)].operands.push(OperandScope, "'Execution'");
3058        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitExtract)].operands.push(OperandId, "X");
3059        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitExtract)].operands.push(OperandId, "Bit");
3060
3061        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitCount)].operands.push(OperandScope, "'Execution'");
3062        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitCount)].operands.push(OperandGroupOperation, "'Operation'");
3063        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitCount)].operands.push(OperandId, "X");
3064
3065        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindLSB)].operands.push(OperandScope, "'Execution'");
3066        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindLSB)].operands.push(OperandId, "X");
3067
3068        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindMSB)].operands.push(OperandScope, "'Execution'");
3069        InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindMSB)].operands.push(OperandId, "X");
3070
3071        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffle)].operands.push(OperandScope, "'Execution'");
3072        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffle)].operands.push(OperandId, "X");
3073        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffle)].operands.push(OperandId, "'Id'");
3074
3075        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleXor)].operands.push(OperandScope, "'Execution'");
3076        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleXor)].operands.push(OperandId, "X");
3077        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleXor)].operands.push(OperandId, "Mask");
3078
3079        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleUp)].operands.push(OperandScope, "'Execution'");
3080        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleUp)].operands.push(OperandId, "X");
3081        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleUp)].operands.push(OperandId, "Offset");
3082
3083        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleDown)].operands.push(OperandScope, "'Execution'");
3084        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleDown)].operands.push(OperandId, "X");
3085        InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleDown)].operands.push(OperandId, "Offset");
3086
3087        InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandScope, "'Execution'");
3088        InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandGroupOperation, "'Operation'");
3089        InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandId, "X");
3090        InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandId, "'ClusterSize'", true);
3091
3092        InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandScope, "'Execution'");
3093        InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandGroupOperation, "'Operation'");
3094        InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandId, "X");
3095        InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandId, "'ClusterSize'", true);
3096
3097        InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandScope, "'Execution'");
3098        InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandGroupOperation, "'Operation'");
3099        InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandId, "X");
3100        InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandId, "'ClusterSize'", true);
3101
3102        InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandScope, "'Execution'");
3103        InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandGroupOperation, "'Operation'");
3104        InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandId, "X");
3105        InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandId, "'ClusterSize'", true);
3106
3107        InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandScope, "'Execution'");
3108        InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandGroupOperation, "'Operation'");
3109        InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandId, "X");
3110        InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandId, "'ClusterSize'", true);
3111
3112        InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandScope, "'Execution'");
3113        InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandGroupOperation, "'Operation'");
3114        InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandId, "X");
3115        InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandId, "'ClusterSize'", true);
3116
3117        InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandScope, "'Execution'");
3118        InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandGroupOperation, "'Operation'");
3119        InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandId, "X");
3120        InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandId, "'ClusterSize'", true);
3121
3122        InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandScope, "'Execution'");
3123        InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandGroupOperation, "'Operation'");
3124        InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandId, "X");
3125        InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandId, "'ClusterSize'", true);
3126
3127        InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandScope, "'Execution'");
3128        InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandGroupOperation, "'Operation'");
3129        InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandId, "X");
3130        InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandId, "'ClusterSize'", true);
3131
3132        InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandScope, "'Execution'");
3133        InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandGroupOperation, "'Operation'");
3134        InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandId, "X");
3135        InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandId, "'ClusterSize'", true);
3136
3137        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandScope, "'Execution'");
3138        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandGroupOperation, "'Operation'");
3139        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandId, "X");
3140        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandId, "'ClusterSize'", true);
3141
3142        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandScope, "'Execution'");
3143        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandGroupOperation, "'Operation'");
3144        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandId, "X");
3145        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandId, "'ClusterSize'", true);
3146
3147        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandScope, "'Execution'");
3148        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandGroupOperation, "'Operation'");
3149        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandId, "X");
3150        InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandId, "'ClusterSize'", true);
3151
3152        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandScope, "'Execution'");
3153        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandGroupOperation, "'Operation'");
3154        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandId, "X");
3155        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandId, "'ClusterSize'", true);
3156
3157        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandScope, "'Execution'");
3158        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandGroupOperation, "'Operation'");
3159        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandId, "X");
3160        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandId, "'ClusterSize'", true);
3161
3162        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandScope, "'Execution'");
3163        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandGroupOperation, "'Operation'");
3164        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandId, "X");
3165        InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandId, "'ClusterSize'", true);
3166
3167        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadBroadcast)].operands.push(OperandScope, "'Execution'");
3168        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadBroadcast)].operands.push(OperandId, "X");
3169        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadBroadcast)].operands.push(OperandId, "'Id'");
3170
3171        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadSwap)].operands.push(OperandScope, "'Execution'");
3172        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadSwap)].operands.push(OperandId, "X");
3173        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadSwap)].operands.push(OperandId, "'Direction'");
3174
3175        InstructionDesc[enumCast(Op::OpSubgroupBallotKHR)].operands.push(OperandId, "'Predicate'");
3176
3177        InstructionDesc[enumCast(Op::OpSubgroupFirstInvocationKHR)].operands.push(OperandId, "'Value'");
3178
3179        InstructionDesc[enumCast(Op::OpSubgroupAnyKHR)].operands.push(OperandScope, "'Execution'");
3180        InstructionDesc[enumCast(Op::OpSubgroupAnyKHR)].operands.push(OperandId, "'Predicate'");
3181
3182        InstructionDesc[enumCast(Op::OpSubgroupAllKHR)].operands.push(OperandScope, "'Execution'");
3183        InstructionDesc[enumCast(Op::OpSubgroupAllKHR)].operands.push(OperandId, "'Predicate'");
3184
3185        InstructionDesc[enumCast(Op::OpSubgroupAllEqualKHR)].operands.push(OperandScope, "'Execution'");
3186        InstructionDesc[enumCast(Op::OpSubgroupAllEqualKHR)].operands.push(OperandId, "'Predicate'");
3187
3188        InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandScope, "'Execution'");
3189        InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandId, "'X'");
3190        InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandId, "'Delta'");
3191        InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandId, "'ClusterSize'", true);
3192
3193        InstructionDesc[enumCast(Op::OpSubgroupReadInvocationKHR)].operands.push(OperandId, "'Value'");
3194        InstructionDesc[enumCast(Op::OpSubgroupReadInvocationKHR)].operands.push(OperandId, "'Index'");
3195
3196        InstructionDesc[enumCast(Op::OpModuleProcessed)].operands.push(OperandLiteralString, "'process'");
3197
3198        InstructionDesc[enumCast(Op::OpGroupIAddNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3199        InstructionDesc[enumCast(Op::OpGroupIAddNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3200        InstructionDesc[enumCast(Op::OpGroupIAddNonUniformAMD)].operands.push(OperandId, "'X'");
3201
3202        InstructionDesc[enumCast(Op::OpGroupFAddNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3203        InstructionDesc[enumCast(Op::OpGroupFAddNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3204        InstructionDesc[enumCast(Op::OpGroupFAddNonUniformAMD)].operands.push(OperandId, "'X'");
3205
3206        InstructionDesc[enumCast(Op::OpGroupUMinNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3207        InstructionDesc[enumCast(Op::OpGroupUMinNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3208        InstructionDesc[enumCast(Op::OpGroupUMinNonUniformAMD)].operands.push(OperandId, "'X'");
3209
3210        InstructionDesc[enumCast(Op::OpGroupSMinNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3211        InstructionDesc[enumCast(Op::OpGroupSMinNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3212        InstructionDesc[enumCast(Op::OpGroupSMinNonUniformAMD)].operands.push(OperandId, "X");
3213
3214        InstructionDesc[enumCast(Op::OpGroupFMinNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3215        InstructionDesc[enumCast(Op::OpGroupFMinNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3216        InstructionDesc[enumCast(Op::OpGroupFMinNonUniformAMD)].operands.push(OperandId, "X");
3217
3218        InstructionDesc[enumCast(Op::OpGroupUMaxNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3219        InstructionDesc[enumCast(Op::OpGroupUMaxNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3220        InstructionDesc[enumCast(Op::OpGroupUMaxNonUniformAMD)].operands.push(OperandId, "X");
3221
3222        InstructionDesc[enumCast(Op::OpGroupSMaxNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3223        InstructionDesc[enumCast(Op::OpGroupSMaxNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3224        InstructionDesc[enumCast(Op::OpGroupSMaxNonUniformAMD)].operands.push(OperandId, "X");
3225
3226        InstructionDesc[enumCast(Op::OpGroupFMaxNonUniformAMD)].operands.push(OperandScope, "'Execution'");
3227        InstructionDesc[enumCast(Op::OpGroupFMaxNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'");
3228        InstructionDesc[enumCast(Op::OpGroupFMaxNonUniformAMD)].operands.push(OperandId, "X");
3229
3230        InstructionDesc[enumCast(Op::OpFragmentMaskFetchAMD)].operands.push(OperandId, "'Image'");
3231        InstructionDesc[enumCast(Op::OpFragmentMaskFetchAMD)].operands.push(OperandId, "'Coordinate'");
3232
3233        InstructionDesc[enumCast(Op::OpFragmentFetchAMD)].operands.push(OperandId, "'Image'");
3234        InstructionDesc[enumCast(Op::OpFragmentFetchAMD)].operands.push(OperandId, "'Coordinate'");
3235        InstructionDesc[enumCast(Op::OpFragmentFetchAMD)].operands.push(OperandId, "'Fragment Index'");
3236
3237
3238        InstructionDesc[enumCast(Op::OpTypeBufferEXT)].operands.push(OperandStorage, "");
3239        InstructionDesc[enumCast(Op::OpTypeBufferEXT)].setResultAndType(true, false);
3240
3241        InstructionDesc[enumCast(Op::OpConstantSizeOfEXT)].operands.push(OperandId, "'Type'");
3242
3243        InstructionDesc[enumCast(Op::OpBufferPointerEXT)].operands.push(OperandId, "'Buffer'");
3244
3245        InstructionDesc[enumCast(Op::OpUntypedImageTexelPointerEXT)].operands.push(OperandId, "'ImageType'");
3246        InstructionDesc[enumCast(Op::OpUntypedImageTexelPointerEXT)].operands.push(OperandId, "'Image'");
3247        InstructionDesc[enumCast(Op::OpUntypedImageTexelPointerEXT)].operands.push(OperandId, "'Coordinate'");
3248        InstructionDesc[enumCast(Op::OpUntypedImageTexelPointerEXT)].operands.push(OperandId, "'Sample'");
3249
3250        InstructionDesc[enumCast(Op::OpGroupNonUniformPartitionNV)].operands.push(OperandId, "X");
3251
3252        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadAllKHR)].operands.push(OperandId, "'Predicate'");
3253        InstructionDesc[enumCast(Op::OpGroupNonUniformQuadAnyKHR)].operands.push(OperandId, "'Predicate'");
3254        InstructionDesc[enumCast(Op::OpTypeAccelerationStructureKHR)].setResultAndType(true, false);
3255
3256        InstructionDesc[enumCast(Op::OpConstantDataKHR)].operands.push(OperandLiteralString, "'Data'");
3257        InstructionDesc[enumCast(Op::OpSpecConstantDataKHR)].operands.push(OperandLiteralString, "'Data'");
3258        InstructionDesc[enumCast(Op::OpAbortKHR)].operands.push(OperandId, "'Message Type'");
3259        InstructionDesc[enumCast(Op::OpAbortKHR)].operands.push(OperandId, "'Message'");
3260        InstructionDesc[enumCast(Op::OpAbortKHR)].setResultAndType(false, false);
3261
3262        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Acceleration Structure'");
3263        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Ray Flags'");
3264        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Cull Mask'");
3265        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'SBT Record Offset'");
3266        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'SBT Record Stride'");
3267        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Miss Index'");
3268        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Ray Origin'");
3269        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'TMin'");
3270        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Ray Direction'");
3271        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'TMax'");
3272        InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Payload'");
3273        InstructionDesc[enumCast(Op::OpTraceNV)].setResultAndType(false, false);
3274
3275        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Acceleration Structure'");
3276        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Ray Flags'");
3277        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Cull Mask'");
3278        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Offset'");
3279        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Stride'");
3280        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Miss Index'");
3281        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Ray Origin'");
3282        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'TMin'");
3283        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Ray Direction'");
3284        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'TMax'");
3285        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Time'");
3286        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Payload'");
3287        InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].setResultAndType(false, false);
3288
3289        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Acceleration Structure'");
3290        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Ray Flags'");
3291        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Cull Mask'");
3292        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'SBT Record Offset'");
3293        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'SBT Record Stride'");
3294        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Miss Index'");
3295        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Ray Origin'");
3296        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'TMin'");
3297        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Ray Direction'");
3298        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'TMax'");
3299        InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Payload'");
3300        InstructionDesc[enumCast(Op::OpTraceRayKHR)].setResultAndType(false, false);
3301
3302        InstructionDesc[enumCast(Op::OpReportIntersectionKHR)].operands.push(OperandId, "'Hit Parameter'");
3303        InstructionDesc[enumCast(Op::OpReportIntersectionKHR)].operands.push(OperandId, "'Hit Kind'");
3304
3305        InstructionDesc[enumCast(Op::OpIgnoreIntersectionNV)].setResultAndType(false, false);
3306
3307        InstructionDesc[enumCast(Op::OpIgnoreIntersectionKHR)].setResultAndType(false, false);
3308
3309        InstructionDesc[enumCast(Op::OpTerminateRayNV)].setResultAndType(false, false);
3310
3311        InstructionDesc[enumCast(Op::OpTerminateRayKHR)].setResultAndType(false, false);
3312
3313        InstructionDesc[enumCast(Op::OpExecuteCallableNV)].operands.push(OperandId, "SBT Record Index");
3314        InstructionDesc[enumCast(Op::OpExecuteCallableNV)].operands.push(OperandId, "CallableData ID");
3315        InstructionDesc[enumCast(Op::OpExecuteCallableNV)].setResultAndType(false, false);
3316
3317        InstructionDesc[enumCast(Op::OpExecuteCallableKHR)].operands.push(OperandId, "SBT Record Index");
3318        InstructionDesc[enumCast(Op::OpExecuteCallableKHR)].operands.push(OperandId, "CallableData");
3319        InstructionDesc[enumCast(Op::OpExecuteCallableKHR)].setResultAndType(false, false);
3320
3321        InstructionDesc[enumCast(Op::OpConvertUToAccelerationStructureKHR)].operands.push(OperandId, "Value");
3322        InstructionDesc[enumCast(Op::OpConvertUToAccelerationStructureKHR)].setResultAndType(true, true);
3323
3324        // Ray Query
3325        InstructionDesc[enumCast(Op::OpTypeAccelerationStructureKHR)].setResultAndType(true, false);
3326        InstructionDesc[enumCast(Op::OpTypeRayQueryKHR)].setResultAndType(true, false);
3327
3328        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'RayQuery'");
3329        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'AccelerationS'");
3330        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'RayFlags'");
3331        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'CullMask'");
3332        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Origin'");
3333        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Tmin'");
3334        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Direction'");
3335        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Tmax'");
3336        InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].setResultAndType(false, false);
3337
3338        InstructionDesc[enumCast(Op::OpRayQueryTerminateKHR)].operands.push(OperandId, "'RayQuery'");
3339        InstructionDesc[enumCast(Op::OpRayQueryTerminateKHR)].setResultAndType(false, false);
3340
3341        InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].operands.push(OperandId, "'RayQuery'");
3342        InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].operands.push(OperandId, "'THit'");
3343        InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].setResultAndType(false, false);
3344
3345        InstructionDesc[enumCast(Op::OpRayQueryConfirmIntersectionKHR)].operands.push(OperandId, "'RayQuery'");
3346        InstructionDesc[enumCast(Op::OpRayQueryConfirmIntersectionKHR)].setResultAndType(false, false);
3347
3348        InstructionDesc[enumCast(Op::OpRayQueryProceedKHR)].operands.push(OperandId, "'RayQuery'");
3349        InstructionDesc[enumCast(Op::OpRayQueryProceedKHR)].setResultAndType(true, true);
3350
3351        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].operands.push(OperandId, "'RayQuery'");
3352        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].operands.push(OperandId, "'Committed'");
3353        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].setResultAndType(true, true);
3354
3355        InstructionDesc[enumCast(Op::OpRayQueryGetRayTMinKHR)].operands.push(OperandId, "'RayQuery'");
3356        InstructionDesc[enumCast(Op::OpRayQueryGetRayTMinKHR)].setResultAndType(true, true);
3357
3358        InstructionDesc[enumCast(Op::OpRayQueryGetRayFlagsKHR)].operands.push(OperandId, "'RayQuery'");
3359        InstructionDesc[enumCast(Op::OpRayQueryGetRayFlagsKHR)].setResultAndType(true, true);
3360
3361        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTKHR)].operands.push(OperandId, "'RayQuery'");
3362        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTKHR)].operands.push(OperandId, "'Committed'");
3363        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTKHR)].setResultAndType(true, true);
3364
3365        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR)].operands.push(OperandId, "'RayQuery'");
3366        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR)].operands.push(OperandId, "'Committed'");
3367        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR)].setResultAndType(true, true);
3368
3369        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceIdKHR)].operands.push(OperandId, "'RayQuery'");
3370        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceIdKHR)].operands.push(OperandId, "'Committed'");
3371        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceIdKHR)].setResultAndType(true, true);
3372
3373        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR)].operands.push(OperandId, "'RayQuery'");
3374        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR)].operands.push(OperandId, "'Committed'");
3375        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR)].setResultAndType(true, true);
3376
3377        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionGeometryIndexKHR)].operands.push(OperandId, "'RayQuery'");
3378        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionGeometryIndexKHR)].operands.push(OperandId, "'Committed'");
3379        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionGeometryIndexKHR)].setResultAndType(true, true);
3380
3381        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionPrimitiveIndexKHR)].operands.push(OperandId, "'RayQuery'");
3382        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionPrimitiveIndexKHR)].operands.push(OperandId, "'Committed'");
3383        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionPrimitiveIndexKHR)].setResultAndType(true, true);
3384
3385        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionBarycentricsKHR)].operands.push(OperandId, "'RayQuery'");
3386        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionBarycentricsKHR)].operands.push(OperandId, "'Committed'");
3387        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionBarycentricsKHR)].setResultAndType(true, true);
3388
3389        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionFrontFaceKHR)].operands.push(OperandId, "'RayQuery'");
3390        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionFrontFaceKHR)].operands.push(OperandId, "'Committed'");
3391        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionFrontFaceKHR)].setResultAndType(true, true);
3392
3393        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR)].operands.push(OperandId, "'RayQuery'");
3394        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR)].setResultAndType(true, true);
3395
3396        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayDirectionKHR)].operands.push(OperandId, "'RayQuery'");
3397        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayDirectionKHR)].operands.push(OperandId, "'Committed'");
3398        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayDirectionKHR)].setResultAndType(true, true);
3399
3400        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayOriginKHR)].operands.push(OperandId, "'RayQuery'");
3401        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayOriginKHR)].operands.push(OperandId, "'Committed'");
3402        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayOriginKHR)].setResultAndType(true, true);
3403
3404        InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayDirectionKHR)].operands.push(OperandId, "'RayQuery'");
3405        InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayDirectionKHR)].setResultAndType(true, true);
3406
3407        InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayOriginKHR)].operands.push(OperandId, "'RayQuery'");
3408        InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayOriginKHR)].setResultAndType(true, true);
3409
3410        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectToWorldKHR)].operands.push(OperandId, "'RayQuery'");
3411        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectToWorldKHR)].operands.push(OperandId, "'Committed'");
3412        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectToWorldKHR)].setResultAndType(true, true);
3413
3414        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionWorldToObjectKHR)].operands.push(OperandId, "'RayQuery'");
3415        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionWorldToObjectKHR)].operands.push(OperandId, "'Committed'");
3416        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionWorldToObjectKHR)].setResultAndType(true, true);
3417
3418        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)].operands.push(OperandId, "'RayQuery'");
3419        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)].operands.push(OperandId, "'Committed'");
3420        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)].setResultAndType(true, true);
3421
3422        InstructionDesc[enumCast(Op::OpRayQueryGetClusterIdNV)].operands.push(OperandId, "'RayQuery'");
3423        InstructionDesc[enumCast(Op::OpRayQueryGetClusterIdNV)].operands.push(OperandId, "'Committed'");
3424        InstructionDesc[enumCast(Op::OpRayQueryGetClusterIdNV)].setResultAndType(true, true);
3425        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSpherePositionNV)].operands.push(OperandId, "'RayQuery'");
3426        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSpherePositionNV)].operands.push(OperandId, "'Committed'");
3427        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSpherePositionNV)].setResultAndType(true, true);
3428
3429        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSphereRadiusNV)].operands.push(OperandId, "'RayQuery'");
3430        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSphereRadiusNV)].operands.push(OperandId, "'Committed'");
3431        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSphereRadiusNV)].setResultAndType(true, true);
3432
3433        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSHitValueNV)].operands.push(OperandId, "'RayQuery'");
3434        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSHitValueNV)].operands.push(OperandId, "'Committed'");
3435        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSHitValueNV)].setResultAndType(true, true);
3436
3437        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSPositionsNV)].operands.push(OperandId, "'RayQuery'");
3438        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSPositionsNV)].operands.push(OperandId, "'Committed'");
3439        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSPositionsNV)].setResultAndType(true, true);
3440
3441        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSRadiiNV)].operands.push(OperandId, "'RayQuery'");
3442        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSRadiiNV)].operands.push(OperandId, "'Committed'");
3443        InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSRadiiNV)].setResultAndType(true, true);
3444
3445        InstructionDesc[enumCast(Op::OpRayQueryIsSphereHitNV)].operands.push(OperandId, "'RayQuery'");
3446        InstructionDesc[enumCast(Op::OpRayQueryIsSphereHitNV)].operands.push(OperandId, "'Committed'");
3447        InstructionDesc[enumCast(Op::OpRayQueryIsSphereHitNV)].setResultAndType(true, true);
3448
3449        InstructionDesc[enumCast(Op::OpRayQueryIsLSSHitNV)].operands.push(OperandId, "'RayQuery'");
3450        InstructionDesc[enumCast(Op::OpRayQueryIsLSSHitNV)].operands.push(OperandId, "'Committed'");
3451        InstructionDesc[enumCast(Op::OpRayQueryIsLSSHitNV)].setResultAndType(true, true);
3452
3453        InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Sampled Image'");
3454        InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Coordinate'");
3455        InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Granularity'");
3456        InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Coarse'");
3457        InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandImageOperands, "", true);
3458        InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandVariableIds, "", true);
3459
3460        InstructionDesc[enumCast(Op::OpWritePackedPrimitiveIndices4x8NV)].operands.push(OperandId, "'Index Offset'");
3461        InstructionDesc[enumCast(Op::OpWritePackedPrimitiveIndices4x8NV)].operands.push(OperandId, "'Packed Indices'");
3462
3463        InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'groupCountX'");
3464        InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'groupCountY'");
3465        InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'groupCountZ'");
3466        InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'Payload'");
3467        InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].setResultAndType(false, false);
3468
3469        InstructionDesc[enumCast(Op::OpSetMeshOutputsEXT)].operands.push(OperandId, "'vertexCount'");
3470        InstructionDesc[enumCast(Op::OpSetMeshOutputsEXT)].operands.push(OperandId, "'primitiveCount'");
3471        InstructionDesc[enumCast(Op::OpSetMeshOutputsEXT)].setResultAndType(false, false);
3472
3473
3474        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Component Type'");
3475        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Scope'");
3476        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Rows'");
3477        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Columns'");
3478
3479        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "'Pointer'");
3480        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "'Stride'");
3481        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "'Column Major'");
3482        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandMemoryAccess, "'Memory Access'");
3483        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandLiteralNumber, "", true);
3484        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "", true);
3485
3486        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Pointer'");
3487        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Object'");
3488        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Stride'");
3489        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Column Major'");
3490        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandMemoryAccess, "'Memory Access'");
3491        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandLiteralNumber, "", true);
3492        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "", true);
3493
3494        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddNV)].operands.push(OperandId, "'A'");
3495        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddNV)].operands.push(OperandId, "'B'");
3496        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddNV)].operands.push(OperandId, "'C'");
3497
3498        InstructionDesc[enumCast(Op::OpCooperativeMatrixLengthNV)].operands.push(OperandId, "'Type'");
3499
3500        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Component Type'");
3501        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Scope'");
3502        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Rows'");
3503        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Columns'");
3504        InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Use'");
3505
3506        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "'Pointer'");
3507        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "'Memory Layout'");
3508        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "'Stride'");
3509        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandMemoryAccess, "'Memory Access'");
3510        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandLiteralNumber, "", true);
3511        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "", true);
3512
3513        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Pointer'");
3514        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Object'");
3515        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Memory Layout'");
3516        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Stride'");
3517        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandMemoryAccess, "'Memory Access'");
3518        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandLiteralNumber, "", true);
3519        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "", true);
3520
3521        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandId, "'A'");
3522        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandId, "'B'");
3523        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandId, "'C'");
3524        InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true);
3525
3526        InstructionDesc[enumCast(Op::OpCooperativeMatrixLengthKHR)].operands.push(OperandId, "'Type'");
3527
3528        InstructionDesc[enumCast(Op::OpTypeCooperativeVectorNV)].operands.push(OperandId, "'Component Type'");
3529        InstructionDesc[enumCast(Op::OpTypeCooperativeVectorNV)].operands.push(OperandId, "'Components'");
3530
3531        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'Input'");
3532        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'InputInterpretation'");
3533        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'Matrix'");
3534        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MatrixOffset'");
3535        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MatrixInterpretation'");
3536        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'M'");
3537        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'K'");
3538        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MemoryLayout'");
3539        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'Transpose'");
3540        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MatrixStride'", true);
3541        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true);
3542
3543        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Input'");
3544        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'InputInterpretation'");
3545        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Matrix'");
3546        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MatrixOffset'");
3547        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MatrixInterpretation'");
3548        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Bias'");
3549        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'BiasOffset'");
3550        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'BiasInterpretation'");
3551        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'M'");
3552        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'K'");
3553        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MemoryLayout'");
3554        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Transpose'");
3555        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MatrixStride'", true);
3556        InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true);
3557
3558        InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandId, "'Pointer'");
3559        InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandId, "'Offset'");
3560        InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandMemoryAccess, "'Memory Access'");
3561        InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandLiteralNumber, "", true);
3562        InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandId, "", true);
3563
3564        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "'Pointer'");
3565        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "'Offset'");
3566        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "'Object'");
3567        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandMemoryAccess, "'Memory Access'");
3568        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandLiteralNumber, "", true);
3569        InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "", true);
3570
3571        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'Pointer'");
3572        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'Offset'");
3573        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'A'");
3574        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'B'");
3575        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'MemoryLayout'");
3576        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'MatrixInterpretation'");
3577        InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'MatrixStride'", true);
3578
3579        InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].operands.push(OperandId, "'Pointer'");
3580        InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].operands.push(OperandId, "'Offset'");
3581        InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].operands.push(OperandId, "'V'");
3582
3583        InstructionDesc[enumCast(Op::OpDemoteToHelperInvocationEXT)].setResultAndType(false, false);
3584
3585        InstructionDesc[enumCast(Op::OpReadClockKHR)].operands.push(OperandScope, "'Scope'");
3586
3587        InstructionDesc[enumCast(Op::OpTypeHitObjectNV)].setResultAndType(true, false);
3588
3589        InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleNV)].operands.push(OperandId, "'HitObject'");
3590        InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleNV)].setResultAndType(true, true);
3591
3592        InstructionDesc[enumCast(Op::OpReorderThreadWithHintNV)].operands.push(OperandId, "'Hint'");
3593        InstructionDesc[enumCast(Op::OpReorderThreadWithHintNV)].operands.push(OperandId, "'Bits'");
3594        InstructionDesc[enumCast(Op::OpReorderThreadWithHintNV)].setResultAndType(false, false);
3595
3596        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].operands.push(OperandId, "'HitObject'");
3597        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].operands.push(OperandId, "'Hint'");
3598        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].operands.push(OperandId, "'Bits'");
3599        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].setResultAndType(false, false);
3600
3601        InstructionDesc[enumCast(Op::OpHitObjectGetCurrentTimeNV)].operands.push(OperandId, "'HitObject'");
3602        InstructionDesc[enumCast(Op::OpHitObjectGetCurrentTimeNV)].setResultAndType(true, true);
3603
3604        InstructionDesc[enumCast(Op::OpHitObjectGetHitKindNV)].operands.push(OperandId, "'HitObject'");
3605        InstructionDesc[enumCast(Op::OpHitObjectGetHitKindNV)].setResultAndType(true, true);
3606
3607        InstructionDesc[enumCast(Op::OpHitObjectGetPrimitiveIndexNV)].operands.push(OperandId, "'HitObject'");
3608        InstructionDesc[enumCast(Op::OpHitObjectGetPrimitiveIndexNV)].setResultAndType(true, true);
3609
3610        InstructionDesc[enumCast(Op::OpHitObjectGetGeometryIndexNV)].operands.push(OperandId, "'HitObject'");
3611        InstructionDesc[enumCast(Op::OpHitObjectGetGeometryIndexNV)].setResultAndType(true, true);
3612
3613        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceIdNV)].operands.push(OperandId, "'HitObject'");
3614        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceIdNV)].setResultAndType(true, true);
3615
3616        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceCustomIndexNV)].operands.push(OperandId, "'HitObject'");
3617        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceCustomIndexNV)].setResultAndType(true, true);
3618
3619        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayDirectionNV)].operands.push(OperandId, "'HitObject'");
3620        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayDirectionNV)].setResultAndType(true, true);
3621
3622        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayOriginNV)].operands.push(OperandId, "'HitObject'");
3623        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayOriginNV)].setResultAndType(true, true);
3624
3625        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayDirectionNV)].operands.push(OperandId, "'HitObject'");
3626        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayDirectionNV)].setResultAndType(true, true);
3627
3628        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayOriginNV)].operands.push(OperandId, "'HitObject'");
3629        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayOriginNV)].setResultAndType(true, true);
3630
3631        InstructionDesc[enumCast(Op::OpHitObjectGetWorldToObjectNV)].operands.push(OperandId, "'HitObject'");
3632        InstructionDesc[enumCast(Op::OpHitObjectGetWorldToObjectNV)].setResultAndType(true, true);
3633
3634        InstructionDesc[enumCast(Op::OpHitObjectGetObjectToWorldNV)].operands.push(OperandId, "'HitObject'");
3635        InstructionDesc[enumCast(Op::OpHitObjectGetObjectToWorldNV)].setResultAndType(true, true);
3636
3637        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMaxNV)].operands.push(OperandId, "'HitObject'");
3638        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMaxNV)].setResultAndType(true, true);
3639
3640        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMinNV)].operands.push(OperandId, "'HitObject'");
3641        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMinNV)].setResultAndType(true, true);
3642
3643        InstructionDesc[enumCast(Op::OpHitObjectGetShaderBindingTableRecordIndexNV)].operands.push(OperandId, "'HitObject'");
3644        InstructionDesc[enumCast(Op::OpHitObjectGetShaderBindingTableRecordIndexNV)].setResultAndType(true, true);
3645
3646        InstructionDesc[enumCast(Op::OpHitObjectIsEmptyNV)].operands.push(OperandId, "'HitObject'");
3647        InstructionDesc[enumCast(Op::OpHitObjectIsEmptyNV)].setResultAndType(true, true);
3648
3649        InstructionDesc[enumCast(Op::OpHitObjectIsHitNV)].operands.push(OperandId, "'HitObject'");
3650        InstructionDesc[enumCast(Op::OpHitObjectIsHitNV)].setResultAndType(true, true);
3651
3652        InstructionDesc[enumCast(Op::OpHitObjectIsMissNV)].operands.push(OperandId, "'HitObject'");
3653        InstructionDesc[enumCast(Op::OpHitObjectIsMissNV)].setResultAndType(true, true);
3654
3655        InstructionDesc[enumCast(Op::OpHitObjectGetAttributesNV)].operands.push(OperandId, "'HitObject'");
3656        InstructionDesc[enumCast(Op::OpHitObjectGetAttributesNV)].operands.push(OperandId, "'HitObjectAttribute'");
3657        InstructionDesc[enumCast(Op::OpHitObjectGetAttributesNV)].setResultAndType(false, false);
3658
3659        InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderNV)].operands.push(OperandId, "'HitObject'");
3660        InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderNV)].operands.push(OperandId, "'Payload'");
3661        InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderNV)].setResultAndType(false, false);
3662
3663        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'HitObject'");
3664        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'Acceleration Structure'");
3665        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'InstanceId'");
3666        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'PrimitiveId'");
3667        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'GeometryIndex'");
3668        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'HitKind'");
3669        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'SBT Record Offset'");
3670        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'SBT Record Stride'");
3671        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'Origin'");
3672        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'TMin'");
3673        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'Direction'");
3674        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'TMax'");
3675        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'HitObject Attribute'");
3676        InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].setResultAndType(false, false);
3677
3678        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'HitObject'");
3679        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Acceleration Structure'");
3680        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'InstanceId'");
3681        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'PrimitiveId'");
3682        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'GeometryIndex'");
3683        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'HitKind'");
3684        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'SBT Record Offset'");
3685        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'SBT Record Stride'");
3686        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Origin'");
3687        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'TMin'");
3688        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Direction'");
3689        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'TMax'");
3690        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Current Time'");
3691        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'HitObject Attribute'");
3692        InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].setResultAndType(false, false);
3693
3694        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'HitObject'");
3695        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'Acceleration Structure'");
3696        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'InstanceId'");
3697        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'PrimitiveId'");
3698        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'GeometryIndex'");
3699        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'HitKind'");
3700        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'SBT Record Index'");
3701        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'Origin'");
3702        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'TMin'");
3703        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'Direction'");
3704        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'TMax'");
3705        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'HitObject Attribute'");
3706        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].setResultAndType(false, false);
3707
3708        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'HitObject'");
3709        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Acceleration Structure'");
3710        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'InstanceId'");
3711        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'PrimitiveId'");
3712        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'GeometryIndex'");
3713        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'HitKind'");
3714        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'SBT Record Index'");
3715        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Origin'");
3716        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'TMin'");
3717        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Direction'");
3718        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'TMax'");
3719        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Current Time'");
3720        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'HitObject Attribute'");
3721        InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].setResultAndType(false, false);
3722
3723        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'HitObject'");
3724        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'SBT Index'");
3725        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'Origin'");
3726        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'TMin'");
3727        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'Direction'");
3728        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'TMax'");
3729        InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].setResultAndType(false, false);
3730
3731        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'HitObject'");
3732        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'SBT Index'");
3733        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'Origin'");
3734        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'TMin'");
3735        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'Direction'");
3736        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'TMax'");
3737        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'Current Time'");
3738        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].setResultAndType(false, false);
3739
3740        InstructionDesc[enumCast(Op::OpHitObjectRecordEmptyNV)].operands.push(OperandId, "'HitObject'");
3741        InstructionDesc[enumCast(Op::OpHitObjectRecordEmptyNV)].setResultAndType(false, false);
3742
3743        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'HitObject'");
3744        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Acceleration Structure'");
3745        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'RayFlags'");
3746        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Cullmask'");
3747        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'SBT Record Offset'");
3748        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'SBT Record Stride'");
3749        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Miss Index'");
3750        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Origin'");
3751        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'TMin'");
3752        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Direction'");
3753        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'TMax'");
3754        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Payload'");
3755        InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].setResultAndType(false, false);
3756
3757        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'HitObject'");
3758        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Acceleration Structure'");
3759        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'RayFlags'");
3760        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Cullmask'");
3761        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Offset'");
3762        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Stride'");
3763        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Miss Index'");
3764        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Origin'");
3765        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'TMin'");
3766        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Direction'");
3767        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'TMax'");
3768        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Time'");
3769        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Payload'");
3770        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].setResultAndType(false, false);
3771
3772        InstructionDesc[enumCast(Op::OpHitObjectGetClusterIdNV)].operands.push(OperandId, "'HitObject'");
3773        InstructionDesc[enumCast(Op::OpHitObjectGetClusterIdNV)].setResultAndType(true, true);
3774        InstructionDesc[enumCast(Op::OpHitObjectGetSpherePositionNV)].operands.push(OperandId, "'HitObject'");
3775        InstructionDesc[enumCast(Op::OpHitObjectGetSpherePositionNV)].setResultAndType(true, true);
3776
3777        InstructionDesc[enumCast(Op::OpHitObjectGetSphereRadiusNV)].operands.push(OperandId, "'HitObject'");
3778        InstructionDesc[enumCast(Op::OpHitObjectGetSphereRadiusNV)].setResultAndType(true, true);
3779
3780        InstructionDesc[enumCast(Op::OpHitObjectGetLSSPositionsNV)].operands.push(OperandId, "'HitObject'");
3781        InstructionDesc[enumCast(Op::OpHitObjectGetLSSPositionsNV)].setResultAndType(true, true);
3782
3783        InstructionDesc[enumCast(Op::OpHitObjectGetLSSRadiiNV)].operands.push(OperandId, "'HitObject'");
3784        InstructionDesc[enumCast(Op::OpHitObjectGetLSSRadiiNV)].setResultAndType(true, true);
3785
3786        InstructionDesc[enumCast(Op::OpHitObjectIsSphereHitNV)].operands.push(OperandId, "'HitObject'");
3787        InstructionDesc[enumCast(Op::OpHitObjectIsSphereHitNV)].setResultAndType(true, true);
3788
3789        InstructionDesc[enumCast(Op::OpHitObjectIsLSSHitNV)].operands.push(OperandId, "'HitObject'");
3790        InstructionDesc[enumCast(Op::OpHitObjectIsLSSHitNV)].setResultAndType(true, true);
3791
3792        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Acceleration Structure'");
3793        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Instance ID'");
3794        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Geometry Index'");
3795        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Primitive Index'");
3796        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Barycentrics'");
3797        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].setResultAndType(true, true);
3798
3799        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Acceleration Structure'");
3800        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Instance ID'");
3801        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Geometry Index'");
3802        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Primitive Index'");
3803        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Barycentrics'");
3804        InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].setResultAndType(true, true);
3805
3806        InstructionDesc[enumCast(Op::OpColorAttachmentReadEXT)].operands.push(OperandId, "'Attachment'");
3807        InstructionDesc[enumCast(Op::OpColorAttachmentReadEXT)].operands.push(OperandId, "'Sample'", true);
3808        InstructionDesc[enumCast(Op::OpStencilAttachmentReadEXT)].operands.push(OperandId, "'Sample'", true);
3809        InstructionDesc[enumCast(Op::OpDepthAttachmentReadEXT)].operands.push(OperandId, "'Sample'", true);
3810
3811        InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'Source Texture'");
3812        InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'Texture Coordinates'");
3813        InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'Weights Texture'");
3814        InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandImageOperands, "", true);
3815        InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].setResultAndType(true, true);
3816
3817        InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'Source Texture'");
3818        InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'Texture Coordinates'");
3819        InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'Box Size'");
3820        InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandImageOperands, "", true);
3821        InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].setResultAndType(true, true);
3822
3823        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Target Texture'");
3824        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Target Coordinates'");
3825        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Reference Texture'");
3826        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Reference Coordinates'");
3827        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Block Size'");
3828        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandImageOperands, "", true);
3829        InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].setResultAndType(true, true);
3830
3831        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Target Texture'");
3832        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Target Coordinates'");
3833        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Reference Texture'");
3834        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Reference Coordinates'");
3835        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Block Size'");
3836        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandImageOperands, "", true);
3837        InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].setResultAndType(true, true);
3838
3839        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Target Texture'");
3840        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Target Coordinates'");
3841        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Reference Texture'");
3842        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Reference Coordinates'");
3843        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Block Size'");
3844        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandImageOperands, "", true);
3845        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].setResultAndType(true, true);
3846
3847        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Target Texture'");
3848        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Target Coordinates'");
3849        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Reference Texture'");
3850        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Reference Coordinates'");
3851        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Block Size'");
3852        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandImageOperands, "", true);
3853        InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].setResultAndType(true, true);
3854
3855        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Target Texture'");
3856        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Target Coordinates'");
3857        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Reference Texture'");
3858        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Reference Coordinates'");
3859        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Block Size'");
3860        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandImageOperands, "", true);
3861        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].setResultAndType(true, true);
3862
3863        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Target Texture'");
3864        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Target Coordinates'");
3865        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Reference Texture'");
3866        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Reference Coordinates'");
3867        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Block Size'");
3868        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandImageOperands, "", true);
3869        InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].setResultAndType(true, true);
3870
3871        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Sampled Image'");
3872        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Coordinate'");
3873        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Component'");
3874        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Mode'");
3875        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandImageOperands, "", true);
3876        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandVariableIds, "", true);
3877        InstructionDesc[enumCast(Op::OpImageGatherQCOM)].setResultAndType(true, true);
3878
3879        InstructionDesc[enumCast(Op::OpBitCastArrayQCOM)].operands.push(OperandId, "'source array'");
3880        InstructionDesc[enumCast(Op::OpBitCastArrayQCOM)].setResultAndType(true, true);
3881
3882        InstructionDesc[enumCast(Op::OpCompositeConstructCoopMatQCOM)].operands.push(OperandId, "'source array'");
3883        InstructionDesc[enumCast(Op::OpCompositeConstructCoopMatQCOM)].setResultAndType(true, true);
3884
3885        InstructionDesc[enumCast(Op::OpCompositeExtractCoopMatQCOM)].operands.push(OperandId, "'source cooperative matrix'");
3886        InstructionDesc[enumCast(Op::OpCompositeExtractCoopMatQCOM)].setResultAndType(true, true);
3887
3888        InstructionDesc[enumCast(Op::OpExtractSubArrayQCOM)].operands.push(OperandId, "'source array'");
3889        InstructionDesc[enumCast(Op::OpExtractSubArrayQCOM)].operands.push(OperandId, "'start index'");
3890        InstructionDesc[enumCast(Op::OpExtractSubArrayQCOM)].setResultAndType(true, true);
3891
3892        InstructionDesc[enumCast(Op::OpConstantCompositeReplicateEXT)].operands.push(OperandId, "'Value'");
3893        InstructionDesc[enumCast(Op::OpSpecConstantCompositeReplicateEXT)].operands.push(OperandId, "'Value'");
3894        InstructionDesc[enumCast(Op::OpCompositeConstructReplicateEXT)].operands.push(OperandId, "'Value'");
3895
3896        InstructionDesc[enumCast(Op::OpCooperativeMatrixConvertNV)].operands.push(OperandId, "'Value'");
3897
3898        InstructionDesc[enumCast(Op::OpCooperativeMatrixTransposeNV)].operands.push(OperandId, "'Matrix'");
3899
3900        InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandId, "'Matrix'");
3901        InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandLiteralNumber, "'ReduceMask'");
3902        InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandId, "'CombineFunc'");
3903
3904        InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandId, "'Matrix'");
3905        InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandId, "'Operation'");
3906        InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandVariableIds, "'Operands'");
3907
3908        InstructionDesc[enumCast(Op::OpCooperativeMatrixGetCoordinateEXT)].operands.push(OperandId, "'Matrix'");
3909        InstructionDesc[enumCast(Op::OpCooperativeMatrixGetCoordinateEXT)].operands.push(OperandId, "'Index'");
3910
3911        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'Pointer'");
3912        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'Object'");
3913        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'TensorLayout'");
3914        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandMemoryAccess, "'Memory Access'");
3915        InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'");
3916
3917        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandId, "'Pointer'");
3918        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandId, "'Object'");
3919        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandId, "'TensorLayout'");
3920        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandMemoryAccess, "'Memory Access'");
3921        InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'");
3922
3923        InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandId, "'Matrix'");
3924        InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandLiteralNumber, "'ReduceMask'");
3925
3926        InstructionDesc[enumCast(Op::OpTypeTensorLayoutNV)].operands.push(OperandId, "'Dim'");
3927        InstructionDesc[enumCast(Op::OpTypeTensorLayoutNV)].operands.push(OperandId, "'ClampMode'");
3928
3929        InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].operands.push(OperandId, "'Dim'");
3930        InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].operands.push(OperandId, "'HasDimensions'");
3931        InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].operands.push(OperandVariableIds, "'p'");
3932
3933        InstructionDesc[enumCast(Op::OpTensorLayoutSetBlockSizeNV)].operands.push(OperandId, "'TensorLayout'");
3934        InstructionDesc[enumCast(Op::OpTensorLayoutSetBlockSizeNV)].operands.push(OperandVariableIds, "'BlockSize'");
3935
3936        InstructionDesc[enumCast(Op::OpTensorLayoutSetDimensionNV)].operands.push(OperandId, "'TensorLayout'");
3937        InstructionDesc[enumCast(Op::OpTensorLayoutSetDimensionNV)].operands.push(OperandVariableIds, "'Dim'");
3938
3939        InstructionDesc[enumCast(Op::OpTensorLayoutSetStrideNV)].operands.push(OperandId, "'TensorLayout'");
3940        InstructionDesc[enumCast(Op::OpTensorLayoutSetStrideNV)].operands.push(OperandVariableIds, "'Stride'");
3941
3942        InstructionDesc[enumCast(Op::OpTensorLayoutSliceNV)].operands.push(OperandId, "'TensorLayout'");
3943        InstructionDesc[enumCast(Op::OpTensorLayoutSliceNV)].operands.push(OperandVariableIds, "'Operands'");
3944
3945        InstructionDesc[enumCast(Op::OpTensorLayoutSetClampValueNV)].operands.push(OperandId, "'TensorLayout'");
3946        InstructionDesc[enumCast(Op::OpTensorLayoutSetClampValueNV)].operands.push(OperandId, "'Value'");
3947
3948        InstructionDesc[enumCast(Op::OpTensorViewSetDimensionNV)].operands.push(OperandId, "'TensorView'");
3949        InstructionDesc[enumCast(Op::OpTensorViewSetDimensionNV)].operands.push(OperandVariableIds, "'Dim'");
3950
3951        InstructionDesc[enumCast(Op::OpTensorViewSetStrideNV)].operands.push(OperandId, "'TensorView'");
3952        InstructionDesc[enumCast(Op::OpTensorViewSetStrideNV)].operands.push(OperandVariableIds, "'Stride'");
3953
3954        InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'TensorView'");
3955        InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipRowOffset'");
3956        InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipRowSpan'");
3957        InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipColOffset'");
3958        InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipColSpan'");
3959
3960        InstructionDesc[enumCast(Op::OpSDotKHR)].operands.push(OperandId, "'Vector1'");
3961        InstructionDesc[enumCast(Op::OpSDotKHR)].operands.push(OperandId, "'Vector2'");
3962        InstructionDesc[enumCast(Op::OpSDotKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'");
3963
3964        InstructionDesc[enumCast(Op::OpUDotKHR)].operands.push(OperandId, "'Vector1'");
3965        InstructionDesc[enumCast(Op::OpUDotKHR)].operands.push(OperandId, "'Vector2'");
3966        InstructionDesc[enumCast(Op::OpUDotKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'");
3967
3968        InstructionDesc[enumCast(Op::OpSUDotKHR)].operands.push(OperandId, "'Vector1'");
3969        InstructionDesc[enumCast(Op::OpSUDotKHR)].operands.push(OperandId, "'Vector2'");
3970        InstructionDesc[enumCast(Op::OpSUDotKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'");
3971
3972        InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandId, "'Vector1'");
3973        InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandId, "'Vector2'");
3974        InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandId, "'Accumulator'");
3975        InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'");
3976
3977        InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandId, "'Vector1'");
3978        InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandId, "'Vector2'");
3979        InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandId, "'Accumulator'");
3980        InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'");
3981
3982        InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandId, "'Vector1'");
3983        InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandId, "'Vector2'");
3984        InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandId, "'Accumulator'");
3985        InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'");
3986
3987        InstructionDesc[enumCast(Op::OpTypeTensorARM)].operands.push(OperandId, "'Element Type'");
3988        InstructionDesc[enumCast(Op::OpTypeTensorARM)].operands.push(OperandId, "'Rank'");
3989
3990        InstructionDesc[enumCast(Op::OpTensorReadARM)].operands.push(OperandId, "'Tensor'");
3991        InstructionDesc[enumCast(Op::OpTensorReadARM)].operands.push(OperandId, "'Coordinate'");
3992        InstructionDesc[enumCast(Op::OpTensorReadARM)].operands.push(OperandLiteralNumber, "'Tensor Operand'", true);
3993        InstructionDesc[enumCast(Op::OpTensorReadARM)].operands.push(OperandVariableIds, "'Tensor Operands'");
3994
3995        InstructionDesc[enumCast(Op::OpTensorWriteARM)].operands.push(OperandId, "'Tensor'");
3996        InstructionDesc[enumCast(Op::OpTensorWriteARM)].operands.push(OperandId, "'Coordinate'");
3997        InstructionDesc[enumCast(Op::OpTensorWriteARM)].operands.push(OperandId, "'Object'");
3998        InstructionDesc[enumCast(Op::OpTensorWriteARM)].operands.push(OperandLiteralNumber, "'Tensor Operand'", true);
3999        InstructionDesc[enumCast(Op::OpTensorWriteARM)].operands.push(OperandVariableIds, "'Tensor Operands'");
4000
4001        InstructionDesc[enumCast(Op::OpTensorQuerySizeARM)].operands.push(OperandId, "'Tensor'");
4002        InstructionDesc[enumCast(Op::OpTensorQuerySizeARM)].operands.push(OperandId, "'Dimension'", true);
4003
4004        InstructionDesc[enumCast(Op::OpTypeHitObjectEXT)].setResultAndType(true, false);
4005
4006        InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleNV)].operands.push(OperandId, "'HitObject'");
4007        InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleNV)].setResultAndType(true, true);
4008
4009        InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleEXT)].operands.push(OperandId, "'HitObject'");
4010        InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleEXT)].setResultAndType(true, true);
4011
4012        InstructionDesc[enumCast(Op::OpReorderThreadWithHintEXT)].operands.push(OperandId, "'Hint'");
4013        InstructionDesc[enumCast(Op::OpReorderThreadWithHintEXT)].operands.push(OperandId, "'Bits'");
4014        InstructionDesc[enumCast(Op::OpReorderThreadWithHintEXT)].setResultAndType(false, false);
4015
4016        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectEXT)].operands.push(OperandId, "'HitObject'");
4017        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectEXT)].operands.push(OperandId, "'Hint'");
4018        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectEXT)].operands.push(OperandId, "'Bits'");
4019        InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectEXT)].setResultAndType(false, false);
4020
4021        InstructionDesc[enumCast(Op::OpHitObjectGetCurrentTimeEXT)].operands.push(OperandId, "'HitObject'");
4022        InstructionDesc[enumCast(Op::OpHitObjectGetCurrentTimeEXT)].setResultAndType(true, true);
4023
4024        InstructionDesc[enumCast(Op::OpHitObjectGetHitKindEXT)].operands.push(OperandId, "'HitObject'");
4025        InstructionDesc[enumCast(Op::OpHitObjectGetHitKindEXT)].setResultAndType(true, true);
4026
4027        InstructionDesc[enumCast(Op::OpHitObjectGetPrimitiveIndexEXT)].operands.push(OperandId, "'HitObject'");
4028        InstructionDesc[enumCast(Op::OpHitObjectGetPrimitiveIndexEXT)].setResultAndType(true, true);
4029
4030        InstructionDesc[enumCast(Op::OpHitObjectGetGeometryIndexEXT)].operands.push(OperandId, "'HitObject'");
4031        InstructionDesc[enumCast(Op::OpHitObjectGetGeometryIndexEXT)].setResultAndType(true, true);
4032
4033        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceIdEXT)].operands.push(OperandId, "'HitObject'");
4034        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceIdEXT)].setResultAndType(true, true);
4035
4036        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceCustomIndexEXT)].operands.push(OperandId, "'HitObject'");
4037        InstructionDesc[enumCast(Op::OpHitObjectGetInstanceCustomIndexEXT)].setResultAndType(true, true);
4038
4039        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayDirectionEXT)].operands.push(OperandId, "'HitObject'");
4040        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayDirectionEXT)].setResultAndType(true, true);
4041
4042        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayOriginEXT)].operands.push(OperandId, "'HitObject'");
4043        InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayOriginEXT)].setResultAndType(true, true);
4044
4045        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayDirectionEXT)].operands.push(OperandId, "'HitObject'");
4046        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayDirectionEXT)].setResultAndType(true, true);
4047
4048        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayOriginEXT)].operands.push(OperandId, "'HitObject'");
4049        InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayOriginEXT)].setResultAndType(true, true);
4050
4051        InstructionDesc[enumCast(Op::OpHitObjectGetWorldToObjectEXT)].operands.push(OperandId, "'HitObject'");
4052        InstructionDesc[enumCast(Op::OpHitObjectGetWorldToObjectEXT)].setResultAndType(true, true);
4053
4054        InstructionDesc[enumCast(Op::OpHitObjectGetObjectToWorldEXT)].operands.push(OperandId, "'HitObject'");
4055        InstructionDesc[enumCast(Op::OpHitObjectGetObjectToWorldEXT)].setResultAndType(true, true);
4056
4057        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMaxEXT)].operands.push(OperandId, "'HitObject'");
4058        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMaxEXT)].setResultAndType(true, true);
4059
4060        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMinEXT)].operands.push(OperandId, "'HitObject'");
4061        InstructionDesc[enumCast(Op::OpHitObjectGetRayTMinEXT)].setResultAndType(true, true);
4062
4063        InstructionDesc[enumCast(Op::OpHitObjectGetRayFlagsEXT)].operands.push(OperandId, "'HitObject'");
4064        InstructionDesc[enumCast(Op::OpHitObjectGetRayFlagsEXT)].setResultAndType(true, true);
4065
4066        InstructionDesc[enumCast(Op::OpHitObjectGetShaderBindingTableRecordIndexEXT)].operands.push(OperandId, "'HitObject'");
4067        InstructionDesc[enumCast(Op::OpHitObjectGetShaderBindingTableRecordIndexEXT)].setResultAndType(true, true);
4068
4069        InstructionDesc[enumCast(Op::OpHitObjectIsEmptyEXT)].operands.push(OperandId, "'HitObject'");
4070        InstructionDesc[enumCast(Op::OpHitObjectIsEmptyEXT)].setResultAndType(true, true);
4071
4072        InstructionDesc[enumCast(Op::OpHitObjectIsHitEXT)].operands.push(OperandId, "'HitObject'");
4073        InstructionDesc[enumCast(Op::OpHitObjectIsHitEXT)].setResultAndType(true, true);
4074
4075        InstructionDesc[enumCast(Op::OpHitObjectIsMissEXT)].operands.push(OperandId, "'HitObject'");
4076        InstructionDesc[enumCast(Op::OpHitObjectIsMissEXT)].setResultAndType(true, true);
4077
4078        InstructionDesc[enumCast(Op::OpHitObjectGetAttributesEXT)].operands.push(OperandId, "'HitObject'");
4079        InstructionDesc[enumCast(Op::OpHitObjectGetAttributesEXT)].operands.push(OperandId, "'HitObjectAttribute'");
4080        InstructionDesc[enumCast(Op::OpHitObjectGetAttributesEXT)].setResultAndType(false, false);
4081
4082        InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderEXT)].operands.push(OperandId, "'HitObject'");
4083        InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderEXT)].operands.push(OperandId, "'Payload'");
4084        InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderEXT)].setResultAndType(false, false);
4085
4086        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'HitObject'");
4087        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'RayFlags'");
4088        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'SBT Index'");
4089        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'Origin'");
4090        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'TMin'");
4091        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'Direction'");
4092        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].operands.push(OperandId, "'TMax'");
4093        InstructionDesc[enumCast(Op::OpHitObjectRecordMissEXT)].setResultAndType(false, false);
4094
4095        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'HitObject'");
4096        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'RayFlags'");
4097        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'SBT Index'");
4098        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'Origin'");
4099        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'TMin'");
4100        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'Direction'");
4101        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'TMax'");
4102        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].operands.push(OperandId, "'Current Time'");
4103        InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionEXT)].setResultAndType(false, false);
4104
4105        InstructionDesc[enumCast(Op::OpHitObjectRecordEmptyEXT)].operands.push(OperandId, "'HitObject'");
4106        InstructionDesc[enumCast(Op::OpHitObjectRecordEmptyEXT)].setResultAndType(false, false);
4107
4108        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'HitObject'");
4109        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'Acceleration Structure'");
4110        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'RayFlags'");
4111        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'Cullmask'");
4112        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'SBT Record Offset'");
4113        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'SBT Record Stride'");
4114        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'Miss Index'");
4115        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'Origin'");
4116        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'TMin'");
4117        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'Direction'");
4118        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'TMax'");
4119        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].operands.push(OperandId, "'Payload'");
4120        InstructionDesc[enumCast(Op::OpHitObjectTraceRayEXT)].setResultAndType(false, false);
4121
4122        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'HitObject'");
4123        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Acceleration Structure'");
4124        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'RayFlags'");
4125        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Cullmask'");
4126        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'SBT Record Offset'");
4127        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'SBT Record Stride'");
4128        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Miss Index'");
4129        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Origin'");
4130        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'TMin'");
4131        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Direction'");
4132        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'TMax'");
4133        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Time'");
4134        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].operands.push(OperandId, "'Payload'");
4135        InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionEXT)].setResultAndType(false, false);
4136
4137        InstructionDesc[enumCast(Op::OpHitObjectSetShaderBindingTableRecordIndexEXT)].operands.push(OperandId, "'HitObject'");
4138        InstructionDesc[enumCast(Op::OpHitObjectSetShaderBindingTableRecordIndexEXT)].operands.push(OperandId, "'SBT Record Index'");
4139        InstructionDesc[enumCast(Op::OpHitObjectSetShaderBindingTableRecordIndexEXT)].setResultAndType(false, false);
4140
4141        InstructionDesc[enumCast(Op::OpHitObjectReorderExecuteShaderEXT)].operands.push(OperandId, "'HitObject'");
4142        InstructionDesc[enumCast(Op::OpHitObjectReorderExecuteShaderEXT)].operands.push(OperandId, "'Payload'");
4143        InstructionDesc[enumCast(Op::OpHitObjectReorderExecuteShaderEXT)].operands.push(OperandId, "'Hint'");
4144        InstructionDesc[enumCast(Op::OpHitObjectReorderExecuteShaderEXT)].operands.push(OperandId, "'Bits'");
4145        InstructionDesc[enumCast(Op::OpHitObjectReorderExecuteShaderEXT)].setResultAndType(false, false);
4146
4147        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'HitObject'");
4148        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Acceleration Structure'");
4149        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'RayFlags'");
4150        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Cullmask'");
4151        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'SBT Record Offset'");
4152        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'SBT Record Stride'");
4153        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Miss Index'");
4154        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Origin'");
4155        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'TMin'");
4156        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Direction'");
4157        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'TMax'");
4158        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Payload'");
4159        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Hint'");
4160        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].operands.push(OperandId, "'Bits'");
4161        InstructionDesc[enumCast(Op::OpHitObjectTraceReorderExecuteEXT)].setResultAndType(false, false);
4162
4163        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'HitObject'");
4164        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Acceleration Structure'");
4165        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'RayFlags'");
4166        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Cullmask'");
4167        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'SBT Record Offset'");
4168        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'SBT Record Stride'");
4169        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Miss Index'");
4170        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Origin'");
4171        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'TMin'");
4172        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Direction'");
4173        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'TMax'");
4174        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Time'");
4175        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Payload'");
4176        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Hint'");
4177        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].operands.push(OperandId, "'Bits'");
4178        InstructionDesc[enumCast(Op::OpHitObjectTraceMotionReorderExecuteEXT)].setResultAndType(false, false);
4179
4180        InstructionDesc[enumCast(Op::OpHitObjectRecordFromQueryEXT)].operands.push(OperandId, "'HitObject'");
4181        InstructionDesc[enumCast(Op::OpHitObjectRecordFromQueryEXT)].operands.push(OperandId, "'RayQuery'");
4182        InstructionDesc[enumCast(Op::OpHitObjectRecordFromQueryEXT)].operands.push(OperandId, "'SBT Record Index'");
4183        InstructionDesc[enumCast(Op::OpHitObjectRecordFromQueryEXT)].operands.push(OperandId, "'HitObjectAttribute'");
4184        InstructionDesc[enumCast(Op::OpHitObjectRecordFromQueryEXT)].operands.push(OperandId, "'Hit Kind'");
4185        InstructionDesc[enumCast(Op::OpHitObjectRecordFromQueryEXT)].setResultAndType(false, false);
4186
4187        InstructionDesc[enumCast(Op::OpHitObjectGetIntersectionTriangleVertexPositionsEXT)].operands.push(OperandId, "'HitObject'");
4188        InstructionDesc[enumCast(Op::OpHitObjectGetIntersectionTriangleVertexPositionsEXT)].setResultAndType(true, true);
4189
4190        InstructionDesc[enumCast(Op::OpBitcastExtractEXT)].operands.push(OperandId, "'Base'");
4191        InstructionDesc[enumCast(Op::OpBitcastExtractEXT)].operands.push(OperandId, "'Offset'");
4192
4193        InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].operands.push(OperandScope, "'Execution'");
4194        InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].operands.push(OperandScope, "'Memory'");
4195        InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].operands.push(OperandMemorySemantics, "'Semantics'");
4196
4197        InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].operands.push(OperandScope, "'Execution'");
4198        InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].operands.push(OperandScope, "'Memory'");
4199        InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].operands.push(OperandMemorySemantics, "'Semantics'");
4200    });
4201}
4202
4203} // end spv namespace