Merge commit mesa-public/master into vulkan
[mesa.git] / src / compiler / nir / spirv / spirv.h
1 /*
2 ** Copyright (c) 2014-2015 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 2
55
56 static const unsigned int SpvMagicNumber = 0x07230203;
57 static const unsigned int SpvVersion = 0x00010000;
58 static const unsigned int SpvRevision = 2;
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 } SpvOp;
868
869 #endif // #ifndef spirv_H
870