Publish SPIR-V Registry files: SPIR-V 1.0 Revision 4
[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 4
55
56 static const unsigned int SpvMagicNumber = 0x07230203;
57 static const unsigned int SpvVersion = 0x00010000;
58 static const unsigned int SpvRevision = 4;
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 } SpvImageChannelOrder;
228
229 typedef enum SpvImageChannelDataType_ {
230     SpvImageChannelDataTypeSnormInt8 = 0,
231     SpvImageChannelDataTypeSnormInt16 = 1,
232     SpvImageChannelDataTypeUnormInt8 = 2,
233     SpvImageChannelDataTypeUnormInt16 = 3,
234     SpvImageChannelDataTypeUnormShort565 = 4,
235     SpvImageChannelDataTypeUnormShort555 = 5,
236     SpvImageChannelDataTypeUnormInt101010 = 6,
237     SpvImageChannelDataTypeSignedInt8 = 7,
238     SpvImageChannelDataTypeSignedInt16 = 8,
239     SpvImageChannelDataTypeSignedInt32 = 9,
240     SpvImageChannelDataTypeUnsignedInt8 = 10,
241     SpvImageChannelDataTypeUnsignedInt16 = 11,
242     SpvImageChannelDataTypeUnsignedInt32 = 12,
243     SpvImageChannelDataTypeHalfFloat = 13,
244     SpvImageChannelDataTypeFloat = 14,
245     SpvImageChannelDataTypeUnormInt24 = 15,
246     SpvImageChannelDataTypeUnormInt101010_2 = 16,
247 } SpvImageChannelDataType;
248
249 typedef enum SpvImageOperandsShift_ {
250     SpvImageOperandsBiasShift = 0,
251     SpvImageOperandsLodShift = 1,
252     SpvImageOperandsGradShift = 2,
253     SpvImageOperandsConstOffsetShift = 3,
254     SpvImageOperandsOffsetShift = 4,
255     SpvImageOperandsConstOffsetsShift = 5,
256     SpvImageOperandsSampleShift = 6,
257     SpvImageOperandsMinLodShift = 7,
258 } SpvImageOperandsShift;
259
260 typedef enum SpvImageOperandsMask_ {
261     SpvImageOperandsMaskNone = 0,
262     SpvImageOperandsBiasMask = 0x00000001,
263     SpvImageOperandsLodMask = 0x00000002,
264     SpvImageOperandsGradMask = 0x00000004,
265     SpvImageOperandsConstOffsetMask = 0x00000008,
266     SpvImageOperandsOffsetMask = 0x00000010,
267     SpvImageOperandsConstOffsetsMask = 0x00000020,
268     SpvImageOperandsSampleMask = 0x00000040,
269     SpvImageOperandsMinLodMask = 0x00000080,
270 } SpvImageOperandsMask;
271
272 typedef enum SpvFPFastMathModeShift_ {
273     SpvFPFastMathModeNotNaNShift = 0,
274     SpvFPFastMathModeNotInfShift = 1,
275     SpvFPFastMathModeNSZShift = 2,
276     SpvFPFastMathModeAllowRecipShift = 3,
277     SpvFPFastMathModeFastShift = 4,
278 } SpvFPFastMathModeShift;
279
280 typedef enum SpvFPFastMathModeMask_ {
281     SpvFPFastMathModeMaskNone = 0,
282     SpvFPFastMathModeNotNaNMask = 0x00000001,
283     SpvFPFastMathModeNotInfMask = 0x00000002,
284     SpvFPFastMathModeNSZMask = 0x00000004,
285     SpvFPFastMathModeAllowRecipMask = 0x00000008,
286     SpvFPFastMathModeFastMask = 0x00000010,
287 } SpvFPFastMathModeMask;
288
289 typedef enum SpvFPRoundingMode_ {
290     SpvFPRoundingModeRTE = 0,
291     SpvFPRoundingModeRTZ = 1,
292     SpvFPRoundingModeRTP = 2,
293     SpvFPRoundingModeRTN = 3,
294 } SpvFPRoundingMode;
295
296 typedef enum SpvLinkageType_ {
297     SpvLinkageTypeExport = 0,
298     SpvLinkageTypeImport = 1,
299 } SpvLinkageType;
300
301 typedef enum SpvAccessQualifier_ {
302     SpvAccessQualifierReadOnly = 0,
303     SpvAccessQualifierWriteOnly = 1,
304     SpvAccessQualifierReadWrite = 2,
305 } SpvAccessQualifier;
306
307 typedef enum SpvFunctionParameterAttribute_ {
308     SpvFunctionParameterAttributeZext = 0,
309     SpvFunctionParameterAttributeSext = 1,
310     SpvFunctionParameterAttributeByVal = 2,
311     SpvFunctionParameterAttributeSret = 3,
312     SpvFunctionParameterAttributeNoAlias = 4,
313     SpvFunctionParameterAttributeNoCapture = 5,
314     SpvFunctionParameterAttributeNoWrite = 6,
315     SpvFunctionParameterAttributeNoReadWrite = 7,
316 } SpvFunctionParameterAttribute;
317
318 typedef enum SpvDecoration_ {
319     SpvDecorationRelaxedPrecision = 0,
320     SpvDecorationSpecId = 1,
321     SpvDecorationBlock = 2,
322     SpvDecorationBufferBlock = 3,
323     SpvDecorationRowMajor = 4,
324     SpvDecorationColMajor = 5,
325     SpvDecorationArrayStride = 6,
326     SpvDecorationMatrixStride = 7,
327     SpvDecorationGLSLShared = 8,
328     SpvDecorationGLSLPacked = 9,
329     SpvDecorationCPacked = 10,
330     SpvDecorationBuiltIn = 11,
331     SpvDecorationNoPerspective = 13,
332     SpvDecorationFlat = 14,
333     SpvDecorationPatch = 15,
334     SpvDecorationCentroid = 16,
335     SpvDecorationSample = 17,
336     SpvDecorationInvariant = 18,
337     SpvDecorationRestrict = 19,
338     SpvDecorationAliased = 20,
339     SpvDecorationVolatile = 21,
340     SpvDecorationConstant = 22,
341     SpvDecorationCoherent = 23,
342     SpvDecorationNonWritable = 24,
343     SpvDecorationNonReadable = 25,
344     SpvDecorationUniform = 26,
345     SpvDecorationSaturatedConversion = 28,
346     SpvDecorationStream = 29,
347     SpvDecorationLocation = 30,
348     SpvDecorationComponent = 31,
349     SpvDecorationIndex = 32,
350     SpvDecorationBinding = 33,
351     SpvDecorationDescriptorSet = 34,
352     SpvDecorationOffset = 35,
353     SpvDecorationXfbBuffer = 36,
354     SpvDecorationXfbStride = 37,
355     SpvDecorationFuncParamAttr = 38,
356     SpvDecorationFPRoundingMode = 39,
357     SpvDecorationFPFastMathMode = 40,
358     SpvDecorationLinkageAttributes = 41,
359     SpvDecorationNoContraction = 42,
360     SpvDecorationInputAttachmentIndex = 43,
361     SpvDecorationAlignment = 44,
362 } SpvDecoration;
363
364 typedef enum SpvBuiltIn_ {
365     SpvBuiltInPosition = 0,
366     SpvBuiltInPointSize = 1,
367     SpvBuiltInClipDistance = 3,
368     SpvBuiltInCullDistance = 4,
369     SpvBuiltInVertexId = 5,
370     SpvBuiltInInstanceId = 6,
371     SpvBuiltInPrimitiveId = 7,
372     SpvBuiltInInvocationId = 8,
373     SpvBuiltInLayer = 9,
374     SpvBuiltInViewportIndex = 10,
375     SpvBuiltInTessLevelOuter = 11,
376     SpvBuiltInTessLevelInner = 12,
377     SpvBuiltInTessCoord = 13,
378     SpvBuiltInPatchVertices = 14,
379     SpvBuiltInFragCoord = 15,
380     SpvBuiltInPointCoord = 16,
381     SpvBuiltInFrontFacing = 17,
382     SpvBuiltInSampleId = 18,
383     SpvBuiltInSamplePosition = 19,
384     SpvBuiltInSampleMask = 20,
385     SpvBuiltInFragDepth = 22,
386     SpvBuiltInHelperInvocation = 23,
387     SpvBuiltInNumWorkgroups = 24,
388     SpvBuiltInWorkgroupSize = 25,
389     SpvBuiltInWorkgroupId = 26,
390     SpvBuiltInLocalInvocationId = 27,
391     SpvBuiltInGlobalInvocationId = 28,
392     SpvBuiltInLocalInvocationIndex = 29,
393     SpvBuiltInWorkDim = 30,
394     SpvBuiltInGlobalSize = 31,
395     SpvBuiltInEnqueuedWorkgroupSize = 32,
396     SpvBuiltInGlobalOffset = 33,
397     SpvBuiltInGlobalLinearId = 34,
398     SpvBuiltInSubgroupSize = 36,
399     SpvBuiltInSubgroupMaxSize = 37,
400     SpvBuiltInNumSubgroups = 38,
401     SpvBuiltInNumEnqueuedSubgroups = 39,
402     SpvBuiltInSubgroupId = 40,
403     SpvBuiltInSubgroupLocalInvocationId = 41,
404     SpvBuiltInVertexIndex = 42,
405     SpvBuiltInInstanceIndex = 43,
406 } SpvBuiltIn;
407
408 typedef enum SpvSelectionControlShift_ {
409     SpvSelectionControlFlattenShift = 0,
410     SpvSelectionControlDontFlattenShift = 1,
411 } SpvSelectionControlShift;
412
413 typedef enum SpvSelectionControlMask_ {
414     SpvSelectionControlMaskNone = 0,
415     SpvSelectionControlFlattenMask = 0x00000001,
416     SpvSelectionControlDontFlattenMask = 0x00000002,
417 } SpvSelectionControlMask;
418
419 typedef enum SpvLoopControlShift_ {
420     SpvLoopControlUnrollShift = 0,
421     SpvLoopControlDontUnrollShift = 1,
422 } SpvLoopControlShift;
423
424 typedef enum SpvLoopControlMask_ {
425     SpvLoopControlMaskNone = 0,
426     SpvLoopControlUnrollMask = 0x00000001,
427     SpvLoopControlDontUnrollMask = 0x00000002,
428 } SpvLoopControlMask;
429
430 typedef enum SpvFunctionControlShift_ {
431     SpvFunctionControlInlineShift = 0,
432     SpvFunctionControlDontInlineShift = 1,
433     SpvFunctionControlPureShift = 2,
434     SpvFunctionControlConstShift = 3,
435 } SpvFunctionControlShift;
436
437 typedef enum SpvFunctionControlMask_ {
438     SpvFunctionControlMaskNone = 0,
439     SpvFunctionControlInlineMask = 0x00000001,
440     SpvFunctionControlDontInlineMask = 0x00000002,
441     SpvFunctionControlPureMask = 0x00000004,
442     SpvFunctionControlConstMask = 0x00000008,
443 } SpvFunctionControlMask;
444
445 typedef enum SpvMemorySemanticsShift_ {
446     SpvMemorySemanticsAcquireShift = 1,
447     SpvMemorySemanticsReleaseShift = 2,
448     SpvMemorySemanticsAcquireReleaseShift = 3,
449     SpvMemorySemanticsSequentiallyConsistentShift = 4,
450     SpvMemorySemanticsUniformMemoryShift = 6,
451     SpvMemorySemanticsSubgroupMemoryShift = 7,
452     SpvMemorySemanticsWorkgroupMemoryShift = 8,
453     SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
454     SpvMemorySemanticsAtomicCounterMemoryShift = 10,
455     SpvMemorySemanticsImageMemoryShift = 11,
456 } SpvMemorySemanticsShift;
457
458 typedef enum SpvMemorySemanticsMask_ {
459     SpvMemorySemanticsMaskNone = 0,
460     SpvMemorySemanticsAcquireMask = 0x00000002,
461     SpvMemorySemanticsReleaseMask = 0x00000004,
462     SpvMemorySemanticsAcquireReleaseMask = 0x00000008,
463     SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
464     SpvMemorySemanticsUniformMemoryMask = 0x00000040,
465     SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
466     SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
467     SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
468     SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
469     SpvMemorySemanticsImageMemoryMask = 0x00000800,
470 } SpvMemorySemanticsMask;
471
472 typedef enum SpvMemoryAccessShift_ {
473     SpvMemoryAccessVolatileShift = 0,
474     SpvMemoryAccessAlignedShift = 1,
475     SpvMemoryAccessNontemporalShift = 2,
476 } SpvMemoryAccessShift;
477
478 typedef enum SpvMemoryAccessMask_ {
479     SpvMemoryAccessMaskNone = 0,
480     SpvMemoryAccessVolatileMask = 0x00000001,
481     SpvMemoryAccessAlignedMask = 0x00000002,
482     SpvMemoryAccessNontemporalMask = 0x00000004,
483 } SpvMemoryAccessMask;
484
485 typedef enum SpvScope_ {
486     SpvScopeCrossDevice = 0,
487     SpvScopeDevice = 1,
488     SpvScopeWorkgroup = 2,
489     SpvScopeSubgroup = 3,
490     SpvScopeInvocation = 4,
491 } SpvScope;
492
493 typedef enum SpvGroupOperation_ {
494     SpvGroupOperationReduce = 0,
495     SpvGroupOperationInclusiveScan = 1,
496     SpvGroupOperationExclusiveScan = 2,
497 } SpvGroupOperation;
498
499 typedef enum SpvKernelEnqueueFlags_ {
500     SpvKernelEnqueueFlagsNoWait = 0,
501     SpvKernelEnqueueFlagsWaitKernel = 1,
502     SpvKernelEnqueueFlagsWaitWorkGroup = 2,
503 } SpvKernelEnqueueFlags;
504
505 typedef enum SpvKernelProfilingInfoShift_ {
506     SpvKernelProfilingInfoCmdExecTimeShift = 0,
507 } SpvKernelProfilingInfoShift;
508
509 typedef enum SpvKernelProfilingInfoMask_ {
510     SpvKernelProfilingInfoMaskNone = 0,
511     SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,
512 } SpvKernelProfilingInfoMask;
513
514 typedef enum SpvCapability_ {
515     SpvCapabilityMatrix = 0,
516     SpvCapabilityShader = 1,
517     SpvCapabilityGeometry = 2,
518     SpvCapabilityTessellation = 3,
519     SpvCapabilityAddresses = 4,
520     SpvCapabilityLinkage = 5,
521     SpvCapabilityKernel = 6,
522     SpvCapabilityVector16 = 7,
523     SpvCapabilityFloat16Buffer = 8,
524     SpvCapabilityFloat16 = 9,
525     SpvCapabilityFloat64 = 10,
526     SpvCapabilityInt64 = 11,
527     SpvCapabilityInt64Atomics = 12,
528     SpvCapabilityImageBasic = 13,
529     SpvCapabilityImageReadWrite = 14,
530     SpvCapabilityImageMipmap = 15,
531     SpvCapabilityPipes = 17,
532     SpvCapabilityGroups = 18,
533     SpvCapabilityDeviceEnqueue = 19,
534     SpvCapabilityLiteralSampler = 20,
535     SpvCapabilityAtomicStorage = 21,
536     SpvCapabilityInt16 = 22,
537     SpvCapabilityTessellationPointSize = 23,
538     SpvCapabilityGeometryPointSize = 24,
539     SpvCapabilityImageGatherExtended = 25,
540     SpvCapabilityStorageImageMultisample = 27,
541     SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
542     SpvCapabilitySampledImageArrayDynamicIndexing = 29,
543     SpvCapabilityStorageBufferArrayDynamicIndexing = 30,
544     SpvCapabilityStorageImageArrayDynamicIndexing = 31,
545     SpvCapabilityClipDistance = 32,
546     SpvCapabilityCullDistance = 33,
547     SpvCapabilityImageCubeArray = 34,
548     SpvCapabilitySampleRateShading = 35,
549     SpvCapabilityImageRect = 36,
550     SpvCapabilitySampledRect = 37,
551     SpvCapabilityGenericPointer = 38,
552     SpvCapabilityInt8 = 39,
553     SpvCapabilityInputAttachment = 40,
554     SpvCapabilitySparseResidency = 41,
555     SpvCapabilityMinLod = 42,
556     SpvCapabilitySampled1D = 43,
557     SpvCapabilityImage1D = 44,
558     SpvCapabilitySampledCubeArray = 45,
559     SpvCapabilitySampledBuffer = 46,
560     SpvCapabilityImageBuffer = 47,
561     SpvCapabilityImageMSArray = 48,
562     SpvCapabilityStorageImageExtendedFormats = 49,
563     SpvCapabilityImageQuery = 50,
564     SpvCapabilityDerivativeControl = 51,
565     SpvCapabilityInterpolationFunction = 52,
566     SpvCapabilityTransformFeedback = 53,
567     SpvCapabilityGeometryStreams = 54,
568     SpvCapabilityStorageImageReadWithoutFormat = 55,
569     SpvCapabilityStorageImageWriteWithoutFormat = 56,
570     SpvCapabilityMultiViewport = 57,
571 } SpvCapability;
572
573 typedef enum SpvOp_ {
574     SpvOpNop = 0,
575     SpvOpUndef = 1,
576     SpvOpSourceContinued = 2,
577     SpvOpSource = 3,
578     SpvOpSourceExtension = 4,
579     SpvOpName = 5,
580     SpvOpMemberName = 6,
581     SpvOpString = 7,
582     SpvOpLine = 8,
583     SpvOpExtension = 10,
584     SpvOpExtInstImport = 11,
585     SpvOpExtInst = 12,
586     SpvOpMemoryModel = 14,
587     SpvOpEntryPoint = 15,
588     SpvOpExecutionMode = 16,
589     SpvOpCapability = 17,
590     SpvOpTypeVoid = 19,
591     SpvOpTypeBool = 20,
592     SpvOpTypeInt = 21,
593     SpvOpTypeFloat = 22,
594     SpvOpTypeVector = 23,
595     SpvOpTypeMatrix = 24,
596     SpvOpTypeImage = 25,
597     SpvOpTypeSampler = 26,
598     SpvOpTypeSampledImage = 27,
599     SpvOpTypeArray = 28,
600     SpvOpTypeRuntimeArray = 29,
601     SpvOpTypeStruct = 30,
602     SpvOpTypeOpaque = 31,
603     SpvOpTypePointer = 32,
604     SpvOpTypeFunction = 33,
605     SpvOpTypeEvent = 34,
606     SpvOpTypeDeviceEvent = 35,
607     SpvOpTypeReserveId = 36,
608     SpvOpTypeQueue = 37,
609     SpvOpTypePipe = 38,
610     SpvOpTypeForwardPointer = 39,
611     SpvOpConstantTrue = 41,
612     SpvOpConstantFalse = 42,
613     SpvOpConstant = 43,
614     SpvOpConstantComposite = 44,
615     SpvOpConstantSampler = 45,
616     SpvOpConstantNull = 46,
617     SpvOpSpecConstantTrue = 48,
618     SpvOpSpecConstantFalse = 49,
619     SpvOpSpecConstant = 50,
620     SpvOpSpecConstantComposite = 51,
621     SpvOpSpecConstantOp = 52,
622     SpvOpFunction = 54,
623     SpvOpFunctionParameter = 55,
624     SpvOpFunctionEnd = 56,
625     SpvOpFunctionCall = 57,
626     SpvOpVariable = 59,
627     SpvOpImageTexelPointer = 60,
628     SpvOpLoad = 61,
629     SpvOpStore = 62,
630     SpvOpCopyMemory = 63,
631     SpvOpCopyMemorySized = 64,
632     SpvOpAccessChain = 65,
633     SpvOpInBoundsAccessChain = 66,
634     SpvOpPtrAccessChain = 67,
635     SpvOpArrayLength = 68,
636     SpvOpGenericPtrMemSemantics = 69,
637     SpvOpInBoundsPtrAccessChain = 70,
638     SpvOpDecorate = 71,
639     SpvOpMemberDecorate = 72,
640     SpvOpDecorationGroup = 73,
641     SpvOpGroupDecorate = 74,
642     SpvOpGroupMemberDecorate = 75,
643     SpvOpVectorExtractDynamic = 77,
644     SpvOpVectorInsertDynamic = 78,
645     SpvOpVectorShuffle = 79,
646     SpvOpCompositeConstruct = 80,
647     SpvOpCompositeExtract = 81,
648     SpvOpCompositeInsert = 82,
649     SpvOpCopyObject = 83,
650     SpvOpTranspose = 84,
651     SpvOpSampledImage = 86,
652     SpvOpImageSampleImplicitLod = 87,
653     SpvOpImageSampleExplicitLod = 88,
654     SpvOpImageSampleDrefImplicitLod = 89,
655     SpvOpImageSampleDrefExplicitLod = 90,
656     SpvOpImageSampleProjImplicitLod = 91,
657     SpvOpImageSampleProjExplicitLod = 92,
658     SpvOpImageSampleProjDrefImplicitLod = 93,
659     SpvOpImageSampleProjDrefExplicitLod = 94,
660     SpvOpImageFetch = 95,
661     SpvOpImageGather = 96,
662     SpvOpImageDrefGather = 97,
663     SpvOpImageRead = 98,
664     SpvOpImageWrite = 99,
665     SpvOpImage = 100,
666     SpvOpImageQueryFormat = 101,
667     SpvOpImageQueryOrder = 102,
668     SpvOpImageQuerySizeLod = 103,
669     SpvOpImageQuerySize = 104,
670     SpvOpImageQueryLod = 105,
671     SpvOpImageQueryLevels = 106,
672     SpvOpImageQuerySamples = 107,
673     SpvOpConvertFToU = 109,
674     SpvOpConvertFToS = 110,
675     SpvOpConvertSToF = 111,
676     SpvOpConvertUToF = 112,
677     SpvOpUConvert = 113,
678     SpvOpSConvert = 114,
679     SpvOpFConvert = 115,
680     SpvOpQuantizeToF16 = 116,
681     SpvOpConvertPtrToU = 117,
682     SpvOpSatConvertSToU = 118,
683     SpvOpSatConvertUToS = 119,
684     SpvOpConvertUToPtr = 120,
685     SpvOpPtrCastToGeneric = 121,
686     SpvOpGenericCastToPtr = 122,
687     SpvOpGenericCastToPtrExplicit = 123,
688     SpvOpBitcast = 124,
689     SpvOpSNegate = 126,
690     SpvOpFNegate = 127,
691     SpvOpIAdd = 128,
692     SpvOpFAdd = 129,
693     SpvOpISub = 130,
694     SpvOpFSub = 131,
695     SpvOpIMul = 132,
696     SpvOpFMul = 133,
697     SpvOpUDiv = 134,
698     SpvOpSDiv = 135,
699     SpvOpFDiv = 136,
700     SpvOpUMod = 137,
701     SpvOpSRem = 138,
702     SpvOpSMod = 139,
703     SpvOpFRem = 140,
704     SpvOpFMod = 141,
705     SpvOpVectorTimesScalar = 142,
706     SpvOpMatrixTimesScalar = 143,
707     SpvOpVectorTimesMatrix = 144,
708     SpvOpMatrixTimesVector = 145,
709     SpvOpMatrixTimesMatrix = 146,
710     SpvOpOuterProduct = 147,
711     SpvOpDot = 148,
712     SpvOpIAddCarry = 149,
713     SpvOpISubBorrow = 150,
714     SpvOpUMulExtended = 151,
715     SpvOpSMulExtended = 152,
716     SpvOpAny = 154,
717     SpvOpAll = 155,
718     SpvOpIsNan = 156,
719     SpvOpIsInf = 157,
720     SpvOpIsFinite = 158,
721     SpvOpIsNormal = 159,
722     SpvOpSignBitSet = 160,
723     SpvOpLessOrGreater = 161,
724     SpvOpOrdered = 162,
725     SpvOpUnordered = 163,
726     SpvOpLogicalEqual = 164,
727     SpvOpLogicalNotEqual = 165,
728     SpvOpLogicalOr = 166,
729     SpvOpLogicalAnd = 167,
730     SpvOpLogicalNot = 168,
731     SpvOpSelect = 169,
732     SpvOpIEqual = 170,
733     SpvOpINotEqual = 171,
734     SpvOpUGreaterThan = 172,
735     SpvOpSGreaterThan = 173,
736     SpvOpUGreaterThanEqual = 174,
737     SpvOpSGreaterThanEqual = 175,
738     SpvOpULessThan = 176,
739     SpvOpSLessThan = 177,
740     SpvOpULessThanEqual = 178,
741     SpvOpSLessThanEqual = 179,
742     SpvOpFOrdEqual = 180,
743     SpvOpFUnordEqual = 181,
744     SpvOpFOrdNotEqual = 182,
745     SpvOpFUnordNotEqual = 183,
746     SpvOpFOrdLessThan = 184,
747     SpvOpFUnordLessThan = 185,
748     SpvOpFOrdGreaterThan = 186,
749     SpvOpFUnordGreaterThan = 187,
750     SpvOpFOrdLessThanEqual = 188,
751     SpvOpFUnordLessThanEqual = 189,
752     SpvOpFOrdGreaterThanEqual = 190,
753     SpvOpFUnordGreaterThanEqual = 191,
754     SpvOpShiftRightLogical = 194,
755     SpvOpShiftRightArithmetic = 195,
756     SpvOpShiftLeftLogical = 196,
757     SpvOpBitwiseOr = 197,
758     SpvOpBitwiseXor = 198,
759     SpvOpBitwiseAnd = 199,
760     SpvOpNot = 200,
761     SpvOpBitFieldInsert = 201,
762     SpvOpBitFieldSExtract = 202,
763     SpvOpBitFieldUExtract = 203,
764     SpvOpBitReverse = 204,
765     SpvOpBitCount = 205,
766     SpvOpDPdx = 207,
767     SpvOpDPdy = 208,
768     SpvOpFwidth = 209,
769     SpvOpDPdxFine = 210,
770     SpvOpDPdyFine = 211,
771     SpvOpFwidthFine = 212,
772     SpvOpDPdxCoarse = 213,
773     SpvOpDPdyCoarse = 214,
774     SpvOpFwidthCoarse = 215,
775     SpvOpEmitVertex = 218,
776     SpvOpEndPrimitive = 219,
777     SpvOpEmitStreamVertex = 220,
778     SpvOpEndStreamPrimitive = 221,
779     SpvOpControlBarrier = 224,
780     SpvOpMemoryBarrier = 225,
781     SpvOpAtomicLoad = 227,
782     SpvOpAtomicStore = 228,
783     SpvOpAtomicExchange = 229,
784     SpvOpAtomicCompareExchange = 230,
785     SpvOpAtomicCompareExchangeWeak = 231,
786     SpvOpAtomicIIncrement = 232,
787     SpvOpAtomicIDecrement = 233,
788     SpvOpAtomicIAdd = 234,
789     SpvOpAtomicISub = 235,
790     SpvOpAtomicSMin = 236,
791     SpvOpAtomicUMin = 237,
792     SpvOpAtomicSMax = 238,
793     SpvOpAtomicUMax = 239,
794     SpvOpAtomicAnd = 240,
795     SpvOpAtomicOr = 241,
796     SpvOpAtomicXor = 242,
797     SpvOpPhi = 245,
798     SpvOpLoopMerge = 246,
799     SpvOpSelectionMerge = 247,
800     SpvOpLabel = 248,
801     SpvOpBranch = 249,
802     SpvOpBranchConditional = 250,
803     SpvOpSwitch = 251,
804     SpvOpKill = 252,
805     SpvOpReturn = 253,
806     SpvOpReturnValue = 254,
807     SpvOpUnreachable = 255,
808     SpvOpLifetimeStart = 256,
809     SpvOpLifetimeStop = 257,
810     SpvOpGroupAsyncCopy = 259,
811     SpvOpGroupWaitEvents = 260,
812     SpvOpGroupAll = 261,
813     SpvOpGroupAny = 262,
814     SpvOpGroupBroadcast = 263,
815     SpvOpGroupIAdd = 264,
816     SpvOpGroupFAdd = 265,
817     SpvOpGroupFMin = 266,
818     SpvOpGroupUMin = 267,
819     SpvOpGroupSMin = 268,
820     SpvOpGroupFMax = 269,
821     SpvOpGroupUMax = 270,
822     SpvOpGroupSMax = 271,
823     SpvOpReadPipe = 274,
824     SpvOpWritePipe = 275,
825     SpvOpReservedReadPipe = 276,
826     SpvOpReservedWritePipe = 277,
827     SpvOpReserveReadPipePackets = 278,
828     SpvOpReserveWritePipePackets = 279,
829     SpvOpCommitReadPipe = 280,
830     SpvOpCommitWritePipe = 281,
831     SpvOpIsValidReserveId = 282,
832     SpvOpGetNumPipePackets = 283,
833     SpvOpGetMaxPipePackets = 284,
834     SpvOpGroupReserveReadPipePackets = 285,
835     SpvOpGroupReserveWritePipePackets = 286,
836     SpvOpGroupCommitReadPipe = 287,
837     SpvOpGroupCommitWritePipe = 288,
838     SpvOpEnqueueMarker = 291,
839     SpvOpEnqueueKernel = 292,
840     SpvOpGetKernelNDrangeSubGroupCount = 293,
841     SpvOpGetKernelNDrangeMaxSubGroupSize = 294,
842     SpvOpGetKernelWorkGroupSize = 295,
843     SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296,
844     SpvOpRetainEvent = 297,
845     SpvOpReleaseEvent = 298,
846     SpvOpCreateUserEvent = 299,
847     SpvOpIsValidEvent = 300,
848     SpvOpSetUserEventStatus = 301,
849     SpvOpCaptureEventProfilingInfo = 302,
850     SpvOpGetDefaultQueue = 303,
851     SpvOpBuildNDRange = 304,
852     SpvOpImageSparseSampleImplicitLod = 305,
853     SpvOpImageSparseSampleExplicitLod = 306,
854     SpvOpImageSparseSampleDrefImplicitLod = 307,
855     SpvOpImageSparseSampleDrefExplicitLod = 308,
856     SpvOpImageSparseSampleProjImplicitLod = 309,
857     SpvOpImageSparseSampleProjExplicitLod = 310,
858     SpvOpImageSparseSampleProjDrefImplicitLod = 311,
859     SpvOpImageSparseSampleProjDrefExplicitLod = 312,
860     SpvOpImageSparseFetch = 313,
861     SpvOpImageSparseGather = 314,
862     SpvOpImageSparseDrefGather = 315,
863     SpvOpImageSparseTexelsResident = 316,
864     SpvOpNoLine = 317,
865     SpvOpAtomicFlagTestAndSet = 318,
866     SpvOpAtomicFlagClear = 319,
867     SpvOpImageSparseRead = 320,
868 } SpvOp;
869
870 #endif  // #ifndef spirv_H
871