Home | History | Annotate | Download | only in SPIRV
      1 //
      2 // Copyright (C) 2014-2015 LunarG, Inc.
      3 //
      4 // All rights reserved.
      5 //
      6 // Redistribution and use in source and binary forms, with or without
      7 // modification, are permitted provided that the following conditions
      8 // are met:
      9 //
     10 //    Redistributions of source code must retain the above copyright
     11 //    notice, this list of conditions and the following disclaimer.
     12 //
     13 //    Redistributions in binary form must reproduce the above
     14 //    copyright notice, this list of conditions and the following
     15 //    disclaimer in the documentation and/or other materials provided
     16 //    with the distribution.
     17 //
     18 //    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
     19 //    contributors may be used to endorse or promote products derived
     20 //    from this software without specific prior written permission.
     21 //
     22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     25 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     26 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     27 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     28 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     29 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     30 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     32 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     33 // POSSIBILITY OF SUCH DAMAGE.
     34 
     35 //
     36 // 1) Programmatically fill in instruction/operand information.
     37 //    This can be used for disassembly, printing documentation, etc.
     38 //
     39 // 2) Print documentation from this parameterization.
     40 //
     41 
     42 #include "doc.h"
     43 
     44 #include <cstdio>
     45 #include <cstring>
     46 #include <algorithm>
     47 
     48 namespace spv {
     49     extern "C" {
     50         // Include C-based headers that don't have a namespace
     51         #include "GLSL.ext.KHR.h"
     52 #ifdef AMD_EXTENSIONS
     53         #include "GLSL.ext.AMD.h"
     54 #endif
     55 #ifdef NV_EXTENSIONS
     56         #include "GLSL.ext.NV.h"
     57 #endif
     58     }
     59 }
     60 
     61 namespace spv {
     62 
     63 //
     64 // Whole set of functions that translate enumerants to their text strings for
     65 // the specification (or their sanitized versions for auto-generating the
     66 // spirv headers.
     67 //
     68 // Also, the ceilings are declared next to these, to help keep them in sync.
     69 // Ceilings should be
     70 //  - one more than the maximum value an enumerant takes on, for non-mask enumerants
     71 //    (for non-sparse enums, this is the number of enumerants)
     72 //  - the number of bits consumed by the set of masks
     73 //    (for non-sparse mask enums, this is the number of enumerants)
     74 //
     75 
     76 const int SourceLanguageCeiling = 6; // HLSL todo: need official enumerant
     77 
     78 const char* SourceString(int source)
     79 {
     80     switch (source) {
     81     case 0:  return "Unknown";
     82     case 1:  return "ESSL";
     83     case 2:  return "GLSL";
     84     case 3:  return "OpenCL_C";
     85     case 4:  return "OpenCL_CPP";
     86     case 5:  return "HLSL";
     87 
     88     case SourceLanguageCeiling:
     89     default: return "Bad";
     90     }
     91 }
     92 
     93 const int ExecutionModelCeiling = 7;
     94 
     95 const char* ExecutionModelString(int model)
     96 {
     97     switch (model) {
     98     case 0:  return "Vertex";
     99     case 1:  return "TessellationControl";
    100     case 2:  return "TessellationEvaluation";
    101     case 3:  return "Geometry";
    102     case 4:  return "Fragment";
    103     case 5:  return "GLCompute";
    104     case 6:  return "Kernel";
    105 
    106     case ExecutionModelCeiling:
    107     default: return "Bad";
    108     }
    109 }
    110 
    111 const int AddressingModelCeiling = 3;
    112 
    113 const char* AddressingString(int addr)
    114 {
    115     switch (addr) {
    116     case 0:  return "Logical";
    117     case 1:  return "Physical32";
    118     case 2:  return "Physical64";
    119 
    120     case AddressingModelCeiling:
    121     default: return "Bad";
    122     }
    123 }
    124 
    125 const int MemoryModelCeiling = 3;
    126 
    127 const char* MemoryString(int mem)
    128 {
    129     switch (mem) {
    130     case 0:  return "Simple";
    131     case 1:  return "GLSL450";
    132     case 2:  return "OpenCL";
    133 
    134     case MemoryModelCeiling:
    135     default: return "Bad";
    136     }
    137 }
    138 
    139 const int ExecutionModeCeiling = 33;
    140 
    141 const char* ExecutionModeString(int mode)
    142 {
    143     switch (mode) {
    144     case 0:  return "Invocations";
    145     case 1:  return "SpacingEqual";
    146     case 2:  return "SpacingFractionalEven";
    147     case 3:  return "SpacingFractionalOdd";
    148     case 4:  return "VertexOrderCw";
    149     case 5:  return "VertexOrderCcw";
    150     case 6:  return "PixelCenterInteger";
    151     case 7:  return "OriginUpperLeft";
    152     case 8:  return "OriginLowerLeft";
    153     case 9:  return "EarlyFragmentTests";
    154     case 10: return "PointMode";
    155     case 11: return "Xfb";
    156     case 12: return "DepthReplacing";
    157     case 13: return "Bad";
    158     case 14: return "DepthGreater";
    159     case 15: return "DepthLess";
    160     case 16: return "DepthUnchanged";
    161     case 17: return "LocalSize";
    162     case 18: return "LocalSizeHint";
    163     case 19: return "InputPoints";
    164     case 20: return "InputLines";
    165     case 21: return "InputLinesAdjacency";
    166     case 22: return "Triangles";
    167     case 23: return "InputTrianglesAdjacency";
    168     case 24: return "Quads";
    169     case 25: return "Isolines";
    170     case 26: return "OutputVertices";
    171     case 27: return "OutputPoints";
    172     case 28: return "OutputLineStrip";
    173     case 29: return "OutputTriangleStrip";
    174     case 30: return "VecTypeHint";
    175     case 31: return "ContractionOff";
    176     case 32: return "Bad";
    177 
    178     case 4446:  return "PostDepthCoverage";
    179     case ExecutionModeCeiling:
    180     default: return "Bad";
    181     }
    182 }
    183 
    184 const int StorageClassCeiling = 13;
    185 
    186 const char* StorageClassString(int StorageClass)
    187 {
    188     switch (StorageClass) {
    189     case 0:  return "UniformConstant";
    190     case 1:  return "Input";
    191     case 2:  return "Uniform";
    192     case 3:  return "Output";
    193     case 4:  return "Workgroup";
    194     case 5:  return "CrossWorkgroup";
    195     case 6:  return "Private";
    196     case 7:  return "Function";
    197     case 8:  return "Generic";
    198     case 9:  return "PushConstant";
    199     case 10: return "AtomicCounter";
    200     case 11: return "Image";
    201     case 12: return "StorageBuffer";
    202 
    203     case StorageClassCeiling:
    204     default: return "Bad";
    205     }
    206 }
    207 
    208 const int DecorationCeiling = 45;
    209 
    210 const char* DecorationString(int decoration)
    211 {
    212     switch (decoration) {
    213     case 0:  return "RelaxedPrecision";
    214     case 1:  return "SpecId";
    215     case 2:  return "Block";
    216     case 3:  return "BufferBlock";
    217     case 4:  return "RowMajor";
    218     case 5:  return "ColMajor";
    219     case 6:  return "ArrayStride";
    220     case 7:  return "MatrixStride";
    221     case 8:  return "GLSLShared";
    222     case 9:  return "GLSLPacked";
    223     case 10: return "CPacked";
    224     case 11: return "BuiltIn";
    225     case 12: return "Bad";
    226     case 13: return "NoPerspective";
    227     case 14: return "Flat";
    228     case 15: return "Patch";
    229     case 16: return "Centroid";
    230     case 17: return "Sample";
    231     case 18: return "Invariant";
    232     case 19: return "Restrict";
    233     case 20: return "Aliased";
    234     case 21: return "Volatile";
    235     case 22: return "Constant";
    236     case 23: return "Coherent";
    237     case 24: return "NonWritable";
    238     case 25: return "NonReadable";
    239     case 26: return "Uniform";
    240     case 27: return "Bad";
    241     case 28: return "SaturatedConversion";
    242     case 29: return "Stream";
    243     case 30: return "Location";
    244     case 31: return "Component";
    245     case 32: return "Index";
    246     case 33: return "Binding";
    247     case 34: return "DescriptorSet";
    248     case 35: return "Offset";
    249     case 36: return "XfbBuffer";
    250     case 37: return "XfbStride";
    251     case 38: return "FuncParamAttr";
    252     case 39: return "FP Rounding Mode";
    253     case 40: return "FP Fast Math Mode";
    254     case 41: return "Linkage Attributes";
    255     case 42: return "NoContraction";
    256     case 43: return "InputAttachmentIndex";
    257     case 44: return "Alignment";
    258 
    259     case DecorationCeiling:
    260     default:  return "Bad";
    261 
    262 #ifdef AMD_EXTENSIONS
    263     case 4999: return "ExplicitInterpAMD";
    264 #endif
    265 #ifdef NV_EXTENSIONS
    266     case 5248: return "OverrideCoverageNV";
    267     case 5250: return "PassthroughNV";
    268     case 5252: return "ViewportRelativeNV";
    269     case 5256: return "SecondaryViewportRelativeNV";
    270 #endif
    271     }
    272 }
    273 
    274 const int BuiltInCeiling = 44;
    275 
    276 const char* BuiltInString(int builtIn)
    277 {
    278     switch (builtIn) {
    279     case 0:  return "Position";
    280     case 1:  return "PointSize";
    281     case 2:  return "Bad";
    282     case 3:  return "ClipDistance";
    283     case 4:  return "CullDistance";
    284     case 5:  return "VertexId";
    285     case 6:  return "InstanceId";
    286     case 7:  return "PrimitiveId";
    287     case 8:  return "InvocationId";
    288     case 9:  return "Layer";
    289     case 10: return "ViewportIndex";
    290     case 11: return "TessLevelOuter";
    291     case 12: return "TessLevelInner";
    292     case 13: return "TessCoord";
    293     case 14: return "PatchVertices";
    294     case 15: return "FragCoord";
    295     case 16: return "PointCoord";
    296     case 17: return "FrontFacing";
    297     case 18: return "SampleId";
    298     case 19: return "SamplePosition";
    299     case 20: return "SampleMask";
    300     case 21: return "Bad";
    301     case 22: return "FragDepth";
    302     case 23: return "HelperInvocation";
    303     case 24: return "NumWorkgroups";
    304     case 25: return "WorkgroupSize";
    305     case 26: return "WorkgroupId";
    306     case 27: return "LocalInvocationId";
    307     case 28: return "GlobalInvocationId";
    308     case 29: return "LocalInvocationIndex";
    309     case 30: return "WorkDim";
    310     case 31: return "GlobalSize";
    311     case 32: return "EnqueuedWorkgroupSize";
    312     case 33: return "GlobalOffset";
    313     case 34: return "GlobalLinearId";
    314     case 35: return "Bad";
    315     case 36: return "SubgroupSize";
    316     case 37: return "SubgroupMaxSize";
    317     case 38: return "NumSubgroups";
    318     case 39: return "NumEnqueuedSubgroups";
    319     case 40: return "SubgroupId";
    320     case 41: return "SubgroupLocalInvocationId";
    321     case 42: return "VertexIndex";                 // TBD: put next to VertexId?
    322     case 43: return "InstanceIndex";               // TBD: put next to InstanceId?
    323 
    324     case 4416: return "SubgroupEqMaskKHR";
    325     case 4417: return "SubgroupGeMaskKHR";
    326     case 4418: return "SubgroupGtMaskKHR";
    327     case 4419: return "SubgroupLeMaskKHR";
    328     case 4420: return "SubgroupLtMaskKHR";
    329     case 4438: return "DeviceIndex";
    330     case 4440: return "ViewIndex";
    331     case 4424: return "BaseVertex";
    332     case 4425: return "BaseInstance";
    333     case 4426: return "DrawIndex";
    334     case 5014: return "FragStencilRefEXT";
    335 
    336 #ifdef AMD_EXTENSIONS
    337     case 4992: return "BaryCoordNoPerspAMD";
    338     case 4993: return "BaryCoordNoPerspCentroidAMD";
    339     case 4994: return "BaryCoordNoPerspSampleAMD";
    340     case 4995: return "BaryCoordSmoothAMD";
    341     case 4996: return "BaryCoordSmoothCentroidAMD";
    342     case 4997: return "BaryCoordSmoothSampleAMD";
    343     case 4998: return "BaryCoordPullModelAMD";
    344 #endif
    345 
    346 #ifdef NV_EXTENSIONS
    347     case 5253: return "ViewportMaskNV";
    348     case 5257: return "SecondaryPositionNV";
    349     case 5258: return "SecondaryViewportMaskNV";
    350     case 5261: return "PositionPerViewNV";
    351     case 5262: return "ViewportMaskPerViewNV";
    352 #endif
    353 
    354     case BuiltInCeiling:
    355     default: return "Bad";
    356     }
    357 }
    358 
    359 const int DimensionCeiling = 7;
    360 
    361 const char* DimensionString(int dim)
    362 {
    363     switch (dim) {
    364     case 0:  return "1D";
    365     case 1:  return "2D";
    366     case 2:  return "3D";
    367     case 3:  return "Cube";
    368     case 4:  return "Rect";
    369     case 5:  return "Buffer";
    370     case 6:  return "SubpassData";
    371 
    372     case DimensionCeiling:
    373     default: return "Bad";
    374     }
    375 }
    376 
    377 const int SamplerAddressingModeCeiling = 5;
    378 
    379 const char* SamplerAddressingModeString(int mode)
    380 {
    381     switch (mode) {
    382     case 0:  return "None";
    383     case 1:  return "ClampToEdge";
    384     case 2:  return "Clamp";
    385     case 3:  return "Repeat";
    386     case 4:  return "RepeatMirrored";
    387 
    388     case SamplerAddressingModeCeiling:
    389     default: return "Bad";
    390     }
    391 }
    392 
    393 const int SamplerFilterModeCeiling = 2;
    394 
    395 const char* SamplerFilterModeString(int mode)
    396 {
    397     switch (mode) {
    398     case 0: return "Nearest";
    399     case 1: return "Linear";
    400 
    401     case SamplerFilterModeCeiling:
    402     default: return "Bad";
    403     }
    404 }
    405 
    406 const int ImageFormatCeiling = 40;
    407 
    408 const char* ImageFormatString(int format)
    409 {
    410     switch (format) {
    411     case  0: return "Unknown";
    412 
    413     // ES/Desktop float
    414     case  1: return "Rgba32f";
    415     case  2: return "Rgba16f";
    416     case  3: return "R32f";
    417     case  4: return "Rgba8";
    418     case  5: return "Rgba8Snorm";
    419 
    420     // Desktop float
    421     case  6: return "Rg32f";
    422     case  7: return "Rg16f";
    423     case  8: return "R11fG11fB10f";
    424     case  9: return "R16f";
    425     case 10: return "Rgba16";
    426     case 11: return "Rgb10A2";
    427     case 12: return "Rg16";
    428     case 13: return "Rg8";
    429     case 14: return "R16";
    430     case 15: return "R8";
    431     case 16: return "Rgba16Snorm";
    432     case 17: return "Rg16Snorm";
    433     case 18: return "Rg8Snorm";
    434     case 19: return "R16Snorm";
    435     case 20: return "R8Snorm";
    436 
    437     // ES/Desktop int
    438     case 21: return "Rgba32i";
    439     case 22: return "Rgba16i";
    440     case 23: return "Rgba8i";
    441     case 24: return "R32i";
    442 
    443     // Desktop int
    444     case 25: return "Rg32i";
    445     case 26: return "Rg16i";
    446     case 27: return "Rg8i";
    447     case 28: return "R16i";
    448     case 29: return "R8i";
    449 
    450     // ES/Desktop uint
    451     case 30: return "Rgba32ui";
    452     case 31: return "Rgba16ui";
    453     case 32: return "Rgba8ui";
    454     case 33: return "R32ui";
    455 
    456     // Desktop uint
    457     case 34: return "Rgb10a2ui";
    458     case 35: return "Rg32ui";
    459     case 36: return "Rg16ui";
    460     case 37: return "Rg8ui";
    461     case 38: return "R16ui";
    462     case 39: return "R8ui";
    463 
    464     case ImageFormatCeiling:
    465     default:
    466         return "Bad";
    467     }
    468 }
    469 
    470 const int ImageChannelOrderCeiling = 19;
    471 
    472 const char* ImageChannelOrderString(int format)
    473 {
    474     switch (format) {
    475     case 0:  return "R";
    476     case 1:  return "A";
    477     case 2:  return "RG";
    478     case 3:  return "RA";
    479     case 4:  return "RGB";
    480     case 5:  return "RGBA";
    481     case 6:  return "BGRA";
    482     case 7:  return "ARGB";
    483     case 8:  return "Intensity";
    484     case 9:  return "Luminance";
    485     case 10: return "Rx";
    486     case 11: return "RGx";
    487     case 12: return "RGBx";
    488     case 13: return "Depth";
    489     case 14: return "DepthStencil";
    490     case 15: return "sRGB";
    491     case 16: return "sRGBx";
    492     case 17: return "sRGBA";
    493     case 18: return "sBGRA";
    494 
    495     case ImageChannelOrderCeiling:
    496     default:
    497         return "Bad";
    498     }
    499 }
    500 
    501 const int ImageChannelDataTypeCeiling = 17;
    502 
    503 const char* ImageChannelDataTypeString(int type)
    504 {
    505     switch (type)
    506     {
    507     case 0: return "SnormInt8";
    508     case 1: return "SnormInt16";
    509     case 2: return "UnormInt8";
    510     case 3: return "UnormInt16";
    511     case 4: return "UnormShort565";
    512     case 5: return "UnormShort555";
    513     case 6: return "UnormInt101010";
    514     case 7: return "SignedInt8";
    515     case 8: return "SignedInt16";
    516     case 9: return "SignedInt32";
    517     case 10: return "UnsignedInt8";
    518     case 11: return "UnsignedInt16";
    519     case 12: return "UnsignedInt32";
    520     case 13: return "HalfFloat";
    521     case 14: return "Float";
    522     case 15: return "UnormInt24";
    523     case 16: return "UnormInt101010_2";
    524 
    525     case ImageChannelDataTypeCeiling:
    526     default:
    527         return "Bad";
    528     }
    529 }
    530 
    531 const int ImageOperandsCeiling = 8;
    532 
    533 const char* ImageOperandsString(int format)
    534 {
    535     switch (format) {
    536     case 0: return "Bias";
    537     case 1: return "Lod";
    538     case 2: return "Grad";
    539     case 3: return "ConstOffset";
    540     case 4: return "Offset";
    541     case 5: return "ConstOffsets";
    542     case 6: return "Sample";
    543     case 7: return "MinLod";
    544 
    545     case ImageOperandsCeiling:
    546     default:
    547         return "Bad";
    548     }
    549 }
    550 
    551 const int FPFastMathCeiling = 5;
    552 
    553 const char* FPFastMathString(int mode)
    554 {
    555     switch (mode) {
    556     case 0: return "NotNaN";
    557     case 1: return "NotInf";
    558     case 2: return "NSZ";
    559     case 3: return "AllowRecip";
    560     case 4: return "Fast";
    561 
    562     case FPFastMathCeiling:
    563     default:     return "Bad";
    564     }
    565 }
    566 
    567 const int FPRoundingModeCeiling = 4;
    568 
    569 const char* FPRoundingModeString(int mode)
    570 {
    571     switch (mode) {
    572     case 0:  return "RTE";
    573     case 1:  return "RTZ";
    574     case 2:  return "RTP";
    575     case 3:  return "RTN";
    576 
    577     case FPRoundingModeCeiling:
    578     default: return "Bad";
    579     }
    580 }
    581 
    582 const int LinkageTypeCeiling = 2;
    583 
    584 const char* LinkageTypeString(int type)
    585 {
    586     switch (type) {
    587     case 0:  return "Export";
    588     case 1:  return "Import";
    589 
    590     case LinkageTypeCeiling:
    591     default: return "Bad";
    592     }
    593 }
    594 
    595 const int FuncParamAttrCeiling = 8;
    596 
    597 const char* FuncParamAttrString(int attr)
    598 {
    599     switch (attr) {
    600     case 0:  return "Zext";
    601     case 1:  return "Sext";
    602     case 2:  return "ByVal";
    603     case 3:  return "Sret";
    604     case 4:  return "NoAlias";
    605     case 5:  return "NoCapture";
    606     case 6:  return "NoWrite";
    607     case 7:  return "NoReadWrite";
    608 
    609     case FuncParamAttrCeiling:
    610     default: return "Bad";
    611     }
    612 }
    613 
    614 const int AccessQualifierCeiling = 3;
    615 
    616 const char* AccessQualifierString(int attr)
    617 {
    618     switch (attr) {
    619     case 0:  return "ReadOnly";
    620     case 1:  return "WriteOnly";
    621     case 2:  return "ReadWrite";
    622 
    623     case AccessQualifierCeiling:
    624     default: return "Bad";
    625     }
    626 }
    627 
    628 const int SelectControlCeiling = 2;
    629 
    630 const char* SelectControlString(int cont)
    631 {
    632     switch (cont) {
    633     case 0:  return "Flatten";
    634     case 1:  return "DontFlatten";
    635 
    636     case SelectControlCeiling:
    637     default: return "Bad";
    638     }
    639 }
    640 
    641 const int LoopControlCeiling = 4;
    642 
    643 const char* LoopControlString(int cont)
    644 {
    645     switch (cont) {
    646     case 0:  return "Unroll";
    647     case 1:  return "DontUnroll";
    648     case 2:  return "DependencyInfinite";
    649     case 3:  return "DependencyLength";
    650 
    651     case LoopControlCeiling:
    652     default: return "Bad";
    653     }
    654 }
    655 
    656 const int FunctionControlCeiling = 4;
    657 
    658 const char* FunctionControlString(int cont)
    659 {
    660     switch (cont) {
    661     case 0:  return "Inline";
    662     case 1:  return "DontInline";
    663     case 2:  return "Pure";
    664     case 3:  return "Const";
    665 
    666     case FunctionControlCeiling:
    667     default: return "Bad";
    668     }
    669 }
    670 
    671 const int MemorySemanticsCeiling = 12;
    672 
    673 const char* MemorySemanticsString(int mem)
    674 {
    675     // Note: No bits set (None) means "Relaxed"
    676     switch (mem) {
    677     case 0: return "Bad"; // Note: this is a placeholder for 'Consume'
    678     case 1: return "Acquire";
    679     case 2: return "Release";
    680     case 3: return "AcquireRelease";
    681     case 4: return "SequentiallyConsistent";
    682     case 5: return "Bad"; // Note: reserved for future expansion
    683     case 6: return "UniformMemory";
    684     case 7: return "SubgroupMemory";
    685     case 8: return "WorkgroupMemory";
    686     case 9: return "CrossWorkgroupMemory";
    687     case 10: return "AtomicCounterMemory";
    688     case 11: return "ImageMemory";
    689 
    690     case MemorySemanticsCeiling:
    691     default:     return "Bad";
    692     }
    693 }
    694 
    695 const int MemoryAccessCeiling = 3;
    696 
    697 const char* MemoryAccessString(int mem)
    698 {
    699     switch (mem) {
    700     case 0:  return "Volatile";
    701     case 1:  return "Aligned";
    702     case 2:  return "Nontemporal";
    703 
    704     case MemoryAccessCeiling:
    705     default: return "Bad";
    706     }
    707 }
    708 
    709 const int ScopeCeiling = 5;
    710 
    711 const char* ScopeString(int mem)
    712 {
    713     switch (mem) {
    714     case 0:  return "CrossDevice";
    715     case 1:  return "Device";
    716     case 2:  return "Workgroup";
    717     case 3:  return "Subgroup";
    718     case 4:  return "Invocation";
    719 
    720     case ScopeCeiling:
    721     default: return "Bad";
    722     }
    723 }
    724 
    725 const int GroupOperationCeiling = 3;
    726 
    727 const char* GroupOperationString(int gop)
    728 {
    729 
    730     switch (gop)
    731     {
    732     case 0:  return "Reduce";
    733     case 1:  return "InclusiveScan";
    734     case 2:  return "ExclusiveScan";
    735 
    736     case GroupOperationCeiling:
    737     default: return "Bad";
    738     }
    739 }
    740 
    741 const int KernelEnqueueFlagsCeiling = 3;
    742 
    743 const char* KernelEnqueueFlagsString(int flag)
    744 {
    745     switch (flag)
    746     {
    747     case 0:  return "NoWait";
    748     case 1:  return "WaitKernel";
    749     case 2:  return "WaitWorkGroup";
    750 
    751     case KernelEnqueueFlagsCeiling:
    752     default: return "Bad";
    753     }
    754 }
    755 
    756 const int KernelProfilingInfoCeiling = 1;
    757 
    758 const char* KernelProfilingInfoString(int info)
    759 {
    760     switch (info)
    761     {
    762     case 0:  return "CmdExecTime";
    763 
    764     case KernelProfilingInfoCeiling:
    765     default: return "Bad";
    766     }
    767 }
    768 
    769 const int CapabilityCeiling = 58;
    770 
    771 const char* CapabilityString(int info)
    772 {
    773     switch (info)
    774     {
    775     case 0:  return "Matrix";
    776     case 1:  return "Shader";
    777     case 2:  return "Geometry";
    778     case 3:  return "Tessellation";
    779     case 4:  return "Addresses";
    780     case 5:  return "Linkage";
    781     case 6:  return "Kernel";
    782     case 7:  return "Vector16";
    783     case 8:  return "Float16Buffer";
    784     case 9:  return "Float16";
    785     case 10: return "Float64";
    786     case 11: return "Int64";
    787     case 12: return "Int64Atomics";
    788     case 13: return "ImageBasic";
    789     case 14: return "ImageReadWrite";
    790     case 15: return "ImageMipmap";
    791     case 16: return "Bad";
    792     case 17: return "Pipes";
    793     case 18: return "Groups";
    794     case 19: return "DeviceEnqueue";
    795     case 20: return "LiteralSampler";
    796     case 21: return "AtomicStorage";
    797     case 22: return "Int16";
    798     case 23: return "TessellationPointSize";
    799     case 24: return "GeometryPointSize";
    800     case 25: return "ImageGatherExtended";
    801     case 26: return "Bad";
    802     case 27: return "StorageImageMultisample";
    803     case 28: return "UniformBufferArrayDynamicIndexing";
    804     case 29: return "SampledImageArrayDynamicIndexing";
    805     case 30: return "StorageBufferArrayDynamicIndexing";
    806     case 31: return "StorageImageArrayDynamicIndexing";
    807     case 32: return "ClipDistance";
    808     case 33: return "CullDistance";
    809     case 34: return "ImageCubeArray";
    810     case 35: return "SampleRateShading";
    811     case 36: return "ImageRect";
    812     case 37: return "SampledRect";
    813     case 38: return "GenericPointer";
    814     case 39: return "Int8";
    815     case 40: return "InputAttachment";
    816     case 41: return "SparseResidency";
    817     case 42: return "MinLod";
    818     case 43: return "Sampled1D";
    819     case 44: return "Image1D";
    820     case 45: return "SampledCubeArray";
    821     case 46: return "SampledBuffer";
    822     case 47: return "ImageBuffer";
    823     case 48: return "ImageMSArray";
    824     case 49: return "StorageImageExtendedFormats";
    825     case 50: return "ImageQuery";
    826     case 51: return "DerivativeControl";
    827     case 52: return "InterpolationFunction";
    828     case 53: return "TransformFeedback";
    829     case 54: return "GeometryStreams";
    830     case 55: return "StorageImageReadWithoutFormat";
    831     case 56: return "StorageImageWriteWithoutFormat";
    832     case 57: return "MultiViewport";
    833 
    834     case 4423: return "SubgroupBallotKHR";
    835     case 4427: return "DrawParameters";
    836     case 4431: return "SubgroupVoteKHR";
    837 
    838     case 4433: return "StorageUniformBufferBlock16";
    839     case 4434: return "StorageUniform16";
    840     case 4435: return "StoragePushConstant16";
    841     case 4436: return "StorageInputOutput16";
    842 
    843     case 4437: return "DeviceGroup";
    844     case 4439: return "MultiView";
    845 
    846     case 5013: return "StencilExportEXT";
    847 
    848 #ifdef AMD_EXTENSIONS
    849     case 5009: return "ImageGatherBiasLodAMD";
    850     case 5015: return "ImageReadWriteLodAMD";
    851 #endif
    852 
    853     case 4445: return "AtomicStorageOps";
    854 
    855     case 4447: return "SampleMaskPostDepthCoverage";
    856 #ifdef NV_EXTENSIONS
    857     case 5251: return "GeometryShaderPassthroughNV";
    858     case 5254: return "ShaderViewportIndexLayerNV";
    859     case 5255: return "ShaderViewportMaskNV";
    860     case 5259: return "ShaderStereoViewNV";
    861     case 5260: return "PerViewAttributesNV";
    862 #endif
    863 
    864     case CapabilityCeiling:
    865     default: return "Bad";
    866     }
    867 }
    868 
    869 const char* OpcodeString(int op)
    870 {
    871     switch (op) {
    872     case 0:   return "OpNop";
    873     case 1:   return "OpUndef";
    874     case 2:   return "OpSourceContinued";
    875     case 3:   return "OpSource";
    876     case 4:   return "OpSourceExtension";
    877     case 5:   return "OpName";
    878     case 6:   return "OpMemberName";
    879     case 7:   return "OpString";
    880     case 8:   return "OpLine";
    881     case 9:   return "Bad";
    882     case 10:  return "OpExtension";
    883     case 11:  return "OpExtInstImport";
    884     case 12:  return "OpExtInst";
    885     case 13:  return "Bad";
    886     case 14:  return "OpMemoryModel";
    887     case 15:  return "OpEntryPoint";
    888     case 16:  return "OpExecutionMode";
    889     case 17:  return "OpCapability";
    890     case 18:  return "Bad";
    891     case 19:  return "OpTypeVoid";
    892     case 20:  return "OpTypeBool";
    893     case 21:  return "OpTypeInt";
    894     case 22:  return "OpTypeFloat";
    895     case 23:  return "OpTypeVector";
    896     case 24:  return "OpTypeMatrix";
    897     case 25:  return "OpTypeImage";
    898     case 26:  return "OpTypeSampler";
    899     case 27:  return "OpTypeSampledImage";
    900     case 28:  return "OpTypeArray";
    901     case 29:  return "OpTypeRuntimeArray";
    902     case 30:  return "OpTypeStruct";
    903     case 31:  return "OpTypeOpaque";
    904     case 32:  return "OpTypePointer";
    905     case 33:  return "OpTypeFunction";
    906     case 34:  return "OpTypeEvent";
    907     case 35:  return "OpTypeDeviceEvent";
    908     case 36:  return "OpTypeReserveId";
    909     case 37:  return "OpTypeQueue";
    910     case 38:  return "OpTypePipe";
    911     case 39:  return "OpTypeForwardPointer";
    912     case 40:  return "Bad";
    913     case 41:  return "OpConstantTrue";
    914     case 42:  return "OpConstantFalse";
    915     case 43:  return "OpConstant";
    916     case 44:  return "OpConstantComposite";
    917     case 45:  return "OpConstantSampler";
    918     case 46:  return "OpConstantNull";
    919     case 47:  return "Bad";
    920     case 48:  return "OpSpecConstantTrue";
    921     case 49:  return "OpSpecConstantFalse";
    922     case 50:  return "OpSpecConstant";
    923     case 51:  return "OpSpecConstantComposite";
    924     case 52:  return "OpSpecConstantOp";
    925     case 53:  return "Bad";
    926     case 54:  return "OpFunction";
    927     case 55:  return "OpFunctionParameter";
    928     case 56:  return "OpFunctionEnd";
    929     case 57:  return "OpFunctionCall";
    930     case 58:  return "Bad";
    931     case 59:  return "OpVariable";
    932     case 60:  return "OpImageTexelPointer";
    933     case 61:  return "OpLoad";
    934     case 62:  return "OpStore";
    935     case 63:  return "OpCopyMemory";
    936     case 64:  return "OpCopyMemorySized";
    937     case 65:  return "OpAccessChain";
    938     case 66:  return "OpInBoundsAccessChain";
    939     case 67:  return "OpPtrAccessChain";
    940     case 68:  return "OpArrayLength";
    941     case 69:  return "OpGenericPtrMemSemantics";
    942     case 70:  return "OpInBoundsPtrAccessChain";
    943     case 71:  return "OpDecorate";
    944     case 72:  return "OpMemberDecorate";
    945     case 73:  return "OpDecorationGroup";
    946     case 74:  return "OpGroupDecorate";
    947     case 75:  return "OpGroupMemberDecorate";
    948     case 76:  return "Bad";
    949     case 77:  return "OpVectorExtractDynamic";
    950     case 78:  return "OpVectorInsertDynamic";
    951     case 79:  return "OpVectorShuffle";
    952     case 80:  return "OpCompositeConstruct";
    953     case 81:  return "OpCompositeExtract";
    954     case 82:  return "OpCompositeInsert";
    955     case 83:  return "OpCopyObject";
    956     case 84:  return "OpTranspose";
    957     case 85:  return "Bad";
    958     case 86:  return "OpSampledImage";
    959     case 87:  return "OpImageSampleImplicitLod";
    960     case 88:  return "OpImageSampleExplicitLod";
    961     case 89:  return "OpImageSampleDrefImplicitLod";
    962     case 90:  return "OpImageSampleDrefExplicitLod";
    963     case 91:  return "OpImageSampleProjImplicitLod";
    964     case 92:  return "OpImageSampleProjExplicitLod";
    965     case 93:  return "OpImageSampleProjDrefImplicitLod";
    966     case 94:  return "OpImageSampleProjDrefExplicitLod";
    967     case 95:  return "OpImageFetch";
    968     case 96:  return "OpImageGather";
    969     case 97:  return "OpImageDrefGather";
    970     case 98:  return "OpImageRead";
    971     case 99:  return "OpImageWrite";
    972     case 100: return "OpImage";
    973     case 101: return "OpImageQueryFormat";
    974     case 102: return "OpImageQueryOrder";
    975     case 103: return "OpImageQuerySizeLod";
    976     case 104: return "OpImageQuerySize";
    977     case 105: return "OpImageQueryLod";
    978     case 106: return "OpImageQueryLevels";
    979     case 107: return "OpImageQuerySamples";
    980     case 108: return "Bad";
    981     case 109: return "OpConvertFToU";
    982     case 110: return "OpConvertFToS";
    983     case 111: return "OpConvertSToF";
    984     case 112: return "OpConvertUToF";
    985     case 113: return "OpUConvert";
    986     case 114: return "OpSConvert";
    987     case 115: return "OpFConvert";
    988     case 116: return "OpQuantizeToF16";
    989     case 117: return "OpConvertPtrToU";
    990     case 118: return "OpSatConvertSToU";
    991     case 119: return "OpSatConvertUToS";
    992     case 120: return "OpConvertUToPtr";
    993     case 121: return "OpPtrCastToGeneric";
    994     case 122: return "OpGenericCastToPtr";
    995     case 123: return "OpGenericCastToPtrExplicit";
    996     case 124: return "OpBitcast";
    997     case 125: return "Bad";
    998     case 126: return "OpSNegate";
    999     case 127: return "OpFNegate";
   1000     case 128: return "OpIAdd";
   1001     case 129: return "OpFAdd";
   1002     case 130: return "OpISub";
   1003     case 131: return "OpFSub";
   1004     case 132: return "OpIMul";
   1005     case 133: return "OpFMul";
   1006     case 134: return "OpUDiv";
   1007     case 135: return "OpSDiv";
   1008     case 136: return "OpFDiv";
   1009     case 137: return "OpUMod";
   1010     case 138: return "OpSRem";
   1011     case 139: return "OpSMod";
   1012     case 140: return "OpFRem";
   1013     case 141: return "OpFMod";
   1014     case 142: return "OpVectorTimesScalar";
   1015     case 143: return "OpMatrixTimesScalar";
   1016     case 144: return "OpVectorTimesMatrix";
   1017     case 145: return "OpMatrixTimesVector";
   1018     case 146: return "OpMatrixTimesMatrix";
   1019     case 147: return "OpOuterProduct";
   1020     case 148: return "OpDot";
   1021     case 149: return "OpIAddCarry";
   1022     case 150: return "OpISubBorrow";
   1023     case 151: return "OpUMulExtended";
   1024     case 152: return "OpSMulExtended";
   1025     case 153: return "Bad";
   1026     case 154: return "OpAny";
   1027     case 155: return "OpAll";
   1028     case 156: return "OpIsNan";
   1029     case 157: return "OpIsInf";
   1030     case 158: return "OpIsFinite";
   1031     case 159: return "OpIsNormal";
   1032     case 160: return "OpSignBitSet";
   1033     case 161: return "OpLessOrGreater";
   1034     case 162: return "OpOrdered";
   1035     case 163: return "OpUnordered";
   1036     case 164: return "OpLogicalEqual";
   1037     case 165: return "OpLogicalNotEqual";
   1038     case 166: return "OpLogicalOr";
   1039     case 167: return "OpLogicalAnd";
   1040     case 168: return "OpLogicalNot";
   1041     case 169: return "OpSelect";
   1042     case 170: return "OpIEqual";
   1043     case 171: return "OpINotEqual";
   1044     case 172: return "OpUGreaterThan";
   1045     case 173: return "OpSGreaterThan";
   1046     case 174: return "OpUGreaterThanEqual";
   1047     case 175: return "OpSGreaterThanEqual";
   1048     case 176: return "OpULessThan";
   1049     case 177: return "OpSLessThan";
   1050     case 178: return "OpULessThanEqual";
   1051     case 179: return "OpSLessThanEqual";
   1052     case 180: return "OpFOrdEqual";
   1053     case 181: return "OpFUnordEqual";
   1054     case 182: return "OpFOrdNotEqual";
   1055     case 183: return "OpFUnordNotEqual";
   1056     case 184: return "OpFOrdLessThan";
   1057     case 185: return "OpFUnordLessThan";
   1058     case 186: return "OpFOrdGreaterThan";
   1059     case 187: return "OpFUnordGreaterThan";
   1060     case 188: return "OpFOrdLessThanEqual";
   1061     case 189: return "OpFUnordLessThanEqual";
   1062     case 190: return "OpFOrdGreaterThanEqual";
   1063     case 191: return "OpFUnordGreaterThanEqual";
   1064     case 192: return "Bad";
   1065     case 193: return "Bad";
   1066     case 194: return "OpShiftRightLogical";
   1067     case 195: return "OpShiftRightArithmetic";
   1068     case 196: return "OpShiftLeftLogical";
   1069     case 197: return "OpBitwiseOr";
   1070     case 198: return "OpBitwiseXor";
   1071     case 199: return "OpBitwiseAnd";
   1072     case 200: return "OpNot";
   1073     case 201: return "OpBitFieldInsert";
   1074     case 202: return "OpBitFieldSExtract";
   1075     case 203: return "OpBitFieldUExtract";
   1076     case 204: return "OpBitReverse";
   1077     case 205: return "OpBitCount";
   1078     case 206: return "Bad";
   1079     case 207: return "OpDPdx";
   1080     case 208: return "OpDPdy";
   1081     case 209: return "OpFwidth";
   1082     case 210: return "OpDPdxFine";
   1083     case 211: return "OpDPdyFine";
   1084     case 212: return "OpFwidthFine";
   1085     case 213: return "OpDPdxCoarse";
   1086     case 214: return "OpDPdyCoarse";
   1087     case 215: return "OpFwidthCoarse";
   1088     case 216: return "Bad";
   1089     case 217: return "Bad";
   1090     case 218: return "OpEmitVertex";
   1091     case 219: return "OpEndPrimitive";
   1092     case 220: return "OpEmitStreamVertex";
   1093     case 221: return "OpEndStreamPrimitive";
   1094     case 222: return "Bad";
   1095     case 223: return "Bad";
   1096     case 224: return "OpControlBarrier";
   1097     case 225: return "OpMemoryBarrier";
   1098     case 226: return "Bad";
   1099     case 227: return "OpAtomicLoad";
   1100     case 228: return "OpAtomicStore";
   1101     case 229: return "OpAtomicExchange";
   1102     case 230: return "OpAtomicCompareExchange";
   1103     case 231: return "OpAtomicCompareExchangeWeak";
   1104     case 232: return "OpAtomicIIncrement";
   1105     case 233: return "OpAtomicIDecrement";
   1106     case 234: return "OpAtomicIAdd";
   1107     case 235: return "OpAtomicISub";
   1108     case 236: return "OpAtomicSMin";
   1109     case 237: return "OpAtomicUMin";
   1110     case 238: return "OpAtomicSMax";
   1111     case 239: return "OpAtomicUMax";
   1112     case 240: return "OpAtomicAnd";
   1113     case 241: return "OpAtomicOr";
   1114     case 242: return "OpAtomicXor";
   1115     case 243: return "Bad";
   1116     case 244: return "Bad";
   1117     case 245: return "OpPhi";
   1118     case 246: return "OpLoopMerge";
   1119     case 247: return "OpSelectionMerge";
   1120     case 248: return "OpLabel";
   1121     case 249: return "OpBranch";
   1122     case 250: return "OpBranchConditional";
   1123     case 251: return "OpSwitch";
   1124     case 252: return "OpKill";
   1125     case 253: return "OpReturn";
   1126     case 254: return "OpReturnValue";
   1127     case 255: return "OpUnreachable";
   1128     case 256: return "OpLifetimeStart";
   1129     case 257: return "OpLifetimeStop";
   1130     case 258: return "Bad";
   1131     case 259: return "OpGroupAsyncCopy";
   1132     case 260: return "OpGroupWaitEvents";
   1133     case 261: return "OpGroupAll";
   1134     case 262: return "OpGroupAny";
   1135     case 263: return "OpGroupBroadcast";
   1136     case 264: return "OpGroupIAdd";
   1137     case 265: return "OpGroupFAdd";
   1138     case 266: return "OpGroupFMin";
   1139     case 267: return "OpGroupUMin";
   1140     case 268: return "OpGroupSMin";
   1141     case 269: return "OpGroupFMax";
   1142     case 270: return "OpGroupUMax";
   1143     case 271: return "OpGroupSMax";
   1144     case 272: return "Bad";
   1145     case 273: return "Bad";
   1146     case 274: return "OpReadPipe";
   1147     case 275: return "OpWritePipe";
   1148     case 276: return "OpReservedReadPipe";
   1149     case 277: return "OpReservedWritePipe";
   1150     case 278: return "OpReserveReadPipePackets";
   1151     case 279: return "OpReserveWritePipePackets";
   1152     case 280: return "OpCommitReadPipe";
   1153     case 281: return "OpCommitWritePipe";
   1154     case 282: return "OpIsValidReserveId";
   1155     case 283: return "OpGetNumPipePackets";
   1156     case 284: return "OpGetMaxPipePackets";
   1157     case 285: return "OpGroupReserveReadPipePackets";
   1158     case 286: return "OpGroupReserveWritePipePackets";
   1159     case 287: return "OpGroupCommitReadPipe";
   1160     case 288: return "OpGroupCommitWritePipe";
   1161     case 289: return "Bad";
   1162     case 290: return "Bad";
   1163     case 291: return "OpEnqueueMarker";
   1164     case 292: return "OpEnqueueKernel";
   1165     case 293: return "OpGetKernelNDrangeSubGroupCount";
   1166     case 294: return "OpGetKernelNDrangeMaxSubGroupSize";
   1167     case 295: return "OpGetKernelWorkGroupSize";
   1168     case 296: return "OpGetKernelPreferredWorkGroupSizeMultiple";
   1169     case 297: return "OpRetainEvent";
   1170     case 298: return "OpReleaseEvent";
   1171     case 299: return "OpCreateUserEvent";
   1172     case 300: return "OpIsValidEvent";
   1173     case 301: return "OpSetUserEventStatus";
   1174     case 302: return "OpCaptureEventProfilingInfo";
   1175     case 303: return "OpGetDefaultQueue";
   1176     case 304: return "OpBuildNDRange";
   1177     case 305: return "OpImageSparseSampleImplicitLod";
   1178     case 306: return "OpImageSparseSampleExplicitLod";
   1179     case 307: return "OpImageSparseSampleDrefImplicitLod";
   1180     case 308: return "OpImageSparseSampleDrefExplicitLod";
   1181     case 309: return "OpImageSparseSampleProjImplicitLod";
   1182     case 310: return "OpImageSparseSampleProjExplicitLod";
   1183     case 311: return "OpImageSparseSampleProjDrefImplicitLod";
   1184     case 312: return "OpImageSparseSampleProjDrefExplicitLod";
   1185     case 313: return "OpImageSparseFetch";
   1186     case 314: return "OpImageSparseGather";
   1187     case 315: return "OpImageSparseDrefGather";
   1188     case 316: return "OpImageSparseTexelsResident";
   1189     case 317: return "OpNoLine";
   1190     case 318: return "OpAtomicFlagTestAndSet";
   1191     case 319: return "OpAtomicFlagClear";
   1192     case 320: return "OpImageSparseRead";
   1193 
   1194     case 4421: return "OpSubgroupBallotKHR";
   1195     case 4422: return "OpSubgroupFirstInvocationKHR";
   1196     case 4428: return "OpSubgroupAllKHR";
   1197     case 4429: return "OpSubgroupAnyKHR";
   1198     case 4430: return "OpSubgroupAllEqualKHR";
   1199     case 4432: return "OpSubgroupReadInvocationKHR";
   1200 
   1201 #ifdef AMD_EXTENSIONS
   1202     case 5000: return "OpGroupIAddNonUniformAMD";
   1203     case 5001: return "OpGroupFAddNonUniformAMD";
   1204     case 5002: return "OpGroupFMinNonUniformAMD";
   1205     case 5003: return "OpGroupUMinNonUniformAMD";
   1206     case 5004: return "OpGroupSMinNonUniformAMD";
   1207     case 5005: return "OpGroupFMaxNonUniformAMD";
   1208     case 5006: return "OpGroupUMaxNonUniformAMD";
   1209     case 5007: return "OpGroupSMaxNonUniformAMD";
   1210 #endif
   1211 
   1212     case OpcodeCeiling:
   1213     default:
   1214         return "Bad";
   1215     }
   1216 }
   1217 
   1218 // The set of objects that hold all the instruction/operand
   1219 // parameterization information.
   1220 InstructionParameters InstructionDesc[OpCodeMask + 1];
   1221 OperandParameters ExecutionModeOperands[ExecutionModeCeiling];
   1222 OperandParameters DecorationOperands[DecorationCeiling];
   1223 
   1224 EnumDefinition OperandClassParams[OperandCount];
   1225 EnumParameters ExecutionModelParams[ExecutionModelCeiling];
   1226 EnumParameters AddressingParams[AddressingModelCeiling];
   1227 EnumParameters MemoryParams[MemoryModelCeiling];
   1228 EnumParameters ExecutionModeParams[ExecutionModeCeiling];
   1229 EnumParameters StorageParams[StorageClassCeiling];
   1230 EnumParameters SamplerAddressingModeParams[SamplerAddressingModeCeiling];
   1231 EnumParameters SamplerFilterModeParams[SamplerFilterModeCeiling];
   1232 EnumParameters ImageFormatParams[ImageFormatCeiling];
   1233 EnumParameters ImageChannelOrderParams[ImageChannelOrderCeiling];
   1234 EnumParameters ImageChannelDataTypeParams[ImageChannelDataTypeCeiling];
   1235 EnumParameters ImageOperandsParams[ImageOperandsCeiling];
   1236 EnumParameters FPFastMathParams[FPFastMathCeiling];
   1237 EnumParameters FPRoundingModeParams[FPRoundingModeCeiling];
   1238 EnumParameters LinkageTypeParams[LinkageTypeCeiling];
   1239 EnumParameters DecorationParams[DecorationCeiling];
   1240 EnumParameters BuiltInParams[BuiltInCeiling];
   1241 EnumParameters DimensionalityParams[DimensionCeiling];
   1242 EnumParameters FuncParamAttrParams[FuncParamAttrCeiling];
   1243 EnumParameters AccessQualifierParams[AccessQualifierCeiling];
   1244 EnumParameters GroupOperationParams[GroupOperationCeiling];
   1245 EnumParameters LoopControlParams[FunctionControlCeiling];
   1246 EnumParameters SelectionControlParams[SelectControlCeiling];
   1247 EnumParameters FunctionControlParams[FunctionControlCeiling];
   1248 EnumParameters MemorySemanticsParams[MemorySemanticsCeiling];
   1249 EnumParameters MemoryAccessParams[MemoryAccessCeiling];
   1250 EnumParameters ScopeParams[ScopeCeiling];
   1251 EnumParameters KernelEnqueueFlagsParams[KernelEnqueueFlagsCeiling];
   1252 EnumParameters KernelProfilingInfoParams[KernelProfilingInfoCeiling];
   1253 EnumParameters CapabilityParams[CapabilityCeiling];
   1254 
   1255 // Set up all the parameterizing descriptions of the opcodes, operands, etc.
   1256 void Parameterize()
   1257 {
   1258     // only do this once.
   1259     static bool initialized = false;
   1260     if (initialized)
   1261         return;
   1262     initialized = true;
   1263 
   1264     // Exceptions to having a result <id> and a resulting type <id>.
   1265     // (Everything is initialized to have both).
   1266 
   1267     InstructionDesc[OpNop].setResultAndType(false, false);
   1268     InstructionDesc[OpSource].setResultAndType(false, false);
   1269     InstructionDesc[OpSourceContinued].setResultAndType(false, false);
   1270     InstructionDesc[OpSourceExtension].setResultAndType(false, false);
   1271     InstructionDesc[OpExtension].setResultAndType(false, false);
   1272     InstructionDesc[OpExtInstImport].setResultAndType(true, false);
   1273     InstructionDesc[OpCapability].setResultAndType(false, false);
   1274     InstructionDesc[OpMemoryModel].setResultAndType(false, false);
   1275     InstructionDesc[OpEntryPoint].setResultAndType(false, false);
   1276     InstructionDesc[OpExecutionMode].setResultAndType(false, false);
   1277     InstructionDesc[OpTypeVoid].setResultAndType(true, false);
   1278     InstructionDesc[OpTypeBool].setResultAndType(true, false);
   1279     InstructionDesc[OpTypeInt].setResultAndType(true, false);
   1280     InstructionDesc[OpTypeFloat].setResultAndType(true, false);
   1281     InstructionDesc[OpTypeVector].setResultAndType(true, false);
   1282     InstructionDesc[OpTypeMatrix].setResultAndType(true, false);
   1283     InstructionDesc[OpTypeImage].setResultAndType(true, false);
   1284     InstructionDesc[OpTypeSampler].setResultAndType(true, false);
   1285     InstructionDesc[OpTypeSampledImage].setResultAndType(true, false);
   1286     InstructionDesc[OpTypeArray].setResultAndType(true, false);
   1287     InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false);
   1288     InstructionDesc[OpTypeStruct].setResultAndType(true, false);
   1289     InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
   1290     InstructionDesc[OpTypePointer].setResultAndType(true, false);
   1291     InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
   1292     InstructionDesc[OpTypeFunction].setResultAndType(true, false);
   1293     InstructionDesc[OpTypeEvent].setResultAndType(true, false);
   1294     InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
   1295     InstructionDesc[OpTypeReserveId].setResultAndType(true, false);
   1296     InstructionDesc[OpTypeQueue].setResultAndType(true, false);
   1297     InstructionDesc[OpTypePipe].setResultAndType(true, false);
   1298     InstructionDesc[OpFunctionEnd].setResultAndType(false, false);
   1299     InstructionDesc[OpStore].setResultAndType(false, false);
   1300     InstructionDesc[OpImageWrite].setResultAndType(false, false);
   1301     InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
   1302     InstructionDesc[OpDecorate].setResultAndType(false, false);
   1303     InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
   1304     InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
   1305     InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
   1306     InstructionDesc[OpName].setResultAndType(false, false);
   1307     InstructionDesc[OpMemberName].setResultAndType(false, false);
   1308     InstructionDesc[OpString].setResultAndType(true, false);
   1309     InstructionDesc[OpLine].setResultAndType(false, false);
   1310     InstructionDesc[OpNoLine].setResultAndType(false, false);
   1311     InstructionDesc[OpCopyMemory].setResultAndType(false, false);
   1312     InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
   1313     InstructionDesc[OpEmitVertex].setResultAndType(false, false);
   1314     InstructionDesc[OpEndPrimitive].setResultAndType(false, false);
   1315     InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false);
   1316     InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false);
   1317     InstructionDesc[OpControlBarrier].setResultAndType(false, false);
   1318     InstructionDesc[OpMemoryBarrier].setResultAndType(false, false);
   1319     InstructionDesc[OpAtomicStore].setResultAndType(false, false);
   1320     InstructionDesc[OpLoopMerge].setResultAndType(false, false);
   1321     InstructionDesc[OpSelectionMerge].setResultAndType(false, false);
   1322     InstructionDesc[OpLabel].setResultAndType(true, false);
   1323     InstructionDesc[OpBranch].setResultAndType(false, false);
   1324     InstructionDesc[OpBranchConditional].setResultAndType(false, false);
   1325     InstructionDesc[OpSwitch].setResultAndType(false, false);
   1326     InstructionDesc[OpKill].setResultAndType(false, false);
   1327     InstructionDesc[OpReturn].setResultAndType(false, false);
   1328     InstructionDesc[OpReturnValue].setResultAndType(false, false);
   1329     InstructionDesc[OpUnreachable].setResultAndType(false, false);
   1330     InstructionDesc[OpLifetimeStart].setResultAndType(false, false);
   1331     InstructionDesc[OpLifetimeStop].setResultAndType(false, false);
   1332     InstructionDesc[OpCommitReadPipe].setResultAndType(false, false);
   1333     InstructionDesc[OpCommitWritePipe].setResultAndType(false, false);
   1334     InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false);
   1335     InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false);
   1336     InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false);
   1337     InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
   1338     InstructionDesc[OpRetainEvent].setResultAndType(false, false);
   1339     InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
   1340     InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
   1341     InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
   1342 
   1343     // Specific additional context-dependent operands
   1344 
   1345     ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
   1346 
   1347     ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
   1348     ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
   1349     ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'");
   1350 
   1351     ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'");
   1352     ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'");
   1353     ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'");
   1354 
   1355     ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
   1356     ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
   1357 
   1358     DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
   1359     DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
   1360     DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
   1361     DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
   1362     DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
   1363     DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
   1364     DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
   1365     DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
   1366     DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
   1367     DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
   1368     DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
   1369     DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
   1370     DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
   1371     DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
   1372     DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
   1373     DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
   1374     DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
   1375     DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
   1376     DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
   1377     DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
   1378 
   1379     OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0);
   1380     OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams);
   1381     OperandClassParams[OperandAddressing].set(AddressingModelCeiling, AddressingString, AddressingParams);
   1382     OperandClassParams[OperandMemory].set(MemoryModelCeiling, MemoryString, MemoryParams);
   1383     OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
   1384     OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
   1385     OperandClassParams[OperandStorage].set(StorageClassCeiling, StorageClassString, StorageParams);
   1386     OperandClassParams[OperandDimensionality].set(DimensionCeiling, DimensionString, DimensionalityParams);
   1387     OperandClassParams[OperandSamplerAddressingMode].set(SamplerAddressingModeCeiling, SamplerAddressingModeString, SamplerAddressingModeParams);
   1388     OperandClassParams[OperandSamplerFilterMode].set(SamplerFilterModeCeiling, SamplerFilterModeString, SamplerFilterModeParams);
   1389     OperandClassParams[OperandSamplerImageFormat].set(ImageFormatCeiling, ImageFormatString, ImageFormatParams);
   1390     OperandClassParams[OperandImageChannelOrder].set(ImageChannelOrderCeiling, ImageChannelOrderString, ImageChannelOrderParams);
   1391     OperandClassParams[OperandImageChannelDataType].set(ImageChannelDataTypeCeiling, ImageChannelDataTypeString, ImageChannelDataTypeParams);
   1392     OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
   1393     OperandClassParams[OperandFPFastMath].set(FPFastMathCeiling, FPFastMathString, FPFastMathParams, true);
   1394     OperandClassParams[OperandFPRoundingMode].set(FPRoundingModeCeiling, FPRoundingModeString, FPRoundingModeParams);
   1395     OperandClassParams[OperandLinkageType].set(LinkageTypeCeiling, LinkageTypeString, LinkageTypeParams);
   1396     OperandClassParams[OperandFuncParamAttr].set(FuncParamAttrCeiling, FuncParamAttrString, FuncParamAttrParams);
   1397     OperandClassParams[OperandAccessQualifier].set(AccessQualifierCeiling, AccessQualifierString, AccessQualifierParams);
   1398     OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
   1399     OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
   1400     OperandClassParams[OperandBuiltIn].set(BuiltInCeiling, BuiltInString, BuiltInParams);
   1401     OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
   1402     OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
   1403     OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
   1404     OperandClassParams[OperandMemorySemantics].set(MemorySemanticsCeiling, MemorySemanticsString, MemorySemanticsParams, true);
   1405     OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
   1406     OperandClassParams[OperandScope].set(ScopeCeiling, ScopeString, ScopeParams);
   1407     OperandClassParams[OperandGroupOperation].set(GroupOperationCeiling, GroupOperationString, GroupOperationParams);
   1408     OperandClassParams[OperandKernelEnqueueFlags].set(KernelEnqueueFlagsCeiling, KernelEnqueueFlagsString, KernelEnqueueFlagsParams);
   1409     OperandClassParams[OperandKernelProfilingInfo].set(KernelProfilingInfoCeiling, KernelProfilingInfoString, KernelProfilingInfoParams, true);
   1410     OperandClassParams[OperandCapability].set(CapabilityCeiling, CapabilityString, CapabilityParams);
   1411     OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0);
   1412 
   1413     CapabilityParams[CapabilityShader].caps.push_back(CapabilityMatrix);
   1414     CapabilityParams[CapabilityGeometry].caps.push_back(CapabilityShader);
   1415     CapabilityParams[CapabilityTessellation].caps.push_back(CapabilityShader);
   1416     CapabilityParams[CapabilityVector16].caps.push_back(CapabilityKernel);
   1417     CapabilityParams[CapabilityFloat16Buffer].caps.push_back(CapabilityKernel);
   1418     CapabilityParams[CapabilityInt64Atomics].caps.push_back(CapabilityInt64);
   1419     CapabilityParams[CapabilityImageBasic].caps.push_back(CapabilityKernel);
   1420     CapabilityParams[CapabilityImageReadWrite].caps.push_back(CapabilityImageBasic);
   1421     CapabilityParams[CapabilityImageMipmap].caps.push_back(CapabilityImageBasic);
   1422     CapabilityParams[CapabilityPipes].caps.push_back(CapabilityKernel);
   1423     CapabilityParams[CapabilityDeviceEnqueue].caps.push_back(CapabilityKernel);
   1424     CapabilityParams[CapabilityLiteralSampler].caps.push_back(CapabilityKernel);
   1425     CapabilityParams[CapabilityAtomicStorage].caps.push_back(CapabilityShader);
   1426     CapabilityParams[CapabilitySampleRateShading].caps.push_back(CapabilityShader);
   1427     CapabilityParams[CapabilityTessellationPointSize].caps.push_back(CapabilityTessellation);
   1428     CapabilityParams[CapabilityGeometryPointSize].caps.push_back(CapabilityGeometry);
   1429     CapabilityParams[CapabilityImageGatherExtended].caps.push_back(CapabilityShader);
   1430     CapabilityParams[CapabilityStorageImageExtendedFormats].caps.push_back(CapabilityShader);
   1431     CapabilityParams[CapabilityStorageImageMultisample].caps.push_back(CapabilityShader);
   1432     CapabilityParams[CapabilityUniformBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
   1433     CapabilityParams[CapabilitySampledImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
   1434     CapabilityParams[CapabilityStorageBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
   1435     CapabilityParams[CapabilityStorageImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
   1436     CapabilityParams[CapabilityClipDistance].caps.push_back(CapabilityShader);
   1437     CapabilityParams[CapabilityCullDistance].caps.push_back(CapabilityShader);
   1438     CapabilityParams[CapabilityGenericPointer].caps.push_back(CapabilityAddresses);
   1439     CapabilityParams[CapabilityInt8].caps.push_back(CapabilityKernel);
   1440     CapabilityParams[CapabilityInputAttachment].caps.push_back(CapabilityShader);
   1441     CapabilityParams[CapabilityMinLod].caps.push_back(CapabilityShader);
   1442     CapabilityParams[CapabilitySparseResidency].caps.push_back(CapabilityShader);
   1443     CapabilityParams[CapabilitySampled1D].caps.push_back(CapabilityShader);
   1444     CapabilityParams[CapabilitySampledRect].caps.push_back(CapabilityShader);
   1445     CapabilityParams[CapabilitySampledBuffer].caps.push_back(CapabilityShader);
   1446     CapabilityParams[CapabilitySampledCubeArray].caps.push_back(CapabilityShader);
   1447     CapabilityParams[CapabilityImageMSArray].caps.push_back(CapabilityShader);
   1448     CapabilityParams[CapabilityImage1D].caps.push_back(CapabilitySampled1D);
   1449     CapabilityParams[CapabilityImageRect].caps.push_back(CapabilitySampledRect);
   1450     CapabilityParams[CapabilityImageBuffer].caps.push_back(CapabilitySampledBuffer);
   1451     CapabilityParams[CapabilityImageCubeArray].caps.push_back(CapabilitySampledCubeArray);
   1452     CapabilityParams[CapabilityImageQuery].caps.push_back(CapabilityShader);
   1453     CapabilityParams[CapabilityDerivativeControl].caps.push_back(CapabilityShader);
   1454     CapabilityParams[CapabilityInterpolationFunction].caps.push_back(CapabilityShader);
   1455     CapabilityParams[CapabilityTransformFeedback].caps.push_back(CapabilityShader);
   1456     CapabilityParams[CapabilityGeometryStreams].caps.push_back(CapabilityGeometry);
   1457     CapabilityParams[CapabilityStorageImageReadWithoutFormat].caps.push_back(CapabilityShader);
   1458     CapabilityParams[CapabilityStorageImageWriteWithoutFormat].caps.push_back(CapabilityShader);
   1459     CapabilityParams[CapabilityMultiViewport].caps.push_back(CapabilityGeometry);
   1460 
   1461     AddressingParams[AddressingModelPhysical32].caps.push_back(CapabilityAddresses);
   1462     AddressingParams[AddressingModelPhysical64].caps.push_back(CapabilityAddresses);
   1463 
   1464     MemoryParams[MemoryModelSimple].caps.push_back(CapabilityShader);
   1465     MemoryParams[MemoryModelGLSL450].caps.push_back(CapabilityShader);
   1466     MemoryParams[MemoryModelOpenCL].caps.push_back(CapabilityKernel);
   1467 
   1468     MemorySemanticsParams[MemorySemanticsUniformMemoryShift].caps.push_back(CapabilityShader);
   1469     MemorySemanticsParams[MemorySemanticsAtomicCounterMemoryShift].caps.push_back(CapabilityAtomicStorage);
   1470 
   1471     ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapabilityShader);
   1472     ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapabilityTessellation);
   1473     ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapabilityTessellation);
   1474     ExecutionModelParams[ExecutionModelGeometry].caps.push_back(CapabilityGeometry);
   1475     ExecutionModelParams[ExecutionModelFragment].caps.push_back(CapabilityShader);
   1476     ExecutionModelParams[ExecutionModelGLCompute].caps.push_back(CapabilityShader);
   1477     ExecutionModelParams[ExecutionModelKernel].caps.push_back(CapabilityKernel);
   1478 
   1479     // Storage capabilites
   1480     StorageParams[StorageClassInput].caps.push_back(CapabilityShader);
   1481     StorageParams[StorageClassUniform].caps.push_back(CapabilityShader);
   1482     StorageParams[StorageClassOutput].caps.push_back(CapabilityShader);
   1483     StorageParams[StorageClassPrivate].caps.push_back(CapabilityShader);
   1484     StorageParams[StorageClassGeneric].caps.push_back(CapabilityKernel);
   1485     StorageParams[StorageClassAtomicCounter].caps.push_back(CapabilityAtomicStorage);
   1486     StorageParams[StorageClassPushConstant].caps.push_back(CapabilityShader);
   1487 
   1488     // Sampler Filter & Addressing mode capabilities
   1489     SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapabilityKernel);
   1490     SamplerAddressingModeParams[SamplerAddressingModeClampToEdge].caps.push_back(CapabilityKernel);
   1491     SamplerAddressingModeParams[SamplerAddressingModeClamp].caps.push_back(CapabilityKernel);
   1492     SamplerAddressingModeParams[SamplerAddressingModeRepeat].caps.push_back(CapabilityKernel);
   1493     SamplerAddressingModeParams[SamplerAddressingModeRepeatMirrored].caps.push_back(CapabilityKernel);
   1494 
   1495     SamplerFilterModeParams[SamplerFilterModeNearest].caps.push_back(CapabilityKernel);
   1496     SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapabilityKernel);
   1497 
   1498     // image format capabilities
   1499 
   1500     // ES/Desktop float
   1501     ImageFormatParams[ImageFormatRgba32f].caps.push_back(CapabilityShader);
   1502     ImageFormatParams[ImageFormatRgba16f].caps.push_back(CapabilityShader);
   1503     ImageFormatParams[ImageFormatR32f].caps.push_back(CapabilityShader);
   1504     ImageFormatParams[ImageFormatRgba8].caps.push_back(CapabilityShader);
   1505     ImageFormatParams[ImageFormatRgba8Snorm].caps.push_back(CapabilityShader);
   1506 
   1507     // Desktop float
   1508     ImageFormatParams[ImageFormatRg32f].caps.push_back(CapabilityStorageImageExtendedFormats);
   1509     ImageFormatParams[ImageFormatRg16f].caps.push_back(CapabilityStorageImageExtendedFormats);
   1510     ImageFormatParams[ImageFormatR11fG11fB10f].caps.push_back(CapabilityStorageImageExtendedFormats);
   1511     ImageFormatParams[ImageFormatR16f].caps.push_back(CapabilityStorageImageExtendedFormats);
   1512     ImageFormatParams[ImageFormatRgba16].caps.push_back(CapabilityStorageImageExtendedFormats);
   1513     ImageFormatParams[ImageFormatRgb10A2].caps.push_back(CapabilityStorageImageExtendedFormats);
   1514     ImageFormatParams[ImageFormatRg16].caps.push_back(CapabilityStorageImageExtendedFormats);
   1515     ImageFormatParams[ImageFormatRg8].caps.push_back(CapabilityStorageImageExtendedFormats);
   1516     ImageFormatParams[ImageFormatR16].caps.push_back(CapabilityStorageImageExtendedFormats);
   1517     ImageFormatParams[ImageFormatR8].caps.push_back(CapabilityStorageImageExtendedFormats);
   1518     ImageFormatParams[ImageFormatRgba16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
   1519     ImageFormatParams[ImageFormatRg16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
   1520     ImageFormatParams[ImageFormatRg8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
   1521     ImageFormatParams[ImageFormatR16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
   1522     ImageFormatParams[ImageFormatR8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
   1523 
   1524     // ES/Desktop int
   1525     ImageFormatParams[ImageFormatRgba32i].caps.push_back(CapabilityShader);
   1526     ImageFormatParams[ImageFormatRgba16i].caps.push_back(CapabilityShader);
   1527     ImageFormatParams[ImageFormatRgba8i].caps.push_back(CapabilityShader);
   1528     ImageFormatParams[ImageFormatR32i].caps.push_back(CapabilityShader);
   1529 
   1530     // Desktop int
   1531     ImageFormatParams[ImageFormatRg32i].caps.push_back(CapabilityStorageImageExtendedFormats);
   1532     ImageFormatParams[ImageFormatRg16i].caps.push_back(CapabilityStorageImageExtendedFormats);
   1533     ImageFormatParams[ImageFormatRg8i].caps.push_back(CapabilityStorageImageExtendedFormats);
   1534     ImageFormatParams[ImageFormatR16i].caps.push_back(CapabilityStorageImageExtendedFormats);
   1535     ImageFormatParams[ImageFormatR8i].caps.push_back(CapabilityStorageImageExtendedFormats);
   1536 
   1537     // ES/Desktop uint
   1538     ImageFormatParams[ImageFormatRgba32ui].caps.push_back(CapabilityShader);
   1539     ImageFormatParams[ImageFormatRgba16ui].caps.push_back(CapabilityShader);
   1540     ImageFormatParams[ImageFormatRgba8ui].caps.push_back(CapabilityShader);
   1541     ImageFormatParams[ImageFormatR32ui].caps.push_back(CapabilityShader);
   1542 
   1543     // Desktop uint
   1544     ImageFormatParams[ImageFormatRgb10a2ui].caps.push_back(CapabilityStorageImageExtendedFormats);
   1545     ImageFormatParams[ImageFormatRg32ui].caps.push_back(CapabilityStorageImageExtendedFormats);
   1546     ImageFormatParams[ImageFormatRg16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
   1547     ImageFormatParams[ImageFormatRg8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
   1548     ImageFormatParams[ImageFormatR16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
   1549     ImageFormatParams[ImageFormatR8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
   1550 
   1551     // image channel order capabilities
   1552     for (int i = 0; i < ImageChannelOrderCeiling; ++i) {
   1553         ImageChannelOrderParams[i].caps.push_back(CapabilityKernel);
   1554     }
   1555 
   1556     // image channel type capabilities
   1557     for (int i = 0; i < ImageChannelDataTypeCeiling; ++i) {
   1558         ImageChannelDataTypeParams[i].caps.push_back(CapabilityKernel);
   1559     }
   1560 
   1561     // image lookup operands
   1562     ImageOperandsParams[ImageOperandsBiasShift].caps.push_back(CapabilityShader);
   1563     ImageOperandsParams[ImageOperandsOffsetShift].caps.push_back(CapabilityImageGatherExtended);
   1564     ImageOperandsParams[ImageOperandsMinLodShift].caps.push_back(CapabilityMinLod);
   1565 
   1566     // fast math flags capabilities
   1567     for (int i = 0; i < FPFastMathCeiling; ++i) {
   1568         FPFastMathParams[i].caps.push_back(CapabilityKernel);
   1569     }
   1570 
   1571     // fp rounding mode capabilities
   1572     for (int i = 0; i < FPRoundingModeCeiling; ++i) {
   1573         FPRoundingModeParams[i].caps.push_back(CapabilityKernel);
   1574     }
   1575 
   1576     // linkage types
   1577     for (int i = 0; i < LinkageTypeCeiling; ++i) {
   1578         LinkageTypeParams[i].caps.push_back(CapabilityLinkage);
   1579     }
   1580 
   1581     // function argument types
   1582     for (int i = 0; i < FuncParamAttrCeiling; ++i) {
   1583         FuncParamAttrParams[i].caps.push_back(CapabilityKernel);
   1584     }
   1585 
   1586     // function argument types
   1587     for (int i = 0; i < AccessQualifierCeiling; ++i) {
   1588         AccessQualifierParams[i].caps.push_back(CapabilityKernel);
   1589     }
   1590 
   1591     ExecutionModeParams[ExecutionModeInvocations].caps.push_back(CapabilityGeometry);
   1592     ExecutionModeParams[ExecutionModeSpacingEqual].caps.push_back(CapabilityTessellation);
   1593     ExecutionModeParams[ExecutionModeSpacingFractionalEven].caps.push_back(CapabilityTessellation);
   1594     ExecutionModeParams[ExecutionModeSpacingFractionalOdd].caps.push_back(CapabilityTessellation);
   1595     ExecutionModeParams[ExecutionModeVertexOrderCw].caps.push_back(CapabilityTessellation);
   1596     ExecutionModeParams[ExecutionModeVertexOrderCcw].caps.push_back(CapabilityTessellation);
   1597     ExecutionModeParams[ExecutionModePixelCenterInteger].caps.push_back(CapabilityShader);
   1598     ExecutionModeParams[ExecutionModeOriginUpperLeft].caps.push_back(CapabilityShader);
   1599     ExecutionModeParams[ExecutionModeOriginLowerLeft].caps.push_back(CapabilityShader);
   1600     ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapabilityShader);
   1601     ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapabilityTessellation);
   1602     ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityTransformFeedback);
   1603     ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapabilityShader);
   1604     ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapabilityShader);
   1605     ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapabilityShader);
   1606     ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapabilityShader);
   1607     ExecutionModeParams[ExecutionModeLocalSizeHint].caps.push_back(CapabilityKernel);
   1608     ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapabilityGeometry);
   1609     ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapabilityGeometry);
   1610     ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapabilityGeometry);
   1611     ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityGeometry);
   1612     ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityTessellation);
   1613     ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapabilityGeometry);
   1614     ExecutionModeParams[ExecutionModeQuads].caps.push_back(CapabilityTessellation);
   1615     ExecutionModeParams[ExecutionModeIsolines].caps.push_back(CapabilityTessellation);
   1616     ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityGeometry);
   1617     ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityTessellation);
   1618     ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapabilityGeometry);
   1619     ExecutionModeParams[ExecutionModeOutputLineStrip].caps.push_back(CapabilityGeometry);
   1620     ExecutionModeParams[ExecutionModeOutputTriangleStrip].caps.push_back(CapabilityGeometry);
   1621     ExecutionModeParams[ExecutionModeVecTypeHint].caps.push_back(CapabilityKernel);
   1622     ExecutionModeParams[ExecutionModeContractionOff].caps.push_back(CapabilityKernel);
   1623 
   1624     DecorationParams[DecorationRelaxedPrecision].caps.push_back(CapabilityShader);
   1625     DecorationParams[DecorationBlock].caps.push_back(CapabilityShader);
   1626     DecorationParams[DecorationBufferBlock].caps.push_back(CapabilityShader);
   1627     DecorationParams[DecorationRowMajor].caps.push_back(CapabilityMatrix);
   1628     DecorationParams[DecorationColMajor].caps.push_back(CapabilityMatrix);
   1629     DecorationParams[DecorationGLSLShared].caps.push_back(CapabilityShader);
   1630     DecorationParams[DecorationGLSLPacked].caps.push_back(CapabilityShader);
   1631     DecorationParams[DecorationNoPerspective].caps.push_back(CapabilityShader);
   1632     DecorationParams[DecorationFlat].caps.push_back(CapabilityShader);
   1633     DecorationParams[DecorationPatch].caps.push_back(CapabilityTessellation);
   1634     DecorationParams[DecorationCentroid].caps.push_back(CapabilityShader);
   1635     DecorationParams[DecorationSample].caps.push_back(CapabilitySampleRateShading);
   1636     DecorationParams[DecorationInvariant].caps.push_back(CapabilityShader);
   1637     DecorationParams[DecorationConstant].caps.push_back(CapabilityKernel);
   1638     DecorationParams[DecorationUniform].caps.push_back(CapabilityShader);
   1639     DecorationParams[DecorationCPacked].caps.push_back(CapabilityKernel);
   1640     DecorationParams[DecorationSaturatedConversion].caps.push_back(CapabilityKernel);
   1641     DecorationParams[DecorationStream].caps.push_back(CapabilityGeometryStreams);
   1642     DecorationParams[DecorationLocation].caps.push_back(CapabilityShader);
   1643     DecorationParams[DecorationComponent].caps.push_back(CapabilityShader);
   1644     DecorationParams[DecorationOffset].caps.push_back(CapabilityShader);
   1645     DecorationParams[DecorationIndex].caps.push_back(CapabilityShader);
   1646     DecorationParams[DecorationBinding].caps.push_back(CapabilityShader);
   1647     DecorationParams[DecorationDescriptorSet].caps.push_back(CapabilityShader);
   1648     DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityTransformFeedback);
   1649     DecorationParams[DecorationXfbStride].caps.push_back(CapabilityTransformFeedback);
   1650     DecorationParams[DecorationArrayStride].caps.push_back(CapabilityShader);
   1651     DecorationParams[DecorationMatrixStride].caps.push_back(CapabilityMatrix);
   1652     DecorationParams[DecorationFuncParamAttr].caps.push_back(CapabilityKernel);
   1653     DecorationParams[DecorationFPRoundingMode].caps.push_back(CapabilityKernel);
   1654     DecorationParams[DecorationFPFastMathMode].caps.push_back(CapabilityKernel);
   1655     DecorationParams[DecorationLinkageAttributes].caps.push_back(CapabilityLinkage);
   1656     DecorationParams[DecorationSpecId].caps.push_back(CapabilityShader);
   1657     DecorationParams[DecorationNoContraction].caps.push_back(CapabilityShader);
   1658     DecorationParams[DecorationInputAttachmentIndex].caps.push_back(CapabilityInputAttachment);
   1659     DecorationParams[DecorationAlignment].caps.push_back(CapabilityKernel);
   1660 
   1661     BuiltInParams[BuiltInPosition].caps.push_back(CapabilityShader);
   1662     BuiltInParams[BuiltInPointSize].caps.push_back(CapabilityShader);
   1663     BuiltInParams[BuiltInClipDistance].caps.push_back(CapabilityClipDistance);
   1664     BuiltInParams[BuiltInCullDistance].caps.push_back(CapabilityCullDistance);
   1665 
   1666     BuiltInParams[BuiltInVertexId].caps.push_back(CapabilityShader);
   1667     BuiltInParams[BuiltInVertexId].desc = "Vertex ID, which takes on values 0, 1, 2, . . . .";
   1668 
   1669     BuiltInParams[BuiltInInstanceId].caps.push_back(CapabilityShader);
   1670     BuiltInParams[BuiltInInstanceId].desc = "Instance ID, which takes on values 0, 1, 2, . . . .";
   1671 
   1672     BuiltInParams[BuiltInVertexIndex].caps.push_back(CapabilityShader);
   1673     BuiltInParams[BuiltInVertexIndex].desc = "Vertex index, which takes on values base, base+1, base+2, . . . .";
   1674 
   1675     BuiltInParams[BuiltInInstanceIndex].caps.push_back(CapabilityShader);
   1676     BuiltInParams[BuiltInInstanceIndex].desc = "Instance index, which takes on values base, base+1, base+2, . . . .";
   1677 
   1678     BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityGeometry);
   1679     BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityTessellation);
   1680     BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityGeometry);
   1681     BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityTessellation);
   1682     BuiltInParams[BuiltInLayer].caps.push_back(CapabilityGeometry);
   1683     BuiltInParams[BuiltInViewportIndex].caps.push_back(CapabilityMultiViewport);
   1684     BuiltInParams[BuiltInTessLevelOuter].caps.push_back(CapabilityTessellation);
   1685     BuiltInParams[BuiltInTessLevelInner].caps.push_back(CapabilityTessellation);
   1686     BuiltInParams[BuiltInTessCoord].caps.push_back(CapabilityTessellation);
   1687     BuiltInParams[BuiltInPatchVertices].caps.push_back(CapabilityTessellation);
   1688     BuiltInParams[BuiltInFragCoord].caps.push_back(CapabilityShader);
   1689     BuiltInParams[BuiltInPointCoord].caps.push_back(CapabilityShader);
   1690     BuiltInParams[BuiltInFrontFacing].caps.push_back(CapabilityShader);
   1691     BuiltInParams[BuiltInSampleId].caps.push_back(CapabilitySampleRateShading);
   1692     BuiltInParams[BuiltInSamplePosition].caps.push_back(CapabilitySampleRateShading);
   1693     BuiltInParams[BuiltInSampleMask].caps.push_back(CapabilitySampleRateShading);
   1694     BuiltInParams[BuiltInFragDepth].caps.push_back(CapabilityShader);
   1695     BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapabilityShader);
   1696     BuiltInParams[BuiltInWorkDim].caps.push_back(CapabilityKernel);
   1697     BuiltInParams[BuiltInGlobalSize].caps.push_back(CapabilityKernel);
   1698     BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapabilityKernel);
   1699     BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapabilityKernel);
   1700     BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapabilityKernel);
   1701 
   1702     BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapabilityKernel);
   1703     BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapabilityKernel);
   1704     BuiltInParams[BuiltInNumSubgroups].caps.push_back(CapabilityKernel);
   1705     BuiltInParams[BuiltInNumEnqueuedSubgroups].caps.push_back(CapabilityKernel);
   1706     BuiltInParams[BuiltInSubgroupId].caps.push_back(CapabilityKernel);
   1707     BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapabilityKernel);
   1708 
   1709     DimensionalityParams[Dim1D].caps.push_back(CapabilitySampled1D);
   1710     DimensionalityParams[DimCube].caps.push_back(CapabilityShader);
   1711     DimensionalityParams[DimRect].caps.push_back(CapabilitySampledRect);
   1712     DimensionalityParams[DimBuffer].caps.push_back(CapabilitySampledBuffer);
   1713     DimensionalityParams[DimSubpassData].caps.push_back(CapabilityInputAttachment);
   1714 
   1715     // Group Operations
   1716     for (int i = 0; i < GroupOperationCeiling; ++i) {
   1717         GroupOperationParams[i].caps.push_back(CapabilityKernel);
   1718     }
   1719 
   1720     // Enqueue flags
   1721     for (int i = 0; i < KernelEnqueueFlagsCeiling; ++i) {
   1722         KernelEnqueueFlagsParams[i].caps.push_back(CapabilityKernel);
   1723     }
   1724 
   1725     // Profiling info
   1726     KernelProfilingInfoParams[0].caps.push_back(CapabilityKernel);
   1727 
   1728     // set name of operator, an initial set of <id> style operands, and the description
   1729 
   1730     InstructionDesc[OpSource].operands.push(OperandSource, "");
   1731     InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
   1732     InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
   1733     InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
   1734 
   1735     InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
   1736 
   1737     InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
   1738 
   1739     InstructionDesc[OpName].operands.push(OperandId, "'Target'");
   1740     InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'");
   1741 
   1742     InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'");
   1743     InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'");
   1744     InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'");
   1745 
   1746     InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
   1747 
   1748     InstructionDesc[OpLine].operands.push(OperandId, "'File'");
   1749     InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
   1750     InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
   1751 
   1752     InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'");
   1753 
   1754     InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'");
   1755 
   1756     InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'");
   1757 
   1758     InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, "");
   1759     InstructionDesc[OpMemoryModel].operands.push(OperandMemory, "");
   1760 
   1761     InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
   1762     InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
   1763     InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
   1764     InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
   1765 
   1766     InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
   1767     InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
   1768     InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
   1769 
   1770     InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
   1771     InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
   1772 
   1773     InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'");
   1774 
   1775     InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
   1776     InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
   1777 
   1778     InstructionDesc[OpTypeMatrix].capabilities.push_back(CapabilityMatrix);
   1779     InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
   1780     InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
   1781 
   1782     InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'");
   1783     InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, "");
   1784     InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'");
   1785     InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'");
   1786     InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
   1787     InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
   1788     InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
   1789     InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
   1790 
   1791     InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
   1792 
   1793     InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
   1794     InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
   1795 
   1796     InstructionDesc[OpTypeRuntimeArray].capabilities.push_back(CapabilityShader);
   1797     InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
   1798 
   1799     InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
   1800 
   1801     InstructionDesc[OpTypeOpaque].capabilities.push_back(CapabilityKernel);
   1802     InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
   1803 
   1804     InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
   1805     InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
   1806 
   1807     InstructionDesc[OpTypeForwardPointer].capabilities.push_back(CapabilityAddresses);
   1808     InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
   1809     InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
   1810 
   1811     InstructionDesc[OpTypeEvent].capabilities.push_back(CapabilityKernel);
   1812 
   1813     InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityDeviceEnqueue);
   1814 
   1815     InstructionDesc[OpTypeReserveId].capabilities.push_back(CapabilityPipes);
   1816 
   1817     InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityDeviceEnqueue);
   1818 
   1819     InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
   1820     InstructionDesc[OpTypePipe].capabilities.push_back(CapabilityPipes);
   1821 
   1822     InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
   1823     InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
   1824 
   1825     InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'");
   1826 
   1827     InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
   1828 
   1829     InstructionDesc[OpConstantSampler].capabilities.push_back(CapabilityLiteralSampler);
   1830     InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
   1831     InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
   1832     InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
   1833 
   1834     InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'");
   1835 
   1836     InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
   1837 
   1838     InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'");
   1839     InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
   1840 
   1841     InstructionDesc[OpVariable].operands.push(OperandStorage, "");
   1842     InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
   1843 
   1844     InstructionDesc[OpFunction].operands.push(OperandFunction, "");
   1845     InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
   1846 
   1847     InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'");
   1848     InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
   1849 
   1850     InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'");
   1851     InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
   1852     InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
   1853 
   1854     InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
   1855     InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
   1856 
   1857     InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
   1858     InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
   1859     InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
   1860 
   1861     InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
   1862 
   1863     InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'");
   1864     InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
   1865     InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
   1866 
   1867     InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
   1868     InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
   1869     InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
   1870     InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
   1871 
   1872     InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
   1873     InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
   1874 
   1875     InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'");
   1876     InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'");
   1877 
   1878     InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'");
   1879     InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'");
   1880 
   1881     InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'");
   1882     InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'");
   1883     InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'");
   1884 
   1885     InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'");
   1886     InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'");
   1887     InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'");
   1888 
   1889     InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'");
   1890 
   1891     InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'");
   1892     InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'");
   1893 
   1894     InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'");
   1895     InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'");
   1896     InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'");
   1897 
   1898     InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'");
   1899 
   1900     InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
   1901     InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
   1902     InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
   1903 
   1904     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
   1905     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
   1906     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
   1907     InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
   1908 
   1909     InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapabilityAddresses);
   1910 
   1911     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
   1912     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
   1913 
   1914     InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
   1915 
   1916     InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
   1917     InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
   1918     InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
   1919     InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
   1920 
   1921     InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
   1922     InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
   1923     InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
   1924     InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
   1925     InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
   1926 
   1927     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
   1928     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
   1929     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
   1930     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
   1931     InstructionDesc[OpImageSampleImplicitLod].capabilities.push_back(CapabilityShader);
   1932 
   1933     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
   1934     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
   1935     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
   1936     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
   1937 
   1938     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
   1939     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
   1940     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
   1941     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
   1942     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
   1943     InstructionDesc[OpImageSampleDrefImplicitLod].capabilities.push_back(CapabilityShader);
   1944 
   1945     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
   1946     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
   1947     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
   1948     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
   1949     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
   1950     InstructionDesc[OpImageSampleDrefExplicitLod].capabilities.push_back(CapabilityShader);
   1951 
   1952     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
   1953     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
   1954     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
   1955     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
   1956     InstructionDesc[OpImageSampleProjImplicitLod].capabilities.push_back(CapabilityShader);
   1957 
   1958     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
   1959     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
   1960     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
   1961     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
   1962     InstructionDesc[OpImageSampleProjExplicitLod].capabilities.push_back(CapabilityShader);
   1963 
   1964     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
   1965     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
   1966     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
   1967     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
   1968     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
   1969     InstructionDesc[OpImageSampleProjDrefImplicitLod].capabilities.push_back(CapabilityShader);
   1970 
   1971     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
   1972     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
   1973     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
   1974     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
   1975     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
   1976     InstructionDesc[OpImageSampleProjDrefExplicitLod].capabilities.push_back(CapabilityShader);
   1977 
   1978     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
   1979     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
   1980     InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
   1981     InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
   1982 
   1983     InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
   1984     InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
   1985     InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
   1986     InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
   1987     InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
   1988     InstructionDesc[OpImageGather].capabilities.push_back(CapabilityShader);
   1989 
   1990     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
   1991     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
   1992     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
   1993     InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
   1994     InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
   1995     InstructionDesc[OpImageDrefGather].capabilities.push_back(CapabilityShader);
   1996 
   1997     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
   1998     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
   1999     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
   2000     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
   2001     InstructionDesc[OpImageSparseSampleImplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2002 
   2003     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
   2004     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
   2005     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
   2006     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
   2007     InstructionDesc[OpImageSparseSampleExplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2008 
   2009     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
   2010     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
   2011     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
   2012     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
   2013     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
   2014     InstructionDesc[OpImageSparseSampleDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2015 
   2016     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
   2017     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
   2018     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
   2019     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
   2020     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
   2021     InstructionDesc[OpImageSparseSampleDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2022 
   2023     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
   2024     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
   2025     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
   2026     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
   2027     InstructionDesc[OpImageSparseSampleProjImplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2028 
   2029     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
   2030     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
   2031     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
   2032     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
   2033     InstructionDesc[OpImageSparseSampleProjExplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2034 
   2035     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
   2036     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
   2037     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
   2038     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
   2039     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
   2040     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2041 
   2042     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
   2043     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
   2044     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
   2045     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
   2046     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
   2047     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
   2048 
   2049     InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
   2050     InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
   2051     InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
   2052     InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
   2053     InstructionDesc[OpImageSparseFetch].capabilities.push_back(CapabilitySparseResidency);
   2054 
   2055     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
   2056     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
   2057     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
   2058     InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
   2059     InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
   2060     InstructionDesc[OpImageSparseGather].capabilities.push_back(CapabilitySparseResidency);
   2061 
   2062     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
   2063     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
   2064     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
   2065     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
   2066     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
   2067     InstructionDesc[OpImageSparseDrefGather].capabilities.push_back(CapabilitySparseResidency);
   2068 
   2069     InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
   2070     InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
   2071     InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
   2072     InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
   2073     InstructionDesc[OpImageSparseRead].capabilities.push_back(CapabilitySparseResidency);
   2074 
   2075     InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
   2076     InstructionDesc[OpImageSparseTexelsResident].capabilities.push_back(CapabilitySparseResidency);
   2077 
   2078     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
   2079     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
   2080     InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityKernel);
   2081     InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityImageQuery);
   2082 
   2083     InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
   2084     InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityKernel);
   2085     InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityImageQuery);
   2086 
   2087     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
   2088     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
   2089     InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityImageQuery);
   2090 
   2091     InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
   2092     InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityKernel);
   2093     InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityImageQuery);
   2094 
   2095     InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
   2096     InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityKernel);
   2097     InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityImageQuery);
   2098 
   2099     InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
   2100     InstructionDesc[OpImageQueryFormat].capabilities.push_back(CapabilityKernel);
   2101 
   2102     InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
   2103     InstructionDesc[OpImageQueryOrder].capabilities.push_back(CapabilityKernel);
   2104 
   2105     InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
   2106     InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
   2107 
   2108     InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'");
   2109     InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'");
   2110 
   2111     InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
   2112     InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
   2113     InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
   2114     InstructionDesc[OpPtrAccessChain].capabilities.push_back(CapabilityAddresses);
   2115 
   2116     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
   2117     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
   2118     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
   2119     InstructionDesc[OpInBoundsPtrAccessChain].capabilities.push_back(CapabilityAddresses);
   2120 
   2121     InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
   2122 
   2123     InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
   2124 
   2125     InstructionDesc[OpNot].operands.push(OperandId, "'Operand'");
   2126 
   2127     InstructionDesc[OpAny].operands.push(OperandId, "'Vector'");
   2128 
   2129     InstructionDesc[OpAll].operands.push(OperandId, "'Vector'");
   2130 
   2131     InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'");
   2132 
   2133     InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'");
   2134 
   2135     InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'");
   2136 
   2137     InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'");
   2138 
   2139     InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'");
   2140 
   2141     InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'");
   2142 
   2143     InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
   2144 
   2145     InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
   2146     InstructionDesc[OpSatConvertSToU].capabilities.push_back(CapabilityKernel);
   2147 
   2148     InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
   2149     InstructionDesc[OpSatConvertUToS].capabilities.push_back(CapabilityKernel);
   2150 
   2151     InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
   2152     InstructionDesc[OpConvertPtrToU].capabilities.push_back(CapabilityAddresses);
   2153 
   2154     InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
   2155     InstructionDesc[OpConvertUToPtr].capabilities.push_back(CapabilityAddresses);
   2156 
   2157     InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
   2158     InstructionDesc[OpPtrCastToGeneric].capabilities.push_back(CapabilityKernel);
   2159 
   2160     InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
   2161     InstructionDesc[OpGenericCastToPtr].capabilities.push_back(CapabilityKernel);
   2162 
   2163     InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
   2164     InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
   2165     InstructionDesc[OpGenericCastToPtrExplicit].capabilities.push_back(CapabilityKernel);
   2166 
   2167     InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
   2168     InstructionDesc[OpGenericPtrMemSemantics].capabilities.push_back(CapabilityKernel);
   2169 
   2170     InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
   2171 
   2172     InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
   2173 
   2174     InstructionDesc[OpTranspose].capabilities.push_back(CapabilityMatrix);
   2175     InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
   2176 
   2177     InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
   2178 
   2179     InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
   2180 
   2181     InstructionDesc[OpIsFinite].capabilities.push_back(CapabilityKernel);
   2182     InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
   2183 
   2184     InstructionDesc[OpIsNormal].capabilities.push_back(CapabilityKernel);
   2185     InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
   2186 
   2187     InstructionDesc[OpSignBitSet].capabilities.push_back(CapabilityKernel);
   2188     InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
   2189 
   2190     InstructionDesc[OpLessOrGreater].capabilities.push_back(CapabilityKernel);
   2191     InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
   2192     InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
   2193 
   2194     InstructionDesc[OpOrdered].capabilities.push_back(CapabilityKernel);
   2195     InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
   2196     InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
   2197 
   2198     InstructionDesc[OpUnordered].capabilities.push_back(CapabilityKernel);
   2199     InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
   2200     InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
   2201 
   2202     InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
   2203     InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
   2204     InstructionDesc[OpArrayLength].capabilities.push_back(CapabilityShader);
   2205 
   2206     InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
   2207     InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
   2208 
   2209     InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'");
   2210     InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'");
   2211 
   2212     InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'");
   2213     InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'");
   2214 
   2215     InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'");
   2216     InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'");
   2217 
   2218     InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'");
   2219     InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'");
   2220 
   2221     InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'");
   2222     InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'");
   2223 
   2224     InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'");
   2225     InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'");
   2226 
   2227     InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'");
   2228     InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'");
   2229 
   2230     InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'");
   2231     InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'");
   2232 
   2233     InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'");
   2234     InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'");
   2235 
   2236     InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'");
   2237     InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'");
   2238 
   2239     InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'");
   2240     InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'");
   2241 
   2242     InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'");
   2243     InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'");
   2244 
   2245     InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'");
   2246     InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'");
   2247 
   2248     InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
   2249     InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
   2250 
   2251     InstructionDesc[OpMatrixTimesScalar].capabilities.push_back(CapabilityMatrix);
   2252     InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
   2253     InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
   2254 
   2255     InstructionDesc[OpVectorTimesMatrix].capabilities.push_back(CapabilityMatrix);
   2256     InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
   2257     InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
   2258 
   2259     InstructionDesc[OpMatrixTimesVector].capabilities.push_back(CapabilityMatrix);
   2260     InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
   2261     InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
   2262 
   2263     InstructionDesc[OpMatrixTimesMatrix].capabilities.push_back(CapabilityMatrix);
   2264     InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
   2265     InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
   2266 
   2267     InstructionDesc[OpOuterProduct].capabilities.push_back(CapabilityMatrix);
   2268     InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
   2269     InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
   2270 
   2271     InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
   2272     InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
   2273 
   2274     InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
   2275     InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
   2276 
   2277     InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
   2278     InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
   2279 
   2280     InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
   2281     InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
   2282 
   2283     InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
   2284     InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
   2285 
   2286     InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
   2287     InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
   2288 
   2289     InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'");
   2290     InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'");
   2291 
   2292     InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'");
   2293     InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'");
   2294 
   2295     InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'");
   2296     InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'");
   2297 
   2298     InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'");
   2299     InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'");
   2300 
   2301     InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'");
   2302     InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'");
   2303 
   2304     InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'");
   2305     InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'");
   2306 
   2307     InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'");
   2308 
   2309     InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'");
   2310     InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'");
   2311 
   2312     InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'");
   2313     InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'");
   2314 
   2315     InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
   2316     InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
   2317 
   2318     InstructionDesc[OpBitFieldInsert].capabilities.push_back(CapabilityShader);
   2319     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
   2320     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
   2321     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
   2322     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
   2323 
   2324     InstructionDesc[OpBitFieldSExtract].capabilities.push_back(CapabilityShader);
   2325     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
   2326     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
   2327     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
   2328 
   2329     InstructionDesc[OpBitFieldUExtract].capabilities.push_back(CapabilityShader);
   2330     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
   2331     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
   2332     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
   2333 
   2334     InstructionDesc[OpBitReverse].capabilities.push_back(CapabilityShader);
   2335     InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
   2336 
   2337     InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
   2338 
   2339     InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'");
   2340     InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'");
   2341     InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'");
   2342 
   2343     InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'");
   2344     InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'");
   2345 
   2346     InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'");
   2347     InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'");
   2348 
   2349     InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'");
   2350     InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'");
   2351 
   2352     InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'");
   2353     InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'");
   2354 
   2355     InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'");
   2356     InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'");
   2357 
   2358     InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'");
   2359     InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'");
   2360 
   2361     InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'");
   2362     InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'");
   2363 
   2364     InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'");
   2365     InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'");
   2366 
   2367     InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'");
   2368     InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'");
   2369 
   2370     InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'");
   2371     InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'");
   2372 
   2373     InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'");
   2374     InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'");
   2375 
   2376     InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'");
   2377     InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'");
   2378 
   2379     InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'");
   2380     InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'");
   2381 
   2382     InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'");
   2383     InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'");
   2384 
   2385     InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'");
   2386     InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'");
   2387 
   2388     InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'");
   2389     InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'");
   2390 
   2391     InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'");
   2392     InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'");
   2393 
   2394     InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'");
   2395     InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'");
   2396 
   2397     InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
   2398     InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
   2399 
   2400     InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
   2401     InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
   2402 
   2403     InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
   2404     InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
   2405 
   2406     InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
   2407     InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
   2408 
   2409     InstructionDesc[OpDPdx].capabilities.push_back(CapabilityShader);
   2410     InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
   2411 
   2412     InstructionDesc[OpDPdy].capabilities.push_back(CapabilityShader);
   2413     InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
   2414 
   2415     InstructionDesc[OpFwidth].capabilities.push_back(CapabilityShader);
   2416     InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
   2417 
   2418     InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityDerivativeControl);
   2419     InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
   2420 
   2421     InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityDerivativeControl);
   2422     InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
   2423 
   2424     InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityDerivativeControl);
   2425     InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
   2426 
   2427     InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityDerivativeControl);
   2428     InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
   2429 
   2430     InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityDerivativeControl);
   2431     InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
   2432 
   2433     InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityDerivativeControl);
   2434     InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
   2435 
   2436     InstructionDesc[OpEmitVertex].capabilities.push_back(CapabilityGeometry);
   2437 
   2438     InstructionDesc[OpEndPrimitive].capabilities.push_back(CapabilityGeometry);
   2439 
   2440     InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
   2441     InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometryStreams);
   2442 
   2443     InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
   2444     InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometryStreams);
   2445 
   2446     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
   2447     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
   2448     InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
   2449 
   2450     InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'");
   2451     InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
   2452 
   2453     InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'");
   2454     InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'");
   2455     InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'");
   2456 
   2457     InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'");
   2458     InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'");
   2459     InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'");
   2460 
   2461     InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'");
   2462     InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'");
   2463     InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'");
   2464     InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'");
   2465 
   2466     InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'");
   2467     InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'");
   2468     InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'");
   2469     InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'");
   2470 
   2471     InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'");
   2472     InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'");
   2473     InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'");
   2474     InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'");
   2475     InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'");
   2476     InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'");
   2477 
   2478     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'");
   2479     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'");
   2480     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'");
   2481     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
   2482     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
   2483     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
   2484     InstructionDesc[OpAtomicCompareExchangeWeak].capabilities.push_back(CapabilityKernel);
   2485 
   2486     InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
   2487     InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
   2488     InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'");
   2489 
   2490     InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'");
   2491     InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'");
   2492     InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'");
   2493 
   2494     InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'");
   2495     InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'");
   2496     InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
   2497     InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
   2498 
   2499     InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
   2500     InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
   2501     InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
   2502     InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'");
   2503 
   2504     InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'");
   2505     InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'");
   2506     InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'");
   2507     InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'");
   2508 
   2509     InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'");
   2510     InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'");
   2511     InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'");
   2512     InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'");
   2513 
   2514     InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'");
   2515     InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'");
   2516     InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'");
   2517     InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'");
   2518 
   2519     InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'");
   2520     InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'");
   2521     InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
   2522     InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
   2523 
   2524     InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
   2525     InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
   2526     InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
   2527     InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'");
   2528 
   2529     InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'");
   2530     InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'");
   2531     InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'");
   2532     InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'");
   2533 
   2534     InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'");
   2535     InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'");
   2536     InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
   2537     InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
   2538 
   2539     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
   2540     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
   2541     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
   2542     InstructionDesc[OpAtomicFlagTestAndSet].capabilities.push_back(CapabilityKernel);
   2543 
   2544     InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
   2545     InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
   2546     InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
   2547     InstructionDesc[OpAtomicFlagClear].capabilities.push_back(CapabilityKernel);
   2548 
   2549     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
   2550     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
   2551     InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
   2552 
   2553     InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
   2554     InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
   2555 
   2556     InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'");
   2557 
   2558     InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'");
   2559     InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'");
   2560     InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'");
   2561     InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'");
   2562 
   2563     InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'");
   2564     InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
   2565     InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
   2566 
   2567     InstructionDesc[OpKill].capabilities.push_back(CapabilityShader);
   2568 
   2569     InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
   2570 
   2571     InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
   2572     InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
   2573     InstructionDesc[OpLifetimeStart].capabilities.push_back(CapabilityKernel);
   2574 
   2575     InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
   2576     InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
   2577     InstructionDesc[OpLifetimeStop].capabilities.push_back(CapabilityKernel);
   2578 
   2579     InstructionDesc[OpGroupAsyncCopy].capabilities.push_back(CapabilityKernel);
   2580     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
   2581     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
   2582     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
   2583     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
   2584     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
   2585     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
   2586 
   2587     InstructionDesc[OpGroupWaitEvents].capabilities.push_back(CapabilityKernel);
   2588     InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
   2589     InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
   2590     InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
   2591 
   2592     InstructionDesc[OpGroupAll].capabilities.push_back(CapabilityGroups);
   2593     InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
   2594     InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
   2595 
   2596     InstructionDesc[OpGroupAny].capabilities.push_back(CapabilityGroups);
   2597     InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
   2598     InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
   2599 
   2600     InstructionDesc[OpGroupBroadcast].capabilities.push_back(CapabilityGroups);
   2601     InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
   2602     InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
   2603     InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
   2604 
   2605     InstructionDesc[OpGroupIAdd].capabilities.push_back(CapabilityGroups);
   2606     InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
   2607     InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
   2608     InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
   2609 
   2610     InstructionDesc[OpGroupFAdd].capabilities.push_back(CapabilityGroups);
   2611     InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
   2612     InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
   2613     InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
   2614 
   2615     InstructionDesc[OpGroupUMin].capabilities.push_back(CapabilityGroups);
   2616     InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
   2617     InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
   2618     InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
   2619 
   2620     InstructionDesc[OpGroupSMin].capabilities.push_back(CapabilityGroups);
   2621     InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
   2622     InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
   2623     InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
   2624 
   2625     InstructionDesc[OpGroupFMin].capabilities.push_back(CapabilityGroups);
   2626     InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
   2627     InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
   2628     InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
   2629 
   2630     InstructionDesc[OpGroupUMax].capabilities.push_back(CapabilityGroups);
   2631     InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
   2632     InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
   2633     InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
   2634 
   2635     InstructionDesc[OpGroupSMax].capabilities.push_back(CapabilityGroups);
   2636     InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
   2637     InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
   2638     InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
   2639 
   2640     InstructionDesc[OpGroupFMax].capabilities.push_back(CapabilityGroups);
   2641     InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
   2642     InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
   2643     InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
   2644 
   2645     InstructionDesc[OpReadPipe].capabilities.push_back(CapabilityPipes);
   2646     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
   2647     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
   2648     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
   2649     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
   2650 
   2651     InstructionDesc[OpWritePipe].capabilities.push_back(CapabilityPipes);
   2652     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
   2653     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
   2654     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
   2655     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
   2656 
   2657     InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapabilityPipes);
   2658     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
   2659     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
   2660     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
   2661     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
   2662     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
   2663     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
   2664 
   2665     InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapabilityPipes);
   2666     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
   2667     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
   2668     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
   2669     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
   2670     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
   2671     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
   2672 
   2673     InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
   2674     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
   2675     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
   2676     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
   2677     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
   2678 
   2679     InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
   2680     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
   2681     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
   2682     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
   2683     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
   2684 
   2685     InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapabilityPipes);
   2686     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
   2687     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
   2688     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
   2689     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
   2690 
   2691     InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapabilityPipes);
   2692     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
   2693     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
   2694     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
   2695     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
   2696 
   2697     InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapabilityPipes);
   2698     InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
   2699 
   2700     InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapabilityPipes);
   2701     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
   2702     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
   2703     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
   2704 
   2705     InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapabilityPipes);
   2706     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
   2707     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
   2708     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
   2709 
   2710     InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
   2711     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
   2712     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
   2713     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
   2714     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
   2715     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
   2716 
   2717     InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
   2718     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
   2719     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
   2720     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
   2721     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
   2722     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
   2723 
   2724     InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapabilityPipes);
   2725     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
   2726     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
   2727     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
   2728     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
   2729     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
   2730 
   2731     InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapabilityPipes);
   2732     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
   2733     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
   2734     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
   2735     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
   2736     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
   2737 
   2738     InstructionDesc[OpBuildNDRange].capabilities.push_back(CapabilityDeviceEnqueue);
   2739     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
   2740     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
   2741     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
   2742 
   2743     InstructionDesc[OpGetDefaultQueue].capabilities.push_back(CapabilityDeviceEnqueue);
   2744 
   2745     InstructionDesc[OpCaptureEventProfilingInfo].capabilities.push_back(CapabilityDeviceEnqueue);
   2746 
   2747     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
   2748     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
   2749     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
   2750 
   2751     InstructionDesc[OpSetUserEventStatus].capabilities.push_back(CapabilityDeviceEnqueue);
   2752 
   2753     InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
   2754     InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
   2755 
   2756     InstructionDesc[OpIsValidEvent].capabilities.push_back(CapabilityDeviceEnqueue);
   2757     InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
   2758 
   2759     InstructionDesc[OpCreateUserEvent].capabilities.push_back(CapabilityDeviceEnqueue);
   2760 
   2761     InstructionDesc[OpRetainEvent].capabilities.push_back(CapabilityDeviceEnqueue);
   2762     InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
   2763 
   2764     InstructionDesc[OpReleaseEvent].capabilities.push_back(CapabilityDeviceEnqueue);
   2765     InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
   2766 
   2767     InstructionDesc[OpGetKernelWorkGroupSize].capabilities.push_back(CapabilityDeviceEnqueue);
   2768     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
   2769     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
   2770     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
   2771     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
   2772 
   2773     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].capabilities.push_back(CapabilityDeviceEnqueue);
   2774     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
   2775     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
   2776     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
   2777     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
   2778 
   2779     InstructionDesc[OpGetKernelNDrangeSubGroupCount].capabilities.push_back(CapabilityDeviceEnqueue);
   2780     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
   2781     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
   2782     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
   2783     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
   2784     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
   2785 
   2786     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].capabilities.push_back(CapabilityDeviceEnqueue);
   2787     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
   2788     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
   2789     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
   2790     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
   2791     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
   2792 
   2793     InstructionDesc[OpEnqueueKernel].capabilities.push_back(CapabilityDeviceEnqueue);
   2794     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
   2795     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
   2796     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
   2797     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'");
   2798     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'");
   2799     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'");
   2800     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'");
   2801     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'");
   2802     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'");
   2803     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
   2804     InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
   2805 
   2806     InstructionDesc[OpEnqueueMarker].capabilities.push_back(CapabilityDeviceEnqueue);
   2807     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
   2808     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
   2809     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
   2810     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
   2811 
   2812     InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
   2813 
   2814     InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
   2815 
   2816     InstructionDesc[OpSubgroupAnyKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
   2817     InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
   2818     InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
   2819 
   2820     InstructionDesc[OpSubgroupAllKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
   2821     InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
   2822     InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
   2823 
   2824     InstructionDesc[OpSubgroupAllEqualKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
   2825     InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
   2826     InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
   2827 
   2828     InstructionDesc[OpSubgroupReadInvocationKHR].capabilities.push_back(CapabilityGroups);
   2829     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
   2830     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
   2831 
   2832 #ifdef AMD_EXTENSIONS
   2833     InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2834     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2835     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2836     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
   2837 
   2838     InstructionDesc[OpGroupFAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2839     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2840     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2841     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
   2842 
   2843     InstructionDesc[OpGroupUMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2844     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2845     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2846     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
   2847 
   2848     InstructionDesc[OpGroupSMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2849     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2850     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2851     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
   2852 
   2853     InstructionDesc[OpGroupFMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2854     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2855     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2856     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
   2857 
   2858     InstructionDesc[OpGroupUMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2859     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2860     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2861     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
   2862 
   2863     InstructionDesc[OpGroupSMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2864     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2865     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2866     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
   2867 
   2868     InstructionDesc[OpGroupFMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
   2869     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
   2870     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
   2871     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
   2872 #endif
   2873 }
   2874 
   2875 }; // end spv namespace
   2876