Update to SPIR-V 1.0 Rev 5 headers
[platform/upstream/SPIRV-Headers.git] / include / spirv / 1.0 / spirv.hpp
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 5
51
52 static const unsigned int MagicNumber = 0x07230203;
53 static const unsigned int Version = 0x00010000;
54 static const unsigned int Revision = 5;
55 static const unsigned int OpCodeMask = 0xffff;
56 static const unsigned int WordCountShift = 16;
57
58 enum SourceLanguage {
59     SourceLanguageUnknown = 0,
60     SourceLanguageESSL = 1,
61     SourceLanguageGLSL = 2,
62     SourceLanguageOpenCL_C = 3,
63     SourceLanguageOpenCL_CPP = 4,
64 };
65
66 enum ExecutionModel {
67     ExecutionModelVertex = 0,
68     ExecutionModelTessellationControl = 1,
69     ExecutionModelTessellationEvaluation = 2,
70     ExecutionModelGeometry = 3,
71     ExecutionModelFragment = 4,
72     ExecutionModelGLCompute = 5,
73     ExecutionModelKernel = 6,
74 };
75
76 enum AddressingModel {
77     AddressingModelLogical = 0,
78     AddressingModelPhysical32 = 1,
79     AddressingModelPhysical64 = 2,
80 };
81
82 enum MemoryModel {
83     MemoryModelSimple = 0,
84     MemoryModelGLSL450 = 1,
85     MemoryModelOpenCL = 2,
86 };
87
88 enum ExecutionMode {
89     ExecutionModeInvocations = 0,
90     ExecutionModeSpacingEqual = 1,
91     ExecutionModeSpacingFractionalEven = 2,
92     ExecutionModeSpacingFractionalOdd = 3,
93     ExecutionModeVertexOrderCw = 4,
94     ExecutionModeVertexOrderCcw = 5,
95     ExecutionModePixelCenterInteger = 6,
96     ExecutionModeOriginUpperLeft = 7,
97     ExecutionModeOriginLowerLeft = 8,
98     ExecutionModeEarlyFragmentTests = 9,
99     ExecutionModePointMode = 10,
100     ExecutionModeXfb = 11,
101     ExecutionModeDepthReplacing = 12,
102     ExecutionModeDepthGreater = 14,
103     ExecutionModeDepthLess = 15,
104     ExecutionModeDepthUnchanged = 16,
105     ExecutionModeLocalSize = 17,
106     ExecutionModeLocalSizeHint = 18,
107     ExecutionModeInputPoints = 19,
108     ExecutionModeInputLines = 20,
109     ExecutionModeInputLinesAdjacency = 21,
110     ExecutionModeTriangles = 22,
111     ExecutionModeInputTrianglesAdjacency = 23,
112     ExecutionModeQuads = 24,
113     ExecutionModeIsolines = 25,
114     ExecutionModeOutputVertices = 26,
115     ExecutionModeOutputPoints = 27,
116     ExecutionModeOutputLineStrip = 28,
117     ExecutionModeOutputTriangleStrip = 29,
118     ExecutionModeVecTypeHint = 30,
119     ExecutionModeContractionOff = 31,
120 };
121
122 enum StorageClass {
123     StorageClassUniformConstant = 0,
124     StorageClassInput = 1,
125     StorageClassUniform = 2,
126     StorageClassOutput = 3,
127     StorageClassWorkgroup = 4,
128     StorageClassCrossWorkgroup = 5,
129     StorageClassPrivate = 6,
130     StorageClassFunction = 7,
131     StorageClassGeneric = 8,
132     StorageClassPushConstant = 9,
133     StorageClassAtomicCounter = 10,
134     StorageClassImage = 11,
135 };
136
137 enum Dim {
138     Dim1D = 0,
139     Dim2D = 1,
140     Dim3D = 2,
141     DimCube = 3,
142     DimRect = 4,
143     DimBuffer = 5,
144     DimSubpassData = 6,
145 };
146
147 enum SamplerAddressingMode {
148     SamplerAddressingModeNone = 0,
149     SamplerAddressingModeClampToEdge = 1,
150     SamplerAddressingModeClamp = 2,
151     SamplerAddressingModeRepeat = 3,
152     SamplerAddressingModeRepeatMirrored = 4,
153 };
154
155 enum SamplerFilterMode {
156     SamplerFilterModeNearest = 0,
157     SamplerFilterModeLinear = 1,
158 };
159
160 enum ImageFormat {
161     ImageFormatUnknown = 0,
162     ImageFormatRgba32f = 1,
163     ImageFormatRgba16f = 2,
164     ImageFormatR32f = 3,
165     ImageFormatRgba8 = 4,
166     ImageFormatRgba8Snorm = 5,
167     ImageFormatRg32f = 6,
168     ImageFormatRg16f = 7,
169     ImageFormatR11fG11fB10f = 8,
170     ImageFormatR16f = 9,
171     ImageFormatRgba16 = 10,
172     ImageFormatRgb10A2 = 11,
173     ImageFormatRg16 = 12,
174     ImageFormatRg8 = 13,
175     ImageFormatR16 = 14,
176     ImageFormatR8 = 15,
177     ImageFormatRgba16Snorm = 16,
178     ImageFormatRg16Snorm = 17,
179     ImageFormatRg8Snorm = 18,
180     ImageFormatR16Snorm = 19,
181     ImageFormatR8Snorm = 20,
182     ImageFormatRgba32i = 21,
183     ImageFormatRgba16i = 22,
184     ImageFormatRgba8i = 23,
185     ImageFormatR32i = 24,
186     ImageFormatRg32i = 25,
187     ImageFormatRg16i = 26,
188     ImageFormatRg8i = 27,
189     ImageFormatR16i = 28,
190     ImageFormatR8i = 29,
191     ImageFormatRgba32ui = 30,
192     ImageFormatRgba16ui = 31,
193     ImageFormatRgba8ui = 32,
194     ImageFormatR32ui = 33,
195     ImageFormatRgb10a2ui = 34,
196     ImageFormatRg32ui = 35,
197     ImageFormatRg16ui = 36,
198     ImageFormatRg8ui = 37,
199     ImageFormatR16ui = 38,
200     ImageFormatR8ui = 39,
201 };
202
203 enum ImageChannelOrder {
204     ImageChannelOrderR = 0,
205     ImageChannelOrderA = 1,
206     ImageChannelOrderRG = 2,
207     ImageChannelOrderRA = 3,
208     ImageChannelOrderRGB = 4,
209     ImageChannelOrderRGBA = 5,
210     ImageChannelOrderBGRA = 6,
211     ImageChannelOrderARGB = 7,
212     ImageChannelOrderIntensity = 8,
213     ImageChannelOrderLuminance = 9,
214     ImageChannelOrderRx = 10,
215     ImageChannelOrderRGx = 11,
216     ImageChannelOrderRGBx = 12,
217     ImageChannelOrderDepth = 13,
218     ImageChannelOrderDepthStencil = 14,
219     ImageChannelOrdersRGB = 15,
220     ImageChannelOrdersRGBx = 16,
221     ImageChannelOrdersRGBA = 17,
222     ImageChannelOrdersBGRA = 18,
223     ImageChannelOrderABGR = 19,
224 };
225
226 enum ImageChannelDataType {
227     ImageChannelDataTypeSnormInt8 = 0,
228     ImageChannelDataTypeSnormInt16 = 1,
229     ImageChannelDataTypeUnormInt8 = 2,
230     ImageChannelDataTypeUnormInt16 = 3,
231     ImageChannelDataTypeUnormShort565 = 4,
232     ImageChannelDataTypeUnormShort555 = 5,
233     ImageChannelDataTypeUnormInt101010 = 6,
234     ImageChannelDataTypeSignedInt8 = 7,
235     ImageChannelDataTypeSignedInt16 = 8,
236     ImageChannelDataTypeSignedInt32 = 9,
237     ImageChannelDataTypeUnsignedInt8 = 10,
238     ImageChannelDataTypeUnsignedInt16 = 11,
239     ImageChannelDataTypeUnsignedInt32 = 12,
240     ImageChannelDataTypeHalfFloat = 13,
241     ImageChannelDataTypeFloat = 14,
242     ImageChannelDataTypeUnormInt24 = 15,
243     ImageChannelDataTypeUnormInt101010_2 = 16,
244 };
245
246 enum ImageOperandsShift {
247     ImageOperandsBiasShift = 0,
248     ImageOperandsLodShift = 1,
249     ImageOperandsGradShift = 2,
250     ImageOperandsConstOffsetShift = 3,
251     ImageOperandsOffsetShift = 4,
252     ImageOperandsConstOffsetsShift = 5,
253     ImageOperandsSampleShift = 6,
254     ImageOperandsMinLodShift = 7,
255 };
256
257 enum ImageOperandsMask {
258     ImageOperandsMaskNone = 0,
259     ImageOperandsBiasMask = 0x00000001,
260     ImageOperandsLodMask = 0x00000002,
261     ImageOperandsGradMask = 0x00000004,
262     ImageOperandsConstOffsetMask = 0x00000008,
263     ImageOperandsOffsetMask = 0x00000010,
264     ImageOperandsConstOffsetsMask = 0x00000020,
265     ImageOperandsSampleMask = 0x00000040,
266     ImageOperandsMinLodMask = 0x00000080,
267 };
268
269 enum FPFastMathModeShift {
270     FPFastMathModeNotNaNShift = 0,
271     FPFastMathModeNotInfShift = 1,
272     FPFastMathModeNSZShift = 2,
273     FPFastMathModeAllowRecipShift = 3,
274     FPFastMathModeFastShift = 4,
275 };
276
277 enum FPFastMathModeMask {
278     FPFastMathModeMaskNone = 0,
279     FPFastMathModeNotNaNMask = 0x00000001,
280     FPFastMathModeNotInfMask = 0x00000002,
281     FPFastMathModeNSZMask = 0x00000004,
282     FPFastMathModeAllowRecipMask = 0x00000008,
283     FPFastMathModeFastMask = 0x00000010,
284 };
285
286 enum FPRoundingMode {
287     FPRoundingModeRTE = 0,
288     FPRoundingModeRTZ = 1,
289     FPRoundingModeRTP = 2,
290     FPRoundingModeRTN = 3,
291 };
292
293 enum LinkageType {
294     LinkageTypeExport = 0,
295     LinkageTypeImport = 1,
296 };
297
298 enum AccessQualifier {
299     AccessQualifierReadOnly = 0,
300     AccessQualifierWriteOnly = 1,
301     AccessQualifierReadWrite = 2,
302 };
303
304 enum FunctionParameterAttribute {
305     FunctionParameterAttributeZext = 0,
306     FunctionParameterAttributeSext = 1,
307     FunctionParameterAttributeByVal = 2,
308     FunctionParameterAttributeSret = 3,
309     FunctionParameterAttributeNoAlias = 4,
310     FunctionParameterAttributeNoCapture = 5,
311     FunctionParameterAttributeNoWrite = 6,
312     FunctionParameterAttributeNoReadWrite = 7,
313 };
314
315 enum Decoration {
316     DecorationRelaxedPrecision = 0,
317     DecorationSpecId = 1,
318     DecorationBlock = 2,
319     DecorationBufferBlock = 3,
320     DecorationRowMajor = 4,
321     DecorationColMajor = 5,
322     DecorationArrayStride = 6,
323     DecorationMatrixStride = 7,
324     DecorationGLSLShared = 8,
325     DecorationGLSLPacked = 9,
326     DecorationCPacked = 10,
327     DecorationBuiltIn = 11,
328     DecorationNoPerspective = 13,
329     DecorationFlat = 14,
330     DecorationPatch = 15,
331     DecorationCentroid = 16,
332     DecorationSample = 17,
333     DecorationInvariant = 18,
334     DecorationRestrict = 19,
335     DecorationAliased = 20,
336     DecorationVolatile = 21,
337     DecorationConstant = 22,
338     DecorationCoherent = 23,
339     DecorationNonWritable = 24,
340     DecorationNonReadable = 25,
341     DecorationUniform = 26,
342     DecorationSaturatedConversion = 28,
343     DecorationStream = 29,
344     DecorationLocation = 30,
345     DecorationComponent = 31,
346     DecorationIndex = 32,
347     DecorationBinding = 33,
348     DecorationDescriptorSet = 34,
349     DecorationOffset = 35,
350     DecorationXfbBuffer = 36,
351     DecorationXfbStride = 37,
352     DecorationFuncParamAttr = 38,
353     DecorationFPRoundingMode = 39,
354     DecorationFPFastMathMode = 40,
355     DecorationLinkageAttributes = 41,
356     DecorationNoContraction = 42,
357     DecorationInputAttachmentIndex = 43,
358     DecorationAlignment = 44,
359 };
360
361 enum BuiltIn {
362     BuiltInPosition = 0,
363     BuiltInPointSize = 1,
364     BuiltInClipDistance = 3,
365     BuiltInCullDistance = 4,
366     BuiltInVertexId = 5,
367     BuiltInInstanceId = 6,
368     BuiltInPrimitiveId = 7,
369     BuiltInInvocationId = 8,
370     BuiltInLayer = 9,
371     BuiltInViewportIndex = 10,
372     BuiltInTessLevelOuter = 11,
373     BuiltInTessLevelInner = 12,
374     BuiltInTessCoord = 13,
375     BuiltInPatchVertices = 14,
376     BuiltInFragCoord = 15,
377     BuiltInPointCoord = 16,
378     BuiltInFrontFacing = 17,
379     BuiltInSampleId = 18,
380     BuiltInSamplePosition = 19,
381     BuiltInSampleMask = 20,
382     BuiltInFragDepth = 22,
383     BuiltInHelperInvocation = 23,
384     BuiltInNumWorkgroups = 24,
385     BuiltInWorkgroupSize = 25,
386     BuiltInWorkgroupId = 26,
387     BuiltInLocalInvocationId = 27,
388     BuiltInGlobalInvocationId = 28,
389     BuiltInLocalInvocationIndex = 29,
390     BuiltInWorkDim = 30,
391     BuiltInGlobalSize = 31,
392     BuiltInEnqueuedWorkgroupSize = 32,
393     BuiltInGlobalOffset = 33,
394     BuiltInGlobalLinearId = 34,
395     BuiltInSubgroupSize = 36,
396     BuiltInSubgroupMaxSize = 37,
397     BuiltInNumSubgroups = 38,
398     BuiltInNumEnqueuedSubgroups = 39,
399     BuiltInSubgroupId = 40,
400     BuiltInSubgroupLocalInvocationId = 41,
401     BuiltInVertexIndex = 42,
402     BuiltInInstanceIndex = 43,
403 };
404
405 enum SelectionControlShift {
406     SelectionControlFlattenShift = 0,
407     SelectionControlDontFlattenShift = 1,
408 };
409
410 enum SelectionControlMask {
411     SelectionControlMaskNone = 0,
412     SelectionControlFlattenMask = 0x00000001,
413     SelectionControlDontFlattenMask = 0x00000002,
414 };
415
416 enum LoopControlShift {
417     LoopControlUnrollShift = 0,
418     LoopControlDontUnrollShift = 1,
419 };
420
421 enum LoopControlMask {
422     LoopControlMaskNone = 0,
423     LoopControlUnrollMask = 0x00000001,
424     LoopControlDontUnrollMask = 0x00000002,
425 };
426
427 enum FunctionControlShift {
428     FunctionControlInlineShift = 0,
429     FunctionControlDontInlineShift = 1,
430     FunctionControlPureShift = 2,
431     FunctionControlConstShift = 3,
432 };
433
434 enum FunctionControlMask {
435     FunctionControlMaskNone = 0,
436     FunctionControlInlineMask = 0x00000001,
437     FunctionControlDontInlineMask = 0x00000002,
438     FunctionControlPureMask = 0x00000004,
439     FunctionControlConstMask = 0x00000008,
440 };
441
442 enum MemorySemanticsShift {
443     MemorySemanticsAcquireShift = 1,
444     MemorySemanticsReleaseShift = 2,
445     MemorySemanticsAcquireReleaseShift = 3,
446     MemorySemanticsSequentiallyConsistentShift = 4,
447     MemorySemanticsUniformMemoryShift = 6,
448     MemorySemanticsSubgroupMemoryShift = 7,
449     MemorySemanticsWorkgroupMemoryShift = 8,
450     MemorySemanticsCrossWorkgroupMemoryShift = 9,
451     MemorySemanticsAtomicCounterMemoryShift = 10,
452     MemorySemanticsImageMemoryShift = 11,
453 };
454
455 enum MemorySemanticsMask {
456     MemorySemanticsMaskNone = 0,
457     MemorySemanticsAcquireMask = 0x00000002,
458     MemorySemanticsReleaseMask = 0x00000004,
459     MemorySemanticsAcquireReleaseMask = 0x00000008,
460     MemorySemanticsSequentiallyConsistentMask = 0x00000010,
461     MemorySemanticsUniformMemoryMask = 0x00000040,
462     MemorySemanticsSubgroupMemoryMask = 0x00000080,
463     MemorySemanticsWorkgroupMemoryMask = 0x00000100,
464     MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
465     MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
466     MemorySemanticsImageMemoryMask = 0x00000800,
467 };
468
469 enum MemoryAccessShift {
470     MemoryAccessVolatileShift = 0,
471     MemoryAccessAlignedShift = 1,
472     MemoryAccessNontemporalShift = 2,
473 };
474
475 enum MemoryAccessMask {
476     MemoryAccessMaskNone = 0,
477     MemoryAccessVolatileMask = 0x00000001,
478     MemoryAccessAlignedMask = 0x00000002,
479     MemoryAccessNontemporalMask = 0x00000004,
480 };
481
482 enum Scope {
483     ScopeCrossDevice = 0,
484     ScopeDevice = 1,
485     ScopeWorkgroup = 2,
486     ScopeSubgroup = 3,
487     ScopeInvocation = 4,
488 };
489
490 enum GroupOperation {
491     GroupOperationReduce = 0,
492     GroupOperationInclusiveScan = 1,
493     GroupOperationExclusiveScan = 2,
494 };
495
496 enum KernelEnqueueFlags {
497     KernelEnqueueFlagsNoWait = 0,
498     KernelEnqueueFlagsWaitKernel = 1,
499     KernelEnqueueFlagsWaitWorkGroup = 2,
500 };
501
502 enum KernelProfilingInfoShift {
503     KernelProfilingInfoCmdExecTimeShift = 0,
504 };
505
506 enum KernelProfilingInfoMask {
507     KernelProfilingInfoMaskNone = 0,
508     KernelProfilingInfoCmdExecTimeMask = 0x00000001,
509 };
510
511 enum Capability {
512     CapabilityMatrix = 0,
513     CapabilityShader = 1,
514     CapabilityGeometry = 2,
515     CapabilityTessellation = 3,
516     CapabilityAddresses = 4,
517     CapabilityLinkage = 5,
518     CapabilityKernel = 6,
519     CapabilityVector16 = 7,
520     CapabilityFloat16Buffer = 8,
521     CapabilityFloat16 = 9,
522     CapabilityFloat64 = 10,
523     CapabilityInt64 = 11,
524     CapabilityInt64Atomics = 12,
525     CapabilityImageBasic = 13,
526     CapabilityImageReadWrite = 14,
527     CapabilityImageMipmap = 15,
528     CapabilityPipes = 17,
529     CapabilityGroups = 18,
530     CapabilityDeviceEnqueue = 19,
531     CapabilityLiteralSampler = 20,
532     CapabilityAtomicStorage = 21,
533     CapabilityInt16 = 22,
534     CapabilityTessellationPointSize = 23,
535     CapabilityGeometryPointSize = 24,
536     CapabilityImageGatherExtended = 25,
537     CapabilityStorageImageMultisample = 27,
538     CapabilityUniformBufferArrayDynamicIndexing = 28,
539     CapabilitySampledImageArrayDynamicIndexing = 29,
540     CapabilityStorageBufferArrayDynamicIndexing = 30,
541     CapabilityStorageImageArrayDynamicIndexing = 31,
542     CapabilityClipDistance = 32,
543     CapabilityCullDistance = 33,
544     CapabilityImageCubeArray = 34,
545     CapabilitySampleRateShading = 35,
546     CapabilityImageRect = 36,
547     CapabilitySampledRect = 37,
548     CapabilityGenericPointer = 38,
549     CapabilityInt8 = 39,
550     CapabilityInputAttachment = 40,
551     CapabilitySparseResidency = 41,
552     CapabilityMinLod = 42,
553     CapabilitySampled1D = 43,
554     CapabilityImage1D = 44,
555     CapabilitySampledCubeArray = 45,
556     CapabilitySampledBuffer = 46,
557     CapabilityImageBuffer = 47,
558     CapabilityImageMSArray = 48,
559     CapabilityStorageImageExtendedFormats = 49,
560     CapabilityImageQuery = 50,
561     CapabilityDerivativeControl = 51,
562     CapabilityInterpolationFunction = 52,
563     CapabilityTransformFeedback = 53,
564     CapabilityGeometryStreams = 54,
565     CapabilityStorageImageReadWithoutFormat = 55,
566     CapabilityStorageImageWriteWithoutFormat = 56,
567     CapabilityMultiViewport = 57,
568 };
569
570 enum Op {
571     OpNop = 0,
572     OpUndef = 1,
573     OpSourceContinued = 2,
574     OpSource = 3,
575     OpSourceExtension = 4,
576     OpName = 5,
577     OpMemberName = 6,
578     OpString = 7,
579     OpLine = 8,
580     OpExtension = 10,
581     OpExtInstImport = 11,
582     OpExtInst = 12,
583     OpMemoryModel = 14,
584     OpEntryPoint = 15,
585     OpExecutionMode = 16,
586     OpCapability = 17,
587     OpTypeVoid = 19,
588     OpTypeBool = 20,
589     OpTypeInt = 21,
590     OpTypeFloat = 22,
591     OpTypeVector = 23,
592     OpTypeMatrix = 24,
593     OpTypeImage = 25,
594     OpTypeSampler = 26,
595     OpTypeSampledImage = 27,
596     OpTypeArray = 28,
597     OpTypeRuntimeArray = 29,
598     OpTypeStruct = 30,
599     OpTypeOpaque = 31,
600     OpTypePointer = 32,
601     OpTypeFunction = 33,
602     OpTypeEvent = 34,
603     OpTypeDeviceEvent = 35,
604     OpTypeReserveId = 36,
605     OpTypeQueue = 37,
606     OpTypePipe = 38,
607     OpTypeForwardPointer = 39,
608     OpConstantTrue = 41,
609     OpConstantFalse = 42,
610     OpConstant = 43,
611     OpConstantComposite = 44,
612     OpConstantSampler = 45,
613     OpConstantNull = 46,
614     OpSpecConstantTrue = 48,
615     OpSpecConstantFalse = 49,
616     OpSpecConstant = 50,
617     OpSpecConstantComposite = 51,
618     OpSpecConstantOp = 52,
619     OpFunction = 54,
620     OpFunctionParameter = 55,
621     OpFunctionEnd = 56,
622     OpFunctionCall = 57,
623     OpVariable = 59,
624     OpImageTexelPointer = 60,
625     OpLoad = 61,
626     OpStore = 62,
627     OpCopyMemory = 63,
628     OpCopyMemorySized = 64,
629     OpAccessChain = 65,
630     OpInBoundsAccessChain = 66,
631     OpPtrAccessChain = 67,
632     OpArrayLength = 68,
633     OpGenericPtrMemSemantics = 69,
634     OpInBoundsPtrAccessChain = 70,
635     OpDecorate = 71,
636     OpMemberDecorate = 72,
637     OpDecorationGroup = 73,
638     OpGroupDecorate = 74,
639     OpGroupMemberDecorate = 75,
640     OpVectorExtractDynamic = 77,
641     OpVectorInsertDynamic = 78,
642     OpVectorShuffle = 79,
643     OpCompositeConstruct = 80,
644     OpCompositeExtract = 81,
645     OpCompositeInsert = 82,
646     OpCopyObject = 83,
647     OpTranspose = 84,
648     OpSampledImage = 86,
649     OpImageSampleImplicitLod = 87,
650     OpImageSampleExplicitLod = 88,
651     OpImageSampleDrefImplicitLod = 89,
652     OpImageSampleDrefExplicitLod = 90,
653     OpImageSampleProjImplicitLod = 91,
654     OpImageSampleProjExplicitLod = 92,
655     OpImageSampleProjDrefImplicitLod = 93,
656     OpImageSampleProjDrefExplicitLod = 94,
657     OpImageFetch = 95,
658     OpImageGather = 96,
659     OpImageDrefGather = 97,
660     OpImageRead = 98,
661     OpImageWrite = 99,
662     OpImage = 100,
663     OpImageQueryFormat = 101,
664     OpImageQueryOrder = 102,
665     OpImageQuerySizeLod = 103,
666     OpImageQuerySize = 104,
667     OpImageQueryLod = 105,
668     OpImageQueryLevels = 106,
669     OpImageQuerySamples = 107,
670     OpConvertFToU = 109,
671     OpConvertFToS = 110,
672     OpConvertSToF = 111,
673     OpConvertUToF = 112,
674     OpUConvert = 113,
675     OpSConvert = 114,
676     OpFConvert = 115,
677     OpQuantizeToF16 = 116,
678     OpConvertPtrToU = 117,
679     OpSatConvertSToU = 118,
680     OpSatConvertUToS = 119,
681     OpConvertUToPtr = 120,
682     OpPtrCastToGeneric = 121,
683     OpGenericCastToPtr = 122,
684     OpGenericCastToPtrExplicit = 123,
685     OpBitcast = 124,
686     OpSNegate = 126,
687     OpFNegate = 127,
688     OpIAdd = 128,
689     OpFAdd = 129,
690     OpISub = 130,
691     OpFSub = 131,
692     OpIMul = 132,
693     OpFMul = 133,
694     OpUDiv = 134,
695     OpSDiv = 135,
696     OpFDiv = 136,
697     OpUMod = 137,
698     OpSRem = 138,
699     OpSMod = 139,
700     OpFRem = 140,
701     OpFMod = 141,
702     OpVectorTimesScalar = 142,
703     OpMatrixTimesScalar = 143,
704     OpVectorTimesMatrix = 144,
705     OpMatrixTimesVector = 145,
706     OpMatrixTimesMatrix = 146,
707     OpOuterProduct = 147,
708     OpDot = 148,
709     OpIAddCarry = 149,
710     OpISubBorrow = 150,
711     OpUMulExtended = 151,
712     OpSMulExtended = 152,
713     OpAny = 154,
714     OpAll = 155,
715     OpIsNan = 156,
716     OpIsInf = 157,
717     OpIsFinite = 158,
718     OpIsNormal = 159,
719     OpSignBitSet = 160,
720     OpLessOrGreater = 161,
721     OpOrdered = 162,
722     OpUnordered = 163,
723     OpLogicalEqual = 164,
724     OpLogicalNotEqual = 165,
725     OpLogicalOr = 166,
726     OpLogicalAnd = 167,
727     OpLogicalNot = 168,
728     OpSelect = 169,
729     OpIEqual = 170,
730     OpINotEqual = 171,
731     OpUGreaterThan = 172,
732     OpSGreaterThan = 173,
733     OpUGreaterThanEqual = 174,
734     OpSGreaterThanEqual = 175,
735     OpULessThan = 176,
736     OpSLessThan = 177,
737     OpULessThanEqual = 178,
738     OpSLessThanEqual = 179,
739     OpFOrdEqual = 180,
740     OpFUnordEqual = 181,
741     OpFOrdNotEqual = 182,
742     OpFUnordNotEqual = 183,
743     OpFOrdLessThan = 184,
744     OpFUnordLessThan = 185,
745     OpFOrdGreaterThan = 186,
746     OpFUnordGreaterThan = 187,
747     OpFOrdLessThanEqual = 188,
748     OpFUnordLessThanEqual = 189,
749     OpFOrdGreaterThanEqual = 190,
750     OpFUnordGreaterThanEqual = 191,
751     OpShiftRightLogical = 194,
752     OpShiftRightArithmetic = 195,
753     OpShiftLeftLogical = 196,
754     OpBitwiseOr = 197,
755     OpBitwiseXor = 198,
756     OpBitwiseAnd = 199,
757     OpNot = 200,
758     OpBitFieldInsert = 201,
759     OpBitFieldSExtract = 202,
760     OpBitFieldUExtract = 203,
761     OpBitReverse = 204,
762     OpBitCount = 205,
763     OpDPdx = 207,
764     OpDPdy = 208,
765     OpFwidth = 209,
766     OpDPdxFine = 210,
767     OpDPdyFine = 211,
768     OpFwidthFine = 212,
769     OpDPdxCoarse = 213,
770     OpDPdyCoarse = 214,
771     OpFwidthCoarse = 215,
772     OpEmitVertex = 218,
773     OpEndPrimitive = 219,
774     OpEmitStreamVertex = 220,
775     OpEndStreamPrimitive = 221,
776     OpControlBarrier = 224,
777     OpMemoryBarrier = 225,
778     OpAtomicLoad = 227,
779     OpAtomicStore = 228,
780     OpAtomicExchange = 229,
781     OpAtomicCompareExchange = 230,
782     OpAtomicCompareExchangeWeak = 231,
783     OpAtomicIIncrement = 232,
784     OpAtomicIDecrement = 233,
785     OpAtomicIAdd = 234,
786     OpAtomicISub = 235,
787     OpAtomicSMin = 236,
788     OpAtomicUMin = 237,
789     OpAtomicSMax = 238,
790     OpAtomicUMax = 239,
791     OpAtomicAnd = 240,
792     OpAtomicOr = 241,
793     OpAtomicXor = 242,
794     OpPhi = 245,
795     OpLoopMerge = 246,
796     OpSelectionMerge = 247,
797     OpLabel = 248,
798     OpBranch = 249,
799     OpBranchConditional = 250,
800     OpSwitch = 251,
801     OpKill = 252,
802     OpReturn = 253,
803     OpReturnValue = 254,
804     OpUnreachable = 255,
805     OpLifetimeStart = 256,
806     OpLifetimeStop = 257,
807     OpGroupAsyncCopy = 259,
808     OpGroupWaitEvents = 260,
809     OpGroupAll = 261,
810     OpGroupAny = 262,
811     OpGroupBroadcast = 263,
812     OpGroupIAdd = 264,
813     OpGroupFAdd = 265,
814     OpGroupFMin = 266,
815     OpGroupUMin = 267,
816     OpGroupSMin = 268,
817     OpGroupFMax = 269,
818     OpGroupUMax = 270,
819     OpGroupSMax = 271,
820     OpReadPipe = 274,
821     OpWritePipe = 275,
822     OpReservedReadPipe = 276,
823     OpReservedWritePipe = 277,
824     OpReserveReadPipePackets = 278,
825     OpReserveWritePipePackets = 279,
826     OpCommitReadPipe = 280,
827     OpCommitWritePipe = 281,
828     OpIsValidReserveId = 282,
829     OpGetNumPipePackets = 283,
830     OpGetMaxPipePackets = 284,
831     OpGroupReserveReadPipePackets = 285,
832     OpGroupReserveWritePipePackets = 286,
833     OpGroupCommitReadPipe = 287,
834     OpGroupCommitWritePipe = 288,
835     OpEnqueueMarker = 291,
836     OpEnqueueKernel = 292,
837     OpGetKernelNDrangeSubGroupCount = 293,
838     OpGetKernelNDrangeMaxSubGroupSize = 294,
839     OpGetKernelWorkGroupSize = 295,
840     OpGetKernelPreferredWorkGroupSizeMultiple = 296,
841     OpRetainEvent = 297,
842     OpReleaseEvent = 298,
843     OpCreateUserEvent = 299,
844     OpIsValidEvent = 300,
845     OpSetUserEventStatus = 301,
846     OpCaptureEventProfilingInfo = 302,
847     OpGetDefaultQueue = 303,
848     OpBuildNDRange = 304,
849     OpImageSparseSampleImplicitLod = 305,
850     OpImageSparseSampleExplicitLod = 306,
851     OpImageSparseSampleDrefImplicitLod = 307,
852     OpImageSparseSampleDrefExplicitLod = 308,
853     OpImageSparseSampleProjImplicitLod = 309,
854     OpImageSparseSampleProjExplicitLod = 310,
855     OpImageSparseSampleProjDrefImplicitLod = 311,
856     OpImageSparseSampleProjDrefExplicitLod = 312,
857     OpImageSparseFetch = 313,
858     OpImageSparseGather = 314,
859     OpImageSparseDrefGather = 315,
860     OpImageSparseTexelsResident = 316,
861     OpNoLine = 317,
862     OpAtomicFlagTestAndSet = 318,
863     OpAtomicFlagClear = 319,
864     OpImageSparseRead = 320,
865 };
866
867 // Overload operator| for mask bit combining
868
869 inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
870 inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
871 inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
872 inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
873 inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
874 inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
875 inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
876 inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
877
878 }  // end namespace spv
879
880 #endif  // #ifndef spirv_HPP
881