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