Home | History | Annotate | Download | only in 1.1
      1 // Copyright (c) 2014-2018 The Khronos Group Inc.
      2 // 
      3 // Permission is hereby granted, free of charge, to any person obtaining a copy
      4 // of this software and/or associated documentation files (the "Materials"),
      5 // to deal in the Materials without restriction, including without limitation
      6 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
      7 // and/or sell copies of the Materials, and to permit persons to whom the
      8 // Materials are furnished to do so, subject to the following conditions:
      9 // 
     10 // The above copyright notice and this permission notice shall be included in
     11 // all copies or substantial portions of the Materials.
     12 // 
     13 // MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
     14 // STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
     15 // HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
     16 // 
     17 // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     20 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     22 // FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
     23 // IN THE MATERIALS.
     24 
     25 // This header is automatically generated by the same tool that creates
     26 // the Binary Section of the SPIR-V specification.
     27 
     28 // Enumeration tokens for SPIR-V, in various styles:
     29 //   C, C++, C++11, JSON, Lua, Python
     30 // 
     31 // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
     32 // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
     33 // - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
     34 // - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
     35 // - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
     36 // 
     37 // Some tokens act like mask values, which can be OR'd together,
     38 // while others are mutually exclusive.  The mask-like ones have
     39 // "Mask" in their name, and a parallel enum that has the shift
     40 // amount (1 << x) for each corresponding enumerant.
     41 
     42 #ifndef spirv_HPP
     43 #define spirv_HPP
     44 
     45 namespace spv {
     46 
     47 typedef unsigned int Id;
     48 
     49 #define SPV_VERSION 0x10100
     50 #define SPV_REVISION 8
     51 
     52 static const unsigned int MagicNumber = 0x07230203;
     53 static const unsigned int Version = 0x00010100;
     54 static const unsigned int Revision = 8;
     55 static const unsigned int OpCodeMask = 0xffff;
     56 static const unsigned int WordCountShift = 16;
     57 
     58 enum class SourceLanguage : unsigned {
     59     Unknown = 0,
     60     ESSL = 1,
     61     GLSL = 2,
     62     OpenCL_C = 3,
     63     OpenCL_CPP = 4,
     64     HLSL = 5,
     65     Max = 0x7fffffff,
     66 };
     67 
     68 enum class ExecutionModel : unsigned {
     69     Vertex = 0,
     70     TessellationControl = 1,
     71     TessellationEvaluation = 2,
     72     Geometry = 3,
     73     Fragment = 4,
     74     GLCompute = 5,
     75     Kernel = 6,
     76     Max = 0x7fffffff,
     77 };
     78 
     79 enum class AddressingModel : unsigned {
     80     Logical = 0,
     81     Physical32 = 1,
     82     Physical64 = 2,
     83     Max = 0x7fffffff,
     84 };
     85 
     86 enum class MemoryModel : unsigned {
     87     Simple = 0,
     88     GLSL450 = 1,
     89     OpenCL = 2,
     90     Max = 0x7fffffff,
     91 };
     92 
     93 enum class ExecutionMode : unsigned {
     94     Invocations = 0,
     95     SpacingEqual = 1,
     96     SpacingFractionalEven = 2,
     97     SpacingFractionalOdd = 3,
     98     VertexOrderCw = 4,
     99     VertexOrderCcw = 5,
    100     PixelCenterInteger = 6,
    101     OriginUpperLeft = 7,
    102     OriginLowerLeft = 8,
    103     EarlyFragmentTests = 9,
    104     PointMode = 10,
    105     Xfb = 11,
    106     DepthReplacing = 12,
    107     DepthGreater = 14,
    108     DepthLess = 15,
    109     DepthUnchanged = 16,
    110     LocalSize = 17,
    111     LocalSizeHint = 18,
    112     InputPoints = 19,
    113     InputLines = 20,
    114     InputLinesAdjacency = 21,
    115     Triangles = 22,
    116     InputTrianglesAdjacency = 23,
    117     Quads = 24,
    118     Isolines = 25,
    119     OutputVertices = 26,
    120     OutputPoints = 27,
    121     OutputLineStrip = 28,
    122     OutputTriangleStrip = 29,
    123     VecTypeHint = 30,
    124     ContractionOff = 31,
    125     Initializer = 33,
    126     Finalizer = 34,
    127     SubgroupSize = 35,
    128     SubgroupsPerWorkgroup = 36,
    129     PostDepthCoverage = 4446,
    130     StencilRefReplacingEXT = 5027,
    131     Max = 0x7fffffff,
    132 };
    133 
    134 enum class StorageClass : unsigned {
    135     UniformConstant = 0,
    136     Input = 1,
    137     Uniform = 2,
    138     Output = 3,
    139     Workgroup = 4,
    140     CrossWorkgroup = 5,
    141     Private = 6,
    142     Function = 7,
    143     Generic = 8,
    144     PushConstant = 9,
    145     AtomicCounter = 10,
    146     Image = 11,
    147     StorageBuffer = 12,
    148     Max = 0x7fffffff,
    149 };
    150 
    151 enum class Dim : unsigned {
    152     Dim1D = 0,
    153     Dim2D = 1,
    154     Dim3D = 2,
    155     Cube = 3,
    156     Rect = 4,
    157     Buffer = 5,
    158     SubpassData = 6,
    159     Max = 0x7fffffff,
    160 };
    161 
    162 enum class SamplerAddressingMode : unsigned {
    163     None = 0,
    164     ClampToEdge = 1,
    165     Clamp = 2,
    166     Repeat = 3,
    167     RepeatMirrored = 4,
    168     Max = 0x7fffffff,
    169 };
    170 
    171 enum class SamplerFilterMode : unsigned {
    172     Nearest = 0,
    173     Linear = 1,
    174     Max = 0x7fffffff,
    175 };
    176 
    177 enum class ImageFormat : unsigned {
    178     Unknown = 0,
    179     Rgba32f = 1,
    180     Rgba16f = 2,
    181     R32f = 3,
    182     Rgba8 = 4,
    183     Rgba8Snorm = 5,
    184     Rg32f = 6,
    185     Rg16f = 7,
    186     R11fG11fB10f = 8,
    187     R16f = 9,
    188     Rgba16 = 10,
    189     Rgb10A2 = 11,
    190     Rg16 = 12,
    191     Rg8 = 13,
    192     R16 = 14,
    193     R8 = 15,
    194     Rgba16Snorm = 16,
    195     Rg16Snorm = 17,
    196     Rg8Snorm = 18,
    197     R16Snorm = 19,
    198     R8Snorm = 20,
    199     Rgba32i = 21,
    200     Rgba16i = 22,
    201     Rgba8i = 23,
    202     R32i = 24,
    203     Rg32i = 25,
    204     Rg16i = 26,
    205     Rg8i = 27,
    206     R16i = 28,
    207     R8i = 29,
    208     Rgba32ui = 30,
    209     Rgba16ui = 31,
    210     Rgba8ui = 32,
    211     R32ui = 33,
    212     Rgb10a2ui = 34,
    213     Rg32ui = 35,
    214     Rg16ui = 36,
    215     Rg8ui = 37,
    216     R16ui = 38,
    217     R8ui = 39,
    218     Max = 0x7fffffff,
    219 };
    220 
    221 enum class ImageChannelOrder : unsigned {
    222     R = 0,
    223     A = 1,
    224     RG = 2,
    225     RA = 3,
    226     RGB = 4,
    227     RGBA = 5,
    228     BGRA = 6,
    229     ARGB = 7,
    230     Intensity = 8,
    231     Luminance = 9,
    232     Rx = 10,
    233     RGx = 11,
    234     RGBx = 12,
    235     Depth = 13,
    236     DepthStencil = 14,
    237     sRGB = 15,
    238     sRGBx = 16,
    239     sRGBA = 17,
    240     sBGRA = 18,
    241     ABGR = 19,
    242     Max = 0x7fffffff,
    243 };
    244 
    245 enum class ImageChannelDataType : unsigned {
    246     SnormInt8 = 0,
    247     SnormInt16 = 1,
    248     UnormInt8 = 2,
    249     UnormInt16 = 3,
    250     UnormShort565 = 4,
    251     UnormShort555 = 5,
    252     UnormInt101010 = 6,
    253     SignedInt8 = 7,
    254     SignedInt16 = 8,
    255     SignedInt32 = 9,
    256     UnsignedInt8 = 10,
    257     UnsignedInt16 = 11,
    258     UnsignedInt32 = 12,
    259     HalfFloat = 13,
    260     Float = 14,
    261     UnormInt24 = 15,
    262     UnormInt101010_2 = 16,
    263     Max = 0x7fffffff,
    264 };
    265 
    266 enum class ImageOperandsShift : unsigned {
    267     Bias = 0,
    268     Lod = 1,
    269     Grad = 2,
    270     ConstOffset = 3,
    271     Offset = 4,
    272     ConstOffsets = 5,
    273     Sample = 6,
    274     MinLod = 7,
    275     Max = 0x7fffffff,
    276 };
    277 
    278 enum class ImageOperandsMask : unsigned {
    279     MaskNone = 0,
    280     Bias = 0x00000001,
    281     Lod = 0x00000002,
    282     Grad = 0x00000004,
    283     ConstOffset = 0x00000008,
    284     Offset = 0x00000010,
    285     ConstOffsets = 0x00000020,
    286     Sample = 0x00000040,
    287     MinLod = 0x00000080,
    288 };
    289 
    290 enum class FPFastMathModeShift : unsigned {
    291     NotNaN = 0,
    292     NotInf = 1,
    293     NSZ = 2,
    294     AllowRecip = 3,
    295     Fast = 4,
    296     Max = 0x7fffffff,
    297 };
    298 
    299 enum class FPFastMathModeMask : unsigned {
    300     MaskNone = 0,
    301     NotNaN = 0x00000001,
    302     NotInf = 0x00000002,
    303     NSZ = 0x00000004,
    304     AllowRecip = 0x00000008,
    305     Fast = 0x00000010,
    306 };
    307 
    308 enum class FPRoundingMode : unsigned {
    309     RTE = 0,
    310     RTZ = 1,
    311     RTP = 2,
    312     RTN = 3,
    313     Max = 0x7fffffff,
    314 };
    315 
    316 enum class LinkageType : unsigned {
    317     Export = 0,
    318     Import = 1,
    319     Max = 0x7fffffff,
    320 };
    321 
    322 enum class AccessQualifier : unsigned {
    323     ReadOnly = 0,
    324     WriteOnly = 1,
    325     ReadWrite = 2,
    326     Max = 0x7fffffff,
    327 };
    328 
    329 enum class FunctionParameterAttribute : unsigned {
    330     Zext = 0,
    331     Sext = 1,
    332     ByVal = 2,
    333     Sret = 3,
    334     NoAlias = 4,
    335     NoCapture = 5,
    336     NoWrite = 6,
    337     NoReadWrite = 7,
    338     Max = 0x7fffffff,
    339 };
    340 
    341 enum class Decoration : unsigned {
    342     RelaxedPrecision = 0,
    343     SpecId = 1,
    344     Block = 2,
    345     BufferBlock = 3,
    346     RowMajor = 4,
    347     ColMajor = 5,
    348     ArrayStride = 6,
    349     MatrixStride = 7,
    350     GLSLShared = 8,
    351     GLSLPacked = 9,
    352     CPacked = 10,
    353     BuiltIn = 11,
    354     NoPerspective = 13,
    355     Flat = 14,
    356     Patch = 15,
    357     Centroid = 16,
    358     Sample = 17,
    359     Invariant = 18,
    360     Restrict = 19,
    361     Aliased = 20,
    362     Volatile = 21,
    363     Constant = 22,
    364     Coherent = 23,
    365     NonWritable = 24,
    366     NonReadable = 25,
    367     Uniform = 26,
    368     SaturatedConversion = 28,
    369     Stream = 29,
    370     Location = 30,
    371     Component = 31,
    372     Index = 32,
    373     Binding = 33,
    374     DescriptorSet = 34,
    375     Offset = 35,
    376     XfbBuffer = 36,
    377     XfbStride = 37,
    378     FuncParamAttr = 38,
    379     FPRoundingMode = 39,
    380     FPFastMathMode = 40,
    381     LinkageAttributes = 41,
    382     NoContraction = 42,
    383     InputAttachmentIndex = 43,
    384     Alignment = 44,
    385     MaxByteOffset = 45,
    386     ExplicitInterpAMD = 4999,
    387     OverrideCoverageNV = 5248,
    388     PassthroughNV = 5250,
    389     ViewportRelativeNV = 5252,
    390     SecondaryViewportRelativeNV = 5256,
    391     HlslCounterBufferGOOGLE = 5634,
    392     HlslSemanticGOOGLE = 5635,
    393     Max = 0x7fffffff,
    394 };
    395 
    396 enum class BuiltIn : unsigned {
    397     Position = 0,
    398     PointSize = 1,
    399     ClipDistance = 3,
    400     CullDistance = 4,
    401     VertexId = 5,
    402     InstanceId = 6,
    403     PrimitiveId = 7,
    404     InvocationId = 8,
    405     Layer = 9,
    406     ViewportIndex = 10,
    407     TessLevelOuter = 11,
    408     TessLevelInner = 12,
    409     TessCoord = 13,
    410     PatchVertices = 14,
    411     FragCoord = 15,
    412     PointCoord = 16,
    413     FrontFacing = 17,
    414     SampleId = 18,
    415     SamplePosition = 19,
    416     SampleMask = 20,
    417     FragDepth = 22,
    418     HelperInvocation = 23,
    419     NumWorkgroups = 24,
    420     WorkgroupSize = 25,
    421     WorkgroupId = 26,
    422     LocalInvocationId = 27,
    423     GlobalInvocationId = 28,
    424     LocalInvocationIndex = 29,
    425     WorkDim = 30,
    426     GlobalSize = 31,
    427     EnqueuedWorkgroupSize = 32,
    428     GlobalOffset = 33,
    429     GlobalLinearId = 34,
    430     SubgroupSize = 36,
    431     SubgroupMaxSize = 37,
    432     NumSubgroups = 38,
    433     NumEnqueuedSubgroups = 39,
    434     SubgroupId = 40,
    435     SubgroupLocalInvocationId = 41,
    436     VertexIndex = 42,
    437     InstanceIndex = 43,
    438     SubgroupEqMaskKHR = 4416,
    439     SubgroupGeMaskKHR = 4417,
    440     SubgroupGtMaskKHR = 4418,
    441     SubgroupLeMaskKHR = 4419,
    442     SubgroupLtMaskKHR = 4420,
    443     BaseVertex = 4424,
    444     BaseInstance = 4425,
    445     DrawIndex = 4426,
    446     DeviceIndex = 4438,
    447     ViewIndex = 4440,
    448     BaryCoordNoPerspAMD = 4992,
    449     BaryCoordNoPerspCentroidAMD = 4993,
    450     BaryCoordNoPerspSampleAMD = 4994,
    451     BaryCoordSmoothAMD = 4995,
    452     BaryCoordSmoothCentroidAMD = 4996,
    453     BaryCoordSmoothSampleAMD = 4997,
    454     BaryCoordPullModelAMD = 4998,
    455     FragStencilRefEXT = 5014,
    456     ViewportMaskNV = 5253,
    457     SecondaryPositionNV = 5257,
    458     SecondaryViewportMaskNV = 5258,
    459     PositionPerViewNV = 5261,
    460     ViewportMaskPerViewNV = 5262,
    461     Max = 0x7fffffff,
    462 };
    463 
    464 enum class SelectionControlShift : unsigned {
    465     Flatten = 0,
    466     DontFlatten = 1,
    467     Max = 0x7fffffff,
    468 };
    469 
    470 enum class SelectionControlMask : unsigned {
    471     MaskNone = 0,
    472     Flatten = 0x00000001,
    473     DontFlatten = 0x00000002,
    474 };
    475 
    476 enum class LoopControlShift : unsigned {
    477     Unroll = 0,
    478     DontUnroll = 1,
    479     DependencyInfinite = 2,
    480     DependencyLength = 3,
    481     Max = 0x7fffffff,
    482 };
    483 
    484 enum class LoopControlMask : unsigned {
    485     MaskNone = 0,
    486     Unroll = 0x00000001,
    487     DontUnroll = 0x00000002,
    488     DependencyInfinite = 0x00000004,
    489     DependencyLength = 0x00000008,
    490 };
    491 
    492 enum class FunctionControlShift : unsigned {
    493     Inline = 0,
    494     DontInline = 1,
    495     Pure = 2,
    496     Const = 3,
    497     Max = 0x7fffffff,
    498 };
    499 
    500 enum class FunctionControlMask : unsigned {
    501     MaskNone = 0,
    502     Inline = 0x00000001,
    503     DontInline = 0x00000002,
    504     Pure = 0x00000004,
    505     Const = 0x00000008,
    506 };
    507 
    508 enum class MemorySemanticsShift : unsigned {
    509     Acquire = 1,
    510     Release = 2,
    511     AcquireRelease = 3,
    512     SequentiallyConsistent = 4,
    513     UniformMemory = 6,
    514     SubgroupMemory = 7,
    515     WorkgroupMemory = 8,
    516     CrossWorkgroupMemory = 9,
    517     AtomicCounterMemory = 10,
    518     ImageMemory = 11,
    519     Max = 0x7fffffff,
    520 };
    521 
    522 enum class MemorySemanticsMask : unsigned {
    523     MaskNone = 0,
    524     Acquire = 0x00000002,
    525     Release = 0x00000004,
    526     AcquireRelease = 0x00000008,
    527     SequentiallyConsistent = 0x00000010,
    528     UniformMemory = 0x00000040,
    529     SubgroupMemory = 0x00000080,
    530     WorkgroupMemory = 0x00000100,
    531     CrossWorkgroupMemory = 0x00000200,
    532     AtomicCounterMemory = 0x00000400,
    533     ImageMemory = 0x00000800,
    534 };
    535 
    536 enum class MemoryAccessShift : unsigned {
    537     Volatile = 0,
    538     Aligned = 1,
    539     Nontemporal = 2,
    540     Max = 0x7fffffff,
    541 };
    542 
    543 enum class MemoryAccessMask : unsigned {
    544     MaskNone = 0,
    545     Volatile = 0x00000001,
    546     Aligned = 0x00000002,
    547     Nontemporal = 0x00000004,
    548 };
    549 
    550 enum class Scope : unsigned {
    551     CrossDevice = 0,
    552     Device = 1,
    553     Workgroup = 2,
    554     Subgroup = 3,
    555     Invocation = 4,
    556     Max = 0x7fffffff,
    557 };
    558 
    559 enum class GroupOperation : unsigned {
    560     Reduce = 0,
    561     InclusiveScan = 1,
    562     ExclusiveScan = 2,
    563     Max = 0x7fffffff,
    564 };
    565 
    566 enum class KernelEnqueueFlags : unsigned {
    567     NoWait = 0,
    568     WaitKernel = 1,
    569     WaitWorkGroup = 2,
    570     Max = 0x7fffffff,
    571 };
    572 
    573 enum class KernelProfilingInfoShift : unsigned {
    574     CmdExecTime = 0,
    575     Max = 0x7fffffff,
    576 };
    577 
    578 enum class KernelProfilingInfoMask : unsigned {
    579     MaskNone = 0,
    580     CmdExecTime = 0x00000001,
    581 };
    582 
    583 enum class Capability : unsigned {
    584     Matrix = 0,
    585     Shader = 1,
    586     Geometry = 2,
    587     Tessellation = 3,
    588     Addresses = 4,
    589     Linkage = 5,
    590     Kernel = 6,
    591     Vector16 = 7,
    592     Float16Buffer = 8,
    593     Float16 = 9,
    594     Float64 = 10,
    595     Int64 = 11,
    596     Int64Atomics = 12,
    597     ImageBasic = 13,
    598     ImageReadWrite = 14,
    599     ImageMipmap = 15,
    600     Pipes = 17,
    601     Groups = 18,
    602     DeviceEnqueue = 19,
    603     LiteralSampler = 20,
    604     AtomicStorage = 21,
    605     Int16 = 22,
    606     TessellationPointSize = 23,
    607     GeometryPointSize = 24,
    608     ImageGatherExtended = 25,
    609     StorageImageMultisample = 27,
    610     UniformBufferArrayDynamicIndexing = 28,
    611     SampledImageArrayDynamicIndexing = 29,
    612     StorageBufferArrayDynamicIndexing = 30,
    613     StorageImageArrayDynamicIndexing = 31,
    614     ClipDistance = 32,
    615     CullDistance = 33,
    616     ImageCubeArray = 34,
    617     SampleRateShading = 35,
    618     ImageRect = 36,
    619     SampledRect = 37,
    620     GenericPointer = 38,
    621     Int8 = 39,
    622     InputAttachment = 40,
    623     SparseResidency = 41,
    624     MinLod = 42,
    625     Sampled1D = 43,
    626     Image1D = 44,
    627     SampledCubeArray = 45,
    628     SampledBuffer = 46,
    629     ImageBuffer = 47,
    630     ImageMSArray = 48,
    631     StorageImageExtendedFormats = 49,
    632     ImageQuery = 50,
    633     DerivativeControl = 51,
    634     InterpolationFunction = 52,
    635     TransformFeedback = 53,
    636     GeometryStreams = 54,
    637     StorageImageReadWithoutFormat = 55,
    638     StorageImageWriteWithoutFormat = 56,
    639     MultiViewport = 57,
    640     SubgroupDispatch = 58,
    641     NamedBarrier = 59,
    642     PipeStorage = 60,
    643     SubgroupBallotKHR = 4423,
    644     DrawParameters = 4427,
    645     SubgroupVoteKHR = 4431,
    646     StorageBuffer16BitAccess = 4433,
    647     StorageUniformBufferBlock16 = 4433,
    648     StorageUniform16 = 4434,
    649     UniformAndStorageBuffer16BitAccess = 4434,
    650     StoragePushConstant16 = 4435,
    651     StorageInputOutput16 = 4436,
    652     DeviceGroup = 4437,
    653     MultiView = 4439,
    654     VariablePointersStorageBuffer = 4441,
    655     VariablePointers = 4442,
    656     AtomicStorageOps = 4445,
    657     SampleMaskPostDepthCoverage = 4447,
    658     ImageGatherBiasLodAMD = 5009,
    659     FragmentMaskAMD = 5010,
    660     StencilExportEXT = 5013,
    661     ImageReadWriteLodAMD = 5015,
    662     SampleMaskOverrideCoverageNV = 5249,
    663     GeometryShaderPassthroughNV = 5251,
    664     ShaderViewportIndexLayerEXT = 5254,
    665     ShaderViewportIndexLayerNV = 5254,
    666     ShaderViewportMaskNV = 5255,
    667     ShaderStereoViewNV = 5259,
    668     PerViewAttributesNV = 5260,
    669     SubgroupShuffleINTEL = 5568,
    670     SubgroupBufferBlockIOINTEL = 5569,
    671     SubgroupImageBlockIOINTEL = 5570,
    672     Max = 0x7fffffff,
    673 };
    674 
    675 enum class Op : unsigned {
    676     OpNop = 0,
    677     OpUndef = 1,
    678     OpSourceContinued = 2,
    679     OpSource = 3,
    680     OpSourceExtension = 4,
    681     OpName = 5,
    682     OpMemberName = 6,
    683     OpString = 7,
    684     OpLine = 8,
    685     OpExtension = 10,
    686     OpExtInstImport = 11,
    687     OpExtInst = 12,
    688     OpMemoryModel = 14,
    689     OpEntryPoint = 15,
    690     OpExecutionMode = 16,
    691     OpCapability = 17,
    692     OpTypeVoid = 19,
    693     OpTypeBool = 20,
    694     OpTypeInt = 21,
    695     OpTypeFloat = 22,
    696     OpTypeVector = 23,
    697     OpTypeMatrix = 24,
    698     OpTypeImage = 25,
    699     OpTypeSampler = 26,
    700     OpTypeSampledImage = 27,
    701     OpTypeArray = 28,
    702     OpTypeRuntimeArray = 29,
    703     OpTypeStruct = 30,
    704     OpTypeOpaque = 31,
    705     OpTypePointer = 32,
    706     OpTypeFunction = 33,
    707     OpTypeEvent = 34,
    708     OpTypeDeviceEvent = 35,
    709     OpTypeReserveId = 36,
    710     OpTypeQueue = 37,
    711     OpTypePipe = 38,
    712     OpTypeForwardPointer = 39,
    713     OpConstantTrue = 41,
    714     OpConstantFalse = 42,
    715     OpConstant = 43,
    716     OpConstantComposite = 44,
    717     OpConstantSampler = 45,
    718     OpConstantNull = 46,
    719     OpSpecConstantTrue = 48,
    720     OpSpecConstantFalse = 49,
    721     OpSpecConstant = 50,
    722     OpSpecConstantComposite = 51,
    723     OpSpecConstantOp = 52,
    724     OpFunction = 54,
    725     OpFunctionParameter = 55,
    726     OpFunctionEnd = 56,
    727     OpFunctionCall = 57,
    728     OpVariable = 59,
    729     OpImageTexelPointer = 60,
    730     OpLoad = 61,
    731     OpStore = 62,
    732     OpCopyMemory = 63,
    733     OpCopyMemorySized = 64,
    734     OpAccessChain = 65,
    735     OpInBoundsAccessChain = 66,
    736     OpPtrAccessChain = 67,
    737     OpArrayLength = 68,
    738     OpGenericPtrMemSemantics = 69,
    739     OpInBoundsPtrAccessChain = 70,
    740     OpDecorate = 71,
    741     OpMemberDecorate = 72,
    742     OpDecorationGroup = 73,
    743     OpGroupDecorate = 74,
    744     OpGroupMemberDecorate = 75,
    745     OpVectorExtractDynamic = 77,
    746     OpVectorInsertDynamic = 78,
    747     OpVectorShuffle = 79,
    748     OpCompositeConstruct = 80,
    749     OpCompositeExtract = 81,
    750     OpCompositeInsert = 82,
    751     OpCopyObject = 83,
    752     OpTranspose = 84,
    753     OpSampledImage = 86,
    754     OpImageSampleImplicitLod = 87,
    755     OpImageSampleExplicitLod = 88,
    756     OpImageSampleDrefImplicitLod = 89,
    757     OpImageSampleDrefExplicitLod = 90,
    758     OpImageSampleProjImplicitLod = 91,
    759     OpImageSampleProjExplicitLod = 92,
    760     OpImageSampleProjDrefImplicitLod = 93,
    761     OpImageSampleProjDrefExplicitLod = 94,
    762     OpImageFetch = 95,
    763     OpImageGather = 96,
    764     OpImageDrefGather = 97,
    765     OpImageRead = 98,
    766     OpImageWrite = 99,
    767     OpImage = 100,
    768     OpImageQueryFormat = 101,
    769     OpImageQueryOrder = 102,
    770     OpImageQuerySizeLod = 103,
    771     OpImageQuerySize = 104,
    772     OpImageQueryLod = 105,
    773     OpImageQueryLevels = 106,
    774     OpImageQuerySamples = 107,
    775     OpConvertFToU = 109,
    776     OpConvertFToS = 110,
    777     OpConvertSToF = 111,
    778     OpConvertUToF = 112,
    779     OpUConvert = 113,
    780     OpSConvert = 114,
    781     OpFConvert = 115,
    782     OpQuantizeToF16 = 116,
    783     OpConvertPtrToU = 117,
    784     OpSatConvertSToU = 118,
    785     OpSatConvertUToS = 119,
    786     OpConvertUToPtr = 120,
    787     OpPtrCastToGeneric = 121,
    788     OpGenericCastToPtr = 122,
    789     OpGenericCastToPtrExplicit = 123,
    790     OpBitcast = 124,
    791     OpSNegate = 126,
    792     OpFNegate = 127,
    793     OpIAdd = 128,
    794     OpFAdd = 129,
    795     OpISub = 130,
    796     OpFSub = 131,
    797     OpIMul = 132,
    798     OpFMul = 133,
    799     OpUDiv = 134,
    800     OpSDiv = 135,
    801     OpFDiv = 136,
    802     OpUMod = 137,
    803     OpSRem = 138,
    804     OpSMod = 139,
    805     OpFRem = 140,
    806     OpFMod = 141,
    807     OpVectorTimesScalar = 142,
    808     OpMatrixTimesScalar = 143,
    809     OpVectorTimesMatrix = 144,
    810     OpMatrixTimesVector = 145,
    811     OpMatrixTimesMatrix = 146,
    812     OpOuterProduct = 147,
    813     OpDot = 148,
    814     OpIAddCarry = 149,
    815     OpISubBorrow = 150,
    816     OpUMulExtended = 151,
    817     OpSMulExtended = 152,
    818     OpAny = 154,
    819     OpAll = 155,
    820     OpIsNan = 156,
    821     OpIsInf = 157,
    822     OpIsFinite = 158,
    823     OpIsNormal = 159,
    824     OpSignBitSet = 160,
    825     OpLessOrGreater = 161,
    826     OpOrdered = 162,
    827     OpUnordered = 163,
    828     OpLogicalEqual = 164,
    829     OpLogicalNotEqual = 165,
    830     OpLogicalOr = 166,
    831     OpLogicalAnd = 167,
    832     OpLogicalNot = 168,
    833     OpSelect = 169,
    834     OpIEqual = 170,
    835     OpINotEqual = 171,
    836     OpUGreaterThan = 172,
    837     OpSGreaterThan = 173,
    838     OpUGreaterThanEqual = 174,
    839     OpSGreaterThanEqual = 175,
    840     OpULessThan = 176,
    841     OpSLessThan = 177,
    842     OpULessThanEqual = 178,
    843     OpSLessThanEqual = 179,
    844     OpFOrdEqual = 180,
    845     OpFUnordEqual = 181,
    846     OpFOrdNotEqual = 182,
    847     OpFUnordNotEqual = 183,
    848     OpFOrdLessThan = 184,
    849     OpFUnordLessThan = 185,
    850     OpFOrdGreaterThan = 186,
    851     OpFUnordGreaterThan = 187,
    852     OpFOrdLessThanEqual = 188,
    853     OpFUnordLessThanEqual = 189,
    854     OpFOrdGreaterThanEqual = 190,
    855     OpFUnordGreaterThanEqual = 191,
    856     OpShiftRightLogical = 194,
    857     OpShiftRightArithmetic = 195,
    858     OpShiftLeftLogical = 196,
    859     OpBitwiseOr = 197,
    860     OpBitwiseXor = 198,
    861     OpBitwiseAnd = 199,
    862     OpNot = 200,
    863     OpBitFieldInsert = 201,
    864     OpBitFieldSExtract = 202,
    865     OpBitFieldUExtract = 203,
    866     OpBitReverse = 204,
    867     OpBitCount = 205,
    868     OpDPdx = 207,
    869     OpDPdy = 208,
    870     OpFwidth = 209,
    871     OpDPdxFine = 210,
    872     OpDPdyFine = 211,
    873     OpFwidthFine = 212,
    874     OpDPdxCoarse = 213,
    875     OpDPdyCoarse = 214,
    876     OpFwidthCoarse = 215,
    877     OpEmitVertex = 218,
    878     OpEndPrimitive = 219,
    879     OpEmitStreamVertex = 220,
    880     OpEndStreamPrimitive = 221,
    881     OpControlBarrier = 224,
    882     OpMemoryBarrier = 225,
    883     OpAtomicLoad = 227,
    884     OpAtomicStore = 228,
    885     OpAtomicExchange = 229,
    886     OpAtomicCompareExchange = 230,
    887     OpAtomicCompareExchangeWeak = 231,
    888     OpAtomicIIncrement = 232,
    889     OpAtomicIDecrement = 233,
    890     OpAtomicIAdd = 234,
    891     OpAtomicISub = 235,
    892     OpAtomicSMin = 236,
    893     OpAtomicUMin = 237,
    894     OpAtomicSMax = 238,
    895     OpAtomicUMax = 239,
    896     OpAtomicAnd = 240,
    897     OpAtomicOr = 241,
    898     OpAtomicXor = 242,
    899     OpPhi = 245,
    900     OpLoopMerge = 246,
    901     OpSelectionMerge = 247,
    902     OpLabel = 248,
    903     OpBranch = 249,
    904     OpBranchConditional = 250,
    905     OpSwitch = 251,
    906     OpKill = 252,
    907     OpReturn = 253,
    908     OpReturnValue = 254,
    909     OpUnreachable = 255,
    910     OpLifetimeStart = 256,
    911     OpLifetimeStop = 257,
    912     OpGroupAsyncCopy = 259,
    913     OpGroupWaitEvents = 260,
    914     OpGroupAll = 261,
    915     OpGroupAny = 262,
    916     OpGroupBroadcast = 263,
    917     OpGroupIAdd = 264,
    918     OpGroupFAdd = 265,
    919     OpGroupFMin = 266,
    920     OpGroupUMin = 267,
    921     OpGroupSMin = 268,
    922     OpGroupFMax = 269,
    923     OpGroupUMax = 270,
    924     OpGroupSMax = 271,
    925     OpReadPipe = 274,
    926     OpWritePipe = 275,
    927     OpReservedReadPipe = 276,
    928     OpReservedWritePipe = 277,
    929     OpReserveReadPipePackets = 278,
    930     OpReserveWritePipePackets = 279,
    931     OpCommitReadPipe = 280,
    932     OpCommitWritePipe = 281,
    933     OpIsValidReserveId = 282,
    934     OpGetNumPipePackets = 283,
    935     OpGetMaxPipePackets = 284,
    936     OpGroupReserveReadPipePackets = 285,
    937     OpGroupReserveWritePipePackets = 286,
    938     OpGroupCommitReadPipe = 287,
    939     OpGroupCommitWritePipe = 288,
    940     OpEnqueueMarker = 291,
    941     OpEnqueueKernel = 292,
    942     OpGetKernelNDrangeSubGroupCount = 293,
    943     OpGetKernelNDrangeMaxSubGroupSize = 294,
    944     OpGetKernelWorkGroupSize = 295,
    945     OpGetKernelPreferredWorkGroupSizeMultiple = 296,
    946     OpRetainEvent = 297,
    947     OpReleaseEvent = 298,
    948     OpCreateUserEvent = 299,
    949     OpIsValidEvent = 300,
    950     OpSetUserEventStatus = 301,
    951     OpCaptureEventProfilingInfo = 302,
    952     OpGetDefaultQueue = 303,
    953     OpBuildNDRange = 304,
    954     OpImageSparseSampleImplicitLod = 305,
    955     OpImageSparseSampleExplicitLod = 306,
    956     OpImageSparseSampleDrefImplicitLod = 307,
    957     OpImageSparseSampleDrefExplicitLod = 308,
    958     OpImageSparseSampleProjImplicitLod = 309,
    959     OpImageSparseSampleProjExplicitLod = 310,
    960     OpImageSparseSampleProjDrefImplicitLod = 311,
    961     OpImageSparseSampleProjDrefExplicitLod = 312,
    962     OpImageSparseFetch = 313,
    963     OpImageSparseGather = 314,
    964     OpImageSparseDrefGather = 315,
    965     OpImageSparseTexelsResident = 316,
    966     OpNoLine = 317,
    967     OpAtomicFlagTestAndSet = 318,
    968     OpAtomicFlagClear = 319,
    969     OpImageSparseRead = 320,
    970     OpSizeOf = 321,
    971     OpTypePipeStorage = 322,
    972     OpConstantPipeStorage = 323,
    973     OpCreatePipeFromPipeStorage = 324,
    974     OpGetKernelLocalSizeForSubgroupCount = 325,
    975     OpGetKernelMaxNumSubgroups = 326,
    976     OpTypeNamedBarrier = 327,
    977     OpNamedBarrierInitialize = 328,
    978     OpMemoryNamedBarrier = 329,
    979     OpModuleProcessed = 330,
    980     OpDecorateId = 332,
    981     OpSubgroupBallotKHR = 4421,
    982     OpSubgroupFirstInvocationKHR = 4422,
    983     OpSubgroupAllKHR = 4428,
    984     OpSubgroupAnyKHR = 4429,
    985     OpSubgroupAllEqualKHR = 4430,
    986     OpSubgroupReadInvocationKHR = 4432,
    987     OpGroupIAddNonUniformAMD = 5000,
    988     OpGroupFAddNonUniformAMD = 5001,
    989     OpGroupFMinNonUniformAMD = 5002,
    990     OpGroupUMinNonUniformAMD = 5003,
    991     OpGroupSMinNonUniformAMD = 5004,
    992     OpGroupFMaxNonUniformAMD = 5005,
    993     OpGroupUMaxNonUniformAMD = 5006,
    994     OpGroupSMaxNonUniformAMD = 5007,
    995     OpFragmentMaskFetchAMD = 5011,
    996     OpFragmentFetchAMD = 5012,
    997     OpSubgroupShuffleINTEL = 5571,
    998     OpSubgroupShuffleDownINTEL = 5572,
    999     OpSubgroupShuffleUpINTEL = 5573,
   1000     OpSubgroupShuffleXorINTEL = 5574,
   1001     OpSubgroupBlockReadINTEL = 5575,
   1002     OpSubgroupBlockWriteINTEL = 5576,
   1003     OpSubgroupImageBlockReadINTEL = 5577,
   1004     OpSubgroupImageBlockWriteINTEL = 5578,
   1005     OpDecorateStringGOOGLE = 5632,
   1006     OpMemberDecorateStringGOOGLE = 5633,
   1007     Max = 0x7fffffff,
   1008 };
   1009 
   1010 // Overload operator| for mask bit combining
   1011 
   1012 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
   1013 inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
   1014 inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
   1015 inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
   1016 inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
   1017 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
   1018 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
   1019 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
   1020 
   1021 }  // end namespace spv
   1022 
   1023 #endif  // #ifndef spirv_HPP
   1024 
   1025