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