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