Update to SPIR-V 1.0 Rev 5 headers
[platform/upstream/SPIRV-Headers.git] / include / spirv / 1.0 / spirv.h
1 /*
2 ** Copyright (c) 2014-2016 The Khronos Group Inc.
3 ** 
4 ** Permission is hereby granted, free of charge, to any person obtaining a copy
5 ** of this software and/or associated documentation files (the "Materials"),
6 ** to deal in the Materials without restriction, including without limitation
7 ** the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 ** and/or sell copies of the Materials, and to permit persons to whom the
9 ** Materials are furnished to do so, subject to the following conditions:
10 ** 
11 ** The above copyright notice and this permission notice shall be included in
12 ** all copies or substantial portions of the Materials.
13 ** 
14 ** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
15 ** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
16 ** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
17 ** 
18 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 ** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 ** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 ** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 ** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
24 ** IN THE MATERIALS.
25 */
26
27 /*
28 ** This header is automatically generated by the same tool that creates
29 ** the Binary Section of the SPIR-V specification.
30 */
31
32 /*
33 ** Enumeration tokens for SPIR-V, in various styles:
34 **   C, C++, C++11, JSON, Lua, Python
35 ** 
36 ** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
37 ** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
38 ** - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
39 ** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
40 ** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
41 ** 
42 ** Some tokens act like mask values, which can be OR'd together,
43 ** while others are mutually exclusive.  The mask-like ones have
44 ** "Mask" in their name, and a parallel enum that has the shift
45 ** amount (1 << x) for each corresponding enumerant.
46 */
47
48 #ifndef spirv_H
49 #define spirv_H
50
51 typedef unsigned int SpvId;
52
53 #define SPV_VERSION 0x10000
54 #define SPV_REVISION 5
55
56 static const unsigned int SpvMagicNumber = 0x07230203;
57 static const unsigned int SpvVersion = 0x00010000;
58 static const unsigned int SpvRevision = 5;
59 static const unsigned int SpvOpCodeMask = 0xffff;
60 static const unsigned int SpvWordCountShift = 16;
61
62 typedef enum SpvSourceLanguage_ {
63     SpvSourceLanguageUnknown = 0,
64     SpvSourceLanguageESSL = 1,
65     SpvSourceLanguageGLSL = 2,
66     SpvSourceLanguageOpenCL_C = 3,
67     SpvSourceLanguageOpenCL_CPP = 4,
68 } SpvSourceLanguage;
69
70 typedef enum SpvExecutionModel_ {
71     SpvExecutionModelVertex = 0,
72     SpvExecutionModelTessellationControl = 1,
73     SpvExecutionModelTessellationEvaluation = 2,
74     SpvExecutionModelGeometry = 3,
75     SpvExecutionModelFragment = 4,
76     SpvExecutionModelGLCompute = 5,
77     SpvExecutionModelKernel = 6,
78 } SpvExecutionModel;
79
80 typedef enum SpvAddressingModel_ {
81     SpvAddressingModelLogical = 0,
82     SpvAddressingModelPhysical32 = 1,
83     SpvAddressingModelPhysical64 = 2,
84 } SpvAddressingModel;
85
86 typedef enum SpvMemoryModel_ {
87     SpvMemoryModelSimple = 0,
88     SpvMemoryModelGLSL450 = 1,
89     SpvMemoryModelOpenCL = 2,
90 } SpvMemoryModel;
91
92 typedef enum SpvExecutionMode_ {
93     SpvExecutionModeInvocations = 0,
94     SpvExecutionModeSpacingEqual = 1,
95     SpvExecutionModeSpacingFractionalEven = 2,
96     SpvExecutionModeSpacingFractionalOdd = 3,
97     SpvExecutionModeVertexOrderCw = 4,
98     SpvExecutionModeVertexOrderCcw = 5,
99     SpvExecutionModePixelCenterInteger = 6,
100     SpvExecutionModeOriginUpperLeft = 7,
101     SpvExecutionModeOriginLowerLeft = 8,
102     SpvExecutionModeEarlyFragmentTests = 9,
103     SpvExecutionModePointMode = 10,
104     SpvExecutionModeXfb = 11,
105     SpvExecutionModeDepthReplacing = 12,
106     SpvExecutionModeDepthGreater = 14,
107     SpvExecutionModeDepthLess = 15,
108     SpvExecutionModeDepthUnchanged = 16,
109     SpvExecutionModeLocalSize = 17,
110     SpvExecutionModeLocalSizeHint = 18,
111     SpvExecutionModeInputPoints = 19,
112     SpvExecutionModeInputLines = 20,
113     SpvExecutionModeInputLinesAdjacency = 21,
114     SpvExecutionModeTriangles = 22,
115     SpvExecutionModeInputTrianglesAdjacency = 23,
116     SpvExecutionModeQuads = 24,
117     SpvExecutionModeIsolines = 25,
118     SpvExecutionModeOutputVertices = 26,
119     SpvExecutionModeOutputPoints = 27,
120     SpvExecutionModeOutputLineStrip = 28,
121     SpvExecutionModeOutputTriangleStrip = 29,
122     SpvExecutionModeVecTypeHint = 30,
123     SpvExecutionModeContractionOff = 31,
124 } SpvExecutionMode;
125
126 typedef enum SpvStorageClass_ {
127     SpvStorageClassUniformConstant = 0,
128     SpvStorageClassInput = 1,
129     SpvStorageClassUniform = 2,
130     SpvStorageClassOutput = 3,
131     SpvStorageClassWorkgroup = 4,
132     SpvStorageClassCrossWorkgroup = 5,
133     SpvStorageClassPrivate = 6,
134     SpvStorageClassFunction = 7,
135     SpvStorageClassGeneric = 8,
136     SpvStorageClassPushConstant = 9,
137     SpvStorageClassAtomicCounter = 10,
138     SpvStorageClassImage = 11,
139 } SpvStorageClass;
140
141 typedef enum SpvDim_ {
142     SpvDim1D = 0,
143     SpvDim2D = 1,
144     SpvDim3D = 2,
145     SpvDimCube = 3,
146     SpvDimRect = 4,
147     SpvDimBuffer = 5,
148     SpvDimSubpassData = 6,
149 } SpvDim;
150
151 typedef enum SpvSamplerAddressingMode_ {
152     SpvSamplerAddressingModeNone = 0,
153     SpvSamplerAddressingModeClampToEdge = 1,
154     SpvSamplerAddressingModeClamp = 2,
155     SpvSamplerAddressingModeRepeat = 3,
156     SpvSamplerAddressingModeRepeatMirrored = 4,
157 } SpvSamplerAddressingMode;
158
159 typedef enum SpvSamplerFilterMode_ {
160     SpvSamplerFilterModeNearest = 0,
161     SpvSamplerFilterModeLinear = 1,
162 } SpvSamplerFilterMode;
163
164 typedef enum SpvImageFormat_ {
165     SpvImageFormatUnknown = 0,
166     SpvImageFormatRgba32f = 1,
167     SpvImageFormatRgba16f = 2,
168     SpvImageFormatR32f = 3,
169     SpvImageFormatRgba8 = 4,
170     SpvImageFormatRgba8Snorm = 5,
171     SpvImageFormatRg32f = 6,
172     SpvImageFormatRg16f = 7,
173     SpvImageFormatR11fG11fB10f = 8,
174     SpvImageFormatR16f = 9,
175     SpvImageFormatRgba16 = 10,
176     SpvImageFormatRgb10A2 = 11,
177     SpvImageFormatRg16 = 12,
178     SpvImageFormatRg8 = 13,
179     SpvImageFormatR16 = 14,
180     SpvImageFormatR8 = 15,
181     SpvImageFormatRgba16Snorm = 16,
182     SpvImageFormatRg16Snorm = 17,
183     SpvImageFormatRg8Snorm = 18,
184     SpvImageFormatR16Snorm = 19,
185     SpvImageFormatR8Snorm = 20,
186     SpvImageFormatRgba32i = 21,
187     SpvImageFormatRgba16i = 22,
188     SpvImageFormatRgba8i = 23,
189     SpvImageFormatR32i = 24,
190     SpvImageFormatRg32i = 25,
191     SpvImageFormatRg16i = 26,
192     SpvImageFormatRg8i = 27,
193     SpvImageFormatR16i = 28,
194     SpvImageFormatR8i = 29,
195     SpvImageFormatRgba32ui = 30,
196     SpvImageFormatRgba16ui = 31,
197     SpvImageFormatRgba8ui = 32,
198     SpvImageFormatR32ui = 33,
199     SpvImageFormatRgb10a2ui = 34,
200     SpvImageFormatRg32ui = 35,
201     SpvImageFormatRg16ui = 36,
202     SpvImageFormatRg8ui = 37,
203     SpvImageFormatR16ui = 38,
204     SpvImageFormatR8ui = 39,
205 } SpvImageFormat;
206
207 typedef enum SpvImageChannelOrder_ {
208     SpvImageChannelOrderR = 0,
209     SpvImageChannelOrderA = 1,
210     SpvImageChannelOrderRG = 2,
211     SpvImageChannelOrderRA = 3,
212     SpvImageChannelOrderRGB = 4,
213     SpvImageChannelOrderRGBA = 5,
214     SpvImageChannelOrderBGRA = 6,
215     SpvImageChannelOrderARGB = 7,
216     SpvImageChannelOrderIntensity = 8,
217     SpvImageChannelOrderLuminance = 9,
218     SpvImageChannelOrderRx = 10,
219     SpvImageChannelOrderRGx = 11,
220     SpvImageChannelOrderRGBx = 12,
221     SpvImageChannelOrderDepth = 13,
222     SpvImageChannelOrderDepthStencil = 14,
223     SpvImageChannelOrdersRGB = 15,
224     SpvImageChannelOrdersRGBx = 16,
225     SpvImageChannelOrdersRGBA = 17,
226     SpvImageChannelOrdersBGRA = 18,
227     SpvImageChannelOrderABGR = 19,
228 } SpvImageChannelOrder;
229
230 typedef enum SpvImageChannelDataType_ {
231     SpvImageChannelDataTypeSnormInt8 = 0,
232     SpvImageChannelDataTypeSnormInt16 = 1,
233     SpvImageChannelDataTypeUnormInt8 = 2,
234     SpvImageChannelDataTypeUnormInt16 = 3,
235     SpvImageChannelDataTypeUnormShort565 = 4,
236     SpvImageChannelDataTypeUnormShort555 = 5,
237     SpvImageChannelDataTypeUnormInt101010 = 6,
238     SpvImageChannelDataTypeSignedInt8 = 7,
239     SpvImageChannelDataTypeSignedInt16 = 8,
240     SpvImageChannelDataTypeSignedInt32 = 9,
241     SpvImageChannelDataTypeUnsignedInt8 = 10,
242     SpvImageChannelDataTypeUnsignedInt16 = 11,
243     SpvImageChannelDataTypeUnsignedInt32 = 12,
244     SpvImageChannelDataTypeHalfFloat = 13,
245     SpvImageChannelDataTypeFloat = 14,
246     SpvImageChannelDataTypeUnormInt24 = 15,
247     SpvImageChannelDataTypeUnormInt101010_2 = 16,
248 } SpvImageChannelDataType;
249
250 typedef enum SpvImageOperandsShift_ {
251     SpvImageOperandsBiasShift = 0,
252     SpvImageOperandsLodShift = 1,
253     SpvImageOperandsGradShift = 2,
254     SpvImageOperandsConstOffsetShift = 3,
255     SpvImageOperandsOffsetShift = 4,
256     SpvImageOperandsConstOffsetsShift = 5,
257     SpvImageOperandsSampleShift = 6,
258     SpvImageOperandsMinLodShift = 7,
259 } SpvImageOperandsShift;
260
261 typedef enum SpvImageOperandsMask_ {
262     SpvImageOperandsMaskNone = 0,
263     SpvImageOperandsBiasMask = 0x00000001,
264     SpvImageOperandsLodMask = 0x00000002,
265     SpvImageOperandsGradMask = 0x00000004,
266     SpvImageOperandsConstOffsetMask = 0x00000008,
267     SpvImageOperandsOffsetMask = 0x00000010,
268     SpvImageOperandsConstOffsetsMask = 0x00000020,
269     SpvImageOperandsSampleMask = 0x00000040,
270     SpvImageOperandsMinLodMask = 0x00000080,
271 } SpvImageOperandsMask;
272
273 typedef enum SpvFPFastMathModeShift_ {
274     SpvFPFastMathModeNotNaNShift = 0,
275     SpvFPFastMathModeNotInfShift = 1,
276     SpvFPFastMathModeNSZShift = 2,
277     SpvFPFastMathModeAllowRecipShift = 3,
278     SpvFPFastMathModeFastShift = 4,
279 } SpvFPFastMathModeShift;
280
281 typedef enum SpvFPFastMathModeMask_ {
282     SpvFPFastMathModeMaskNone = 0,
283     SpvFPFastMathModeNotNaNMask = 0x00000001,
284     SpvFPFastMathModeNotInfMask = 0x00000002,
285     SpvFPFastMathModeNSZMask = 0x00000004,
286     SpvFPFastMathModeAllowRecipMask = 0x00000008,
287     SpvFPFastMathModeFastMask = 0x00000010,
288 } SpvFPFastMathModeMask;
289
290 typedef enum SpvFPRoundingMode_ {
291     SpvFPRoundingModeRTE = 0,
292     SpvFPRoundingModeRTZ = 1,
293     SpvFPRoundingModeRTP = 2,
294     SpvFPRoundingModeRTN = 3,
295 } SpvFPRoundingMode;
296
297 typedef enum SpvLinkageType_ {
298     SpvLinkageTypeExport = 0,
299     SpvLinkageTypeImport = 1,
300 } SpvLinkageType;
301
302 typedef enum SpvAccessQualifier_ {
303     SpvAccessQualifierReadOnly = 0,
304     SpvAccessQualifierWriteOnly = 1,
305     SpvAccessQualifierReadWrite = 2,
306 } SpvAccessQualifier;
307
308 typedef enum SpvFunctionParameterAttribute_ {
309     SpvFunctionParameterAttributeZext = 0,
310     SpvFunctionParameterAttributeSext = 1,
311     SpvFunctionParameterAttributeByVal = 2,
312     SpvFunctionParameterAttributeSret = 3,
313     SpvFunctionParameterAttributeNoAlias = 4,
314     SpvFunctionParameterAttributeNoCapture = 5,
315     SpvFunctionParameterAttributeNoWrite = 6,
316     SpvFunctionParameterAttributeNoReadWrite = 7,
317 } SpvFunctionParameterAttribute;
318
319 typedef enum SpvDecoration_ {
320     SpvDecorationRelaxedPrecision = 0,
321     SpvDecorationSpecId = 1,
322     SpvDecorationBlock = 2,
323     SpvDecorationBufferBlock = 3,
324     SpvDecorationRowMajor = 4,
325     SpvDecorationColMajor = 5,
326     SpvDecorationArrayStride = 6,
327     SpvDecorationMatrixStride = 7,
328     SpvDecorationGLSLShared = 8,
329     SpvDecorationGLSLPacked = 9,
330     SpvDecorationCPacked = 10,
331     SpvDecorationBuiltIn = 11,
332     SpvDecorationNoPerspective = 13,
333     SpvDecorationFlat = 14,
334     SpvDecorationPatch = 15,
335     SpvDecorationCentroid = 16,
336     SpvDecorationSample = 17,
337     SpvDecorationInvariant = 18,
338     SpvDecorationRestrict = 19,
339     SpvDecorationAliased = 20,
340     SpvDecorationVolatile = 21,
341     SpvDecorationConstant = 22,
342     SpvDecorationCoherent = 23,
343     SpvDecorationNonWritable = 24,
344     SpvDecorationNonReadable = 25,
345     SpvDecorationUniform = 26,
346     SpvDecorationSaturatedConversion = 28,
347     SpvDecorationStream = 29,
348     SpvDecorationLocation = 30,
349     SpvDecorationComponent = 31,
350     SpvDecorationIndex = 32,
351     SpvDecorationBinding = 33,
352     SpvDecorationDescriptorSet = 34,
353     SpvDecorationOffset = 35,
354     SpvDecorationXfbBuffer = 36,
355     SpvDecorationXfbStride = 37,
356     SpvDecorationFuncParamAttr = 38,
357     SpvDecorationFPRoundingMode = 39,
358     SpvDecorationFPFastMathMode = 40,
359     SpvDecorationLinkageAttributes = 41,
360     SpvDecorationNoContraction = 42,
361     SpvDecorationInputAttachmentIndex = 43,
362     SpvDecorationAlignment = 44,
363 } SpvDecoration;
364
365 typedef enum SpvBuiltIn_ {
366     SpvBuiltInPosition = 0,
367     SpvBuiltInPointSize = 1,
368     SpvBuiltInClipDistance = 3,
369     SpvBuiltInCullDistance = 4,
370     SpvBuiltInVertexId = 5,
371     SpvBuiltInInstanceId = 6,
372     SpvBuiltInPrimitiveId = 7,
373     SpvBuiltInInvocationId = 8,
374     SpvBuiltInLayer = 9,
375     SpvBuiltInViewportIndex = 10,
376     SpvBuiltInTessLevelOuter = 11,
377     SpvBuiltInTessLevelInner = 12,
378     SpvBuiltInTessCoord = 13,
379     SpvBuiltInPatchVertices = 14,
380     SpvBuiltInFragCoord = 15,
381     SpvBuiltInPointCoord = 16,
382     SpvBuiltInFrontFacing = 17,
383     SpvBuiltInSampleId = 18,
384     SpvBuiltInSamplePosition = 19,
385     SpvBuiltInSampleMask = 20,
386     SpvBuiltInFragDepth = 22,
387     SpvBuiltInHelperInvocation = 23,
388     SpvBuiltInNumWorkgroups = 24,
389     SpvBuiltInWorkgroupSize = 25,
390     SpvBuiltInWorkgroupId = 26,
391     SpvBuiltInLocalInvocationId = 27,
392     SpvBuiltInGlobalInvocationId = 28,
393     SpvBuiltInLocalInvocationIndex = 29,
394     SpvBuiltInWorkDim = 30,
395     SpvBuiltInGlobalSize = 31,
396     SpvBuiltInEnqueuedWorkgroupSize = 32,
397     SpvBuiltInGlobalOffset = 33,
398     SpvBuiltInGlobalLinearId = 34,
399     SpvBuiltInSubgroupSize = 36,
400     SpvBuiltInSubgroupMaxSize = 37,
401     SpvBuiltInNumSubgroups = 38,
402     SpvBuiltInNumEnqueuedSubgroups = 39,
403     SpvBuiltInSubgroupId = 40,
404     SpvBuiltInSubgroupLocalInvocationId = 41,
405     SpvBuiltInVertexIndex = 42,
406     SpvBuiltInInstanceIndex = 43,
407 } SpvBuiltIn;
408
409 typedef enum SpvSelectionControlShift_ {
410     SpvSelectionControlFlattenShift = 0,
411     SpvSelectionControlDontFlattenShift = 1,
412 } SpvSelectionControlShift;
413
414 typedef enum SpvSelectionControlMask_ {
415     SpvSelectionControlMaskNone = 0,
416     SpvSelectionControlFlattenMask = 0x00000001,
417     SpvSelectionControlDontFlattenMask = 0x00000002,
418 } SpvSelectionControlMask;
419
420 typedef enum SpvLoopControlShift_ {
421     SpvLoopControlUnrollShift = 0,
422     SpvLoopControlDontUnrollShift = 1,
423 } SpvLoopControlShift;
424
425 typedef enum SpvLoopControlMask_ {
426     SpvLoopControlMaskNone = 0,
427     SpvLoopControlUnrollMask = 0x00000001,
428     SpvLoopControlDontUnrollMask = 0x00000002,
429 } SpvLoopControlMask;
430
431 typedef enum SpvFunctionControlShift_ {
432     SpvFunctionControlInlineShift = 0,
433     SpvFunctionControlDontInlineShift = 1,
434     SpvFunctionControlPureShift = 2,
435     SpvFunctionControlConstShift = 3,
436 } SpvFunctionControlShift;
437
438 typedef enum SpvFunctionControlMask_ {
439     SpvFunctionControlMaskNone = 0,
440     SpvFunctionControlInlineMask = 0x00000001,
441     SpvFunctionControlDontInlineMask = 0x00000002,
442     SpvFunctionControlPureMask = 0x00000004,
443     SpvFunctionControlConstMask = 0x00000008,
444 } SpvFunctionControlMask;
445
446 typedef enum SpvMemorySemanticsShift_ {
447     SpvMemorySemanticsAcquireShift = 1,
448     SpvMemorySemanticsReleaseShift = 2,
449     SpvMemorySemanticsAcquireReleaseShift = 3,
450     SpvMemorySemanticsSequentiallyConsistentShift = 4,
451     SpvMemorySemanticsUniformMemoryShift = 6,
452     SpvMemorySemanticsSubgroupMemoryShift = 7,
453     SpvMemorySemanticsWorkgroupMemoryShift = 8,
454     SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
455     SpvMemorySemanticsAtomicCounterMemoryShift = 10,
456     SpvMemorySemanticsImageMemoryShift = 11,
457 } SpvMemorySemanticsShift;
458
459 typedef enum SpvMemorySemanticsMask_ {
460     SpvMemorySemanticsMaskNone = 0,
461     SpvMemorySemanticsAcquireMask = 0x00000002,
462     SpvMemorySemanticsReleaseMask = 0x00000004,
463     SpvMemorySemanticsAcquireReleaseMask = 0x00000008,
464     SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
465     SpvMemorySemanticsUniformMemoryMask = 0x00000040,
466     SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
467     SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
468     SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
469     SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
470     SpvMemorySemanticsImageMemoryMask = 0x00000800,
471 } SpvMemorySemanticsMask;
472
473 typedef enum SpvMemoryAccessShift_ {
474     SpvMemoryAccessVolatileShift = 0,
475     SpvMemoryAccessAlignedShift = 1,
476     SpvMemoryAccessNontemporalShift = 2,
477 } SpvMemoryAccessShift;
478
479 typedef enum SpvMemoryAccessMask_ {
480     SpvMemoryAccessMaskNone = 0,
481     SpvMemoryAccessVolatileMask = 0x00000001,
482     SpvMemoryAccessAlignedMask = 0x00000002,
483     SpvMemoryAccessNontemporalMask = 0x00000004,
484 } SpvMemoryAccessMask;
485
486 typedef enum SpvScope_ {
487     SpvScopeCrossDevice = 0,
488     SpvScopeDevice = 1,
489     SpvScopeWorkgroup = 2,
490     SpvScopeSubgroup = 3,
491     SpvScopeInvocation = 4,
492 } SpvScope;
493
494 typedef enum SpvGroupOperation_ {
495     SpvGroupOperationReduce = 0,
496     SpvGroupOperationInclusiveScan = 1,
497     SpvGroupOperationExclusiveScan = 2,
498 } SpvGroupOperation;
499
500 typedef enum SpvKernelEnqueueFlags_ {
501     SpvKernelEnqueueFlagsNoWait = 0,
502     SpvKernelEnqueueFlagsWaitKernel = 1,
503     SpvKernelEnqueueFlagsWaitWorkGroup = 2,
504 } SpvKernelEnqueueFlags;
505
506 typedef enum SpvKernelProfilingInfoShift_ {
507     SpvKernelProfilingInfoCmdExecTimeShift = 0,
508 } SpvKernelProfilingInfoShift;
509
510 typedef enum SpvKernelProfilingInfoMask_ {
511     SpvKernelProfilingInfoMaskNone = 0,
512     SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,
513 } SpvKernelProfilingInfoMask;
514
515 typedef enum SpvCapability_ {
516     SpvCapabilityMatrix = 0,
517     SpvCapabilityShader = 1,
518     SpvCapabilityGeometry = 2,
519     SpvCapabilityTessellation = 3,
520     SpvCapabilityAddresses = 4,
521     SpvCapabilityLinkage = 5,
522     SpvCapabilityKernel = 6,
523     SpvCapabilityVector16 = 7,
524     SpvCapabilityFloat16Buffer = 8,
525     SpvCapabilityFloat16 = 9,
526     SpvCapabilityFloat64 = 10,
527     SpvCapabilityInt64 = 11,
528     SpvCapabilityInt64Atomics = 12,
529     SpvCapabilityImageBasic = 13,
530     SpvCapabilityImageReadWrite = 14,
531     SpvCapabilityImageMipmap = 15,
532     SpvCapabilityPipes = 17,
533     SpvCapabilityGroups = 18,
534     SpvCapabilityDeviceEnqueue = 19,
535     SpvCapabilityLiteralSampler = 20,
536     SpvCapabilityAtomicStorage = 21,
537     SpvCapabilityInt16 = 22,
538     SpvCapabilityTessellationPointSize = 23,
539     SpvCapabilityGeometryPointSize = 24,
540     SpvCapabilityImageGatherExtended = 25,
541     SpvCapabilityStorageImageMultisample = 27,
542     SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
543     SpvCapabilitySampledImageArrayDynamicIndexing = 29,
544     SpvCapabilityStorageBufferArrayDynamicIndexing = 30,
545     SpvCapabilityStorageImageArrayDynamicIndexing = 31,
546     SpvCapabilityClipDistance = 32,
547     SpvCapabilityCullDistance = 33,
548     SpvCapabilityImageCubeArray = 34,
549     SpvCapabilitySampleRateShading = 35,
550     SpvCapabilityImageRect = 36,
551     SpvCapabilitySampledRect = 37,
552     SpvCapabilityGenericPointer = 38,
553     SpvCapabilityInt8 = 39,
554     SpvCapabilityInputAttachment = 40,
555     SpvCapabilitySparseResidency = 41,
556     SpvCapabilityMinLod = 42,
557     SpvCapabilitySampled1D = 43,
558     SpvCapabilityImage1D = 44,
559     SpvCapabilitySampledCubeArray = 45,
560     SpvCapabilitySampledBuffer = 46,
561     SpvCapabilityImageBuffer = 47,
562     SpvCapabilityImageMSArray = 48,
563     SpvCapabilityStorageImageExtendedFormats = 49,
564     SpvCapabilityImageQuery = 50,
565     SpvCapabilityDerivativeControl = 51,
566     SpvCapabilityInterpolationFunction = 52,
567     SpvCapabilityTransformFeedback = 53,
568     SpvCapabilityGeometryStreams = 54,
569     SpvCapabilityStorageImageReadWithoutFormat = 55,
570     SpvCapabilityStorageImageWriteWithoutFormat = 56,
571     SpvCapabilityMultiViewport = 57,
572 } SpvCapability;
573
574 typedef enum SpvOp_ {
575     SpvOpNop = 0,
576     SpvOpUndef = 1,
577     SpvOpSourceContinued = 2,
578     SpvOpSource = 3,
579     SpvOpSourceExtension = 4,
580     SpvOpName = 5,
581     SpvOpMemberName = 6,
582     SpvOpString = 7,
583     SpvOpLine = 8,
584     SpvOpExtension = 10,
585     SpvOpExtInstImport = 11,
586     SpvOpExtInst = 12,
587     SpvOpMemoryModel = 14,
588     SpvOpEntryPoint = 15,
589     SpvOpExecutionMode = 16,
590     SpvOpCapability = 17,
591     SpvOpTypeVoid = 19,
592     SpvOpTypeBool = 20,
593     SpvOpTypeInt = 21,
594     SpvOpTypeFloat = 22,
595     SpvOpTypeVector = 23,
596     SpvOpTypeMatrix = 24,
597     SpvOpTypeImage = 25,
598     SpvOpTypeSampler = 26,
599     SpvOpTypeSampledImage = 27,
600     SpvOpTypeArray = 28,
601     SpvOpTypeRuntimeArray = 29,
602     SpvOpTypeStruct = 30,
603     SpvOpTypeOpaque = 31,
604     SpvOpTypePointer = 32,
605     SpvOpTypeFunction = 33,
606     SpvOpTypeEvent = 34,
607     SpvOpTypeDeviceEvent = 35,
608     SpvOpTypeReserveId = 36,
609     SpvOpTypeQueue = 37,
610     SpvOpTypePipe = 38,
611     SpvOpTypeForwardPointer = 39,
612     SpvOpConstantTrue = 41,
613     SpvOpConstantFalse = 42,
614     SpvOpConstant = 43,
615     SpvOpConstantComposite = 44,
616     SpvOpConstantSampler = 45,
617     SpvOpConstantNull = 46,
618     SpvOpSpecConstantTrue = 48,
619     SpvOpSpecConstantFalse = 49,
620     SpvOpSpecConstant = 50,
621     SpvOpSpecConstantComposite = 51,
622     SpvOpSpecConstantOp = 52,
623     SpvOpFunction = 54,
624     SpvOpFunctionParameter = 55,
625     SpvOpFunctionEnd = 56,
626     SpvOpFunctionCall = 57,
627     SpvOpVariable = 59,
628     SpvOpImageTexelPointer = 60,
629     SpvOpLoad = 61,
630     SpvOpStore = 62,
631     SpvOpCopyMemory = 63,
632     SpvOpCopyMemorySized = 64,
633     SpvOpAccessChain = 65,
634     SpvOpInBoundsAccessChain = 66,
635     SpvOpPtrAccessChain = 67,
636     SpvOpArrayLength = 68,
637     SpvOpGenericPtrMemSemantics = 69,
638     SpvOpInBoundsPtrAccessChain = 70,
639     SpvOpDecorate = 71,
640     SpvOpMemberDecorate = 72,
641     SpvOpDecorationGroup = 73,
642     SpvOpGroupDecorate = 74,
643     SpvOpGroupMemberDecorate = 75,
644     SpvOpVectorExtractDynamic = 77,
645     SpvOpVectorInsertDynamic = 78,
646     SpvOpVectorShuffle = 79,
647     SpvOpCompositeConstruct = 80,
648     SpvOpCompositeExtract = 81,
649     SpvOpCompositeInsert = 82,
650     SpvOpCopyObject = 83,
651     SpvOpTranspose = 84,
652     SpvOpSampledImage = 86,
653     SpvOpImageSampleImplicitLod = 87,
654     SpvOpImageSampleExplicitLod = 88,
655     SpvOpImageSampleDrefImplicitLod = 89,
656     SpvOpImageSampleDrefExplicitLod = 90,
657     SpvOpImageSampleProjImplicitLod = 91,
658     SpvOpImageSampleProjExplicitLod = 92,
659     SpvOpImageSampleProjDrefImplicitLod = 93,
660     SpvOpImageSampleProjDrefExplicitLod = 94,
661     SpvOpImageFetch = 95,
662     SpvOpImageGather = 96,
663     SpvOpImageDrefGather = 97,
664     SpvOpImageRead = 98,
665     SpvOpImageWrite = 99,
666     SpvOpImage = 100,
667     SpvOpImageQueryFormat = 101,
668     SpvOpImageQueryOrder = 102,
669     SpvOpImageQuerySizeLod = 103,
670     SpvOpImageQuerySize = 104,
671     SpvOpImageQueryLod = 105,
672     SpvOpImageQueryLevels = 106,
673     SpvOpImageQuerySamples = 107,
674     SpvOpConvertFToU = 109,
675     SpvOpConvertFToS = 110,
676     SpvOpConvertSToF = 111,
677     SpvOpConvertUToF = 112,
678     SpvOpUConvert = 113,
679     SpvOpSConvert = 114,
680     SpvOpFConvert = 115,
681     SpvOpQuantizeToF16 = 116,
682     SpvOpConvertPtrToU = 117,
683     SpvOpSatConvertSToU = 118,
684     SpvOpSatConvertUToS = 119,
685     SpvOpConvertUToPtr = 120,
686     SpvOpPtrCastToGeneric = 121,
687     SpvOpGenericCastToPtr = 122,
688     SpvOpGenericCastToPtrExplicit = 123,
689     SpvOpBitcast = 124,
690     SpvOpSNegate = 126,
691     SpvOpFNegate = 127,
692     SpvOpIAdd = 128,
693     SpvOpFAdd = 129,
694     SpvOpISub = 130,
695     SpvOpFSub = 131,
696     SpvOpIMul = 132,
697     SpvOpFMul = 133,
698     SpvOpUDiv = 134,
699     SpvOpSDiv = 135,
700     SpvOpFDiv = 136,
701     SpvOpUMod = 137,
702     SpvOpSRem = 138,
703     SpvOpSMod = 139,
704     SpvOpFRem = 140,
705     SpvOpFMod = 141,
706     SpvOpVectorTimesScalar = 142,
707     SpvOpMatrixTimesScalar = 143,
708     SpvOpVectorTimesMatrix = 144,
709     SpvOpMatrixTimesVector = 145,
710     SpvOpMatrixTimesMatrix = 146,
711     SpvOpOuterProduct = 147,
712     SpvOpDot = 148,
713     SpvOpIAddCarry = 149,
714     SpvOpISubBorrow = 150,
715     SpvOpUMulExtended = 151,
716     SpvOpSMulExtended = 152,
717     SpvOpAny = 154,
718     SpvOpAll = 155,
719     SpvOpIsNan = 156,
720     SpvOpIsInf = 157,
721     SpvOpIsFinite = 158,
722     SpvOpIsNormal = 159,
723     SpvOpSignBitSet = 160,
724     SpvOpLessOrGreater = 161,
725     SpvOpOrdered = 162,
726     SpvOpUnordered = 163,
727     SpvOpLogicalEqual = 164,
728     SpvOpLogicalNotEqual = 165,
729     SpvOpLogicalOr = 166,
730     SpvOpLogicalAnd = 167,
731     SpvOpLogicalNot = 168,
732     SpvOpSelect = 169,
733     SpvOpIEqual = 170,
734     SpvOpINotEqual = 171,
735     SpvOpUGreaterThan = 172,
736     SpvOpSGreaterThan = 173,
737     SpvOpUGreaterThanEqual = 174,
738     SpvOpSGreaterThanEqual = 175,
739     SpvOpULessThan = 176,
740     SpvOpSLessThan = 177,
741     SpvOpULessThanEqual = 178,
742     SpvOpSLessThanEqual = 179,
743     SpvOpFOrdEqual = 180,
744     SpvOpFUnordEqual = 181,
745     SpvOpFOrdNotEqual = 182,
746     SpvOpFUnordNotEqual = 183,
747     SpvOpFOrdLessThan = 184,
748     SpvOpFUnordLessThan = 185,
749     SpvOpFOrdGreaterThan = 186,
750     SpvOpFUnordGreaterThan = 187,
751     SpvOpFOrdLessThanEqual = 188,
752     SpvOpFUnordLessThanEqual = 189,
753     SpvOpFOrdGreaterThanEqual = 190,
754     SpvOpFUnordGreaterThanEqual = 191,
755     SpvOpShiftRightLogical = 194,
756     SpvOpShiftRightArithmetic = 195,
757     SpvOpShiftLeftLogical = 196,
758     SpvOpBitwiseOr = 197,
759     SpvOpBitwiseXor = 198,
760     SpvOpBitwiseAnd = 199,
761     SpvOpNot = 200,
762     SpvOpBitFieldInsert = 201,
763     SpvOpBitFieldSExtract = 202,
764     SpvOpBitFieldUExtract = 203,
765     SpvOpBitReverse = 204,
766     SpvOpBitCount = 205,
767     SpvOpDPdx = 207,
768     SpvOpDPdy = 208,
769     SpvOpFwidth = 209,
770     SpvOpDPdxFine = 210,
771     SpvOpDPdyFine = 211,
772     SpvOpFwidthFine = 212,
773     SpvOpDPdxCoarse = 213,
774     SpvOpDPdyCoarse = 214,
775     SpvOpFwidthCoarse = 215,
776     SpvOpEmitVertex = 218,
777     SpvOpEndPrimitive = 219,
778     SpvOpEmitStreamVertex = 220,
779     SpvOpEndStreamPrimitive = 221,
780     SpvOpControlBarrier = 224,
781     SpvOpMemoryBarrier = 225,
782     SpvOpAtomicLoad = 227,
783     SpvOpAtomicStore = 228,
784     SpvOpAtomicExchange = 229,
785     SpvOpAtomicCompareExchange = 230,
786     SpvOpAtomicCompareExchangeWeak = 231,
787     SpvOpAtomicIIncrement = 232,
788     SpvOpAtomicIDecrement = 233,
789     SpvOpAtomicIAdd = 234,
790     SpvOpAtomicISub = 235,
791     SpvOpAtomicSMin = 236,
792     SpvOpAtomicUMin = 237,
793     SpvOpAtomicSMax = 238,
794     SpvOpAtomicUMax = 239,
795     SpvOpAtomicAnd = 240,
796     SpvOpAtomicOr = 241,
797     SpvOpAtomicXor = 242,
798     SpvOpPhi = 245,
799     SpvOpLoopMerge = 246,
800     SpvOpSelectionMerge = 247,
801     SpvOpLabel = 248,
802     SpvOpBranch = 249,
803     SpvOpBranchConditional = 250,
804     SpvOpSwitch = 251,
805     SpvOpKill = 252,
806     SpvOpReturn = 253,
807     SpvOpReturnValue = 254,
808     SpvOpUnreachable = 255,
809     SpvOpLifetimeStart = 256,
810     SpvOpLifetimeStop = 257,
811     SpvOpGroupAsyncCopy = 259,
812     SpvOpGroupWaitEvents = 260,
813     SpvOpGroupAll = 261,
814     SpvOpGroupAny = 262,
815     SpvOpGroupBroadcast = 263,
816     SpvOpGroupIAdd = 264,
817     SpvOpGroupFAdd = 265,
818     SpvOpGroupFMin = 266,
819     SpvOpGroupUMin = 267,
820     SpvOpGroupSMin = 268,
821     SpvOpGroupFMax = 269,
822     SpvOpGroupUMax = 270,
823     SpvOpGroupSMax = 271,
824     SpvOpReadPipe = 274,
825     SpvOpWritePipe = 275,
826     SpvOpReservedReadPipe = 276,
827     SpvOpReservedWritePipe = 277,
828     SpvOpReserveReadPipePackets = 278,
829     SpvOpReserveWritePipePackets = 279,
830     SpvOpCommitReadPipe = 280,
831     SpvOpCommitWritePipe = 281,
832     SpvOpIsValidReserveId = 282,
833     SpvOpGetNumPipePackets = 283,
834     SpvOpGetMaxPipePackets = 284,
835     SpvOpGroupReserveReadPipePackets = 285,
836     SpvOpGroupReserveWritePipePackets = 286,
837     SpvOpGroupCommitReadPipe = 287,
838     SpvOpGroupCommitWritePipe = 288,
839     SpvOpEnqueueMarker = 291,
840     SpvOpEnqueueKernel = 292,
841     SpvOpGetKernelNDrangeSubGroupCount = 293,
842     SpvOpGetKernelNDrangeMaxSubGroupSize = 294,
843     SpvOpGetKernelWorkGroupSize = 295,
844     SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296,
845     SpvOpRetainEvent = 297,
846     SpvOpReleaseEvent = 298,
847     SpvOpCreateUserEvent = 299,
848     SpvOpIsValidEvent = 300,
849     SpvOpSetUserEventStatus = 301,
850     SpvOpCaptureEventProfilingInfo = 302,
851     SpvOpGetDefaultQueue = 303,
852     SpvOpBuildNDRange = 304,
853     SpvOpImageSparseSampleImplicitLod = 305,
854     SpvOpImageSparseSampleExplicitLod = 306,
855     SpvOpImageSparseSampleDrefImplicitLod = 307,
856     SpvOpImageSparseSampleDrefExplicitLod = 308,
857     SpvOpImageSparseSampleProjImplicitLod = 309,
858     SpvOpImageSparseSampleProjExplicitLod = 310,
859     SpvOpImageSparseSampleProjDrefImplicitLod = 311,
860     SpvOpImageSparseSampleProjDrefExplicitLod = 312,
861     SpvOpImageSparseFetch = 313,
862     SpvOpImageSparseGather = 314,
863     SpvOpImageSparseDrefGather = 315,
864     SpvOpImageSparseTexelsResident = 316,
865     SpvOpNoLine = 317,
866     SpvOpAtomicFlagTestAndSet = 318,
867     SpvOpAtomicFlagClear = 319,
868     SpvOpImageSparseRead = 320,
869 } SpvOp;
870
871 #endif  // #ifndef spirv_H
872