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