Home | History | Annotate | Download | only in 1.1
      1 // Copyright (c) 2014-2016 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 4
     51 
     52 static const unsigned int MagicNumber = 0x07230203;
     53 static const unsigned int Version = 0x00010100;
     54 static const unsigned int Revision = 4;
     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     Max = 0x7fffffff,
     65 };
     66 
     67 enum class ExecutionModel : unsigned {
     68     Vertex = 0,
     69     TessellationControl = 1,
     70     TessellationEvaluation = 2,
     71     Geometry = 3,
     72     Fragment = 4,
     73     GLCompute = 5,
     74     Kernel = 6,
     75     Max = 0x7fffffff,
     76 };
     77 
     78 enum class AddressingModel : unsigned {
     79     Logical = 0,
     80     Physical32 = 1,
     81     Physical64 = 2,
     82     Max = 0x7fffffff,
     83 };
     84 
     85 enum class MemoryModel : unsigned {
     86     Simple = 0,
     87     GLSL450 = 1,
     88     OpenCL = 2,
     89     Max = 0x7fffffff,
     90 };
     91 
     92 enum class ExecutionMode : unsigned {
     93     Invocations = 0,
     94     SpacingEqual = 1,
     95     SpacingFractionalEven = 2,
     96     SpacingFractionalOdd = 3,
     97     VertexOrderCw = 4,
     98     VertexOrderCcw = 5,
     99     PixelCenterInteger = 6,
    100     OriginUpperLeft = 7,
    101     OriginLowerLeft = 8,
    102     EarlyFragmentTests = 9,
    103     PointMode = 10,
    104     Xfb = 11,
    105     DepthReplacing = 12,
    106     DepthGreater = 14,
    107     DepthLess = 15,
    108     DepthUnchanged = 16,
    109     LocalSize = 17,
    110     LocalSizeHint = 18,
    111     InputPoints = 19,
    112     InputLines = 20,
    113     InputLinesAdjacency = 21,
    114     Triangles = 22,
    115     InputTrianglesAdjacency = 23,
    116     Quads = 24,
    117     Isolines = 25,
    118     OutputVertices = 26,
    119     OutputPoints = 27,
    120     OutputLineStrip = 28,
    121     OutputTriangleStrip = 29,
    122     VecTypeHint = 30,
    123     ContractionOff = 31,
    124     Initializer = 33,
    125     Finalizer = 34,
    126     SubgroupSize = 35,
    127     SubgroupsPerWorkgroup = 36,
    128     Max = 0x7fffffff,
    129 };
    130 
    131 enum class StorageClass : unsigned {
    132     UniformConstant = 0,
    133     Input = 1,
    134     Uniform = 2,
    135     Output = 3,
    136     Workgroup = 4,
    137     CrossWorkgroup = 5,
    138     Private = 6,
    139     Function = 7,
    140     Generic = 8,
    141     PushConstant = 9,
    142     AtomicCounter = 10,
    143     Image = 11,
    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     MaxByteOffset = 45,
    382     Max = 0x7fffffff,
    383 };
    384 
    385 enum class BuiltIn : unsigned {
    386     Position = 0,
    387     PointSize = 1,
    388     ClipDistance = 3,
    389     CullDistance = 4,
    390     VertexId = 5,
    391     InstanceId = 6,
    392     PrimitiveId = 7,
    393     InvocationId = 8,
    394     Layer = 9,
    395     ViewportIndex = 10,
    396     TessLevelOuter = 11,
    397     TessLevelInner = 12,
    398     TessCoord = 13,
    399     PatchVertices = 14,
    400     FragCoord = 15,
    401     PointCoord = 16,
    402     FrontFacing = 17,
    403     SampleId = 18,
    404     SamplePosition = 19,
    405     SampleMask = 20,
    406     FragDepth = 22,
    407     HelperInvocation = 23,
    408     NumWorkgroups = 24,
    409     WorkgroupSize = 25,
    410     WorkgroupId = 26,
    411     LocalInvocationId = 27,
    412     GlobalInvocationId = 28,
    413     LocalInvocationIndex = 29,
    414     WorkDim = 30,
    415     GlobalSize = 31,
    416     EnqueuedWorkgroupSize = 32,
    417     GlobalOffset = 33,
    418     GlobalLinearId = 34,
    419     SubgroupSize = 36,
    420     SubgroupMaxSize = 37,
    421     NumSubgroups = 38,
    422     NumEnqueuedSubgroups = 39,
    423     SubgroupId = 40,
    424     SubgroupLocalInvocationId = 41,
    425     VertexIndex = 42,
    426     InstanceIndex = 43,
    427     SubgroupEqMaskKHR = 4416,
    428     SubgroupGeMaskKHR = 4417,
    429     SubgroupGtMaskKHR = 4418,
    430     SubgroupLeMaskKHR = 4419,
    431     SubgroupLtMaskKHR = 4420,
    432     BaseVertex = 4424,
    433     BaseInstance = 4425,
    434     DrawIndex = 4426,
    435     Max = 0x7fffffff,
    436 };
    437 
    438 enum class SelectionControlShift : unsigned {
    439     Flatten = 0,
    440     DontFlatten = 1,
    441     Max = 0x7fffffff,
    442 };
    443 
    444 enum class SelectionControlMask : unsigned {
    445     MaskNone = 0,
    446     Flatten = 0x00000001,
    447     DontFlatten = 0x00000002,
    448 };
    449 
    450 enum class LoopControlShift : unsigned {
    451     Unroll = 0,
    452     DontUnroll = 1,
    453     DependencyInfinite = 2,
    454     DependencyLength = 3,
    455     Max = 0x7fffffff,
    456 };
    457 
    458 enum class LoopControlMask : unsigned {
    459     MaskNone = 0,
    460     Unroll = 0x00000001,
    461     DontUnroll = 0x00000002,
    462     DependencyInfinite = 0x00000004,
    463     DependencyLength = 0x00000008,
    464 };
    465 
    466 enum class FunctionControlShift : unsigned {
    467     Inline = 0,
    468     DontInline = 1,
    469     Pure = 2,
    470     Const = 3,
    471     Max = 0x7fffffff,
    472 };
    473 
    474 enum class FunctionControlMask : unsigned {
    475     MaskNone = 0,
    476     Inline = 0x00000001,
    477     DontInline = 0x00000002,
    478     Pure = 0x00000004,
    479     Const = 0x00000008,
    480 };
    481 
    482 enum class MemorySemanticsShift : unsigned {
    483     Acquire = 1,
    484     Release = 2,
    485     AcquireRelease = 3,
    486     SequentiallyConsistent = 4,
    487     UniformMemory = 6,
    488     SubgroupMemory = 7,
    489     WorkgroupMemory = 8,
    490     CrossWorkgroupMemory = 9,
    491     AtomicCounterMemory = 10,
    492     ImageMemory = 11,
    493     Max = 0x7fffffff,
    494 };
    495 
    496 enum class MemorySemanticsMask : unsigned {
    497     MaskNone = 0,
    498     Acquire = 0x00000002,
    499     Release = 0x00000004,
    500     AcquireRelease = 0x00000008,
    501     SequentiallyConsistent = 0x00000010,
    502     UniformMemory = 0x00000040,
    503     SubgroupMemory = 0x00000080,
    504     WorkgroupMemory = 0x00000100,
    505     CrossWorkgroupMemory = 0x00000200,
    506     AtomicCounterMemory = 0x00000400,
    507     ImageMemory = 0x00000800,
    508 };
    509 
    510 enum class MemoryAccessShift : unsigned {
    511     Volatile = 0,
    512     Aligned = 1,
    513     Nontemporal = 2,
    514     Max = 0x7fffffff,
    515 };
    516 
    517 enum class MemoryAccessMask : unsigned {
    518     MaskNone = 0,
    519     Volatile = 0x00000001,
    520     Aligned = 0x00000002,
    521     Nontemporal = 0x00000004,
    522 };
    523 
    524 enum class Scope : unsigned {
    525     CrossDevice = 0,
    526     Device = 1,
    527     Workgroup = 2,
    528     Subgroup = 3,
    529     Invocation = 4,
    530     Max = 0x7fffffff,
    531 };
    532 
    533 enum class GroupOperation : unsigned {
    534     Reduce = 0,
    535     InclusiveScan = 1,
    536     ExclusiveScan = 2,
    537     Max = 0x7fffffff,
    538 };
    539 
    540 enum class KernelEnqueueFlags : unsigned {
    541     NoWait = 0,
    542     WaitKernel = 1,
    543     WaitWorkGroup = 2,
    544     Max = 0x7fffffff,
    545 };
    546 
    547 enum class KernelProfilingInfoShift : unsigned {
    548     CmdExecTime = 0,
    549     Max = 0x7fffffff,
    550 };
    551 
    552 enum class KernelProfilingInfoMask : unsigned {
    553     MaskNone = 0,
    554     CmdExecTime = 0x00000001,
    555 };
    556 
    557 enum class Capability : unsigned {
    558     Matrix = 0,
    559     Shader = 1,
    560     Geometry = 2,
    561     Tessellation = 3,
    562     Addresses = 4,
    563     Linkage = 5,
    564     Kernel = 6,
    565     Vector16 = 7,
    566     Float16Buffer = 8,
    567     Float16 = 9,
    568     Float64 = 10,
    569     Int64 = 11,
    570     Int64Atomics = 12,
    571     ImageBasic = 13,
    572     ImageReadWrite = 14,
    573     ImageMipmap = 15,
    574     Pipes = 17,
    575     Groups = 18,
    576     DeviceEnqueue = 19,
    577     LiteralSampler = 20,
    578     AtomicStorage = 21,
    579     Int16 = 22,
    580     TessellationPointSize = 23,
    581     GeometryPointSize = 24,
    582     ImageGatherExtended = 25,
    583     StorageImageMultisample = 27,
    584     UniformBufferArrayDynamicIndexing = 28,
    585     SampledImageArrayDynamicIndexing = 29,
    586     StorageBufferArrayDynamicIndexing = 30,
    587     StorageImageArrayDynamicIndexing = 31,
    588     ClipDistance = 32,
    589     CullDistance = 33,
    590     ImageCubeArray = 34,
    591     SampleRateShading = 35,
    592     ImageRect = 36,
    593     SampledRect = 37,
    594     GenericPointer = 38,
    595     Int8 = 39,
    596     InputAttachment = 40,
    597     SparseResidency = 41,
    598     MinLod = 42,
    599     Sampled1D = 43,
    600     Image1D = 44,
    601     SampledCubeArray = 45,
    602     SampledBuffer = 46,
    603     ImageBuffer = 47,
    604     ImageMSArray = 48,
    605     StorageImageExtendedFormats = 49,
    606     ImageQuery = 50,
    607     DerivativeControl = 51,
    608     InterpolationFunction = 52,
    609     TransformFeedback = 53,
    610     GeometryStreams = 54,
    611     StorageImageReadWithoutFormat = 55,
    612     StorageImageWriteWithoutFormat = 56,
    613     MultiViewport = 57,
    614     SubgroupDispatch = 58,
    615     NamedBarrier = 59,
    616     PipeStorage = 60,
    617     SubgroupBallotKHR = 4423,
    618     DrawParameters = 4427,
    619     Max = 0x7fffffff,
    620 };
    621 
    622 enum class Op : unsigned {
    623     OpNop = 0,
    624     OpUndef = 1,
    625     OpSourceContinued = 2,
    626     OpSource = 3,
    627     OpSourceExtension = 4,
    628     OpName = 5,
    629     OpMemberName = 6,
    630     OpString = 7,
    631     OpLine = 8,
    632     OpExtension = 10,
    633     OpExtInstImport = 11,
    634     OpExtInst = 12,
    635     OpMemoryModel = 14,
    636     OpEntryPoint = 15,
    637     OpExecutionMode = 16,
    638     OpCapability = 17,
    639     OpTypeVoid = 19,
    640     OpTypeBool = 20,
    641     OpTypeInt = 21,
    642     OpTypeFloat = 22,
    643     OpTypeVector = 23,
    644     OpTypeMatrix = 24,
    645     OpTypeImage = 25,
    646     OpTypeSampler = 26,
    647     OpTypeSampledImage = 27,
    648     OpTypeArray = 28,
    649     OpTypeRuntimeArray = 29,
    650     OpTypeStruct = 30,
    651     OpTypeOpaque = 31,
    652     OpTypePointer = 32,
    653     OpTypeFunction = 33,
    654     OpTypeEvent = 34,
    655     OpTypeDeviceEvent = 35,
    656     OpTypeReserveId = 36,
    657     OpTypeQueue = 37,
    658     OpTypePipe = 38,
    659     OpTypeForwardPointer = 39,
    660     OpConstantTrue = 41,
    661     OpConstantFalse = 42,
    662     OpConstant = 43,
    663     OpConstantComposite = 44,
    664     OpConstantSampler = 45,
    665     OpConstantNull = 46,
    666     OpSpecConstantTrue = 48,
    667     OpSpecConstantFalse = 49,
    668     OpSpecConstant = 50,
    669     OpSpecConstantComposite = 51,
    670     OpSpecConstantOp = 52,
    671     OpFunction = 54,
    672     OpFunctionParameter = 55,
    673     OpFunctionEnd = 56,
    674     OpFunctionCall = 57,
    675     OpVariable = 59,
    676     OpImageTexelPointer = 60,
    677     OpLoad = 61,
    678     OpStore = 62,
    679     OpCopyMemory = 63,
    680     OpCopyMemorySized = 64,
    681     OpAccessChain = 65,
    682     OpInBoundsAccessChain = 66,
    683     OpPtrAccessChain = 67,
    684     OpArrayLength = 68,
    685     OpGenericPtrMemSemantics = 69,
    686     OpInBoundsPtrAccessChain = 70,
    687     OpDecorate = 71,
    688     OpMemberDecorate = 72,
    689     OpDecorationGroup = 73,
    690     OpGroupDecorate = 74,
    691     OpGroupMemberDecorate = 75,
    692     OpVectorExtractDynamic = 77,
    693     OpVectorInsertDynamic = 78,
    694     OpVectorShuffle = 79,
    695     OpCompositeConstruct = 80,
    696     OpCompositeExtract = 81,
    697     OpCompositeInsert = 82,
    698     OpCopyObject = 83,
    699     OpTranspose = 84,
    700     OpSampledImage = 86,
    701     OpImageSampleImplicitLod = 87,
    702     OpImageSampleExplicitLod = 88,
    703     OpImageSampleDrefImplicitLod = 89,
    704     OpImageSampleDrefExplicitLod = 90,
    705     OpImageSampleProjImplicitLod = 91,
    706     OpImageSampleProjExplicitLod = 92,
    707     OpImageSampleProjDrefImplicitLod = 93,
    708     OpImageSampleProjDrefExplicitLod = 94,
    709     OpImageFetch = 95,
    710     OpImageGather = 96,
    711     OpImageDrefGather = 97,
    712     OpImageRead = 98,
    713     OpImageWrite = 99,
    714     OpImage = 100,
    715     OpImageQueryFormat = 101,
    716     OpImageQueryOrder = 102,
    717     OpImageQuerySizeLod = 103,
    718     OpImageQuerySize = 104,
    719     OpImageQueryLod = 105,
    720     OpImageQueryLevels = 106,
    721     OpImageQuerySamples = 107,
    722     OpConvertFToU = 109,
    723     OpConvertFToS = 110,
    724     OpConvertSToF = 111,
    725     OpConvertUToF = 112,
    726     OpUConvert = 113,
    727     OpSConvert = 114,
    728     OpFConvert = 115,
    729     OpQuantizeToF16 = 116,
    730     OpConvertPtrToU = 117,
    731     OpSatConvertSToU = 118,
    732     OpSatConvertUToS = 119,
    733     OpConvertUToPtr = 120,
    734     OpPtrCastToGeneric = 121,
    735     OpGenericCastToPtr = 122,
    736     OpGenericCastToPtrExplicit = 123,
    737     OpBitcast = 124,
    738     OpSNegate = 126,
    739     OpFNegate = 127,
    740     OpIAdd = 128,
    741     OpFAdd = 129,
    742     OpISub = 130,
    743     OpFSub = 131,
    744     OpIMul = 132,
    745     OpFMul = 133,
    746     OpUDiv = 134,
    747     OpSDiv = 135,
    748     OpFDiv = 136,
    749     OpUMod = 137,
    750     OpSRem = 138,
    751     OpSMod = 139,
    752     OpFRem = 140,
    753     OpFMod = 141,
    754     OpVectorTimesScalar = 142,
    755     OpMatrixTimesScalar = 143,
    756     OpVectorTimesMatrix = 144,
    757     OpMatrixTimesVector = 145,
    758     OpMatrixTimesMatrix = 146,
    759     OpOuterProduct = 147,
    760     OpDot = 148,
    761     OpIAddCarry = 149,
    762     OpISubBorrow = 150,
    763     OpUMulExtended = 151,
    764     OpSMulExtended = 152,
    765     OpAny = 154,
    766     OpAll = 155,
    767     OpIsNan = 156,
    768     OpIsInf = 157,
    769     OpIsFinite = 158,
    770     OpIsNormal = 159,
    771     OpSignBitSet = 160,
    772     OpLessOrGreater = 161,
    773     OpOrdered = 162,
    774     OpUnordered = 163,
    775     OpLogicalEqual = 164,
    776     OpLogicalNotEqual = 165,
    777     OpLogicalOr = 166,
    778     OpLogicalAnd = 167,
    779     OpLogicalNot = 168,
    780     OpSelect = 169,
    781     OpIEqual = 170,
    782     OpINotEqual = 171,
    783     OpUGreaterThan = 172,
    784     OpSGreaterThan = 173,
    785     OpUGreaterThanEqual = 174,
    786     OpSGreaterThanEqual = 175,
    787     OpULessThan = 176,
    788     OpSLessThan = 177,
    789     OpULessThanEqual = 178,
    790     OpSLessThanEqual = 179,
    791     OpFOrdEqual = 180,
    792     OpFUnordEqual = 181,
    793     OpFOrdNotEqual = 182,
    794     OpFUnordNotEqual = 183,
    795     OpFOrdLessThan = 184,
    796     OpFUnordLessThan = 185,
    797     OpFOrdGreaterThan = 186,
    798     OpFUnordGreaterThan = 187,
    799     OpFOrdLessThanEqual = 188,
    800     OpFUnordLessThanEqual = 189,
    801     OpFOrdGreaterThanEqual = 190,
    802     OpFUnordGreaterThanEqual = 191,
    803     OpShiftRightLogical = 194,
    804     OpShiftRightArithmetic = 195,
    805     OpShiftLeftLogical = 196,
    806     OpBitwiseOr = 197,
    807     OpBitwiseXor = 198,
    808     OpBitwiseAnd = 199,
    809     OpNot = 200,
    810     OpBitFieldInsert = 201,
    811     OpBitFieldSExtract = 202,
    812     OpBitFieldUExtract = 203,
    813     OpBitReverse = 204,
    814     OpBitCount = 205,
    815     OpDPdx = 207,
    816     OpDPdy = 208,
    817     OpFwidth = 209,
    818     OpDPdxFine = 210,
    819     OpDPdyFine = 211,
    820     OpFwidthFine = 212,
    821     OpDPdxCoarse = 213,
    822     OpDPdyCoarse = 214,
    823     OpFwidthCoarse = 215,
    824     OpEmitVertex = 218,
    825     OpEndPrimitive = 219,
    826     OpEmitStreamVertex = 220,
    827     OpEndStreamPrimitive = 221,
    828     OpControlBarrier = 224,
    829     OpMemoryBarrier = 225,
    830     OpAtomicLoad = 227,
    831     OpAtomicStore = 228,
    832     OpAtomicExchange = 229,
    833     OpAtomicCompareExchange = 230,
    834     OpAtomicCompareExchangeWeak = 231,
    835     OpAtomicIIncrement = 232,
    836     OpAtomicIDecrement = 233,
    837     OpAtomicIAdd = 234,
    838     OpAtomicISub = 235,
    839     OpAtomicSMin = 236,
    840     OpAtomicUMin = 237,
    841     OpAtomicSMax = 238,
    842     OpAtomicUMax = 239,
    843     OpAtomicAnd = 240,
    844     OpAtomicOr = 241,
    845     OpAtomicXor = 242,
    846     OpPhi = 245,
    847     OpLoopMerge = 246,
    848     OpSelectionMerge = 247,
    849     OpLabel = 248,
    850     OpBranch = 249,
    851     OpBranchConditional = 250,
    852     OpSwitch = 251,
    853     OpKill = 252,
    854     OpReturn = 253,
    855     OpReturnValue = 254,
    856     OpUnreachable = 255,
    857     OpLifetimeStart = 256,
    858     OpLifetimeStop = 257,
    859     OpGroupAsyncCopy = 259,
    860     OpGroupWaitEvents = 260,
    861     OpGroupAll = 261,
    862     OpGroupAny = 262,
    863     OpGroupBroadcast = 263,
    864     OpGroupIAdd = 264,
    865     OpGroupFAdd = 265,
    866     OpGroupFMin = 266,
    867     OpGroupUMin = 267,
    868     OpGroupSMin = 268,
    869     OpGroupFMax = 269,
    870     OpGroupUMax = 270,
    871     OpGroupSMax = 271,
    872     OpReadPipe = 274,
    873     OpWritePipe = 275,
    874     OpReservedReadPipe = 276,
    875     OpReservedWritePipe = 277,
    876     OpReserveReadPipePackets = 278,
    877     OpReserveWritePipePackets = 279,
    878     OpCommitReadPipe = 280,
    879     OpCommitWritePipe = 281,
    880     OpIsValidReserveId = 282,
    881     OpGetNumPipePackets = 283,
    882     OpGetMaxPipePackets = 284,
    883     OpGroupReserveReadPipePackets = 285,
    884     OpGroupReserveWritePipePackets = 286,
    885     OpGroupCommitReadPipe = 287,
    886     OpGroupCommitWritePipe = 288,
    887     OpEnqueueMarker = 291,
    888     OpEnqueueKernel = 292,
    889     OpGetKernelNDrangeSubGroupCount = 293,
    890     OpGetKernelNDrangeMaxSubGroupSize = 294,
    891     OpGetKernelWorkGroupSize = 295,
    892     OpGetKernelPreferredWorkGroupSizeMultiple = 296,
    893     OpRetainEvent = 297,
    894     OpReleaseEvent = 298,
    895     OpCreateUserEvent = 299,
    896     OpIsValidEvent = 300,
    897     OpSetUserEventStatus = 301,
    898     OpCaptureEventProfilingInfo = 302,
    899     OpGetDefaultQueue = 303,
    900     OpBuildNDRange = 304,
    901     OpImageSparseSampleImplicitLod = 305,
    902     OpImageSparseSampleExplicitLod = 306,
    903     OpImageSparseSampleDrefImplicitLod = 307,
    904     OpImageSparseSampleDrefExplicitLod = 308,
    905     OpImageSparseSampleProjImplicitLod = 309,
    906     OpImageSparseSampleProjExplicitLod = 310,
    907     OpImageSparseSampleProjDrefImplicitLod = 311,
    908     OpImageSparseSampleProjDrefExplicitLod = 312,
    909     OpImageSparseFetch = 313,
    910     OpImageSparseGather = 314,
    911     OpImageSparseDrefGather = 315,
    912     OpImageSparseTexelsResident = 316,
    913     OpNoLine = 317,
    914     OpAtomicFlagTestAndSet = 318,
    915     OpAtomicFlagClear = 319,
    916     OpImageSparseRead = 320,
    917     OpSizeOf = 321,
    918     OpTypePipeStorage = 322,
    919     OpConstantPipeStorage = 323,
    920     OpCreatePipeFromPipeStorage = 324,
    921     OpGetKernelLocalSizeForSubgroupCount = 325,
    922     OpGetKernelMaxNumSubgroups = 326,
    923     OpTypeNamedBarrier = 327,
    924     OpNamedBarrierInitialize = 328,
    925     OpMemoryNamedBarrier = 329,
    926     OpModuleProcessed = 330,
    927     OpSubgroupBallotKHR = 4421,
    928     OpSubgroupFirstInvocationKHR = 4422,
    929     Max = 0x7fffffff,
    930 };
    931 
    932 // Overload operator| for mask bit combining
    933 
    934 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
    935 inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
    936 inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
    937 inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
    938 inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
    939 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
    940 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
    941 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
    942 
    943 }  // end namespace spv
    944 
    945 #endif  // #ifndef spirv_HPP
    946 
    947