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