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