Merge pull request #39 from bashbaug/intel_enum_block
[platform/upstream/SPIRV-Headers.git] / include / spirv / 1.1 / 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 0x10100
50 #define SPV_REVISION 7
51
52 static const unsigned int MagicNumber = 0x07230203;
53 static const unsigned int Version = 0x00010100;
54 static const unsigned int Revision = 7;
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     Max = 0x7fffffff,
130 };
131
132 enum class StorageClass : unsigned {
133     UniformConstant = 0,
134     Input = 1,
135     Uniform = 2,
136     Output = 3,
137     Workgroup = 4,
138     CrossWorkgroup = 5,
139     Private = 6,
140     Function = 7,
141     Generic = 8,
142     PushConstant = 9,
143     AtomicCounter = 10,
144     Image = 11,
145     StorageBuffer = 12,
146     Max = 0x7fffffff,
147 };
148
149 enum class Dim : unsigned {
150     Dim1D = 0,
151     Dim2D = 1,
152     Dim3D = 2,
153     Cube = 3,
154     Rect = 4,
155     Buffer = 5,
156     SubpassData = 6,
157     Max = 0x7fffffff,
158 };
159
160 enum class SamplerAddressingMode : unsigned {
161     None = 0,
162     ClampToEdge = 1,
163     Clamp = 2,
164     Repeat = 3,
165     RepeatMirrored = 4,
166     Max = 0x7fffffff,
167 };
168
169 enum class SamplerFilterMode : unsigned {
170     Nearest = 0,
171     Linear = 1,
172     Max = 0x7fffffff,
173 };
174
175 enum class ImageFormat : unsigned {
176     Unknown = 0,
177     Rgba32f = 1,
178     Rgba16f = 2,
179     R32f = 3,
180     Rgba8 = 4,
181     Rgba8Snorm = 5,
182     Rg32f = 6,
183     Rg16f = 7,
184     R11fG11fB10f = 8,
185     R16f = 9,
186     Rgba16 = 10,
187     Rgb10A2 = 11,
188     Rg16 = 12,
189     Rg8 = 13,
190     R16 = 14,
191     R8 = 15,
192     Rgba16Snorm = 16,
193     Rg16Snorm = 17,
194     Rg8Snorm = 18,
195     R16Snorm = 19,
196     R8Snorm = 20,
197     Rgba32i = 21,
198     Rgba16i = 22,
199     Rgba8i = 23,
200     R32i = 24,
201     Rg32i = 25,
202     Rg16i = 26,
203     Rg8i = 27,
204     R16i = 28,
205     R8i = 29,
206     Rgba32ui = 30,
207     Rgba16ui = 31,
208     Rgba8ui = 32,
209     R32ui = 33,
210     Rgb10a2ui = 34,
211     Rg32ui = 35,
212     Rg16ui = 36,
213     Rg8ui = 37,
214     R16ui = 38,
215     R8ui = 39,
216     Max = 0x7fffffff,
217 };
218
219 enum class ImageChannelOrder : unsigned {
220     R = 0,
221     A = 1,
222     RG = 2,
223     RA = 3,
224     RGB = 4,
225     RGBA = 5,
226     BGRA = 6,
227     ARGB = 7,
228     Intensity = 8,
229     Luminance = 9,
230     Rx = 10,
231     RGx = 11,
232     RGBx = 12,
233     Depth = 13,
234     DepthStencil = 14,
235     sRGB = 15,
236     sRGBx = 16,
237     sRGBA = 17,
238     sBGRA = 18,
239     ABGR = 19,
240     Max = 0x7fffffff,
241 };
242
243 enum class ImageChannelDataType : unsigned {
244     SnormInt8 = 0,
245     SnormInt16 = 1,
246     UnormInt8 = 2,
247     UnormInt16 = 3,
248     UnormShort565 = 4,
249     UnormShort555 = 5,
250     UnormInt101010 = 6,
251     SignedInt8 = 7,
252     SignedInt16 = 8,
253     SignedInt32 = 9,
254     UnsignedInt8 = 10,
255     UnsignedInt16 = 11,
256     UnsignedInt32 = 12,
257     HalfFloat = 13,
258     Float = 14,
259     UnormInt24 = 15,
260     UnormInt101010_2 = 16,
261     Max = 0x7fffffff,
262 };
263
264 enum class ImageOperandsShift : unsigned {
265     Bias = 0,
266     Lod = 1,
267     Grad = 2,
268     ConstOffset = 3,
269     Offset = 4,
270     ConstOffsets = 5,
271     Sample = 6,
272     MinLod = 7,
273     Max = 0x7fffffff,
274 };
275
276 enum class ImageOperandsMask : unsigned {
277     MaskNone = 0,
278     Bias = 0x00000001,
279     Lod = 0x00000002,
280     Grad = 0x00000004,
281     ConstOffset = 0x00000008,
282     Offset = 0x00000010,
283     ConstOffsets = 0x00000020,
284     Sample = 0x00000040,
285     MinLod = 0x00000080,
286 };
287
288 enum class FPFastMathModeShift : unsigned {
289     NotNaN = 0,
290     NotInf = 1,
291     NSZ = 2,
292     AllowRecip = 3,
293     Fast = 4,
294     Max = 0x7fffffff,
295 };
296
297 enum class FPFastMathModeMask : unsigned {
298     MaskNone = 0,
299     NotNaN = 0x00000001,
300     NotInf = 0x00000002,
301     NSZ = 0x00000004,
302     AllowRecip = 0x00000008,
303     Fast = 0x00000010,
304 };
305
306 enum class FPRoundingMode : unsigned {
307     RTE = 0,
308     RTZ = 1,
309     RTP = 2,
310     RTN = 3,
311     Max = 0x7fffffff,
312 };
313
314 enum class LinkageType : unsigned {
315     Export = 0,
316     Import = 1,
317     Max = 0x7fffffff,
318 };
319
320 enum class AccessQualifier : unsigned {
321     ReadOnly = 0,
322     WriteOnly = 1,
323     ReadWrite = 2,
324     Max = 0x7fffffff,
325 };
326
327 enum class FunctionParameterAttribute : unsigned {
328     Zext = 0,
329     Sext = 1,
330     ByVal = 2,
331     Sret = 3,
332     NoAlias = 4,
333     NoCapture = 5,
334     NoWrite = 6,
335     NoReadWrite = 7,
336     Max = 0x7fffffff,
337 };
338
339 enum class Decoration : unsigned {
340     RelaxedPrecision = 0,
341     SpecId = 1,
342     Block = 2,
343     BufferBlock = 3,
344     RowMajor = 4,
345     ColMajor = 5,
346     ArrayStride = 6,
347     MatrixStride = 7,
348     GLSLShared = 8,
349     GLSLPacked = 9,
350     CPacked = 10,
351     BuiltIn = 11,
352     NoPerspective = 13,
353     Flat = 14,
354     Patch = 15,
355     Centroid = 16,
356     Sample = 17,
357     Invariant = 18,
358     Restrict = 19,
359     Aliased = 20,
360     Volatile = 21,
361     Constant = 22,
362     Coherent = 23,
363     NonWritable = 24,
364     NonReadable = 25,
365     Uniform = 26,
366     SaturatedConversion = 28,
367     Stream = 29,
368     Location = 30,
369     Component = 31,
370     Index = 32,
371     Binding = 33,
372     DescriptorSet = 34,
373     Offset = 35,
374     XfbBuffer = 36,
375     XfbStride = 37,
376     FuncParamAttr = 38,
377     FPRoundingMode = 39,
378     FPFastMathMode = 40,
379     LinkageAttributes = 41,
380     NoContraction = 42,
381     InputAttachmentIndex = 43,
382     Alignment = 44,
383     MaxByteOffset = 45,
384     OverrideCoverageNV = 5248,
385     PassthroughNV = 5250,
386     ViewportRelativeNV = 5252,
387     SecondaryViewportRelativeNV = 5256,
388     Max = 0x7fffffff,
389 };
390
391 enum class BuiltIn : unsigned {
392     Position = 0,
393     PointSize = 1,
394     ClipDistance = 3,
395     CullDistance = 4,
396     VertexId = 5,
397     InstanceId = 6,
398     PrimitiveId = 7,
399     InvocationId = 8,
400     Layer = 9,
401     ViewportIndex = 10,
402     TessLevelOuter = 11,
403     TessLevelInner = 12,
404     TessCoord = 13,
405     PatchVertices = 14,
406     FragCoord = 15,
407     PointCoord = 16,
408     FrontFacing = 17,
409     SampleId = 18,
410     SamplePosition = 19,
411     SampleMask = 20,
412     FragDepth = 22,
413     HelperInvocation = 23,
414     NumWorkgroups = 24,
415     WorkgroupSize = 25,
416     WorkgroupId = 26,
417     LocalInvocationId = 27,
418     GlobalInvocationId = 28,
419     LocalInvocationIndex = 29,
420     WorkDim = 30,
421     GlobalSize = 31,
422     EnqueuedWorkgroupSize = 32,
423     GlobalOffset = 33,
424     GlobalLinearId = 34,
425     SubgroupSize = 36,
426     SubgroupMaxSize = 37,
427     NumSubgroups = 38,
428     NumEnqueuedSubgroups = 39,
429     SubgroupId = 40,
430     SubgroupLocalInvocationId = 41,
431     VertexIndex = 42,
432     InstanceIndex = 43,
433     SubgroupEqMaskKHR = 4416,
434     SubgroupGeMaskKHR = 4417,
435     SubgroupGtMaskKHR = 4418,
436     SubgroupLeMaskKHR = 4419,
437     SubgroupLtMaskKHR = 4420,
438     BaseVertex = 4424,
439     BaseInstance = 4425,
440     DrawIndex = 4426,
441     DeviceIndex = 4438,
442     ViewIndex = 4440,
443     ViewportMaskNV = 5253,
444     SecondaryPositionNV = 5257,
445     SecondaryViewportMaskNV = 5258,
446     PositionPerViewNV = 5261,
447     ViewportMaskPerViewNV = 5262,
448     Max = 0x7fffffff,
449 };
450
451 enum class SelectionControlShift : unsigned {
452     Flatten = 0,
453     DontFlatten = 1,
454     Max = 0x7fffffff,
455 };
456
457 enum class SelectionControlMask : unsigned {
458     MaskNone = 0,
459     Flatten = 0x00000001,
460     DontFlatten = 0x00000002,
461 };
462
463 enum class LoopControlShift : unsigned {
464     Unroll = 0,
465     DontUnroll = 1,
466     DependencyInfinite = 2,
467     DependencyLength = 3,
468     Max = 0x7fffffff,
469 };
470
471 enum class LoopControlMask : unsigned {
472     MaskNone = 0,
473     Unroll = 0x00000001,
474     DontUnroll = 0x00000002,
475     DependencyInfinite = 0x00000004,
476     DependencyLength = 0x00000008,
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     SubgroupDispatch = 58,
628     NamedBarrier = 59,
629     PipeStorage = 60,
630     SubgroupBallotKHR = 4423,
631     DrawParameters = 4427,
632     SubgroupVoteKHR = 4431,
633     StorageBuffer16BitAccess = 4433,
634     StorageUniformBufferBlock16 = 4433,
635     StorageUniform16 = 4434,
636     UniformAndStorageBuffer16BitAccess = 4434,
637     StoragePushConstant16 = 4435,
638     StorageInputOutput16 = 4436,
639     DeviceGroup = 4437,
640     MultiView = 4439,
641     VariablePointersStorageBuffer = 4441,
642     VariablePointers = 4442,
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     OpSizeOf = 321,
948     OpTypePipeStorage = 322,
949     OpConstantPipeStorage = 323,
950     OpCreatePipeFromPipeStorage = 324,
951     OpGetKernelLocalSizeForSubgroupCount = 325,
952     OpGetKernelMaxNumSubgroups = 326,
953     OpTypeNamedBarrier = 327,
954     OpNamedBarrierInitialize = 328,
955     OpMemoryNamedBarrier = 329,
956     OpModuleProcessed = 330,
957     OpSubgroupBallotKHR = 4421,
958     OpSubgroupFirstInvocationKHR = 4422,
959     OpSubgroupAllKHR = 4428,
960     OpSubgroupAnyKHR = 4429,
961     OpSubgroupAllEqualKHR = 4430,
962     OpSubgroupReadInvocationKHR = 4432,
963     Max = 0x7fffffff,
964 };
965
966 // Overload operator| for mask bit combining
967
968 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
969 inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
970 inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
971 inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
972 inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
973 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
974 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
975 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
976
977 }  // end namespace spv
978
979 #endif  // #ifndef spirv_HPP
980