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