ca93d69e186b5533a0c22dfeafa605abb7d9f17e
[platform/upstream/SPIRV-Headers.git] / include / spirv / 1.0 / spirv.hpp11
1 // Copyright (c) 2014-2016 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 8
51
52 static const unsigned int MagicNumber = 0x07230203;
53 static const unsigned int Version = 0x00010000;
54 static const unsigned int Revision = 8;
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     Max = 0x7fffffff,
608 };
609
610 enum class Op : unsigned {
611     OpNop = 0,
612     OpUndef = 1,
613     OpSourceContinued = 2,
614     OpSource = 3,
615     OpSourceExtension = 4,
616     OpName = 5,
617     OpMemberName = 6,
618     OpString = 7,
619     OpLine = 8,
620     OpExtension = 10,
621     OpExtInstImport = 11,
622     OpExtInst = 12,
623     OpMemoryModel = 14,
624     OpEntryPoint = 15,
625     OpExecutionMode = 16,
626     OpCapability = 17,
627     OpTypeVoid = 19,
628     OpTypeBool = 20,
629     OpTypeInt = 21,
630     OpTypeFloat = 22,
631     OpTypeVector = 23,
632     OpTypeMatrix = 24,
633     OpTypeImage = 25,
634     OpTypeSampler = 26,
635     OpTypeSampledImage = 27,
636     OpTypeArray = 28,
637     OpTypeRuntimeArray = 29,
638     OpTypeStruct = 30,
639     OpTypeOpaque = 31,
640     OpTypePointer = 32,
641     OpTypeFunction = 33,
642     OpTypeEvent = 34,
643     OpTypeDeviceEvent = 35,
644     OpTypeReserveId = 36,
645     OpTypeQueue = 37,
646     OpTypePipe = 38,
647     OpTypeForwardPointer = 39,
648     OpConstantTrue = 41,
649     OpConstantFalse = 42,
650     OpConstant = 43,
651     OpConstantComposite = 44,
652     OpConstantSampler = 45,
653     OpConstantNull = 46,
654     OpSpecConstantTrue = 48,
655     OpSpecConstantFalse = 49,
656     OpSpecConstant = 50,
657     OpSpecConstantComposite = 51,
658     OpSpecConstantOp = 52,
659     OpFunction = 54,
660     OpFunctionParameter = 55,
661     OpFunctionEnd = 56,
662     OpFunctionCall = 57,
663     OpVariable = 59,
664     OpImageTexelPointer = 60,
665     OpLoad = 61,
666     OpStore = 62,
667     OpCopyMemory = 63,
668     OpCopyMemorySized = 64,
669     OpAccessChain = 65,
670     OpInBoundsAccessChain = 66,
671     OpPtrAccessChain = 67,
672     OpArrayLength = 68,
673     OpGenericPtrMemSemantics = 69,
674     OpInBoundsPtrAccessChain = 70,
675     OpDecorate = 71,
676     OpMemberDecorate = 72,
677     OpDecorationGroup = 73,
678     OpGroupDecorate = 74,
679     OpGroupMemberDecorate = 75,
680     OpVectorExtractDynamic = 77,
681     OpVectorInsertDynamic = 78,
682     OpVectorShuffle = 79,
683     OpCompositeConstruct = 80,
684     OpCompositeExtract = 81,
685     OpCompositeInsert = 82,
686     OpCopyObject = 83,
687     OpTranspose = 84,
688     OpSampledImage = 86,
689     OpImageSampleImplicitLod = 87,
690     OpImageSampleExplicitLod = 88,
691     OpImageSampleDrefImplicitLod = 89,
692     OpImageSampleDrefExplicitLod = 90,
693     OpImageSampleProjImplicitLod = 91,
694     OpImageSampleProjExplicitLod = 92,
695     OpImageSampleProjDrefImplicitLod = 93,
696     OpImageSampleProjDrefExplicitLod = 94,
697     OpImageFetch = 95,
698     OpImageGather = 96,
699     OpImageDrefGather = 97,
700     OpImageRead = 98,
701     OpImageWrite = 99,
702     OpImage = 100,
703     OpImageQueryFormat = 101,
704     OpImageQueryOrder = 102,
705     OpImageQuerySizeLod = 103,
706     OpImageQuerySize = 104,
707     OpImageQueryLod = 105,
708     OpImageQueryLevels = 106,
709     OpImageQuerySamples = 107,
710     OpConvertFToU = 109,
711     OpConvertFToS = 110,
712     OpConvertSToF = 111,
713     OpConvertUToF = 112,
714     OpUConvert = 113,
715     OpSConvert = 114,
716     OpFConvert = 115,
717     OpQuantizeToF16 = 116,
718     OpConvertPtrToU = 117,
719     OpSatConvertSToU = 118,
720     OpSatConvertUToS = 119,
721     OpConvertUToPtr = 120,
722     OpPtrCastToGeneric = 121,
723     OpGenericCastToPtr = 122,
724     OpGenericCastToPtrExplicit = 123,
725     OpBitcast = 124,
726     OpSNegate = 126,
727     OpFNegate = 127,
728     OpIAdd = 128,
729     OpFAdd = 129,
730     OpISub = 130,
731     OpFSub = 131,
732     OpIMul = 132,
733     OpFMul = 133,
734     OpUDiv = 134,
735     OpSDiv = 135,
736     OpFDiv = 136,
737     OpUMod = 137,
738     OpSRem = 138,
739     OpSMod = 139,
740     OpFRem = 140,
741     OpFMod = 141,
742     OpVectorTimesScalar = 142,
743     OpMatrixTimesScalar = 143,
744     OpVectorTimesMatrix = 144,
745     OpMatrixTimesVector = 145,
746     OpMatrixTimesMatrix = 146,
747     OpOuterProduct = 147,
748     OpDot = 148,
749     OpIAddCarry = 149,
750     OpISubBorrow = 150,
751     OpUMulExtended = 151,
752     OpSMulExtended = 152,
753     OpAny = 154,
754     OpAll = 155,
755     OpIsNan = 156,
756     OpIsInf = 157,
757     OpIsFinite = 158,
758     OpIsNormal = 159,
759     OpSignBitSet = 160,
760     OpLessOrGreater = 161,
761     OpOrdered = 162,
762     OpUnordered = 163,
763     OpLogicalEqual = 164,
764     OpLogicalNotEqual = 165,
765     OpLogicalOr = 166,
766     OpLogicalAnd = 167,
767     OpLogicalNot = 168,
768     OpSelect = 169,
769     OpIEqual = 170,
770     OpINotEqual = 171,
771     OpUGreaterThan = 172,
772     OpSGreaterThan = 173,
773     OpUGreaterThanEqual = 174,
774     OpSGreaterThanEqual = 175,
775     OpULessThan = 176,
776     OpSLessThan = 177,
777     OpULessThanEqual = 178,
778     OpSLessThanEqual = 179,
779     OpFOrdEqual = 180,
780     OpFUnordEqual = 181,
781     OpFOrdNotEqual = 182,
782     OpFUnordNotEqual = 183,
783     OpFOrdLessThan = 184,
784     OpFUnordLessThan = 185,
785     OpFOrdGreaterThan = 186,
786     OpFUnordGreaterThan = 187,
787     OpFOrdLessThanEqual = 188,
788     OpFUnordLessThanEqual = 189,
789     OpFOrdGreaterThanEqual = 190,
790     OpFUnordGreaterThanEqual = 191,
791     OpShiftRightLogical = 194,
792     OpShiftRightArithmetic = 195,
793     OpShiftLeftLogical = 196,
794     OpBitwiseOr = 197,
795     OpBitwiseXor = 198,
796     OpBitwiseAnd = 199,
797     OpNot = 200,
798     OpBitFieldInsert = 201,
799     OpBitFieldSExtract = 202,
800     OpBitFieldUExtract = 203,
801     OpBitReverse = 204,
802     OpBitCount = 205,
803     OpDPdx = 207,
804     OpDPdy = 208,
805     OpFwidth = 209,
806     OpDPdxFine = 210,
807     OpDPdyFine = 211,
808     OpFwidthFine = 212,
809     OpDPdxCoarse = 213,
810     OpDPdyCoarse = 214,
811     OpFwidthCoarse = 215,
812     OpEmitVertex = 218,
813     OpEndPrimitive = 219,
814     OpEmitStreamVertex = 220,
815     OpEndStreamPrimitive = 221,
816     OpControlBarrier = 224,
817     OpMemoryBarrier = 225,
818     OpAtomicLoad = 227,
819     OpAtomicStore = 228,
820     OpAtomicExchange = 229,
821     OpAtomicCompareExchange = 230,
822     OpAtomicCompareExchangeWeak = 231,
823     OpAtomicIIncrement = 232,
824     OpAtomicIDecrement = 233,
825     OpAtomicIAdd = 234,
826     OpAtomicISub = 235,
827     OpAtomicSMin = 236,
828     OpAtomicUMin = 237,
829     OpAtomicSMax = 238,
830     OpAtomicUMax = 239,
831     OpAtomicAnd = 240,
832     OpAtomicOr = 241,
833     OpAtomicXor = 242,
834     OpPhi = 245,
835     OpLoopMerge = 246,
836     OpSelectionMerge = 247,
837     OpLabel = 248,
838     OpBranch = 249,
839     OpBranchConditional = 250,
840     OpSwitch = 251,
841     OpKill = 252,
842     OpReturn = 253,
843     OpReturnValue = 254,
844     OpUnreachable = 255,
845     OpLifetimeStart = 256,
846     OpLifetimeStop = 257,
847     OpGroupAsyncCopy = 259,
848     OpGroupWaitEvents = 260,
849     OpGroupAll = 261,
850     OpGroupAny = 262,
851     OpGroupBroadcast = 263,
852     OpGroupIAdd = 264,
853     OpGroupFAdd = 265,
854     OpGroupFMin = 266,
855     OpGroupUMin = 267,
856     OpGroupSMin = 268,
857     OpGroupFMax = 269,
858     OpGroupUMax = 270,
859     OpGroupSMax = 271,
860     OpReadPipe = 274,
861     OpWritePipe = 275,
862     OpReservedReadPipe = 276,
863     OpReservedWritePipe = 277,
864     OpReserveReadPipePackets = 278,
865     OpReserveWritePipePackets = 279,
866     OpCommitReadPipe = 280,
867     OpCommitWritePipe = 281,
868     OpIsValidReserveId = 282,
869     OpGetNumPipePackets = 283,
870     OpGetMaxPipePackets = 284,
871     OpGroupReserveReadPipePackets = 285,
872     OpGroupReserveWritePipePackets = 286,
873     OpGroupCommitReadPipe = 287,
874     OpGroupCommitWritePipe = 288,
875     OpEnqueueMarker = 291,
876     OpEnqueueKernel = 292,
877     OpGetKernelNDrangeSubGroupCount = 293,
878     OpGetKernelNDrangeMaxSubGroupSize = 294,
879     OpGetKernelWorkGroupSize = 295,
880     OpGetKernelPreferredWorkGroupSizeMultiple = 296,
881     OpRetainEvent = 297,
882     OpReleaseEvent = 298,
883     OpCreateUserEvent = 299,
884     OpIsValidEvent = 300,
885     OpSetUserEventStatus = 301,
886     OpCaptureEventProfilingInfo = 302,
887     OpGetDefaultQueue = 303,
888     OpBuildNDRange = 304,
889     OpImageSparseSampleImplicitLod = 305,
890     OpImageSparseSampleExplicitLod = 306,
891     OpImageSparseSampleDrefImplicitLod = 307,
892     OpImageSparseSampleDrefExplicitLod = 308,
893     OpImageSparseSampleProjImplicitLod = 309,
894     OpImageSparseSampleProjExplicitLod = 310,
895     OpImageSparseSampleProjDrefImplicitLod = 311,
896     OpImageSparseSampleProjDrefExplicitLod = 312,
897     OpImageSparseFetch = 313,
898     OpImageSparseGather = 314,
899     OpImageSparseDrefGather = 315,
900     OpImageSparseTexelsResident = 316,
901     OpNoLine = 317,
902     OpAtomicFlagTestAndSet = 318,
903     OpAtomicFlagClear = 319,
904     OpImageSparseRead = 320,
905     OpSubgroupBallotKHR = 4421,
906     OpSubgroupFirstInvocationKHR = 4422,
907     Max = 0x7fffffff,
908 };
909
910 // Overload operator| for mask bit combining
911
912 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
913 inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
914 inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
915 inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
916 inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
917 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
918 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
919 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
920
921 }  // end namespace spv
922
923 #endif  // #ifndef spirv_HPP
924