xref: /third_party/glslang/SPIRV/doc.cpp (revision 617a3bab)
1//
2// Copyright (C) 2014-2015 LunarG, Inc.
3// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
4//
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions
9// are met:
10//
11//    Redistributions of source code must retain the above copyright
12//    notice, this list of conditions and the following disclaimer.
13//
14//    Redistributions in binary form must reproduce the above
15//    copyright notice, this list of conditions and the following
16//    disclaimer in the documentation and/or other materials provided
17//    with the distribution.
18//
19//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
20//    contributors may be used to endorse or promote products derived
21//    from this software without specific prior written permission.
22//
23// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34// POSSIBILITY OF SUCH DAMAGE.
35
36//
37// 1) Programmatically fill in instruction/operand information.
38//    This can be used for disassembly, printing documentation, etc.
39//
40// 2) Print documentation from this parameterization.
41//
42
43#include "doc.h"
44
45#include <cstdio>
46#include <cstring>
47#include <algorithm>
48#include <mutex>
49
50namespace spv {
51    extern "C" {
52        // Include C-based headers that don't have a namespace
53        #include "GLSL.ext.KHR.h"
54        #include "GLSL.ext.EXT.h"
55        #include "GLSL.ext.AMD.h"
56        #include "GLSL.ext.NV.h"
57        #include "GLSL.ext.ARM.h"
58        #include "GLSL.ext.QCOM.h"
59    }
60}
61
62namespace spv {
63
64//
65// Whole set of functions that translate enumerants to their text strings for
66// the specification (or their sanitized versions for auto-generating the
67// spirv headers.
68//
69// Also, for masks the ceilings are declared next to these, to help keep them in sync.
70// Ceilings should be
71//  - one more than the maximum value an enumerant takes on, for non-mask enumerants
72//    (for non-sparse enums, this is the number of enumerants)
73//  - the number of bits consumed by the set of masks
74//    (for non-sparse mask enums, this is the number of enumerants)
75//
76
77const char* SourceString(int source)
78{
79    switch (source) {
80    case 0:  return "Unknown";
81    case 1:  return "ESSL";
82    case 2:  return "GLSL";
83    case 3:  return "OpenCL_C";
84    case 4:  return "OpenCL_CPP";
85    case 5:  return "HLSL";
86
87    default: return "Bad";
88    }
89}
90
91const char* ExecutionModelString(int model)
92{
93    switch (model) {
94    case 0:  return "Vertex";
95    case 1:  return "TessellationControl";
96    case 2:  return "TessellationEvaluation";
97    case 3:  return "Geometry";
98    case 4:  return "Fragment";
99    case 5:  return "GLCompute";
100    case 6:  return "Kernel";
101    case ExecutionModelTaskNV: return "TaskNV";
102    case ExecutionModelMeshNV: return "MeshNV";
103    case ExecutionModelTaskEXT: return "TaskEXT";
104    case ExecutionModelMeshEXT: return "MeshEXT";
105
106    default: return "Bad";
107
108    case ExecutionModelRayGenerationKHR: return "RayGenerationKHR";
109    case ExecutionModelIntersectionKHR:  return "IntersectionKHR";
110    case ExecutionModelAnyHitKHR:        return "AnyHitKHR";
111    case ExecutionModelClosestHitKHR:    return "ClosestHitKHR";
112    case ExecutionModelMissKHR:          return "MissKHR";
113    case ExecutionModelCallableKHR:      return "CallableKHR";
114    }
115}
116
117const char* AddressingString(int addr)
118{
119    switch (addr) {
120    case 0:  return "Logical";
121    case 1:  return "Physical32";
122    case 2:  return "Physical64";
123
124    case AddressingModelPhysicalStorageBuffer64EXT: return "PhysicalStorageBuffer64EXT";
125
126    default: return "Bad";
127    }
128}
129
130const char* MemoryString(int mem)
131{
132    switch (mem) {
133    case MemoryModelSimple:     return "Simple";
134    case MemoryModelGLSL450:    return "GLSL450";
135    case MemoryModelOpenCL:     return "OpenCL";
136    case MemoryModelVulkanKHR:  return "VulkanKHR";
137
138    default: return "Bad";
139    }
140}
141
142const int ExecutionModeCeiling = 40;
143
144const char* ExecutionModeString(int mode)
145{
146    switch (mode) {
147    case 0:  return "Invocations";
148    case 1:  return "SpacingEqual";
149    case 2:  return "SpacingFractionalEven";
150    case 3:  return "SpacingFractionalOdd";
151    case 4:  return "VertexOrderCw";
152    case 5:  return "VertexOrderCcw";
153    case 6:  return "PixelCenterInteger";
154    case 7:  return "OriginUpperLeft";
155    case 8:  return "OriginLowerLeft";
156    case 9:  return "EarlyFragmentTests";
157    case 10: return "PointMode";
158    case 11: return "Xfb";
159    case 12: return "DepthReplacing";
160    case 13: return "Bad";
161    case 14: return "DepthGreater";
162    case 15: return "DepthLess";
163    case 16: return "DepthUnchanged";
164    case 17: return "LocalSize";
165    case 18: return "LocalSizeHint";
166    case 19: return "InputPoints";
167    case 20: return "InputLines";
168    case 21: return "InputLinesAdjacency";
169    case 22: return "Triangles";
170    case 23: return "InputTrianglesAdjacency";
171    case 24: return "Quads";
172    case 25: return "Isolines";
173    case 26: return "OutputVertices";
174    case 27: return "OutputPoints";
175    case 28: return "OutputLineStrip";
176    case 29: return "OutputTriangleStrip";
177    case 30: return "VecTypeHint";
178    case 31: return "ContractionOff";
179    case 32: return "Bad";
180
181    case ExecutionModeInitializer:                   return "Initializer";
182    case ExecutionModeFinalizer:                     return "Finalizer";
183    case ExecutionModeSubgroupSize:                  return "SubgroupSize";
184    case ExecutionModeSubgroupsPerWorkgroup:         return "SubgroupsPerWorkgroup";
185    case ExecutionModeSubgroupsPerWorkgroupId:       return "SubgroupsPerWorkgroupId";
186    case ExecutionModeLocalSizeId:                   return "LocalSizeId";
187    case ExecutionModeLocalSizeHintId:               return "LocalSizeHintId";
188
189    case ExecutionModePostDepthCoverage:             return "PostDepthCoverage";
190    case ExecutionModeDenormPreserve:                return "DenormPreserve";
191    case ExecutionModeDenormFlushToZero:             return "DenormFlushToZero";
192    case ExecutionModeSignedZeroInfNanPreserve:      return "SignedZeroInfNanPreserve";
193    case ExecutionModeRoundingModeRTE:               return "RoundingModeRTE";
194    case ExecutionModeRoundingModeRTZ:               return "RoundingModeRTZ";
195    case ExecutionModeEarlyAndLateFragmentTestsAMD:  return "EarlyAndLateFragmentTestsAMD";
196    case ExecutionModeStencilRefUnchangedFrontAMD:   return "StencilRefUnchangedFrontAMD";
197    case ExecutionModeStencilRefLessFrontAMD:        return "StencilRefLessFrontAMD";
198    case ExecutionModeStencilRefGreaterBackAMD:      return "StencilRefGreaterBackAMD";
199    case ExecutionModeStencilRefReplacingEXT:        return "StencilRefReplacingEXT";
200    case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow";
201
202    case ExecutionModeOutputLinesNV:                 return "OutputLinesNV";
203    case ExecutionModeOutputPrimitivesNV:            return "OutputPrimitivesNV";
204    case ExecutionModeOutputTrianglesNV:             return "OutputTrianglesNV";
205    case ExecutionModeDerivativeGroupQuadsNV:        return "DerivativeGroupQuadsNV";
206    case ExecutionModeDerivativeGroupLinearNV:       return "DerivativeGroupLinearNV";
207
208    case ExecutionModePixelInterlockOrderedEXT:         return "PixelInterlockOrderedEXT";
209    case ExecutionModePixelInterlockUnorderedEXT:       return "PixelInterlockUnorderedEXT";
210    case ExecutionModeSampleInterlockOrderedEXT:        return "SampleInterlockOrderedEXT";
211    case ExecutionModeSampleInterlockUnorderedEXT:      return "SampleInterlockUnorderedEXT";
212    case ExecutionModeShadingRateInterlockOrderedEXT:   return "ShadingRateInterlockOrderedEXT";
213    case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
214
215    case ExecutionModeMaxWorkgroupSizeINTEL:    return "MaxWorkgroupSizeINTEL";
216    case ExecutionModeMaxWorkDimINTEL:          return "MaxWorkDimINTEL";
217    case ExecutionModeNoGlobalOffsetINTEL:      return "NoGlobalOffsetINTEL";
218    case ExecutionModeNumSIMDWorkitemsINTEL:    return "NumSIMDWorkitemsINTEL";
219
220    case ExecutionModeNonCoherentColorAttachmentReadEXT:        return "NonCoherentColorAttachmentReadEXT";
221    case ExecutionModeNonCoherentDepthAttachmentReadEXT:        return "NonCoherentDepthAttachmentReadEXT";
222    case ExecutionModeNonCoherentStencilAttachmentReadEXT:      return "NonCoherentStencilAttachmentReadEXT";
223
224    case ExecutionModeCeiling:
225    default: return "Bad";
226    }
227}
228
229const char* StorageClassString(int StorageClass)
230{
231    switch (StorageClass) {
232    case 0:  return "UniformConstant";
233    case 1:  return "Input";
234    case 2:  return "Uniform";
235    case 3:  return "Output";
236    case 4:  return "Workgroup";
237    case 5:  return "CrossWorkgroup";
238    case 6:  return "Private";
239    case 7:  return "Function";
240    case 8:  return "Generic";
241    case 9:  return "PushConstant";
242    case 10: return "AtomicCounter";
243    case 11: return "Image";
244    case 12: return "StorageBuffer";
245
246    case StorageClassRayPayloadKHR:            return "RayPayloadKHR";
247    case StorageClassHitAttributeKHR:          return "HitAttributeKHR";
248    case StorageClassIncomingRayPayloadKHR:    return "IncomingRayPayloadKHR";
249    case StorageClassShaderRecordBufferKHR:    return "ShaderRecordBufferKHR";
250    case StorageClassCallableDataKHR:          return "CallableDataKHR";
251    case StorageClassIncomingCallableDataKHR:  return "IncomingCallableDataKHR";
252
253    case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
254    case StorageClassTaskPayloadWorkgroupEXT:  return "TaskPayloadWorkgroupEXT";
255    case StorageClassHitObjectAttributeNV:     return "HitObjectAttributeNV";
256    case StorageClassTileImageEXT:             return "TileImageEXT";
257    default: return "Bad";
258    }
259}
260
261const int DecorationCeiling = 45;
262
263const char* DecorationString(int decoration)
264{
265    switch (decoration) {
266    case 0:  return "RelaxedPrecision";
267    case 1:  return "SpecId";
268    case 2:  return "Block";
269    case 3:  return "BufferBlock";
270    case 4:  return "RowMajor";
271    case 5:  return "ColMajor";
272    case 6:  return "ArrayStride";
273    case 7:  return "MatrixStride";
274    case 8:  return "GLSLShared";
275    case 9:  return "GLSLPacked";
276    case 10: return "CPacked";
277    case 11: return "BuiltIn";
278    case 12: return "Bad";
279    case 13: return "NoPerspective";
280    case 14: return "Flat";
281    case 15: return "Patch";
282    case 16: return "Centroid";
283    case 17: return "Sample";
284    case 18: return "Invariant";
285    case 19: return "Restrict";
286    case 20: return "Aliased";
287    case 21: return "Volatile";
288    case 22: return "Constant";
289    case 23: return "Coherent";
290    case 24: return "NonWritable";
291    case 25: return "NonReadable";
292    case 26: return "Uniform";
293    case 27: return "Bad";
294    case 28: return "SaturatedConversion";
295    case 29: return "Stream";
296    case 30: return "Location";
297    case 31: return "Component";
298    case 32: return "Index";
299    case 33: return "Binding";
300    case 34: return "DescriptorSet";
301    case 35: return "Offset";
302    case 36: return "XfbBuffer";
303    case 37: return "XfbStride";
304    case 38: return "FuncParamAttr";
305    case 39: return "FP Rounding Mode";
306    case 40: return "FP Fast Math Mode";
307    case 41: return "Linkage Attributes";
308    case 42: return "NoContraction";
309    case 43: return "InputAttachmentIndex";
310    case 44: return "Alignment";
311
312    case DecorationCeiling:
313    default:  return "Bad";
314
315    case DecorationWeightTextureQCOM:           return "DecorationWeightTextureQCOM";
316    case DecorationBlockMatchTextureQCOM:       return "DecorationBlockMatchTextureQCOM";
317    case DecorationExplicitInterpAMD:           return "ExplicitInterpAMD";
318    case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
319    case DecorationPassthroughNV:               return "PassthroughNV";
320    case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
321    case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
322    case DecorationPerPrimitiveNV:              return "PerPrimitiveNV";
323    case DecorationPerViewNV:                   return "PerViewNV";
324    case DecorationPerTaskNV:                   return "PerTaskNV";
325
326    case DecorationPerVertexKHR:                return "PerVertexKHR";
327
328    case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
329    case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
330    case DecorationHlslSemanticGOOGLE:      return "DecorationHlslSemanticGOOGLE";
331    case DecorationRestrictPointerEXT:      return "DecorationRestrictPointerEXT";
332    case DecorationAliasedPointerEXT:       return "DecorationAliasedPointerEXT";
333
334    case DecorationHitObjectShaderRecordBufferNV:  return "DecorationHitObjectShaderRecordBufferNV";
335    }
336}
337
338const char* BuiltInString(int builtIn)
339{
340    switch (builtIn) {
341    case 0:  return "Position";
342    case 1:  return "PointSize";
343    case 2:  return "Bad";
344    case 3:  return "ClipDistance";
345    case 4:  return "CullDistance";
346    case 5:  return "VertexId";
347    case 6:  return "InstanceId";
348    case 7:  return "PrimitiveId";
349    case 8:  return "InvocationId";
350    case 9:  return "Layer";
351    case 10: return "ViewportIndex";
352    case 11: return "TessLevelOuter";
353    case 12: return "TessLevelInner";
354    case 13: return "TessCoord";
355    case 14: return "PatchVertices";
356    case 15: return "FragCoord";
357    case 16: return "PointCoord";
358    case 17: return "FrontFacing";
359    case 18: return "SampleId";
360    case 19: return "SamplePosition";
361    case 20: return "SampleMask";
362    case 21: return "Bad";
363    case 22: return "FragDepth";
364    case 23: return "HelperInvocation";
365    case 24: return "NumWorkgroups";
366    case 25: return "WorkgroupSize";
367    case 26: return "WorkgroupId";
368    case 27: return "LocalInvocationId";
369    case 28: return "GlobalInvocationId";
370    case 29: return "LocalInvocationIndex";
371    case 30: return "WorkDim";
372    case 31: return "GlobalSize";
373    case 32: return "EnqueuedWorkgroupSize";
374    case 33: return "GlobalOffset";
375    case 34: return "GlobalLinearId";
376    case 35: return "Bad";
377    case 36: return "SubgroupSize";
378    case 37: return "SubgroupMaxSize";
379    case 38: return "NumSubgroups";
380    case 39: return "NumEnqueuedSubgroups";
381    case 40: return "SubgroupId";
382    case 41: return "SubgroupLocalInvocationId";
383    case 42: return "VertexIndex";                 // TBD: put next to VertexId?
384    case 43: return "InstanceIndex";               // TBD: put next to InstanceId?
385
386    case 4416: return "SubgroupEqMaskKHR";
387    case 4417: return "SubgroupGeMaskKHR";
388    case 4418: return "SubgroupGtMaskKHR";
389    case 4419: return "SubgroupLeMaskKHR";
390    case 4420: return "SubgroupLtMaskKHR";
391    case 4438: return "DeviceIndex";
392    case 4440: return "ViewIndex";
393    case 4424: return "BaseVertex";
394    case 4425: return "BaseInstance";
395    case 4426: return "DrawIndex";
396    case 4432: return "PrimitiveShadingRateKHR";
397    case 4444: return "ShadingRateKHR";
398    case 5014: return "FragStencilRefEXT";
399
400    case 4992: return "BaryCoordNoPerspAMD";
401    case 4993: return "BaryCoordNoPerspCentroidAMD";
402    case 4994: return "BaryCoordNoPerspSampleAMD";
403    case 4995: return "BaryCoordSmoothAMD";
404    case 4996: return "BaryCoordSmoothCentroidAMD";
405    case 4997: return "BaryCoordSmoothSampleAMD";
406    case 4998: return "BaryCoordPullModelAMD";
407    case BuiltInLaunchIdKHR:                 return "LaunchIdKHR";
408    case BuiltInLaunchSizeKHR:               return "LaunchSizeKHR";
409    case BuiltInWorldRayOriginKHR:           return "WorldRayOriginKHR";
410    case BuiltInWorldRayDirectionKHR:        return "WorldRayDirectionKHR";
411    case BuiltInObjectRayOriginKHR:          return "ObjectRayOriginKHR";
412    case BuiltInObjectRayDirectionKHR:       return "ObjectRayDirectionKHR";
413    case BuiltInRayTminKHR:                  return "RayTminKHR";
414    case BuiltInRayTmaxKHR:                  return "RayTmaxKHR";
415    case BuiltInCullMaskKHR:                 return "CullMaskKHR";
416    case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
417    case BuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV";
418    case BuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV";
419    case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV";
420    case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV";
421    case BuiltInInstanceCustomIndexKHR:      return "InstanceCustomIndexKHR";
422    case BuiltInRayGeometryIndexKHR:         return "RayGeometryIndexKHR";
423    case BuiltInObjectToWorldKHR:            return "ObjectToWorldKHR";
424    case BuiltInWorldToObjectKHR:            return "WorldToObjectKHR";
425    case BuiltInHitTNV:                      return "HitTNV";
426    case BuiltInHitKindKHR:                  return "HitKindKHR";
427    case BuiltInIncomingRayFlagsKHR:         return "IncomingRayFlagsKHR";
428    case BuiltInViewportMaskNV:              return "ViewportMaskNV";
429    case BuiltInSecondaryPositionNV:         return "SecondaryPositionNV";
430    case BuiltInSecondaryViewportMaskNV:     return "SecondaryViewportMaskNV";
431    case BuiltInPositionPerViewNV:           return "PositionPerViewNV";
432    case BuiltInViewportMaskPerViewNV:       return "ViewportMaskPerViewNV";
433//    case BuiltInFragmentSizeNV:             return "FragmentSizeNV";        // superseded by BuiltInFragSizeEXT
434//    case BuiltInInvocationsPerPixelNV:      return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
435    case BuiltInBaryCoordKHR:                return "BaryCoordKHR";
436    case BuiltInBaryCoordNoPerspKHR:         return "BaryCoordNoPerspKHR";
437
438    case BuiltInFragSizeEXT:                 return "FragSizeEXT";
439    case BuiltInFragInvocationCountEXT:      return "FragInvocationCountEXT";
440
441    case 5264: return "FullyCoveredEXT";
442
443    case BuiltInTaskCountNV:           return "TaskCountNV";
444    case BuiltInPrimitiveCountNV:      return "PrimitiveCountNV";
445    case BuiltInPrimitiveIndicesNV:    return "PrimitiveIndicesNV";
446    case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV";
447    case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV";
448    case BuiltInLayerPerViewNV:        return "LayerPerViewNV";
449    case BuiltInMeshViewCountNV:       return "MeshViewCountNV";
450    case BuiltInMeshViewIndicesNV:     return "MeshViewIndicesNV";
451    case BuiltInWarpsPerSMNV:           return "WarpsPerSMNV";
452    case BuiltInSMCountNV:              return "SMCountNV";
453    case BuiltInWarpIDNV:               return "WarpIDNV";
454    case BuiltInSMIDNV:                 return "SMIDNV";
455    case BuiltInCurrentRayTimeNV:       return "CurrentRayTimeNV";
456    case BuiltInPrimitivePointIndicesEXT:        return "PrimitivePointIndicesEXT";
457    case BuiltInPrimitiveLineIndicesEXT:         return "PrimitiveLineIndicesEXT";
458    case BuiltInPrimitiveTriangleIndicesEXT:     return "PrimitiveTriangleIndicesEXT";
459    case BuiltInCullPrimitiveEXT:                return "CullPrimitiveEXT";
460    case BuiltInCoreCountARM:           return "CoreCountARM";
461    case BuiltInCoreIDARM:              return "CoreIDARM";
462    case BuiltInCoreMaxIDARM:           return "CoreMaxIDARM";
463    case BuiltInWarpIDARM:              return "WarpIDARM";
464    case BuiltInWarpMaxIDARM:           return "BuiltInWarpMaxIDARM";
465
466    default: return "Bad";
467    }
468}
469
470const char* DimensionString(int dim)
471{
472    switch (dim) {
473    case 0:  return "1D";
474    case 1:  return "2D";
475    case 2:  return "3D";
476    case 3:  return "Cube";
477    case 4:  return "Rect";
478    case 5:  return "Buffer";
479    case 6:  return "SubpassData";
480    case DimTileImageDataEXT:  return "TileImageDataEXT";
481
482    default: return "Bad";
483    }
484}
485
486const char* SamplerAddressingModeString(int mode)
487{
488    switch (mode) {
489    case 0:  return "None";
490    case 1:  return "ClampToEdge";
491    case 2:  return "Clamp";
492    case 3:  return "Repeat";
493    case 4:  return "RepeatMirrored";
494
495    default: return "Bad";
496    }
497}
498
499const char* SamplerFilterModeString(int mode)
500{
501    switch (mode) {
502    case 0: return "Nearest";
503    case 1: return "Linear";
504
505    default: return "Bad";
506    }
507}
508
509const char* ImageFormatString(int format)
510{
511    switch (format) {
512    case  0: return "Unknown";
513
514    // ES/Desktop float
515    case  1: return "Rgba32f";
516    case  2: return "Rgba16f";
517    case  3: return "R32f";
518    case  4: return "Rgba8";
519    case  5: return "Rgba8Snorm";
520
521    // Desktop float
522    case  6: return "Rg32f";
523    case  7: return "Rg16f";
524    case  8: return "R11fG11fB10f";
525    case  9: return "R16f";
526    case 10: return "Rgba16";
527    case 11: return "Rgb10A2";
528    case 12: return "Rg16";
529    case 13: return "Rg8";
530    case 14: return "R16";
531    case 15: return "R8";
532    case 16: return "Rgba16Snorm";
533    case 17: return "Rg16Snorm";
534    case 18: return "Rg8Snorm";
535    case 19: return "R16Snorm";
536    case 20: return "R8Snorm";
537
538    // ES/Desktop int
539    case 21: return "Rgba32i";
540    case 22: return "Rgba16i";
541    case 23: return "Rgba8i";
542    case 24: return "R32i";
543
544    // Desktop int
545    case 25: return "Rg32i";
546    case 26: return "Rg16i";
547    case 27: return "Rg8i";
548    case 28: return "R16i";
549    case 29: return "R8i";
550
551    // ES/Desktop uint
552    case 30: return "Rgba32ui";
553    case 31: return "Rgba16ui";
554    case 32: return "Rgba8ui";
555    case 33: return "R32ui";
556
557    // Desktop uint
558    case 34: return "Rgb10a2ui";
559    case 35: return "Rg32ui";
560    case 36: return "Rg16ui";
561    case 37: return "Rg8ui";
562    case 38: return "R16ui";
563    case 39: return "R8ui";
564    case 40: return "R64ui";
565    case 41: return "R64i";
566
567    default:
568        return "Bad";
569    }
570}
571
572const char* ImageChannelOrderString(int format)
573{
574    switch (format) {
575    case 0:  return "R";
576    case 1:  return "A";
577    case 2:  return "RG";
578    case 3:  return "RA";
579    case 4:  return "RGB";
580    case 5:  return "RGBA";
581    case 6:  return "BGRA";
582    case 7:  return "ARGB";
583    case 8:  return "Intensity";
584    case 9:  return "Luminance";
585    case 10: return "Rx";
586    case 11: return "RGx";
587    case 12: return "RGBx";
588    case 13: return "Depth";
589    case 14: return "DepthStencil";
590    case 15: return "sRGB";
591    case 16: return "sRGBx";
592    case 17: return "sRGBA";
593    case 18: return "sBGRA";
594
595    default:
596        return "Bad";
597    }
598}
599
600const char* ImageChannelDataTypeString(int type)
601{
602    switch (type)
603    {
604    case 0: return "SnormInt8";
605    case 1: return "SnormInt16";
606    case 2: return "UnormInt8";
607    case 3: return "UnormInt16";
608    case 4: return "UnormShort565";
609    case 5: return "UnormShort555";
610    case 6: return "UnormInt101010";
611    case 7: return "SignedInt8";
612    case 8: return "SignedInt16";
613    case 9: return "SignedInt32";
614    case 10: return "UnsignedInt8";
615    case 11: return "UnsignedInt16";
616    case 12: return "UnsignedInt32";
617    case 13: return "HalfFloat";
618    case 14: return "Float";
619    case 15: return "UnormInt24";
620    case 16: return "UnormInt101010_2";
621
622    default:
623        return "Bad";
624    }
625}
626
627const int ImageOperandsCeiling = 14;
628
629const char* ImageOperandsString(int format)
630{
631    switch (format) {
632    case ImageOperandsBiasShift:                    return "Bias";
633    case ImageOperandsLodShift:                     return "Lod";
634    case ImageOperandsGradShift:                    return "Grad";
635    case ImageOperandsConstOffsetShift:             return "ConstOffset";
636    case ImageOperandsOffsetShift:                  return "Offset";
637    case ImageOperandsConstOffsetsShift:            return "ConstOffsets";
638    case ImageOperandsSampleShift:                  return "Sample";
639    case ImageOperandsMinLodShift:                  return "MinLod";
640    case ImageOperandsMakeTexelAvailableKHRShift:   return "MakeTexelAvailableKHR";
641    case ImageOperandsMakeTexelVisibleKHRShift:     return "MakeTexelVisibleKHR";
642    case ImageOperandsNonPrivateTexelKHRShift:      return "NonPrivateTexelKHR";
643    case ImageOperandsVolatileTexelKHRShift:        return "VolatileTexelKHR";
644    case ImageOperandsSignExtendShift:              return "SignExtend";
645    case ImageOperandsZeroExtendShift:              return "ZeroExtend";
646
647    case ImageOperandsCeiling:
648    default:
649        return "Bad";
650    }
651}
652
653const char* FPFastMathString(int mode)
654{
655    switch (mode) {
656    case 0: return "NotNaN";
657    case 1: return "NotInf";
658    case 2: return "NSZ";
659    case 3: return "AllowRecip";
660    case 4: return "Fast";
661
662    default:     return "Bad";
663    }
664}
665
666const char* FPRoundingModeString(int mode)
667{
668    switch (mode) {
669    case 0:  return "RTE";
670    case 1:  return "RTZ";
671    case 2:  return "RTP";
672    case 3:  return "RTN";
673
674    default: return "Bad";
675    }
676}
677
678const char* LinkageTypeString(int type)
679{
680    switch (type) {
681    case 0:  return "Export";
682    case 1:  return "Import";
683
684    default: return "Bad";
685    }
686}
687
688const char* FuncParamAttrString(int attr)
689{
690    switch (attr) {
691    case 0:  return "Zext";
692    case 1:  return "Sext";
693    case 2:  return "ByVal";
694    case 3:  return "Sret";
695    case 4:  return "NoAlias";
696    case 5:  return "NoCapture";
697    case 6:  return "NoWrite";
698    case 7:  return "NoReadWrite";
699
700    default: return "Bad";
701    }
702}
703
704const char* AccessQualifierString(int attr)
705{
706    switch (attr) {
707    case 0:  return "ReadOnly";
708    case 1:  return "WriteOnly";
709    case 2:  return "ReadWrite";
710
711    default: return "Bad";
712    }
713}
714
715const int SelectControlCeiling = 2;
716
717const char* SelectControlString(int cont)
718{
719    switch (cont) {
720    case 0:  return "Flatten";
721    case 1:  return "DontFlatten";
722
723    case SelectControlCeiling:
724    default: return "Bad";
725    }
726}
727
728const int LoopControlCeiling = LoopControlPartialCountShift + 1;
729
730const char* LoopControlString(int cont)
731{
732    switch (cont) {
733    case LoopControlUnrollShift:             return "Unroll";
734    case LoopControlDontUnrollShift:         return "DontUnroll";
735    case LoopControlDependencyInfiniteShift: return "DependencyInfinite";
736    case LoopControlDependencyLengthShift:   return "DependencyLength";
737    case LoopControlMinIterationsShift:      return "MinIterations";
738    case LoopControlMaxIterationsShift:      return "MaxIterations";
739    case LoopControlIterationMultipleShift:  return "IterationMultiple";
740    case LoopControlPeelCountShift:          return "PeelCount";
741    case LoopControlPartialCountShift:       return "PartialCount";
742
743    case LoopControlCeiling:
744    default: return "Bad";
745    }
746}
747
748const int FunctionControlCeiling = 4;
749
750const char* FunctionControlString(int cont)
751{
752    switch (cont) {
753    case 0:  return "Inline";
754    case 1:  return "DontInline";
755    case 2:  return "Pure";
756    case 3:  return "Const";
757
758    case FunctionControlCeiling:
759    default: return "Bad";
760    }
761}
762
763const char* MemorySemanticsString(int mem)
764{
765    // Note: No bits set (None) means "Relaxed"
766    switch (mem) {
767    case 0: return "Bad"; // Note: this is a placeholder for 'Consume'
768    case 1: return "Acquire";
769    case 2: return "Release";
770    case 3: return "AcquireRelease";
771    case 4: return "SequentiallyConsistent";
772    case 5: return "Bad"; // Note: reserved for future expansion
773    case 6: return "UniformMemory";
774    case 7: return "SubgroupMemory";
775    case 8: return "WorkgroupMemory";
776    case 9: return "CrossWorkgroupMemory";
777    case 10: return "AtomicCounterMemory";
778    case 11: return "ImageMemory";
779
780    default:     return "Bad";
781    }
782}
783
784const int MemoryAccessCeiling = 6;
785
786const char* MemoryAccessString(int mem)
787{
788    switch (mem) {
789    case MemoryAccessVolatileShift:                 return "Volatile";
790    case MemoryAccessAlignedShift:                  return "Aligned";
791    case MemoryAccessNontemporalShift:              return "Nontemporal";
792    case MemoryAccessMakePointerAvailableKHRShift:  return "MakePointerAvailableKHR";
793    case MemoryAccessMakePointerVisibleKHRShift:    return "MakePointerVisibleKHR";
794    case MemoryAccessNonPrivatePointerKHRShift:     return "NonPrivatePointerKHR";
795
796    default: return "Bad";
797    }
798}
799
800const int CooperativeMatrixOperandsCeiling = 6;
801
802const char* CooperativeMatrixOperandsString(int op)
803{
804    switch (op) {
805    case CooperativeMatrixOperandsMatrixASignedComponentsKHRShift:  return "ASignedComponentsKHR";
806    case CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift:  return "BSignedComponentsKHR";
807    case CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift:  return "CSignedComponentsKHR";
808    case CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift:  return "ResultSignedComponentsKHR";
809    case CooperativeMatrixOperandsSaturatingAccumulationKHRShift:   return "SaturatingAccumulationKHR";
810
811    default: return "Bad";
812    }
813}
814
815const char* ScopeString(int mem)
816{
817    switch (mem) {
818    case 0:  return "CrossDevice";
819    case 1:  return "Device";
820    case 2:  return "Workgroup";
821    case 3:  return "Subgroup";
822    case 4:  return "Invocation";
823
824    default: return "Bad";
825    }
826}
827
828const char* GroupOperationString(int gop)
829{
830
831    switch (gop)
832    {
833    case GroupOperationReduce:  return "Reduce";
834    case GroupOperationInclusiveScan:  return "InclusiveScan";
835    case GroupOperationExclusiveScan:  return "ExclusiveScan";
836    case GroupOperationClusteredReduce:  return "ClusteredReduce";
837    case GroupOperationPartitionedReduceNV:  return "PartitionedReduceNV";
838    case GroupOperationPartitionedInclusiveScanNV:  return "PartitionedInclusiveScanNV";
839    case GroupOperationPartitionedExclusiveScanNV:  return "PartitionedExclusiveScanNV";
840
841    default: return "Bad";
842    }
843}
844
845const char* KernelEnqueueFlagsString(int flag)
846{
847    switch (flag)
848    {
849    case 0:  return "NoWait";
850    case 1:  return "WaitKernel";
851    case 2:  return "WaitWorkGroup";
852
853    default: return "Bad";
854    }
855}
856
857const char* KernelProfilingInfoString(int info)
858{
859    switch (info)
860    {
861    case 0:  return "CmdExecTime";
862
863    default: return "Bad";
864    }
865}
866
867const char* CapabilityString(int info)
868{
869    switch (info)
870    {
871    case 0:  return "Matrix";
872    case 1:  return "Shader";
873    case 2:  return "Geometry";
874    case 3:  return "Tessellation";
875    case 4:  return "Addresses";
876    case 5:  return "Linkage";
877    case 6:  return "Kernel";
878    case 7:  return "Vector16";
879    case 8:  return "Float16Buffer";
880    case 9:  return "Float16";
881    case 10: return "Float64";
882    case 11: return "Int64";
883    case 12: return "Int64Atomics";
884    case 13: return "ImageBasic";
885    case 14: return "ImageReadWrite";
886    case 15: return "ImageMipmap";
887    case 16: return "Bad";
888    case 17: return "Pipes";
889    case 18: return "Groups";
890    case 19: return "DeviceEnqueue";
891    case 20: return "LiteralSampler";
892    case 21: return "AtomicStorage";
893    case 22: return "Int16";
894    case 23: return "TessellationPointSize";
895    case 24: return "GeometryPointSize";
896    case 25: return "ImageGatherExtended";
897    case 26: return "Bad";
898    case 27: return "StorageImageMultisample";
899    case 28: return "UniformBufferArrayDynamicIndexing";
900    case 29: return "SampledImageArrayDynamicIndexing";
901    case 30: return "StorageBufferArrayDynamicIndexing";
902    case 31: return "StorageImageArrayDynamicIndexing";
903    case 32: return "ClipDistance";
904    case 33: return "CullDistance";
905    case 34: return "ImageCubeArray";
906    case 35: return "SampleRateShading";
907    case 36: return "ImageRect";
908    case 37: return "SampledRect";
909    case 38: return "GenericPointer";
910    case 39: return "Int8";
911    case 40: return "InputAttachment";
912    case 41: return "SparseResidency";
913    case 42: return "MinLod";
914    case 43: return "Sampled1D";
915    case 44: return "Image1D";
916    case 45: return "SampledCubeArray";
917    case 46: return "SampledBuffer";
918    case 47: return "ImageBuffer";
919    case 48: return "ImageMSArray";
920    case 49: return "StorageImageExtendedFormats";
921    case 50: return "ImageQuery";
922    case 51: return "DerivativeControl";
923    case 52: return "InterpolationFunction";
924    case 53: return "TransformFeedback";
925    case 54: return "GeometryStreams";
926    case 55: return "StorageImageReadWithoutFormat";
927    case 56: return "StorageImageWriteWithoutFormat";
928    case 57: return "MultiViewport";
929    case 61: return "GroupNonUniform";
930    case 62: return "GroupNonUniformVote";
931    case 63: return "GroupNonUniformArithmetic";
932    case 64: return "GroupNonUniformBallot";
933    case 65: return "GroupNonUniformShuffle";
934    case 66: return "GroupNonUniformShuffleRelative";
935    case 67: return "GroupNonUniformClustered";
936    case 68: return "GroupNonUniformQuad";
937
938    case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
939    case CapabilityDrawParameters:    return "DrawParameters";
940    case CapabilitySubgroupVoteKHR:   return "SubgroupVoteKHR";
941
942    case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
943    case CapabilityStorageUniform16:            return "StorageUniform16";
944    case CapabilityStoragePushConstant16:       return "StoragePushConstant16";
945    case CapabilityStorageInputOutput16:        return "StorageInputOutput16";
946
947    case CapabilityStorageBuffer8BitAccess:             return "StorageBuffer8BitAccess";
948    case CapabilityUniformAndStorageBuffer8BitAccess:   return "UniformAndStorageBuffer8BitAccess";
949    case CapabilityStoragePushConstant8:                return "StoragePushConstant8";
950
951    case CapabilityDeviceGroup: return "DeviceGroup";
952    case CapabilityMultiView:   return "MultiView";
953
954    case CapabilityDenormPreserve:           return "DenormPreserve";
955    case CapabilityDenormFlushToZero:        return "DenormFlushToZero";
956    case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
957    case CapabilityRoundingModeRTE:          return "RoundingModeRTE";
958    case CapabilityRoundingModeRTZ:          return "RoundingModeRTZ";
959
960    case CapabilityStencilExportEXT: return "StencilExportEXT";
961
962    case CapabilityFloat16ImageAMD:       return "Float16ImageAMD";
963    case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
964    case CapabilityFragmentMaskAMD:       return "FragmentMaskAMD";
965    case CapabilityImageReadWriteLodAMD:  return "ImageReadWriteLodAMD";
966
967    case CapabilityAtomicStorageOps:             return "AtomicStorageOps";
968
969    case CapabilitySampleMaskPostDepthCoverage:  return "SampleMaskPostDepthCoverage";
970    case CapabilityGeometryShaderPassthroughNV:     return "GeometryShaderPassthroughNV";
971    case CapabilityShaderViewportIndexLayerNV:      return "ShaderViewportIndexLayerNV";
972    case CapabilityShaderViewportMaskNV:            return "ShaderViewportMaskNV";
973    case CapabilityShaderStereoViewNV:              return "ShaderStereoViewNV";
974    case CapabilityPerViewAttributesNV:             return "PerViewAttributesNV";
975    case CapabilityGroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
976    case CapabilityRayTracingNV:                    return "RayTracingNV";
977    case CapabilityRayTracingMotionBlurNV:          return "RayTracingMotionBlurNV";
978    case CapabilityRayTracingKHR:                   return "RayTracingKHR";
979    case CapabilityRayCullMaskKHR:                  return "RayCullMaskKHR";
980    case CapabilityRayQueryKHR:                     return "RayQueryKHR";
981    case CapabilityRayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
982    case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
983    case CapabilityRayTracingPositionFetchKHR:      return "RayTracingPositionFetchKHR";
984    case CapabilityDisplacementMicromapNV:           return "DisplacementMicromapNV";
985    case CapabilityRayTracingDisplacementMicromapNV: return "CapabilityRayTracingDisplacementMicromapNV";
986    case CapabilityRayQueryPositionFetchKHR:        return "RayQueryPositionFetchKHR";
987    case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
988    case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
989    case CapabilityFragmentBarycentricKHR:          return "FragmentBarycentricKHR";
990    case CapabilityMeshShadingNV:                   return "MeshShadingNV";
991    case CapabilityImageFootprintNV:                return "ImageFootprintNV";
992    case CapabilityMeshShadingEXT:                  return "MeshShadingEXT";
993//    case CapabilityShadingRateNV:                   return "ShadingRateNV";  // superseded by FragmentDensityEXT
994    case CapabilitySampleMaskOverrideCoverageNV:    return "SampleMaskOverrideCoverageNV";
995    case CapabilityFragmentDensityEXT:              return "FragmentDensityEXT";
996
997    case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
998
999    case CapabilityShaderNonUniformEXT:                          return "ShaderNonUniformEXT";
1000    case CapabilityRuntimeDescriptorArrayEXT:                    return "RuntimeDescriptorArrayEXT";
1001    case CapabilityInputAttachmentArrayDynamicIndexingEXT:       return "InputAttachmentArrayDynamicIndexingEXT";
1002    case CapabilityUniformTexelBufferArrayDynamicIndexingEXT:    return "UniformTexelBufferArrayDynamicIndexingEXT";
1003    case CapabilityStorageTexelBufferArrayDynamicIndexingEXT:    return "StorageTexelBufferArrayDynamicIndexingEXT";
1004    case CapabilityUniformBufferArrayNonUniformIndexingEXT:      return "UniformBufferArrayNonUniformIndexingEXT";
1005    case CapabilitySampledImageArrayNonUniformIndexingEXT:       return "SampledImageArrayNonUniformIndexingEXT";
1006    case CapabilityStorageBufferArrayNonUniformIndexingEXT:      return "StorageBufferArrayNonUniformIndexingEXT";
1007    case CapabilityStorageImageArrayNonUniformIndexingEXT:       return "StorageImageArrayNonUniformIndexingEXT";
1008    case CapabilityInputAttachmentArrayNonUniformIndexingEXT:    return "InputAttachmentArrayNonUniformIndexingEXT";
1009    case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "UniformTexelBufferArrayNonUniformIndexingEXT";
1010    case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT";
1011
1012    case CapabilityVulkanMemoryModelKHR:                return "VulkanMemoryModelKHR";
1013    case CapabilityVulkanMemoryModelDeviceScopeKHR:     return "VulkanMemoryModelDeviceScopeKHR";
1014
1015    case CapabilityPhysicalStorageBufferAddressesEXT:   return "PhysicalStorageBufferAddressesEXT";
1016
1017    case CapabilityVariablePointers:                    return "VariablePointers";
1018
1019    case CapabilityCooperativeMatrixNV:     return "CooperativeMatrixNV";
1020    case CapabilityCooperativeMatrixKHR:    return "CooperativeMatrixKHR";
1021    case CapabilityShaderSMBuiltinsNV:      return "ShaderSMBuiltinsNV";
1022
1023    case CapabilityFragmentShaderSampleInterlockEXT:        return "CapabilityFragmentShaderSampleInterlockEXT";
1024    case CapabilityFragmentShaderPixelInterlockEXT:         return "CapabilityFragmentShaderPixelInterlockEXT";
1025    case CapabilityFragmentShaderShadingRateInterlockEXT:   return "CapabilityFragmentShaderShadingRateInterlockEXT";
1026
1027    case CapabilityTileImageColorReadAccessEXT:           return "TileImageColorReadAccessEXT";
1028    case CapabilityTileImageDepthReadAccessEXT:           return "TileImageDepthReadAccessEXT";
1029    case CapabilityTileImageStencilReadAccessEXT:         return "TileImageStencilReadAccessEXT";
1030
1031    case CapabilityFragmentShadingRateKHR:                  return "FragmentShadingRateKHR";
1032
1033    case CapabilityDemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
1034    case CapabilityShaderClockKHR:                          return "ShaderClockKHR";
1035    case CapabilityInt64ImageEXT:                           return "Int64ImageEXT";
1036
1037    case CapabilityIntegerFunctions2INTEL:              return "CapabilityIntegerFunctions2INTEL";
1038
1039    case CapabilityAtomicFloat16AddEXT:                     return "AtomicFloat16AddEXT";
1040    case CapabilityAtomicFloat32AddEXT:                     return "AtomicFloat32AddEXT";
1041    case CapabilityAtomicFloat64AddEXT:                     return "AtomicFloat64AddEXT";
1042    case CapabilityAtomicFloat16MinMaxEXT:                  return "AtomicFloat16MinMaxEXT";
1043    case CapabilityAtomicFloat32MinMaxEXT:                  return "AtomicFloat32MinMaxEXT";
1044    case CapabilityAtomicFloat64MinMaxEXT:                  return "AtomicFloat64MinMaxEXT";
1045
1046    case CapabilityWorkgroupMemoryExplicitLayoutKHR:            return "CapabilityWorkgroupMemoryExplicitLayoutKHR";
1047    case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR:  return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR";
1048    case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR";
1049    case CapabilityCoreBuiltinsARM:                             return "CoreBuiltinsARM";
1050
1051    case CapabilityShaderInvocationReorderNV:                return "ShaderInvocationReorderNV";
1052
1053    case CapabilityTextureSampleWeightedQCOM:           return "TextureSampleWeightedQCOM";
1054    case CapabilityTextureBoxFilterQCOM:                return "TextureBoxFilterQCOM";
1055    case CapabilityTextureBlockMatchQCOM:               return "TextureBlockMatchQCOM";
1056
1057    default: return "Bad";
1058    }
1059}
1060
1061const char* OpcodeString(int op)
1062{
1063    switch (op) {
1064    case 0:   return "OpNop";
1065    case 1:   return "OpUndef";
1066    case 2:   return "OpSourceContinued";
1067    case 3:   return "OpSource";
1068    case 4:   return "OpSourceExtension";
1069    case 5:   return "OpName";
1070    case 6:   return "OpMemberName";
1071    case 7:   return "OpString";
1072    case 8:   return "OpLine";
1073    case 9:   return "Bad";
1074    case 10:  return "OpExtension";
1075    case 11:  return "OpExtInstImport";
1076    case 12:  return "OpExtInst";
1077    case 13:  return "Bad";
1078    case 14:  return "OpMemoryModel";
1079    case 15:  return "OpEntryPoint";
1080    case 16:  return "OpExecutionMode";
1081    case 17:  return "OpCapability";
1082    case 18:  return "Bad";
1083    case 19:  return "OpTypeVoid";
1084    case 20:  return "OpTypeBool";
1085    case 21:  return "OpTypeInt";
1086    case 22:  return "OpTypeFloat";
1087    case 23:  return "OpTypeVector";
1088    case 24:  return "OpTypeMatrix";
1089    case 25:  return "OpTypeImage";
1090    case 26:  return "OpTypeSampler";
1091    case 27:  return "OpTypeSampledImage";
1092    case 28:  return "OpTypeArray";
1093    case 29:  return "OpTypeRuntimeArray";
1094    case 30:  return "OpTypeStruct";
1095    case 31:  return "OpTypeOpaque";
1096    case 32:  return "OpTypePointer";
1097    case 33:  return "OpTypeFunction";
1098    case 34:  return "OpTypeEvent";
1099    case 35:  return "OpTypeDeviceEvent";
1100    case 36:  return "OpTypeReserveId";
1101    case 37:  return "OpTypeQueue";
1102    case 38:  return "OpTypePipe";
1103    case 39:  return "OpTypeForwardPointer";
1104    case 40:  return "Bad";
1105    case 41:  return "OpConstantTrue";
1106    case 42:  return "OpConstantFalse";
1107    case 43:  return "OpConstant";
1108    case 44:  return "OpConstantComposite";
1109    case 45:  return "OpConstantSampler";
1110    case 46:  return "OpConstantNull";
1111    case 47:  return "Bad";
1112    case 48:  return "OpSpecConstantTrue";
1113    case 49:  return "OpSpecConstantFalse";
1114    case 50:  return "OpSpecConstant";
1115    case 51:  return "OpSpecConstantComposite";
1116    case 52:  return "OpSpecConstantOp";
1117    case 53:  return "Bad";
1118    case 54:  return "OpFunction";
1119    case 55:  return "OpFunctionParameter";
1120    case 56:  return "OpFunctionEnd";
1121    case 57:  return "OpFunctionCall";
1122    case 58:  return "Bad";
1123    case 59:  return "OpVariable";
1124    case 60:  return "OpImageTexelPointer";
1125    case 61:  return "OpLoad";
1126    case 62:  return "OpStore";
1127    case 63:  return "OpCopyMemory";
1128    case 64:  return "OpCopyMemorySized";
1129    case 65:  return "OpAccessChain";
1130    case 66:  return "OpInBoundsAccessChain";
1131    case 67:  return "OpPtrAccessChain";
1132    case 68:  return "OpArrayLength";
1133    case 69:  return "OpGenericPtrMemSemantics";
1134    case 70:  return "OpInBoundsPtrAccessChain";
1135    case 71:  return "OpDecorate";
1136    case 72:  return "OpMemberDecorate";
1137    case 73:  return "OpDecorationGroup";
1138    case 74:  return "OpGroupDecorate";
1139    case 75:  return "OpGroupMemberDecorate";
1140    case 76:  return "Bad";
1141    case 77:  return "OpVectorExtractDynamic";
1142    case 78:  return "OpVectorInsertDynamic";
1143    case 79:  return "OpVectorShuffle";
1144    case 80:  return "OpCompositeConstruct";
1145    case 81:  return "OpCompositeExtract";
1146    case 82:  return "OpCompositeInsert";
1147    case 83:  return "OpCopyObject";
1148    case 84:  return "OpTranspose";
1149    case OpCopyLogical: return "OpCopyLogical";
1150    case 85:  return "Bad";
1151    case 86:  return "OpSampledImage";
1152    case 87:  return "OpImageSampleImplicitLod";
1153    case 88:  return "OpImageSampleExplicitLod";
1154    case 89:  return "OpImageSampleDrefImplicitLod";
1155    case 90:  return "OpImageSampleDrefExplicitLod";
1156    case 91:  return "OpImageSampleProjImplicitLod";
1157    case 92:  return "OpImageSampleProjExplicitLod";
1158    case 93:  return "OpImageSampleProjDrefImplicitLod";
1159    case 94:  return "OpImageSampleProjDrefExplicitLod";
1160    case 95:  return "OpImageFetch";
1161    case 96:  return "OpImageGather";
1162    case 97:  return "OpImageDrefGather";
1163    case 98:  return "OpImageRead";
1164    case 99:  return "OpImageWrite";
1165    case 100: return "OpImage";
1166    case 101: return "OpImageQueryFormat";
1167    case 102: return "OpImageQueryOrder";
1168    case 103: return "OpImageQuerySizeLod";
1169    case 104: return "OpImageQuerySize";
1170    case 105: return "OpImageQueryLod";
1171    case 106: return "OpImageQueryLevels";
1172    case 107: return "OpImageQuerySamples";
1173    case 108: return "Bad";
1174    case 109: return "OpConvertFToU";
1175    case 110: return "OpConvertFToS";
1176    case 111: return "OpConvertSToF";
1177    case 112: return "OpConvertUToF";
1178    case 113: return "OpUConvert";
1179    case 114: return "OpSConvert";
1180    case 115: return "OpFConvert";
1181    case 116: return "OpQuantizeToF16";
1182    case 117: return "OpConvertPtrToU";
1183    case 118: return "OpSatConvertSToU";
1184    case 119: return "OpSatConvertUToS";
1185    case 120: return "OpConvertUToPtr";
1186    case 121: return "OpPtrCastToGeneric";
1187    case 122: return "OpGenericCastToPtr";
1188    case 123: return "OpGenericCastToPtrExplicit";
1189    case 124: return "OpBitcast";
1190    case 125: return "Bad";
1191    case 126: return "OpSNegate";
1192    case 127: return "OpFNegate";
1193    case 128: return "OpIAdd";
1194    case 129: return "OpFAdd";
1195    case 130: return "OpISub";
1196    case 131: return "OpFSub";
1197    case 132: return "OpIMul";
1198    case 133: return "OpFMul";
1199    case 134: return "OpUDiv";
1200    case 135: return "OpSDiv";
1201    case 136: return "OpFDiv";
1202    case 137: return "OpUMod";
1203    case 138: return "OpSRem";
1204    case 139: return "OpSMod";
1205    case 140: return "OpFRem";
1206    case 141: return "OpFMod";
1207    case 142: return "OpVectorTimesScalar";
1208    case 143: return "OpMatrixTimesScalar";
1209    case 144: return "OpVectorTimesMatrix";
1210    case 145: return "OpMatrixTimesVector";
1211    case 146: return "OpMatrixTimesMatrix";
1212    case 147: return "OpOuterProduct";
1213    case 148: return "OpDot";
1214    case 149: return "OpIAddCarry";
1215    case 150: return "OpISubBorrow";
1216    case 151: return "OpUMulExtended";
1217    case 152: return "OpSMulExtended";
1218    case 153: return "Bad";
1219    case 154: return "OpAny";
1220    case 155: return "OpAll";
1221    case 156: return "OpIsNan";
1222    case 157: return "OpIsInf";
1223    case 158: return "OpIsFinite";
1224    case 159: return "OpIsNormal";
1225    case 160: return "OpSignBitSet";
1226    case 161: return "OpLessOrGreater";
1227    case 162: return "OpOrdered";
1228    case 163: return "OpUnordered";
1229    case 164: return "OpLogicalEqual";
1230    case 165: return "OpLogicalNotEqual";
1231    case 166: return "OpLogicalOr";
1232    case 167: return "OpLogicalAnd";
1233    case 168: return "OpLogicalNot";
1234    case 169: return "OpSelect";
1235    case 170: return "OpIEqual";
1236    case 171: return "OpINotEqual";
1237    case 172: return "OpUGreaterThan";
1238    case 173: return "OpSGreaterThan";
1239    case 174: return "OpUGreaterThanEqual";
1240    case 175: return "OpSGreaterThanEqual";
1241    case 176: return "OpULessThan";
1242    case 177: return "OpSLessThan";
1243    case 178: return "OpULessThanEqual";
1244    case 179: return "OpSLessThanEqual";
1245    case 180: return "OpFOrdEqual";
1246    case 181: return "OpFUnordEqual";
1247    case 182: return "OpFOrdNotEqual";
1248    case 183: return "OpFUnordNotEqual";
1249    case 184: return "OpFOrdLessThan";
1250    case 185: return "OpFUnordLessThan";
1251    case 186: return "OpFOrdGreaterThan";
1252    case 187: return "OpFUnordGreaterThan";
1253    case 188: return "OpFOrdLessThanEqual";
1254    case 189: return "OpFUnordLessThanEqual";
1255    case 190: return "OpFOrdGreaterThanEqual";
1256    case 191: return "OpFUnordGreaterThanEqual";
1257    case 192: return "Bad";
1258    case 193: return "Bad";
1259    case 194: return "OpShiftRightLogical";
1260    case 195: return "OpShiftRightArithmetic";
1261    case 196: return "OpShiftLeftLogical";
1262    case 197: return "OpBitwiseOr";
1263    case 198: return "OpBitwiseXor";
1264    case 199: return "OpBitwiseAnd";
1265    case 200: return "OpNot";
1266    case 201: return "OpBitFieldInsert";
1267    case 202: return "OpBitFieldSExtract";
1268    case 203: return "OpBitFieldUExtract";
1269    case 204: return "OpBitReverse";
1270    case 205: return "OpBitCount";
1271    case 206: return "Bad";
1272    case 207: return "OpDPdx";
1273    case 208: return "OpDPdy";
1274    case 209: return "OpFwidth";
1275    case 210: return "OpDPdxFine";
1276    case 211: return "OpDPdyFine";
1277    case 212: return "OpFwidthFine";
1278    case 213: return "OpDPdxCoarse";
1279    case 214: return "OpDPdyCoarse";
1280    case 215: return "OpFwidthCoarse";
1281    case 216: return "Bad";
1282    case 217: return "Bad";
1283    case 218: return "OpEmitVertex";
1284    case 219: return "OpEndPrimitive";
1285    case 220: return "OpEmitStreamVertex";
1286    case 221: return "OpEndStreamPrimitive";
1287    case 222: return "Bad";
1288    case 223: return "Bad";
1289    case 224: return "OpControlBarrier";
1290    case 225: return "OpMemoryBarrier";
1291    case 226: return "Bad";
1292    case 227: return "OpAtomicLoad";
1293    case 228: return "OpAtomicStore";
1294    case 229: return "OpAtomicExchange";
1295    case 230: return "OpAtomicCompareExchange";
1296    case 231: return "OpAtomicCompareExchangeWeak";
1297    case 232: return "OpAtomicIIncrement";
1298    case 233: return "OpAtomicIDecrement";
1299    case 234: return "OpAtomicIAdd";
1300    case 235: return "OpAtomicISub";
1301    case 236: return "OpAtomicSMin";
1302    case 237: return "OpAtomicUMin";
1303    case 238: return "OpAtomicSMax";
1304    case 239: return "OpAtomicUMax";
1305    case 240: return "OpAtomicAnd";
1306    case 241: return "OpAtomicOr";
1307    case 242: return "OpAtomicXor";
1308    case 243: return "Bad";
1309    case 244: return "Bad";
1310    case 245: return "OpPhi";
1311    case 246: return "OpLoopMerge";
1312    case 247: return "OpSelectionMerge";
1313    case 248: return "OpLabel";
1314    case 249: return "OpBranch";
1315    case 250: return "OpBranchConditional";
1316    case 251: return "OpSwitch";
1317    case 252: return "OpKill";
1318    case 253: return "OpReturn";
1319    case 254: return "OpReturnValue";
1320    case 255: return "OpUnreachable";
1321    case 256: return "OpLifetimeStart";
1322    case 257: return "OpLifetimeStop";
1323    case 258: return "Bad";
1324    case 259: return "OpGroupAsyncCopy";
1325    case 260: return "OpGroupWaitEvents";
1326    case 261: return "OpGroupAll";
1327    case 262: return "OpGroupAny";
1328    case 263: return "OpGroupBroadcast";
1329    case 264: return "OpGroupIAdd";
1330    case 265: return "OpGroupFAdd";
1331    case 266: return "OpGroupFMin";
1332    case 267: return "OpGroupUMin";
1333    case 268: return "OpGroupSMin";
1334    case 269: return "OpGroupFMax";
1335    case 270: return "OpGroupUMax";
1336    case 271: return "OpGroupSMax";
1337    case 272: return "Bad";
1338    case 273: return "Bad";
1339    case 274: return "OpReadPipe";
1340    case 275: return "OpWritePipe";
1341    case 276: return "OpReservedReadPipe";
1342    case 277: return "OpReservedWritePipe";
1343    case 278: return "OpReserveReadPipePackets";
1344    case 279: return "OpReserveWritePipePackets";
1345    case 280: return "OpCommitReadPipe";
1346    case 281: return "OpCommitWritePipe";
1347    case 282: return "OpIsValidReserveId";
1348    case 283: return "OpGetNumPipePackets";
1349    case 284: return "OpGetMaxPipePackets";
1350    case 285: return "OpGroupReserveReadPipePackets";
1351    case 286: return "OpGroupReserveWritePipePackets";
1352    case 287: return "OpGroupCommitReadPipe";
1353    case 288: return "OpGroupCommitWritePipe";
1354    case 289: return "Bad";
1355    case 290: return "Bad";
1356    case 291: return "OpEnqueueMarker";
1357    case 292: return "OpEnqueueKernel";
1358    case 293: return "OpGetKernelNDrangeSubGroupCount";
1359    case 294: return "OpGetKernelNDrangeMaxSubGroupSize";
1360    case 295: return "OpGetKernelWorkGroupSize";
1361    case 296: return "OpGetKernelPreferredWorkGroupSizeMultiple";
1362    case 297: return "OpRetainEvent";
1363    case 298: return "OpReleaseEvent";
1364    case 299: return "OpCreateUserEvent";
1365    case 300: return "OpIsValidEvent";
1366    case 301: return "OpSetUserEventStatus";
1367    case 302: return "OpCaptureEventProfilingInfo";
1368    case 303: return "OpGetDefaultQueue";
1369    case 304: return "OpBuildNDRange";
1370    case 305: return "OpImageSparseSampleImplicitLod";
1371    case 306: return "OpImageSparseSampleExplicitLod";
1372    case 307: return "OpImageSparseSampleDrefImplicitLod";
1373    case 308: return "OpImageSparseSampleDrefExplicitLod";
1374    case 309: return "OpImageSparseSampleProjImplicitLod";
1375    case 310: return "OpImageSparseSampleProjExplicitLod";
1376    case 311: return "OpImageSparseSampleProjDrefImplicitLod";
1377    case 312: return "OpImageSparseSampleProjDrefExplicitLod";
1378    case 313: return "OpImageSparseFetch";
1379    case 314: return "OpImageSparseGather";
1380    case 315: return "OpImageSparseDrefGather";
1381    case 316: return "OpImageSparseTexelsResident";
1382    case 317: return "OpNoLine";
1383    case 318: return "OpAtomicFlagTestAndSet";
1384    case 319: return "OpAtomicFlagClear";
1385    case 320: return "OpImageSparseRead";
1386
1387    case OpModuleProcessed: return "OpModuleProcessed";
1388    case OpExecutionModeId: return "OpExecutionModeId";
1389    case OpDecorateId:      return "OpDecorateId";
1390
1391    case 333: return "OpGroupNonUniformElect";
1392    case 334: return "OpGroupNonUniformAll";
1393    case 335: return "OpGroupNonUniformAny";
1394    case 336: return "OpGroupNonUniformAllEqual";
1395    case 337: return "OpGroupNonUniformBroadcast";
1396    case 338: return "OpGroupNonUniformBroadcastFirst";
1397    case 339: return "OpGroupNonUniformBallot";
1398    case 340: return "OpGroupNonUniformInverseBallot";
1399    case 341: return "OpGroupNonUniformBallotBitExtract";
1400    case 342: return "OpGroupNonUniformBallotBitCount";
1401    case 343: return "OpGroupNonUniformBallotFindLSB";
1402    case 344: return "OpGroupNonUniformBallotFindMSB";
1403    case 345: return "OpGroupNonUniformShuffle";
1404    case 346: return "OpGroupNonUniformShuffleXor";
1405    case 347: return "OpGroupNonUniformShuffleUp";
1406    case 348: return "OpGroupNonUniformShuffleDown";
1407    case 349: return "OpGroupNonUniformIAdd";
1408    case 350: return "OpGroupNonUniformFAdd";
1409    case 351: return "OpGroupNonUniformIMul";
1410    case 352: return "OpGroupNonUniformFMul";
1411    case 353: return "OpGroupNonUniformSMin";
1412    case 354: return "OpGroupNonUniformUMin";
1413    case 355: return "OpGroupNonUniformFMin";
1414    case 356: return "OpGroupNonUniformSMax";
1415    case 357: return "OpGroupNonUniformUMax";
1416    case 358: return "OpGroupNonUniformFMax";
1417    case 359: return "OpGroupNonUniformBitwiseAnd";
1418    case 360: return "OpGroupNonUniformBitwiseOr";
1419    case 361: return "OpGroupNonUniformBitwiseXor";
1420    case 362: return "OpGroupNonUniformLogicalAnd";
1421    case 363: return "OpGroupNonUniformLogicalOr";
1422    case 364: return "OpGroupNonUniformLogicalXor";
1423    case 365: return "OpGroupNonUniformQuadBroadcast";
1424    case 366: return "OpGroupNonUniformQuadSwap";
1425
1426    case OpTerminateInvocation: return "OpTerminateInvocation";
1427
1428    case 4421: return "OpSubgroupBallotKHR";
1429    case 4422: return "OpSubgroupFirstInvocationKHR";
1430    case 4428: return "OpSubgroupAllKHR";
1431    case 4429: return "OpSubgroupAnyKHR";
1432    case 4430: return "OpSubgroupAllEqualKHR";
1433    case 4432: return "OpSubgroupReadInvocationKHR";
1434
1435    case OpAtomicFAddEXT: return "OpAtomicFAddEXT";
1436    case OpAtomicFMinEXT: return "OpAtomicFMinEXT";
1437    case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
1438
1439    case 5000: return "OpGroupIAddNonUniformAMD";
1440    case 5001: return "OpGroupFAddNonUniformAMD";
1441    case 5002: return "OpGroupFMinNonUniformAMD";
1442    case 5003: return "OpGroupUMinNonUniformAMD";
1443    case 5004: return "OpGroupSMinNonUniformAMD";
1444    case 5005: return "OpGroupFMaxNonUniformAMD";
1445    case 5006: return "OpGroupUMaxNonUniformAMD";
1446    case 5007: return "OpGroupSMaxNonUniformAMD";
1447
1448    case 5011: return "OpFragmentMaskFetchAMD";
1449    case 5012: return "OpFragmentFetchAMD";
1450
1451    case OpReadClockKHR:               return "OpReadClockKHR";
1452
1453    case OpDecorateStringGOOGLE:       return "OpDecorateStringGOOGLE";
1454    case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
1455
1456    case OpReportIntersectionKHR:             return "OpReportIntersectionKHR";
1457    case OpIgnoreIntersectionNV:              return "OpIgnoreIntersectionNV";
1458    case OpIgnoreIntersectionKHR:             return "OpIgnoreIntersectionKHR";
1459    case OpTerminateRayNV:                    return "OpTerminateRayNV";
1460    case OpTerminateRayKHR:                   return "OpTerminateRayKHR";
1461    case OpTraceNV:                           return "OpTraceNV";
1462    case OpTraceRayMotionNV:                  return "OpTraceRayMotionNV";
1463    case OpTraceRayKHR:                       return "OpTraceRayKHR";
1464    case OpTypeAccelerationStructureKHR:      return "OpTypeAccelerationStructureKHR";
1465    case OpExecuteCallableNV:                 return "OpExecuteCallableNV";
1466    case OpExecuteCallableKHR:                return "OpExecuteCallableKHR";
1467    case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
1468
1469    case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
1470    case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
1471    case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
1472    case OpEmitMeshTasksEXT:                 return "OpEmitMeshTasksEXT";
1473    case OpSetMeshOutputsEXT:                return "OpSetMeshOutputsEXT";
1474
1475    case OpTypeRayQueryKHR:                                                   return "OpTypeRayQueryKHR";
1476    case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
1477    case OpRayQueryTerminateKHR:                                              return "OpRayQueryTerminateKHR";
1478    case OpRayQueryGenerateIntersectionKHR:                                   return "OpRayQueryGenerateIntersectionKHR";
1479    case OpRayQueryConfirmIntersectionKHR:                                    return "OpRayQueryConfirmIntersectionKHR";
1480    case OpRayQueryProceedKHR:                                                return "OpRayQueryProceedKHR";
1481    case OpRayQueryGetIntersectionTypeKHR:                                    return "OpRayQueryGetIntersectionTypeKHR";
1482    case OpRayQueryGetRayTMinKHR:                                             return "OpRayQueryGetRayTMinKHR";
1483    case OpRayQueryGetRayFlagsKHR:                                            return "OpRayQueryGetRayFlagsKHR";
1484    case OpRayQueryGetIntersectionTKHR:                                       return "OpRayQueryGetIntersectionTKHR";
1485    case OpRayQueryGetIntersectionInstanceCustomIndexKHR:                     return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
1486    case OpRayQueryGetIntersectionInstanceIdKHR:                              return "OpRayQueryGetIntersectionInstanceIdKHR";
1487    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:  return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
1488    case OpRayQueryGetIntersectionGeometryIndexKHR:                           return "OpRayQueryGetIntersectionGeometryIndexKHR";
1489    case OpRayQueryGetIntersectionPrimitiveIndexKHR:                          return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
1490    case OpRayQueryGetIntersectionBarycentricsKHR:                            return "OpRayQueryGetIntersectionBarycentricsKHR";
1491    case OpRayQueryGetIntersectionFrontFaceKHR:                               return "OpRayQueryGetIntersectionFrontFaceKHR";
1492    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR:                     return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
1493    case OpRayQueryGetIntersectionObjectRayDirectionKHR:                      return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
1494    case OpRayQueryGetIntersectionObjectRayOriginKHR:                         return "OpRayQueryGetIntersectionObjectRayOriginKHR";
1495    case OpRayQueryGetWorldRayDirectionKHR:                                   return "OpRayQueryGetWorldRayDirectionKHR";
1496    case OpRayQueryGetWorldRayOriginKHR:                                      return "OpRayQueryGetWorldRayOriginKHR";
1497    case OpRayQueryGetIntersectionObjectToWorldKHR:                           return "OpRayQueryGetIntersectionObjectToWorldKHR";
1498    case OpRayQueryGetIntersectionWorldToObjectKHR:                           return "OpRayQueryGetIntersectionWorldToObjectKHR";
1499    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR:                 return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
1500
1501    case OpTypeCooperativeMatrixNV:         return "OpTypeCooperativeMatrixNV";
1502    case OpCooperativeMatrixLoadNV:         return "OpCooperativeMatrixLoadNV";
1503    case OpCooperativeMatrixStoreNV:        return "OpCooperativeMatrixStoreNV";
1504    case OpCooperativeMatrixMulAddNV:       return "OpCooperativeMatrixMulAddNV";
1505    case OpCooperativeMatrixLengthNV:       return "OpCooperativeMatrixLengthNV";
1506    case OpTypeCooperativeMatrixKHR:        return "OpTypeCooperativeMatrixKHR";
1507    case OpCooperativeMatrixLoadKHR:        return "OpCooperativeMatrixLoadKHR";
1508    case OpCooperativeMatrixStoreKHR:       return "OpCooperativeMatrixStoreKHR";
1509    case OpCooperativeMatrixMulAddKHR:      return "OpCooperativeMatrixMulAddKHR";
1510    case OpCooperativeMatrixLengthKHR:      return "OpCooperativeMatrixLengthKHR";
1511    case OpDemoteToHelperInvocationEXT:     return "OpDemoteToHelperInvocationEXT";
1512    case OpIsHelperInvocationEXT:           return "OpIsHelperInvocationEXT";
1513
1514    case OpBeginInvocationInterlockEXT:     return "OpBeginInvocationInterlockEXT";
1515    case OpEndInvocationInterlockEXT:       return "OpEndInvocationInterlockEXT";
1516
1517    case OpTypeHitObjectNV:                     return "OpTypeHitObjectNV";
1518    case OpHitObjectTraceRayNV:                 return "OpHitObjectTraceRayNV";
1519    case OpHitObjectTraceRayMotionNV:           return "OpHitObjectTraceRayMotionNV";
1520    case OpHitObjectRecordHitNV:                return "OpHitObjectRecordHitNV";
1521    case OpHitObjectRecordHitMotionNV:          return "OpHitObjectRecordHitMotionNV";
1522    case OpHitObjectRecordHitWithIndexNV:       return "OpHitObjectRecordHitWithIndexNV";
1523    case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
1524    case OpHitObjectRecordMissNV:               return "OpHitObjectRecordMissNV";
1525    case OpHitObjectRecordMissMotionNV:         return "OpHitObjectRecordMissMotionNV";
1526    case OpHitObjectRecordEmptyNV:              return "OpHitObjectRecordEmptyNV";
1527    case OpHitObjectExecuteShaderNV:            return "OpHitObjectExecuteShaderNV";
1528    case OpReorderThreadWithHintNV:             return "OpReorderThreadWithHintNV";
1529    case OpReorderThreadWithHitObjectNV:        return "OpReorderThreadWithHitObjectNV";
1530    case OpHitObjectGetCurrentTimeNV:           return "OpHitObjectGetCurrentTimeNV";
1531    case OpHitObjectGetAttributesNV:            return "OpHitObjectGetAttributesNV";
1532    case OpHitObjectGetHitKindNV:               return "OpHitObjectGetFrontFaceNV";
1533    case OpHitObjectGetPrimitiveIndexNV:        return "OpHitObjectGetPrimitiveIndexNV";
1534    case OpHitObjectGetGeometryIndexNV:         return "OpHitObjectGetGeometryIndexNV";
1535    case OpHitObjectGetInstanceIdNV:            return "OpHitObjectGetInstanceIdNV";
1536    case OpHitObjectGetInstanceCustomIndexNV:   return "OpHitObjectGetInstanceCustomIndexNV";
1537    case OpHitObjectGetObjectRayDirectionNV:    return "OpHitObjectGetObjectRayDirectionNV";
1538    case OpHitObjectGetObjectRayOriginNV:       return "OpHitObjectGetObjectRayOriginNV";
1539    case OpHitObjectGetWorldRayDirectionNV:     return "OpHitObjectGetWorldRayDirectionNV";
1540    case OpHitObjectGetWorldRayOriginNV:        return "OpHitObjectGetWorldRayOriginNV";
1541    case OpHitObjectGetWorldToObjectNV:         return "OpHitObjectGetWorldToObjectNV";
1542    case OpHitObjectGetObjectToWorldNV:         return "OpHitObjectGetObjectToWorldNV";
1543    case OpHitObjectGetRayTMaxNV:               return "OpHitObjectGetRayTMaxNV";
1544    case OpHitObjectGetRayTMinNV:               return "OpHitObjectGetRayTMinNV";
1545    case OpHitObjectIsEmptyNV:                  return "OpHitObjectIsEmptyNV";
1546    case OpHitObjectIsHitNV:                    return "OpHitObjectIsHitNV";
1547    case OpHitObjectIsMissNV:                   return "OpHitObjectIsMissNV";
1548    case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
1549    case OpHitObjectGetShaderRecordBufferHandleNV:   return "OpHitObjectGetShaderRecordBufferHandleNV";
1550
1551    case OpFetchMicroTriangleVertexBarycentricNV:       return "OpFetchMicroTriangleVertexBarycentricNV";
1552    case OpFetchMicroTriangleVertexPositionNV:    return "OpFetchMicroTriangleVertexPositionNV";
1553
1554    case OpColorAttachmentReadEXT:          return "OpColorAttachmentReadEXT";
1555    case OpDepthAttachmentReadEXT:          return "OpDepthAttachmentReadEXT";
1556    case OpStencilAttachmentReadEXT:        return "OpStencilAttachmentReadEXT";
1557
1558    case OpImageSampleWeightedQCOM:         return "OpImageSampleWeightedQCOM";
1559    case OpImageBoxFilterQCOM:              return "OpImageBoxFilterQCOM";
1560    case OpImageBlockMatchSADQCOM:          return "OpImageBlockMatchSADQCOM";
1561    case OpImageBlockMatchSSDQCOM:          return "OpImageBlockMatchSSDQCOM";
1562
1563    default:
1564        return "Bad";
1565    }
1566}
1567
1568// The set of objects that hold all the instruction/operand
1569// parameterization information.
1570InstructionParameters InstructionDesc[OpCodeMask + 1];
1571OperandParameters ExecutionModeOperands[ExecutionModeCeiling];
1572OperandParameters DecorationOperands[DecorationCeiling];
1573
1574EnumDefinition OperandClassParams[OperandCount];
1575EnumParameters ExecutionModeParams[ExecutionModeCeiling];
1576EnumParameters ImageOperandsParams[ImageOperandsCeiling];
1577EnumParameters DecorationParams[DecorationCeiling];
1578EnumParameters LoopControlParams[FunctionControlCeiling];
1579EnumParameters SelectionControlParams[SelectControlCeiling];
1580EnumParameters FunctionControlParams[FunctionControlCeiling];
1581EnumParameters MemoryAccessParams[MemoryAccessCeiling];
1582EnumParameters CooperativeMatrixOperandsParams[CooperativeMatrixOperandsCeiling];
1583
1584// Set up all the parameterizing descriptions of the opcodes, operands, etc.
1585void Parameterize()
1586{
1587    // only do this once.
1588    static std::once_flag initialized;
1589    std::call_once(initialized, [](){
1590
1591        // Exceptions to having a result <id> and a resulting type <id>.
1592        // (Everything is initialized to have both).
1593
1594        InstructionDesc[OpNop].setResultAndType(false, false);
1595        InstructionDesc[OpSource].setResultAndType(false, false);
1596        InstructionDesc[OpSourceContinued].setResultAndType(false, false);
1597        InstructionDesc[OpSourceExtension].setResultAndType(false, false);
1598        InstructionDesc[OpExtension].setResultAndType(false, false);
1599        InstructionDesc[OpExtInstImport].setResultAndType(true, false);
1600        InstructionDesc[OpCapability].setResultAndType(false, false);
1601        InstructionDesc[OpMemoryModel].setResultAndType(false, false);
1602        InstructionDesc[OpEntryPoint].setResultAndType(false, false);
1603        InstructionDesc[OpExecutionMode].setResultAndType(false, false);
1604        InstructionDesc[OpExecutionModeId].setResultAndType(false, false);
1605        InstructionDesc[OpTypeVoid].setResultAndType(true, false);
1606        InstructionDesc[OpTypeBool].setResultAndType(true, false);
1607        InstructionDesc[OpTypeInt].setResultAndType(true, false);
1608        InstructionDesc[OpTypeFloat].setResultAndType(true, false);
1609        InstructionDesc[OpTypeVector].setResultAndType(true, false);
1610        InstructionDesc[OpTypeMatrix].setResultAndType(true, false);
1611        InstructionDesc[OpTypeImage].setResultAndType(true, false);
1612        InstructionDesc[OpTypeSampler].setResultAndType(true, false);
1613        InstructionDesc[OpTypeSampledImage].setResultAndType(true, false);
1614        InstructionDesc[OpTypeArray].setResultAndType(true, false);
1615        InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false);
1616        InstructionDesc[OpTypeStruct].setResultAndType(true, false);
1617        InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
1618        InstructionDesc[OpTypePointer].setResultAndType(true, false);
1619        InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
1620        InstructionDesc[OpTypeFunction].setResultAndType(true, false);
1621        InstructionDesc[OpTypeEvent].setResultAndType(true, false);
1622        InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
1623        InstructionDesc[OpTypeReserveId].setResultAndType(true, false);
1624        InstructionDesc[OpTypeQueue].setResultAndType(true, false);
1625        InstructionDesc[OpTypePipe].setResultAndType(true, false);
1626        InstructionDesc[OpFunctionEnd].setResultAndType(false, false);
1627        InstructionDesc[OpStore].setResultAndType(false, false);
1628        InstructionDesc[OpImageWrite].setResultAndType(false, false);
1629        InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
1630        InstructionDesc[OpDecorate].setResultAndType(false, false);
1631        InstructionDesc[OpDecorateId].setResultAndType(false, false);
1632        InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
1633        InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
1634        InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
1635        InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
1636        InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
1637        InstructionDesc[OpName].setResultAndType(false, false);
1638        InstructionDesc[OpMemberName].setResultAndType(false, false);
1639        InstructionDesc[OpString].setResultAndType(true, false);
1640        InstructionDesc[OpLine].setResultAndType(false, false);
1641        InstructionDesc[OpNoLine].setResultAndType(false, false);
1642        InstructionDesc[OpCopyMemory].setResultAndType(false, false);
1643        InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
1644        InstructionDesc[OpEmitVertex].setResultAndType(false, false);
1645        InstructionDesc[OpEndPrimitive].setResultAndType(false, false);
1646        InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false);
1647        InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false);
1648        InstructionDesc[OpControlBarrier].setResultAndType(false, false);
1649        InstructionDesc[OpMemoryBarrier].setResultAndType(false, false);
1650        InstructionDesc[OpAtomicStore].setResultAndType(false, false);
1651        InstructionDesc[OpLoopMerge].setResultAndType(false, false);
1652        InstructionDesc[OpSelectionMerge].setResultAndType(false, false);
1653        InstructionDesc[OpLabel].setResultAndType(true, false);
1654        InstructionDesc[OpBranch].setResultAndType(false, false);
1655        InstructionDesc[OpBranchConditional].setResultAndType(false, false);
1656        InstructionDesc[OpSwitch].setResultAndType(false, false);
1657        InstructionDesc[OpKill].setResultAndType(false, false);
1658        InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
1659        InstructionDesc[OpReturn].setResultAndType(false, false);
1660        InstructionDesc[OpReturnValue].setResultAndType(false, false);
1661        InstructionDesc[OpUnreachable].setResultAndType(false, false);
1662        InstructionDesc[OpLifetimeStart].setResultAndType(false, false);
1663        InstructionDesc[OpLifetimeStop].setResultAndType(false, false);
1664        InstructionDesc[OpCommitReadPipe].setResultAndType(false, false);
1665        InstructionDesc[OpCommitWritePipe].setResultAndType(false, false);
1666        InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false);
1667        InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false);
1668        InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false);
1669        InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
1670        InstructionDesc[OpRetainEvent].setResultAndType(false, false);
1671        InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
1672        InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
1673        InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
1674        InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
1675        InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
1676        InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
1677        InstructionDesc[OpTypeCooperativeMatrixKHR].setResultAndType(true, false);
1678        InstructionDesc[OpCooperativeMatrixStoreKHR].setResultAndType(false, false);
1679        InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
1680        InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
1681
1682        // Specific additional context-dependent operands
1683
1684        ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
1685
1686        ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
1687        ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
1688        ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'");
1689
1690        ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'");
1691        ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'");
1692        ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'");
1693
1694        ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
1695        ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
1696
1697        DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
1698        DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
1699        DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
1700        DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
1701        DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
1702        DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
1703        DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
1704        DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
1705        DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
1706        DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
1707        DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
1708        DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
1709        DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
1710        DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
1711        DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
1712        DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
1713        DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
1714        DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
1715        DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
1716        DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
1717
1718        OperandClassParams[OperandSource].set(0, SourceString, nullptr);
1719        OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
1720        OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
1721        OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
1722        OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
1723        OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
1724        OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
1725        OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
1726        OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
1727        OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
1728        OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
1729        OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
1730        OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
1731        OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
1732        OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
1733        OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
1734        OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
1735        OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
1736        OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
1737        OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
1738        OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
1739        OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
1740        OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
1741        OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
1742        OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
1743        OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
1744        OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
1745        OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
1746        OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
1747        OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
1748        OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
1749        OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
1750        OperandClassParams[OperandCooperativeMatrixOperands].set(CooperativeMatrixOperandsCeiling, CooperativeMatrixOperandsString, CooperativeMatrixOperandsParams, true);
1751        OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);
1752
1753        // set name of operator, an initial set of <id> style operands, and the description
1754
1755        InstructionDesc[OpSource].operands.push(OperandSource, "");
1756        InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
1757        InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
1758        InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
1759
1760        InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
1761
1762        InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
1763
1764        InstructionDesc[OpName].operands.push(OperandId, "'Target'");
1765        InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'");
1766
1767        InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'");
1768        InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'");
1769        InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'");
1770
1771        InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
1772
1773        InstructionDesc[OpLine].operands.push(OperandId, "'File'");
1774        InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
1775        InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
1776
1777        InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'");
1778
1779        InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'");
1780
1781        InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'");
1782
1783        InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, "");
1784        InstructionDesc[OpMemoryModel].operands.push(OperandMemory, "");
1785
1786        InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
1787        InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
1788        InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
1789        InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
1790
1791        InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
1792        InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
1793        InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
1794
1795        InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'");
1796        InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'");
1797        InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <<Execution_Mode,Execution Mode>>");
1798
1799        InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
1800        InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
1801
1802        InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'");
1803
1804        InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
1805        InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
1806
1807        InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
1808        InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
1809
1810        InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'");
1811        InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, "");
1812        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'");
1813        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'");
1814        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
1815        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
1816        InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
1817        InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
1818
1819        InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
1820
1821        InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
1822        InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
1823
1824        InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
1825
1826        InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
1827
1828        InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
1829
1830        InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
1831        InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
1832
1833        InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
1834        InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
1835
1836        InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
1837
1838        InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
1839        InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
1840
1841        InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'");
1842
1843        InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
1844
1845        InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
1846        InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
1847        InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
1848
1849        InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'");
1850
1851        InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
1852
1853        InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'");
1854        InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
1855
1856        InstructionDesc[OpVariable].operands.push(OperandStorage, "");
1857        InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
1858
1859        InstructionDesc[OpFunction].operands.push(OperandFunction, "");
1860        InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
1861
1862        InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'");
1863        InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
1864
1865        InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'");
1866        InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
1867        InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
1868
1869        InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
1870        InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
1871        InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
1872        InstructionDesc[OpLoad].operands.push(OperandId, "", true);
1873
1874        InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
1875        InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
1876        InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
1877        InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true);
1878        InstructionDesc[OpStore].operands.push(OperandId, "", true);
1879
1880        InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
1881
1882        InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'");
1883        InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
1884        InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
1885
1886        InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
1887        InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
1888        InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
1889
1890        InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
1891        InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
1892        InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
1893
1894        InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
1895        InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
1896        InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
1897        InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
1898
1899        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
1900        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
1901        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
1902        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
1903
1904        InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
1905        InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
1906
1907        InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'");
1908        InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'");
1909
1910        InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'");
1911        InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'");
1912
1913        InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'");
1914        InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'");
1915        InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'");
1916
1917        InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'");
1918        InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'");
1919        InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'");
1920
1921        InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'");
1922
1923        InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'");
1924        InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'");
1925
1926        InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'");
1927        InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'");
1928        InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'");
1929
1930        InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'");
1931
1932        InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
1933        InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
1934        InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
1935
1936        InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
1937        InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
1938        InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
1939        InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
1940
1941        InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
1942        InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
1943
1944        InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
1945
1946        InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
1947        InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
1948        InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
1949        InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
1950
1951        InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
1952        InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
1953        InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
1954        InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
1955        InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
1956
1957        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
1958        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
1959        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
1960        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
1961
1962        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
1963        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
1964        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
1965        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
1966
1967        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
1968        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
1969        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
1970        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
1971        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
1972
1973        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
1974        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
1975        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
1976        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
1977        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
1978
1979        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
1980        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
1981        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
1982        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
1983
1984        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
1985        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
1986        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
1987        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
1988
1989        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
1990        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
1991        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
1992        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
1993        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
1994
1995        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
1996        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
1997        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
1998        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
1999        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
2000
2001        InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
2002        InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
2003        InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
2004        InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
2005
2006        InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
2007        InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
2008        InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
2009        InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
2010        InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
2011
2012        InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
2013        InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
2014        InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
2015        InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
2016        InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
2017
2018        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
2019        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
2020        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
2021        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
2022
2023        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
2024        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
2025        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
2026        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
2027
2028        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
2029        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
2030        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
2031        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
2032        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
2033
2034        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
2035        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
2036        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
2037        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
2038        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
2039
2040        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
2041        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
2042        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
2043        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
2044
2045        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
2046        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
2047        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
2048        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
2049
2050        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
2051        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
2052        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
2053        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
2054        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
2055
2056        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
2057        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
2058        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
2059        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
2060        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
2061
2062        InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
2063        InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
2064        InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
2065        InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
2066
2067        InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
2068        InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
2069        InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
2070        InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
2071        InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
2072
2073        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
2074        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
2075        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
2076        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
2077        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
2078
2079        InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
2080        InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
2081        InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
2082        InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
2083
2084        InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
2085
2086        InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
2087        InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
2088
2089        InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
2090
2091        InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
2092        InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
2093
2094        InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
2095
2096        InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
2097
2098        InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
2099
2100        InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
2101
2102        InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
2103        InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
2104
2105        InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'");
2106        InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'");
2107
2108        InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
2109        InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
2110        InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
2111
2112        InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
2113        InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
2114        InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
2115
2116        InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
2117
2118        InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
2119
2120        InstructionDesc[OpNot].operands.push(OperandId, "'Operand'");
2121
2122        InstructionDesc[OpAny].operands.push(OperandId, "'Vector'");
2123
2124        InstructionDesc[OpAll].operands.push(OperandId, "'Vector'");
2125
2126        InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'");
2127
2128        InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'");
2129
2130        InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'");
2131
2132        InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'");
2133
2134        InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'");
2135
2136        InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'");
2137
2138        InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
2139
2140        InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
2141
2142        InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
2143
2144        InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
2145
2146        InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
2147
2148        InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
2149
2150        InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
2151
2152        InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
2153        InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
2154
2155        InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
2156
2157        InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
2158
2159        InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
2160
2161        InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
2162
2163        InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
2164
2165        InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
2166
2167        InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
2168
2169        InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
2170
2171        InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
2172
2173        InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
2174
2175        InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
2176        InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
2177
2178        InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
2179        InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
2180
2181        InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
2182        InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
2183
2184        InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
2185        InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
2186
2187        InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
2188        InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
2189
2190        InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'");
2191        InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'");
2192
2193        InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'");
2194        InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'");
2195
2196        InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'");
2197        InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'");
2198
2199        InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'");
2200        InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'");
2201
2202        InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'");
2203        InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'");
2204
2205        InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'");
2206        InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'");
2207
2208        InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'");
2209        InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'");
2210
2211        InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'");
2212        InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'");
2213
2214        InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'");
2215        InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'");
2216
2217        InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'");
2218        InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'");
2219
2220        InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'");
2221        InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'");
2222
2223        InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'");
2224        InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'");
2225
2226        InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'");
2227        InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'");
2228
2229        InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
2230        InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
2231
2232        InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
2233        InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
2234
2235        InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
2236        InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
2237
2238        InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
2239        InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
2240
2241        InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
2242        InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
2243
2244        InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
2245        InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
2246
2247        InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
2248        InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
2249
2250        InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
2251        InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
2252
2253        InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
2254        InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
2255
2256        InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
2257        InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
2258
2259        InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
2260        InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
2261
2262        InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
2263        InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
2264
2265        InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'");
2266        InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'");
2267
2268        InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'");
2269        InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'");
2270
2271        InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'");
2272        InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'");
2273
2274        InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'");
2275        InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'");
2276
2277        InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'");
2278        InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'");
2279
2280        InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'");
2281        InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'");
2282
2283        InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'");
2284
2285        InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'");
2286        InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'");
2287
2288        InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'");
2289        InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'");
2290
2291        InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
2292        InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
2293
2294        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
2295        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
2296        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
2297        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
2298
2299        InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
2300        InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
2301        InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
2302
2303        InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
2304        InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
2305        InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
2306
2307        InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
2308
2309        InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
2310
2311        InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'");
2312        InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'");
2313        InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'");
2314
2315        InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'");
2316        InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'");
2317
2318        InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'");
2319        InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'");
2320
2321        InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'");
2322        InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'");
2323
2324        InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'");
2325        InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'");
2326
2327        InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'");
2328        InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'");
2329
2330        InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'");
2331        InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'");
2332
2333        InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'");
2334        InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'");
2335
2336        InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'");
2337        InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'");
2338
2339        InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'");
2340        InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'");
2341
2342        InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'");
2343        InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'");
2344
2345        InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'");
2346        InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'");
2347
2348        InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'");
2349        InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'");
2350
2351        InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'");
2352        InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'");
2353
2354        InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'");
2355        InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'");
2356
2357        InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'");
2358        InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'");
2359
2360        InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'");
2361        InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'");
2362
2363        InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'");
2364        InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'");
2365
2366        InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'");
2367        InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'");
2368
2369        InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
2370        InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
2371
2372        InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
2373        InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
2374
2375        InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
2376        InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
2377
2378        InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
2379        InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
2380
2381        InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
2382
2383        InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
2384
2385        InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
2386
2387        InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
2388
2389        InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
2390
2391        InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
2392
2393        InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
2394
2395        InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
2396
2397        InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
2398
2399        InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
2400
2401        InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
2402
2403        InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
2404        InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
2405        InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
2406
2407        InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'");
2408        InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
2409
2410        InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'");
2411        InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'");
2412        InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'");
2413
2414        InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'");
2415        InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'");
2416        InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'");
2417
2418        InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'");
2419        InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'");
2420        InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'");
2421        InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'");
2422
2423        InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'");
2424        InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'");
2425        InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'");
2426        InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'");
2427
2428        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'");
2429        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'");
2430        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'");
2431        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'");
2432        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'");
2433        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'");
2434
2435        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'");
2436        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'");
2437        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'");
2438        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
2439        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
2440        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
2441
2442        InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
2443        InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
2444        InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'");
2445
2446        InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'");
2447        InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'");
2448        InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'");
2449
2450        InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'");
2451        InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'");
2452        InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
2453        InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
2454
2455        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'");
2456        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'");
2457        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
2458        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
2459
2460        InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
2461        InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
2462        InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
2463        InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'");
2464
2465        InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'");
2466        InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'");
2467        InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'");
2468        InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'");
2469
2470        InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'");
2471        InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'");
2472        InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'");
2473        InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'");
2474
2475        InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'");
2476        InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'");
2477        InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'");
2478        InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'");
2479
2480        InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'");
2481        InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'");
2482        InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
2483        InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
2484
2485        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'");
2486        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'");
2487        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'");
2488        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'");
2489
2490        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'");
2491        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'");
2492        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'");
2493        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'");
2494
2495        InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
2496        InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
2497        InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
2498        InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'");
2499
2500        InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'");
2501        InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'");
2502        InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'");
2503        InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'");
2504
2505        InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'");
2506        InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'");
2507        InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
2508        InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
2509
2510        InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
2511        InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
2512        InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
2513
2514        InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
2515        InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
2516        InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
2517
2518        InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
2519        InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
2520        InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
2521        InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, "");
2522
2523        InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
2524        InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
2525
2526        InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'");
2527
2528        InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'");
2529        InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'");
2530        InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'");
2531        InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'");
2532
2533        InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'");
2534        InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
2535        InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
2536
2537
2538        InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
2539
2540        InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
2541        InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
2542
2543        InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
2544        InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
2545
2546        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
2547        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
2548        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
2549        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
2550        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
2551        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
2552
2553        InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
2554        InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
2555        InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
2556
2557        InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
2558        InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
2559
2560        InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
2561        InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
2562
2563        InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
2564        InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
2565        InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
2566
2567        InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
2568        InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
2569        InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
2570
2571        InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
2572        InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
2573        InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
2574
2575        InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
2576        InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
2577        InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
2578
2579        InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
2580        InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
2581        InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
2582
2583        InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
2584        InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
2585        InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
2586
2587        InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
2588        InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
2589        InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
2590
2591        InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
2592        InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
2593        InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
2594
2595        InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
2596        InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
2597        InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
2598
2599        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
2600        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
2601        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
2602        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
2603
2604        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
2605        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
2606        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
2607        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
2608
2609        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
2610        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
2611        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
2612        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
2613        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
2614        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
2615
2616        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
2617        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
2618        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
2619        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
2620        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
2621        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
2622
2623        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
2624        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
2625        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
2626        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
2627
2628        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
2629        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
2630        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
2631        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
2632
2633        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
2634        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
2635        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
2636        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
2637
2638        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
2639        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
2640        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
2641        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
2642
2643        InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
2644
2645        InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
2646        InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
2647        InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
2648
2649        InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
2650        InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
2651        InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
2652
2653        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
2654        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
2655        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
2656        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
2657        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
2658
2659        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
2660        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
2661        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
2662        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
2663        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
2664
2665        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
2666        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
2667        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
2668        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
2669        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
2670
2671        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
2672        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
2673        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
2674        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
2675        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
2676
2677        InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
2678        InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
2679        InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
2680
2681        InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
2682        InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
2683        InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
2684
2685        InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
2686        InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
2687
2688        InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
2689
2690        InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
2691
2692        InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
2693
2694        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
2695        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
2696        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
2697        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
2698
2699        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
2700        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
2701        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
2702        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
2703
2704        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
2705        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
2706        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
2707        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
2708        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
2709
2710        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
2711        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
2712        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
2713        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
2714        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
2715
2716        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
2717        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
2718        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
2719        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'");
2720        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'");
2721        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'");
2722        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'");
2723        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'");
2724        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'");
2725        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
2726        InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
2727
2728        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
2729        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
2730        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
2731        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
2732
2733        InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
2734
2735        InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
2736        InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
2737
2738        InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
2739        InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
2740
2741        InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
2742        InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
2743
2744        InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
2745        InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
2746        InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
2747
2748        InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
2749        InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
2750
2751        InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
2752        InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
2753
2754        InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
2755        InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
2756
2757        InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
2758        InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
2759        InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
2760
2761        InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
2762        InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
2763        InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
2764
2765        InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
2766        InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
2767
2768        InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
2769        InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
2770
2771        InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
2772        InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
2773        InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
2774
2775        InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
2776        InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
2777        InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
2778
2779        InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
2780        InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
2781        InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
2782
2783        InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
2784        InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
2785        InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
2786
2787        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
2788        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
2789        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
2790        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
2791
2792        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
2793        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
2794        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
2795        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
2796
2797        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
2798        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
2799        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
2800        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
2801
2802        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
2803        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
2804        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
2805        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
2806
2807        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
2808        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
2809        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
2810        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
2811
2812        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
2813        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
2814        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
2815        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
2816
2817        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
2818        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
2819        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
2820        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
2821
2822        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
2823        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
2824        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
2825        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
2826
2827        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
2828        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
2829        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
2830        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
2831
2832        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
2833        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
2834        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
2835        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
2836
2837        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
2838        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
2839        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
2840        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
2841
2842        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
2843        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
2844        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
2845        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
2846
2847        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
2848        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
2849        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
2850        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
2851
2852        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
2853        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
2854        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
2855        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
2856
2857        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
2858        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
2859        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
2860        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
2861
2862        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
2863        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
2864        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
2865        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
2866
2867        InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
2868        InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
2869        InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
2870
2871        InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
2872        InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
2873        InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'");
2874
2875        InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
2876
2877        InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
2878
2879        InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
2880        InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
2881
2882        InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
2883        InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
2884
2885        InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
2886        InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
2887
2888        InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
2889        InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
2890
2891        InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
2892
2893        InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
2894        InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2895        InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
2896
2897        InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
2898        InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2899        InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
2900
2901        InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
2902        InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2903        InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
2904
2905        InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
2906        InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2907        InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
2908
2909        InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
2910        InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2911        InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
2912
2913        InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
2914        InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2915        InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
2916
2917        InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
2918        InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2919        InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
2920
2921        InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
2922        InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
2923        InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
2924
2925        InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
2926        InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
2927
2928        InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
2929        InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
2930        InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
2931
2932        InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
2933
2934        InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
2935
2936        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
2937        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
2938        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
2939        InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
2940        InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
2941        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
2942        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
2943        InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
2944        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
2945        InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
2946        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
2947        InstructionDesc[OpTraceNV].setResultAndType(false, false);
2948
2949        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
2950        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'");
2951        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'");
2952        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
2953        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
2954        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
2955        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'");
2956        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'");
2957        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'");
2958        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'");
2959        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'");
2960        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'");
2961        InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false);
2962
2963        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
2964        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
2965        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
2966        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
2967        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'");
2968        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'");
2969        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'");
2970        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'");
2971        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'");
2972        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'");
2973        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'");
2974        InstructionDesc[OpTraceRayKHR].setResultAndType(false, false);
2975
2976        InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
2977        InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
2978
2979        InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
2980
2981        InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
2982
2983        InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
2984
2985        InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
2986
2987        InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
2988        InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
2989        InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
2990
2991        InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
2992        InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
2993        InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
2994
2995        InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
2996        InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
2997
2998        // Ray Query
2999        InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
3000        InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
3001
3002        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
3003        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
3004        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'");
3005        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'");
3006        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'");
3007        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'");
3008        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'");
3009        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'");
3010        InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false);
3011
3012        InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
3013        InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
3014
3015        InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
3016        InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
3017        InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
3018
3019        InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
3020        InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
3021
3022        InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
3023        InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
3024
3025        InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
3026        InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
3027        InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
3028
3029        InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
3030        InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
3031
3032        InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
3033        InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
3034
3035        InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
3036        InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
3037        InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
3038
3039        InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
3040        InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
3041        InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
3042
3043        InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
3044        InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
3045        InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
3046
3047        InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
3048        InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
3049        InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
3050
3051        InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
3052        InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
3053        InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
3054
3055        InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
3056        InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
3057        InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
3058
3059        InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
3060        InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
3061        InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
3062
3063        InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
3064        InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
3065        InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
3066
3067        InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
3068        InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
3069
3070        InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
3071        InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
3072        InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
3073
3074        InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
3075        InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
3076        InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
3077
3078        InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
3079        InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
3080
3081        InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
3082        InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
3083
3084        InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
3085        InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
3086        InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
3087
3088        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
3089        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
3090        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
3091
3092        InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'RayQuery'");
3093        InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'");
3094        InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].setResultAndType(true, true);
3095
3096        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
3097        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
3098        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
3099        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
3100        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
3101        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
3102
3103        InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
3104        InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
3105
3106        InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'");
3107        InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'");
3108        InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'");
3109        InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'");
3110        InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false);
3111
3112        InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
3113        InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
3114        InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
3115
3116
3117        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
3118        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
3119        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
3120        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
3121
3122        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
3123        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
3124        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
3125        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
3126        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
3127        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
3128
3129        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
3130        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
3131        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
3132        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
3133        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
3134        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
3135        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
3136
3137        InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
3138        InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
3139        InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
3140
3141        InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
3142
3143        InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Component Type'");
3144        InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Scope'");
3145        InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Rows'");
3146        InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Columns'");
3147        InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Use'");
3148
3149        InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Pointer'");
3150        InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Memory Layout'");
3151        InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Stride'");
3152        InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandMemoryAccess, "'Memory Access'");
3153        InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandLiteralNumber, "", true);
3154        InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "", true);
3155
3156        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Pointer'");
3157        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Object'");
3158        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Memory Layout'");
3159        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Stride'");
3160        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandMemoryAccess, "'Memory Access'");
3161        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandLiteralNumber, "", true);
3162        InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "", true);
3163
3164        InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'A'");
3165        InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'B'");
3166        InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'C'");
3167        InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true);
3168
3169        InstructionDesc[OpCooperativeMatrixLengthKHR].operands.push(OperandId, "'Type'");
3170
3171        InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
3172
3173        InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
3174
3175        InstructionDesc[OpTypeHitObjectNV].setResultAndType(true, false);
3176
3177        InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].operands.push(OperandId, "'HitObject'");
3178        InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].setResultAndType(true, true);
3179
3180        InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Hint'");
3181        InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Bits'");
3182        InstructionDesc[OpReorderThreadWithHintNV].setResultAndType(false, false);
3183
3184        InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'HitObject'");
3185        InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Hint'");
3186        InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Bits'");
3187        InstructionDesc[OpReorderThreadWithHitObjectNV].setResultAndType(false, false);
3188
3189        InstructionDesc[OpHitObjectGetCurrentTimeNV].operands.push(OperandId, "'HitObject'");
3190        InstructionDesc[OpHitObjectGetCurrentTimeNV].setResultAndType(true, true);
3191
3192        InstructionDesc[OpHitObjectGetHitKindNV].operands.push(OperandId, "'HitObject'");
3193        InstructionDesc[OpHitObjectGetHitKindNV].setResultAndType(true, true);
3194
3195        InstructionDesc[OpHitObjectGetPrimitiveIndexNV].operands.push(OperandId, "'HitObject'");
3196        InstructionDesc[OpHitObjectGetPrimitiveIndexNV].setResultAndType(true, true);
3197
3198        InstructionDesc[OpHitObjectGetGeometryIndexNV].operands.push(OperandId, "'HitObject'");
3199        InstructionDesc[OpHitObjectGetGeometryIndexNV].setResultAndType(true, true);
3200
3201        InstructionDesc[OpHitObjectGetInstanceIdNV].operands.push(OperandId, "'HitObject'");
3202        InstructionDesc[OpHitObjectGetInstanceIdNV].setResultAndType(true, true);
3203
3204        InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].operands.push(OperandId, "'HitObject'");
3205        InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].setResultAndType(true, true);
3206
3207        InstructionDesc[OpHitObjectGetObjectRayDirectionNV].operands.push(OperandId, "'HitObject'");
3208        InstructionDesc[OpHitObjectGetObjectRayDirectionNV].setResultAndType(true, true);
3209
3210        InstructionDesc[OpHitObjectGetObjectRayOriginNV].operands.push(OperandId, "'HitObject'");
3211        InstructionDesc[OpHitObjectGetObjectRayOriginNV].setResultAndType(true, true);
3212
3213        InstructionDesc[OpHitObjectGetWorldRayDirectionNV].operands.push(OperandId, "'HitObject'");
3214        InstructionDesc[OpHitObjectGetWorldRayDirectionNV].setResultAndType(true, true);
3215
3216        InstructionDesc[OpHitObjectGetWorldRayOriginNV].operands.push(OperandId, "'HitObject'");
3217        InstructionDesc[OpHitObjectGetWorldRayOriginNV].setResultAndType(true, true);
3218
3219        InstructionDesc[OpHitObjectGetWorldToObjectNV].operands.push(OperandId, "'HitObject'");
3220        InstructionDesc[OpHitObjectGetWorldToObjectNV].setResultAndType(true, true);
3221
3222        InstructionDesc[OpHitObjectGetObjectToWorldNV].operands.push(OperandId, "'HitObject'");
3223        InstructionDesc[OpHitObjectGetObjectToWorldNV].setResultAndType(true, true);
3224
3225        InstructionDesc[OpHitObjectGetRayTMaxNV].operands.push(OperandId, "'HitObject'");
3226        InstructionDesc[OpHitObjectGetRayTMaxNV].setResultAndType(true, true);
3227
3228        InstructionDesc[OpHitObjectGetRayTMinNV].operands.push(OperandId, "'HitObject'");
3229        InstructionDesc[OpHitObjectGetRayTMinNV].setResultAndType(true, true);
3230
3231        InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].operands.push(OperandId, "'HitObject'");
3232        InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].setResultAndType(true, true);
3233
3234        InstructionDesc[OpHitObjectIsEmptyNV].operands.push(OperandId, "'HitObject'");
3235        InstructionDesc[OpHitObjectIsEmptyNV].setResultAndType(true, true);
3236
3237        InstructionDesc[OpHitObjectIsHitNV].operands.push(OperandId, "'HitObject'");
3238        InstructionDesc[OpHitObjectIsHitNV].setResultAndType(true, true);
3239
3240        InstructionDesc[OpHitObjectIsMissNV].operands.push(OperandId, "'HitObject'");
3241        InstructionDesc[OpHitObjectIsMissNV].setResultAndType(true, true);
3242
3243        InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObject'");
3244        InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObjectAttribute'");
3245        InstructionDesc[OpHitObjectGetAttributesNV].setResultAndType(false, false);
3246
3247        InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'HitObject'");
3248        InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'Payload'");
3249        InstructionDesc[OpHitObjectExecuteShaderNV].setResultAndType(false, false);
3250
3251        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject'");
3252        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Acceleration Structure'");
3253        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'InstanceId'");
3254        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'PrimitiveId'");
3255        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'GeometryIndex'");
3256        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitKind'");
3257        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Offset'");
3258        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Stride'");
3259        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Origin'");
3260        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMin'");
3261        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Direction'");
3262        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMax'");
3263        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject Attribute'");
3264        InstructionDesc[OpHitObjectRecordHitNV].setResultAndType(false, false);
3265
3266        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject'");
3267        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Acceleration Structure'");
3268        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'InstanceId'");
3269        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'PrimitiveId'");
3270        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'GeometryIndex'");
3271        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitKind'");
3272        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Offset'");
3273        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Stride'");
3274        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Origin'");
3275        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMin'");
3276        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Direction'");
3277        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMax'");
3278        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Current Time'");
3279        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject Attribute'");
3280        InstructionDesc[OpHitObjectRecordHitMotionNV].setResultAndType(false, false);
3281
3282        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject'");
3283        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Acceleration Structure'");
3284        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'InstanceId'");
3285        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'PrimitiveId'");
3286        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'GeometryIndex'");
3287        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitKind'");
3288        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'SBT Record Index'");
3289        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Origin'");
3290        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMin'");
3291        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Direction'");
3292        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMax'");
3293        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject Attribute'");
3294        InstructionDesc[OpHitObjectRecordHitWithIndexNV].setResultAndType(false, false);
3295
3296        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject'");
3297        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Acceleration Structure'");
3298        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'InstanceId'");
3299        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'PrimitiveId'");
3300        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'GeometryIndex'");
3301        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitKind'");
3302        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'SBT Record Index'");
3303        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Origin'");
3304        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMin'");
3305        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Direction'");
3306        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMax'");
3307        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Current Time'");
3308        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject Attribute'");
3309        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].setResultAndType(false, false);
3310
3311        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'HitObject'");
3312        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'SBT Index'");
3313        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Origin'");
3314        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMin'");
3315        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Direction'");
3316        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMax'");
3317        InstructionDesc[OpHitObjectRecordMissNV].setResultAndType(false, false);
3318
3319        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'HitObject'");
3320        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'SBT Index'");
3321        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Origin'");
3322        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMin'");
3323        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Direction'");
3324        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMax'");
3325        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Current Time'");
3326        InstructionDesc[OpHitObjectRecordMissMotionNV].setResultAndType(false, false);
3327
3328        InstructionDesc[OpHitObjectRecordEmptyNV].operands.push(OperandId, "'HitObject'");
3329        InstructionDesc[OpHitObjectRecordEmptyNV].setResultAndType(false, false);
3330
3331        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'HitObject'");
3332        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Acceleration Structure'");
3333        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'RayFlags'");
3334        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Cullmask'");
3335        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Offset'");
3336        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Stride'");
3337        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Miss Index'");
3338        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Origin'");
3339        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMin'");
3340        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Direction'");
3341        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMax'");
3342        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Payload'");
3343        InstructionDesc[OpHitObjectTraceRayNV].setResultAndType(false, false);
3344
3345        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'HitObject'");
3346        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
3347        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'RayFlags'");
3348        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Cullmask'");
3349        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
3350        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
3351        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
3352        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Origin'");
3353        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMin'");
3354        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Direction'");
3355        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMax'");
3356        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'");
3357        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'");
3358        InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false);
3359
3360        InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Acceleration Structure'");
3361        InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Instance ID'");
3362        InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Geometry Index'");
3363        InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Primitive Index'");
3364        InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Barycentrics'");
3365        InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].setResultAndType(true, true);
3366
3367        InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Acceleration Structure'");
3368        InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Instance ID'");
3369        InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Geometry Index'");
3370        InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Primitive Index'");
3371        InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Barycentrics'");
3372        InstructionDesc[OpFetchMicroTriangleVertexPositionNV].setResultAndType(true, true);
3373
3374        InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'");
3375        InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
3376        InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
3377        InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
3378
3379        InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'source texture'");
3380        InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'texture coordinates'");
3381        InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'weights texture'");
3382        InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandImageOperands, "", true);
3383        InstructionDesc[OpImageSampleWeightedQCOM].setResultAndType(true, true);
3384
3385        InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'source texture'");
3386        InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'texture coordinates'");
3387        InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'box size'");
3388        InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandImageOperands, "", true);
3389        InstructionDesc[OpImageBoxFilterQCOM].setResultAndType(true, true);
3390
3391        InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'target texture'");
3392        InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'target coordinates'");
3393        InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'reference texture'");
3394        InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'reference coordinates'");
3395        InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'block size'");
3396        InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandImageOperands, "", true);
3397        InstructionDesc[OpImageBlockMatchSADQCOM].setResultAndType(true, true);
3398
3399        InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'target texture'");
3400        InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'target coordinates'");
3401        InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'reference texture'");
3402        InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'reference coordinates'");
3403        InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'block size'");
3404        InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandImageOperands, "", true);
3405        InstructionDesc[OpImageBlockMatchSSDQCOM].setResultAndType(true, true);
3406    });
3407}
3408
3409}; // end spv namespace
3410