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