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