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