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