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