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