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