1// Copyright (c) 2014-2020 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, C#, D
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// - C# will use enum classes in the Specification class located in the "Spv" namespace,
37//     e.g.: Spv.Specification.SourceLanguage.GLSL
38// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
39//
40// Some tokens act like mask values, which can be OR'd together,
41// while others are mutually exclusive.  The mask-like ones have
42// "Mask" in their name, and a parallel enum that has the shift
43// amount (1 << x) for each corresponding enumerant.
44
45#ifndef spirv_HPP
46#define spirv_HPP
47
48namespace spv {
49
50typedef unsigned int Id;
51
52#define SPV_VERSION 0x10500
53#define SPV_REVISION 1
54
55static const unsigned int MagicNumber = 0x07230203;
56static const unsigned int Version = 0x00010500;
57static const unsigned int Revision = 1;
58static const unsigned int OpCodeMask = 0xffff;
59static const unsigned int WordCountShift = 16;
60
61enum class SourceLanguage : unsigned {
62    Unknown = 0,
63    ESSL = 1,
64    GLSL = 2,
65    OpenCL_C = 3,
66    OpenCL_CPP = 4,
67    HLSL = 5,
68    Max = 0x7fffffff,
69};
70
71enum class ExecutionModel : unsigned {
72    Vertex = 0,
73    TessellationControl = 1,
74    TessellationEvaluation = 2,
75    Geometry = 3,
76    Fragment = 4,
77    GLCompute = 5,
78    Kernel = 6,
79    TaskNV = 5267,
80    MeshNV = 5268,
81    RayGenerationKHR = 5313,
82    RayGenerationNV = 5313,
83    IntersectionKHR = 5314,
84    IntersectionNV = 5314,
85    AnyHitKHR = 5315,
86    AnyHitNV = 5315,
87    ClosestHitKHR = 5316,
88    ClosestHitNV = 5316,
89    MissKHR = 5317,
90    MissNV = 5317,
91    CallableKHR = 5318,
92    CallableNV = 5318,
93    Max = 0x7fffffff,
94};
95
96enum class AddressingModel : unsigned {
97    Logical = 0,
98    Physical32 = 1,
99    Physical64 = 2,
100    PhysicalStorageBuffer64 = 5348,
101    PhysicalStorageBuffer64EXT = 5348,
102    Max = 0x7fffffff,
103};
104
105enum class MemoryModel : unsigned {
106    Simple = 0,
107    GLSL450 = 1,
108    OpenCL = 2,
109    Vulkan = 3,
110    VulkanKHR = 3,
111    Max = 0x7fffffff,
112};
113
114enum class ExecutionMode : unsigned {
115    Invocations = 0,
116    SpacingEqual = 1,
117    SpacingFractionalEven = 2,
118    SpacingFractionalOdd = 3,
119    VertexOrderCw = 4,
120    VertexOrderCcw = 5,
121    PixelCenterInteger = 6,
122    OriginUpperLeft = 7,
123    OriginLowerLeft = 8,
124    EarlyFragmentTests = 9,
125    PointMode = 10,
126    Xfb = 11,
127    DepthReplacing = 12,
128    DepthGreater = 14,
129    DepthLess = 15,
130    DepthUnchanged = 16,
131    LocalSize = 17,
132    LocalSizeHint = 18,
133    InputPoints = 19,
134    InputLines = 20,
135    InputLinesAdjacency = 21,
136    Triangles = 22,
137    InputTrianglesAdjacency = 23,
138    Quads = 24,
139    Isolines = 25,
140    OutputVertices = 26,
141    OutputPoints = 27,
142    OutputLineStrip = 28,
143    OutputTriangleStrip = 29,
144    VecTypeHint = 30,
145    ContractionOff = 31,
146    Initializer = 33,
147    Finalizer = 34,
148    SubgroupSize = 35,
149    SubgroupsPerWorkgroup = 36,
150    SubgroupsPerWorkgroupId = 37,
151    LocalSizeId = 38,
152    LocalSizeHintId = 39,
153    PostDepthCoverage = 4446,
154    DenormPreserve = 4459,
155    DenormFlushToZero = 4460,
156    SignedZeroInfNanPreserve = 4461,
157    RoundingModeRTE = 4462,
158    RoundingModeRTZ = 4463,
159    StencilRefReplacingEXT = 5027,
160    OutputLinesNV = 5269,
161    OutputPrimitivesNV = 5270,
162    DerivativeGroupQuadsNV = 5289,
163    DerivativeGroupLinearNV = 5290,
164    OutputTrianglesNV = 5298,
165    PixelInterlockOrderedEXT = 5366,
166    PixelInterlockUnorderedEXT = 5367,
167    SampleInterlockOrderedEXT = 5368,
168    SampleInterlockUnorderedEXT = 5369,
169    ShadingRateInterlockOrderedEXT = 5370,
170    ShadingRateInterlockUnorderedEXT = 5371,
171    Max = 0x7fffffff,
172};
173
174enum class StorageClass : unsigned {
175    UniformConstant = 0,
176    Input = 1,
177    Uniform = 2,
178    Output = 3,
179    Workgroup = 4,
180    CrossWorkgroup = 5,
181    Private = 6,
182    Function = 7,
183    Generic = 8,
184    PushConstant = 9,
185    AtomicCounter = 10,
186    Image = 11,
187    StorageBuffer = 12,
188    CallableDataKHR = 5328,
189    CallableDataNV = 5328,
190    IncomingCallableDataKHR = 5329,
191    IncomingCallableDataNV = 5329,
192    RayPayloadKHR = 5338,
193    RayPayloadNV = 5338,
194    HitAttributeKHR = 5339,
195    HitAttributeNV = 5339,
196    IncomingRayPayloadKHR = 5342,
197    IncomingRayPayloadNV = 5342,
198    ShaderRecordBufferKHR = 5343,
199    ShaderRecordBufferNV = 5343,
200    PhysicalStorageBuffer = 5349,
201    PhysicalStorageBufferEXT = 5349,
202    Max = 0x7fffffff,
203};
204
205enum class Dim : unsigned {
206    Dim1D = 0,
207    Dim2D = 1,
208    Dim3D = 2,
209    Cube = 3,
210    Rect = 4,
211    Buffer = 5,
212    SubpassData = 6,
213    Max = 0x7fffffff,
214};
215
216enum class SamplerAddressingMode : unsigned {
217    None = 0,
218    ClampToEdge = 1,
219    Clamp = 2,
220    Repeat = 3,
221    RepeatMirrored = 4,
222    Max = 0x7fffffff,
223};
224
225enum class SamplerFilterMode : unsigned {
226    Nearest = 0,
227    Linear = 1,
228    Max = 0x7fffffff,
229};
230
231enum class ImageFormat : unsigned {
232    Unknown = 0,
233    Rgba32f = 1,
234    Rgba16f = 2,
235    R32f = 3,
236    Rgba8 = 4,
237    Rgba8Snorm = 5,
238    Rg32f = 6,
239    Rg16f = 7,
240    R11fG11fB10f = 8,
241    R16f = 9,
242    Rgba16 = 10,
243    Rgb10A2 = 11,
244    Rg16 = 12,
245    Rg8 = 13,
246    R16 = 14,
247    R8 = 15,
248    Rgba16Snorm = 16,
249    Rg16Snorm = 17,
250    Rg8Snorm = 18,
251    R16Snorm = 19,
252    R8Snorm = 20,
253    Rgba32i = 21,
254    Rgba16i = 22,
255    Rgba8i = 23,
256    R32i = 24,
257    Rg32i = 25,
258    Rg16i = 26,
259    Rg8i = 27,
260    R16i = 28,
261    R8i = 29,
262    Rgba32ui = 30,
263    Rgba16ui = 31,
264    Rgba8ui = 32,
265    R32ui = 33,
266    Rgb10a2ui = 34,
267    Rg32ui = 35,
268    Rg16ui = 36,
269    Rg8ui = 37,
270    R16ui = 38,
271    R8ui = 39,
272    Max = 0x7fffffff,
273};
274
275enum class ImageChannelOrder : unsigned {
276    R = 0,
277    A = 1,
278    RG = 2,
279    RA = 3,
280    RGB = 4,
281    RGBA = 5,
282    BGRA = 6,
283    ARGB = 7,
284    Intensity = 8,
285    Luminance = 9,
286    Rx = 10,
287    RGx = 11,
288    RGBx = 12,
289    Depth = 13,
290    DepthStencil = 14,
291    sRGB = 15,
292    sRGBx = 16,
293    sRGBA = 17,
294    sBGRA = 18,
295    ABGR = 19,
296    Max = 0x7fffffff,
297};
298
299enum class ImageChannelDataType : unsigned {
300    SnormInt8 = 0,
301    SnormInt16 = 1,
302    UnormInt8 = 2,
303    UnormInt16 = 3,
304    UnormShort565 = 4,
305    UnormShort555 = 5,
306    UnormInt101010 = 6,
307    SignedInt8 = 7,
308    SignedInt16 = 8,
309    SignedInt32 = 9,
310    UnsignedInt8 = 10,
311    UnsignedInt16 = 11,
312    UnsignedInt32 = 12,
313    HalfFloat = 13,
314    Float = 14,
315    UnormInt24 = 15,
316    UnormInt101010_2 = 16,
317    Max = 0x7fffffff,
318};
319
320enum class ImageOperandsShift : unsigned {
321    Bias = 0,
322    Lod = 1,
323    Grad = 2,
324    ConstOffset = 3,
325    Offset = 4,
326    ConstOffsets = 5,
327    Sample = 6,
328    MinLod = 7,
329    MakeTexelAvailable = 8,
330    MakeTexelAvailableKHR = 8,
331    MakeTexelVisible = 9,
332    MakeTexelVisibleKHR = 9,
333    NonPrivateTexel = 10,
334    NonPrivateTexelKHR = 10,
335    VolatileTexel = 11,
336    VolatileTexelKHR = 11,
337    SignExtend = 12,
338    ZeroExtend = 13,
339    Max = 0x7fffffff,
340};
341
342enum class ImageOperandsMask : unsigned {
343    MaskNone = 0,
344    Bias = 0x00000001,
345    Lod = 0x00000002,
346    Grad = 0x00000004,
347    ConstOffset = 0x00000008,
348    Offset = 0x00000010,
349    ConstOffsets = 0x00000020,
350    Sample = 0x00000040,
351    MinLod = 0x00000080,
352    MakeTexelAvailable = 0x00000100,
353    MakeTexelAvailableKHR = 0x00000100,
354    MakeTexelVisible = 0x00000200,
355    MakeTexelVisibleKHR = 0x00000200,
356    NonPrivateTexel = 0x00000400,
357    NonPrivateTexelKHR = 0x00000400,
358    VolatileTexel = 0x00000800,
359    VolatileTexelKHR = 0x00000800,
360    SignExtend = 0x00001000,
361    ZeroExtend = 0x00002000,
362};
363
364enum class FPFastMathModeShift : unsigned {
365    NotNaN = 0,
366    NotInf = 1,
367    NSZ = 2,
368    AllowRecip = 3,
369    Fast = 4,
370    Max = 0x7fffffff,
371};
372
373enum class FPFastMathModeMask : unsigned {
374    MaskNone = 0,
375    NotNaN = 0x00000001,
376    NotInf = 0x00000002,
377    NSZ = 0x00000004,
378    AllowRecip = 0x00000008,
379    Fast = 0x00000010,
380};
381
382enum class FPRoundingMode : unsigned {
383    RTE = 0,
384    RTZ = 1,
385    RTP = 2,
386    RTN = 3,
387    Max = 0x7fffffff,
388};
389
390enum class LinkageType : unsigned {
391    Export = 0,
392    Import = 1,
393    Max = 0x7fffffff,
394};
395
396enum class AccessQualifier : unsigned {
397    ReadOnly = 0,
398    WriteOnly = 1,
399    ReadWrite = 2,
400    Max = 0x7fffffff,
401};
402
403enum class FunctionParameterAttribute : unsigned {
404    Zext = 0,
405    Sext = 1,
406    ByVal = 2,
407    Sret = 3,
408    NoAlias = 4,
409    NoCapture = 5,
410    NoWrite = 6,
411    NoReadWrite = 7,
412    Max = 0x7fffffff,
413};
414
415enum class Decoration : unsigned {
416    RelaxedPrecision = 0,
417    SpecId = 1,
418    Block = 2,
419    BufferBlock = 3,
420    RowMajor = 4,
421    ColMajor = 5,
422    ArrayStride = 6,
423    MatrixStride = 7,
424    GLSLShared = 8,
425    GLSLPacked = 9,
426    CPacked = 10,
427    BuiltIn = 11,
428    NoPerspective = 13,
429    Flat = 14,
430    Patch = 15,
431    Centroid = 16,
432    Sample = 17,
433    Invariant = 18,
434    Restrict = 19,
435    Aliased = 20,
436    Volatile = 21,
437    Constant = 22,
438    Coherent = 23,
439    NonWritable = 24,
440    NonReadable = 25,
441    Uniform = 26,
442    UniformId = 27,
443    SaturatedConversion = 28,
444    Stream = 29,
445    Location = 30,
446    Component = 31,
447    Index = 32,
448    Binding = 33,
449    DescriptorSet = 34,
450    Offset = 35,
451    XfbBuffer = 36,
452    XfbStride = 37,
453    FuncParamAttr = 38,
454    FPRoundingMode = 39,
455    FPFastMathMode = 40,
456    LinkageAttributes = 41,
457    NoContraction = 42,
458    InputAttachmentIndex = 43,
459    Alignment = 44,
460    MaxByteOffset = 45,
461    AlignmentId = 46,
462    MaxByteOffsetId = 47,
463    NoSignedWrap = 4469,
464    NoUnsignedWrap = 4470,
465    ExplicitInterpAMD = 4999,
466    OverrideCoverageNV = 5248,
467    PassthroughNV = 5250,
468    ViewportRelativeNV = 5252,
469    SecondaryViewportRelativeNV = 5256,
470    PerPrimitiveNV = 5271,
471    PerViewNV = 5272,
472    PerTaskNV = 5273,
473    PerVertexNV = 5285,
474    NonUniform = 5300,
475    NonUniformEXT = 5300,
476    RestrictPointer = 5355,
477    RestrictPointerEXT = 5355,
478    AliasedPointer = 5356,
479    AliasedPointerEXT = 5356,
480    CounterBuffer = 5634,
481    HlslCounterBufferGOOGLE = 5634,
482    HlslSemanticGOOGLE = 5635,
483    UserSemantic = 5635,
484    UserTypeGOOGLE = 5636,
485    Max = 0x7fffffff,
486};
487
488enum class BuiltIn : unsigned {
489    Position = 0,
490    PointSize = 1,
491    ClipDistance = 3,
492    CullDistance = 4,
493    VertexId = 5,
494    InstanceId = 6,
495    PrimitiveId = 7,
496    InvocationId = 8,
497    Layer = 9,
498    ViewportIndex = 10,
499    TessLevelOuter = 11,
500    TessLevelInner = 12,
501    TessCoord = 13,
502    PatchVertices = 14,
503    FragCoord = 15,
504    PointCoord = 16,
505    FrontFacing = 17,
506    SampleId = 18,
507    SamplePosition = 19,
508    SampleMask = 20,
509    FragDepth = 22,
510    HelperInvocation = 23,
511    NumWorkgroups = 24,
512    WorkgroupSize = 25,
513    WorkgroupId = 26,
514    LocalInvocationId = 27,
515    GlobalInvocationId = 28,
516    LocalInvocationIndex = 29,
517    WorkDim = 30,
518    GlobalSize = 31,
519    EnqueuedWorkgroupSize = 32,
520    GlobalOffset = 33,
521    GlobalLinearId = 34,
522    SubgroupSize = 36,
523    SubgroupMaxSize = 37,
524    NumSubgroups = 38,
525    NumEnqueuedSubgroups = 39,
526    SubgroupId = 40,
527    SubgroupLocalInvocationId = 41,
528    VertexIndex = 42,
529    InstanceIndex = 43,
530    SubgroupEqMask = 4416,
531    SubgroupEqMaskKHR = 4416,
532    SubgroupGeMask = 4417,
533    SubgroupGeMaskKHR = 4417,
534    SubgroupGtMask = 4418,
535    SubgroupGtMaskKHR = 4418,
536    SubgroupLeMask = 4419,
537    SubgroupLeMaskKHR = 4419,
538    SubgroupLtMask = 4420,
539    SubgroupLtMaskKHR = 4420,
540    BaseVertex = 4424,
541    BaseInstance = 4425,
542    DrawIndex = 4426,
543    DeviceIndex = 4438,
544    ViewIndex = 4440,
545    BaryCoordNoPerspAMD = 4992,
546    BaryCoordNoPerspCentroidAMD = 4993,
547    BaryCoordNoPerspSampleAMD = 4994,
548    BaryCoordSmoothAMD = 4995,
549    BaryCoordSmoothCentroidAMD = 4996,
550    BaryCoordSmoothSampleAMD = 4997,
551    BaryCoordPullModelAMD = 4998,
552    FragStencilRefEXT = 5014,
553    ViewportMaskNV = 5253,
554    SecondaryPositionNV = 5257,
555    SecondaryViewportMaskNV = 5258,
556    PositionPerViewNV = 5261,
557    ViewportMaskPerViewNV = 5262,
558    FullyCoveredEXT = 5264,
559    TaskCountNV = 5274,
560    PrimitiveCountNV = 5275,
561    PrimitiveIndicesNV = 5276,
562    ClipDistancePerViewNV = 5277,
563    CullDistancePerViewNV = 5278,
564    LayerPerViewNV = 5279,
565    MeshViewCountNV = 5280,
566    MeshViewIndicesNV = 5281,
567    BaryCoordNV = 5286,
568    BaryCoordNoPerspNV = 5287,
569    FragSizeEXT = 5292,
570    FragmentSizeNV = 5292,
571    FragInvocationCountEXT = 5293,
572    InvocationsPerPixelNV = 5293,
573    LaunchIdKHR = 5319,
574    LaunchIdNV = 5319,
575    LaunchSizeKHR = 5320,
576    LaunchSizeNV = 5320,
577    WorldRayOriginKHR = 5321,
578    WorldRayOriginNV = 5321,
579    WorldRayDirectionKHR = 5322,
580    WorldRayDirectionNV = 5322,
581    ObjectRayOriginKHR = 5323,
582    ObjectRayOriginNV = 5323,
583    ObjectRayDirectionKHR = 5324,
584    ObjectRayDirectionNV = 5324,
585    RayTminKHR = 5325,
586    RayTminNV = 5325,
587    RayTmaxKHR = 5326,
588    RayTmaxNV = 5326,
589    InstanceCustomIndexKHR = 5327,
590    InstanceCustomIndexNV = 5327,
591    ObjectToWorldKHR = 5330,
592    ObjectToWorldNV = 5330,
593    WorldToObjectKHR = 5331,
594    WorldToObjectNV = 5331,
595    HitTKHR = 5332,
596    HitTNV = 5332,
597    HitKindKHR = 5333,
598    HitKindNV = 5333,
599    IncomingRayFlagsKHR = 5351,
600    IncomingRayFlagsNV = 5351,
601    RayGeometryIndexKHR = 5352,
602    WarpsPerSMNV = 5374,
603    SMCountNV = 5375,
604    WarpIDNV = 5376,
605    SMIDNV = 5377,
606    Max = 0x7fffffff,
607};
608
609enum class SelectionControlShift : unsigned {
610    Flatten = 0,
611    DontFlatten = 1,
612    Max = 0x7fffffff,
613};
614
615enum class SelectionControlMask : unsigned {
616    MaskNone = 0,
617    Flatten = 0x00000001,
618    DontFlatten = 0x00000002,
619};
620
621enum class LoopControlShift : unsigned {
622    Unroll = 0,
623    DontUnroll = 1,
624    DependencyInfinite = 2,
625    DependencyLength = 3,
626    MinIterations = 4,
627    MaxIterations = 5,
628    IterationMultiple = 6,
629    PeelCount = 7,
630    PartialCount = 8,
631    Max = 0x7fffffff,
632};
633
634enum class LoopControlMask : unsigned {
635    MaskNone = 0,
636    Unroll = 0x00000001,
637    DontUnroll = 0x00000002,
638    DependencyInfinite = 0x00000004,
639    DependencyLength = 0x00000008,
640    MinIterations = 0x00000010,
641    MaxIterations = 0x00000020,
642    IterationMultiple = 0x00000040,
643    PeelCount = 0x00000080,
644    PartialCount = 0x00000100,
645};
646
647enum class FunctionControlShift : unsigned {
648    Inline = 0,
649    DontInline = 1,
650    Pure = 2,
651    Const = 3,
652    Max = 0x7fffffff,
653};
654
655enum class FunctionControlMask : unsigned {
656    MaskNone = 0,
657    Inline = 0x00000001,
658    DontInline = 0x00000002,
659    Pure = 0x00000004,
660    Const = 0x00000008,
661};
662
663enum class MemorySemanticsShift : unsigned {
664    Acquire = 1,
665    Release = 2,
666    AcquireRelease = 3,
667    SequentiallyConsistent = 4,
668    UniformMemory = 6,
669    SubgroupMemory = 7,
670    WorkgroupMemory = 8,
671    CrossWorkgroupMemory = 9,
672    AtomicCounterMemory = 10,
673    ImageMemory = 11,
674    OutputMemory = 12,
675    OutputMemoryKHR = 12,
676    MakeAvailable = 13,
677    MakeAvailableKHR = 13,
678    MakeVisible = 14,
679    MakeVisibleKHR = 14,
680    Volatile = 15,
681    Max = 0x7fffffff,
682};
683
684enum class MemorySemanticsMask : unsigned {
685    MaskNone = 0,
686    Acquire = 0x00000002,
687    Release = 0x00000004,
688    AcquireRelease = 0x00000008,
689    SequentiallyConsistent = 0x00000010,
690    UniformMemory = 0x00000040,
691    SubgroupMemory = 0x00000080,
692    WorkgroupMemory = 0x00000100,
693    CrossWorkgroupMemory = 0x00000200,
694    AtomicCounterMemory = 0x00000400,
695    ImageMemory = 0x00000800,
696    OutputMemory = 0x00001000,
697    OutputMemoryKHR = 0x00001000,
698    MakeAvailable = 0x00002000,
699    MakeAvailableKHR = 0x00002000,
700    MakeVisible = 0x00004000,
701    MakeVisibleKHR = 0x00004000,
702    Volatile = 0x00008000,
703};
704
705enum class MemoryAccessShift : unsigned {
706    Volatile = 0,
707    Aligned = 1,
708    Nontemporal = 2,
709    MakePointerAvailable = 3,
710    MakePointerAvailableKHR = 3,
711    MakePointerVisible = 4,
712    MakePointerVisibleKHR = 4,
713    NonPrivatePointer = 5,
714    NonPrivatePointerKHR = 5,
715    Max = 0x7fffffff,
716};
717
718enum class MemoryAccessMask : unsigned {
719    MaskNone = 0,
720    Volatile = 0x00000001,
721    Aligned = 0x00000002,
722    Nontemporal = 0x00000004,
723    MakePointerAvailable = 0x00000008,
724    MakePointerAvailableKHR = 0x00000008,
725    MakePointerVisible = 0x00000010,
726    MakePointerVisibleKHR = 0x00000010,
727    NonPrivatePointer = 0x00000020,
728    NonPrivatePointerKHR = 0x00000020,
729};
730
731enum class Scope : unsigned {
732    CrossDevice = 0,
733    Device = 1,
734    Workgroup = 2,
735    Subgroup = 3,
736    Invocation = 4,
737    QueueFamily = 5,
738    QueueFamilyKHR = 5,
739    ShaderCallKHR = 6,
740    Max = 0x7fffffff,
741};
742
743enum class GroupOperation : unsigned {
744    Reduce = 0,
745    InclusiveScan = 1,
746    ExclusiveScan = 2,
747    ClusteredReduce = 3,
748    PartitionedReduceNV = 6,
749    PartitionedInclusiveScanNV = 7,
750    PartitionedExclusiveScanNV = 8,
751    Max = 0x7fffffff,
752};
753
754enum class KernelEnqueueFlags : unsigned {
755    NoWait = 0,
756    WaitKernel = 1,
757    WaitWorkGroup = 2,
758    Max = 0x7fffffff,
759};
760
761enum class KernelProfilingInfoShift : unsigned {
762    CmdExecTime = 0,
763    Max = 0x7fffffff,
764};
765
766enum class KernelProfilingInfoMask : unsigned {
767    MaskNone = 0,
768    CmdExecTime = 0x00000001,
769};
770
771enum class Capability : unsigned {
772    Matrix = 0,
773    Shader = 1,
774    Geometry = 2,
775    Tessellation = 3,
776    Addresses = 4,
777    Linkage = 5,
778    Kernel = 6,
779    Vector16 = 7,
780    Float16Buffer = 8,
781    Float16 = 9,
782    Float64 = 10,
783    Int64 = 11,
784    Int64Atomics = 12,
785    ImageBasic = 13,
786    ImageReadWrite = 14,
787    ImageMipmap = 15,
788    Pipes = 17,
789    Groups = 18,
790    DeviceEnqueue = 19,
791    LiteralSampler = 20,
792    AtomicStorage = 21,
793    Int16 = 22,
794    TessellationPointSize = 23,
795    GeometryPointSize = 24,
796    ImageGatherExtended = 25,
797    StorageImageMultisample = 27,
798    UniformBufferArrayDynamicIndexing = 28,
799    SampledImageArrayDynamicIndexing = 29,
800    StorageBufferArrayDynamicIndexing = 30,
801    StorageImageArrayDynamicIndexing = 31,
802    ClipDistance = 32,
803    CullDistance = 33,
804    ImageCubeArray = 34,
805    SampleRateShading = 35,
806    ImageRect = 36,
807    SampledRect = 37,
808    GenericPointer = 38,
809    Int8 = 39,
810    InputAttachment = 40,
811    SparseResidency = 41,
812    MinLod = 42,
813    Sampled1D = 43,
814    Image1D = 44,
815    SampledCubeArray = 45,
816    SampledBuffer = 46,
817    ImageBuffer = 47,
818    ImageMSArray = 48,
819    StorageImageExtendedFormats = 49,
820    ImageQuery = 50,
821    DerivativeControl = 51,
822    InterpolationFunction = 52,
823    TransformFeedback = 53,
824    GeometryStreams = 54,
825    StorageImageReadWithoutFormat = 55,
826    StorageImageWriteWithoutFormat = 56,
827    MultiViewport = 57,
828    SubgroupDispatch = 58,
829    NamedBarrier = 59,
830    PipeStorage = 60,
831    GroupNonUniform = 61,
832    GroupNonUniformVote = 62,
833    GroupNonUniformArithmetic = 63,
834    GroupNonUniformBallot = 64,
835    GroupNonUniformShuffle = 65,
836    GroupNonUniformShuffleRelative = 66,
837    GroupNonUniformClustered = 67,
838    GroupNonUniformQuad = 68,
839    ShaderLayer = 69,
840    ShaderViewportIndex = 70,
841    SubgroupBallotKHR = 4423,
842    DrawParameters = 4427,
843    SubgroupVoteKHR = 4431,
844    StorageBuffer16BitAccess = 4433,
845    StorageUniformBufferBlock16 = 4433,
846    StorageUniform16 = 4434,
847    UniformAndStorageBuffer16BitAccess = 4434,
848    StoragePushConstant16 = 4435,
849    StorageInputOutput16 = 4436,
850    DeviceGroup = 4437,
851    MultiView = 4439,
852    VariablePointersStorageBuffer = 4441,
853    VariablePointers = 4442,
854    AtomicStorageOps = 4445,
855    SampleMaskPostDepthCoverage = 4447,
856    StorageBuffer8BitAccess = 4448,
857    UniformAndStorageBuffer8BitAccess = 4449,
858    StoragePushConstant8 = 4450,
859    DenormPreserve = 4464,
860    DenormFlushToZero = 4465,
861    SignedZeroInfNanPreserve = 4466,
862    RoundingModeRTE = 4467,
863    RoundingModeRTZ = 4468,
864    RayQueryProvisionalKHR = 4471,
865    RayTraversalPrimitiveCullingProvisionalKHR = 4478,
866    Float16ImageAMD = 5008,
867    ImageGatherBiasLodAMD = 5009,
868    FragmentMaskAMD = 5010,
869    StencilExportEXT = 5013,
870    ImageReadWriteLodAMD = 5015,
871    ShaderClockKHR = 5055,
872    SampleMaskOverrideCoverageNV = 5249,
873    GeometryShaderPassthroughNV = 5251,
874    ShaderViewportIndexLayerEXT = 5254,
875    ShaderViewportIndexLayerNV = 5254,
876    ShaderViewportMaskNV = 5255,
877    ShaderStereoViewNV = 5259,
878    PerViewAttributesNV = 5260,
879    FragmentFullyCoveredEXT = 5265,
880    MeshShadingNV = 5266,
881    ImageFootprintNV = 5282,
882    FragmentBarycentricNV = 5284,
883    ComputeDerivativeGroupQuadsNV = 5288,
884    FragmentDensityEXT = 5291,
885    ShadingRateNV = 5291,
886    GroupNonUniformPartitionedNV = 5297,
887    ShaderNonUniform = 5301,
888    ShaderNonUniformEXT = 5301,
889    RuntimeDescriptorArray = 5302,
890    RuntimeDescriptorArrayEXT = 5302,
891    InputAttachmentArrayDynamicIndexing = 5303,
892    InputAttachmentArrayDynamicIndexingEXT = 5303,
893    UniformTexelBufferArrayDynamicIndexing = 5304,
894    UniformTexelBufferArrayDynamicIndexingEXT = 5304,
895    StorageTexelBufferArrayDynamicIndexing = 5305,
896    StorageTexelBufferArrayDynamicIndexingEXT = 5305,
897    UniformBufferArrayNonUniformIndexing = 5306,
898    UniformBufferArrayNonUniformIndexingEXT = 5306,
899    SampledImageArrayNonUniformIndexing = 5307,
900    SampledImageArrayNonUniformIndexingEXT = 5307,
901    StorageBufferArrayNonUniformIndexing = 5308,
902    StorageBufferArrayNonUniformIndexingEXT = 5308,
903    StorageImageArrayNonUniformIndexing = 5309,
904    StorageImageArrayNonUniformIndexingEXT = 5309,
905    InputAttachmentArrayNonUniformIndexing = 5310,
906    InputAttachmentArrayNonUniformIndexingEXT = 5310,
907    UniformTexelBufferArrayNonUniformIndexing = 5311,
908    UniformTexelBufferArrayNonUniformIndexingEXT = 5311,
909    StorageTexelBufferArrayNonUniformIndexing = 5312,
910    StorageTexelBufferArrayNonUniformIndexingEXT = 5312,
911    RayTracingNV = 5340,
912    VulkanMemoryModel = 5345,
913    VulkanMemoryModelKHR = 5345,
914    VulkanMemoryModelDeviceScope = 5346,
915    VulkanMemoryModelDeviceScopeKHR = 5346,
916    PhysicalStorageBufferAddresses = 5347,
917    PhysicalStorageBufferAddressesEXT = 5347,
918    ComputeDerivativeGroupLinearNV = 5350,
919    RayTracingProvisionalKHR = 5353,
920    CooperativeMatrixNV = 5357,
921    FragmentShaderSampleInterlockEXT = 5363,
922    FragmentShaderShadingRateInterlockEXT = 5372,
923    ShaderSMBuiltinsNV = 5373,
924    FragmentShaderPixelInterlockEXT = 5378,
925    DemoteToHelperInvocationEXT = 5379,
926    SubgroupShuffleINTEL = 5568,
927    SubgroupBufferBlockIOINTEL = 5569,
928    SubgroupImageBlockIOINTEL = 5570,
929    SubgroupImageMediaBlockIOINTEL = 5579,
930    IntegerFunctions2INTEL = 5584,
931    SubgroupAvcMotionEstimationINTEL = 5696,
932    SubgroupAvcMotionEstimationIntraINTEL = 5697,
933    SubgroupAvcMotionEstimationChromaINTEL = 5698,
934    Max = 0x7fffffff,
935};
936
937enum class RayFlagsShift : unsigned {
938    OpaqueKHR = 0,
939    NoOpaqueKHR = 1,
940    TerminateOnFirstHitKHR = 2,
941    SkipClosestHitShaderKHR = 3,
942    CullBackFacingTrianglesKHR = 4,
943    CullFrontFacingTrianglesKHR = 5,
944    CullOpaqueKHR = 6,
945    CullNoOpaqueKHR = 7,
946    SkipTrianglesKHR = 8,
947    SkipAABBsKHR = 9,
948    Max = 0x7fffffff,
949};
950
951enum class RayFlagsMask : unsigned {
952    MaskNone = 0,
953    OpaqueKHR = 0x00000001,
954    NoOpaqueKHR = 0x00000002,
955    TerminateOnFirstHitKHR = 0x00000004,
956    SkipClosestHitShaderKHR = 0x00000008,
957    CullBackFacingTrianglesKHR = 0x00000010,
958    CullFrontFacingTrianglesKHR = 0x00000020,
959    CullOpaqueKHR = 0x00000040,
960    CullNoOpaqueKHR = 0x00000080,
961    SkipTrianglesKHR = 0x00000100,
962    SkipAABBsKHR = 0x00000200,
963};
964
965enum class RayQueryIntersection : unsigned {
966    RayQueryCandidateIntersectionKHR = 0,
967    RayQueryCommittedIntersectionKHR = 1,
968    Max = 0x7fffffff,
969};
970
971enum class RayQueryCommittedIntersectionType : unsigned {
972    RayQueryCommittedIntersectionNoneKHR = 0,
973    RayQueryCommittedIntersectionTriangleKHR = 1,
974    RayQueryCommittedIntersectionGeneratedKHR = 2,
975    Max = 0x7fffffff,
976};
977
978enum class RayQueryCandidateIntersectionType : unsigned {
979    RayQueryCandidateIntersectionTriangleKHR = 0,
980    RayQueryCandidateIntersectionAABBKHR = 1,
981    Max = 0x7fffffff,
982};
983
984enum class Op : unsigned {
985    OpNop = 0,
986    OpUndef = 1,
987    OpSourceContinued = 2,
988    OpSource = 3,
989    OpSourceExtension = 4,
990    OpName = 5,
991    OpMemberName = 6,
992    OpString = 7,
993    OpLine = 8,
994    OpExtension = 10,
995    OpExtInstImport = 11,
996    OpExtInst = 12,
997    OpMemoryModel = 14,
998    OpEntryPoint = 15,
999    OpExecutionMode = 16,
1000    OpCapability = 17,
1001    OpTypeVoid = 19,
1002    OpTypeBool = 20,
1003    OpTypeInt = 21,
1004    OpTypeFloat = 22,
1005    OpTypeVector = 23,
1006    OpTypeMatrix = 24,
1007    OpTypeImage = 25,
1008    OpTypeSampler = 26,
1009    OpTypeSampledImage = 27,
1010    OpTypeArray = 28,
1011    OpTypeRuntimeArray = 29,
1012    OpTypeStruct = 30,
1013    OpTypeOpaque = 31,
1014    OpTypePointer = 32,
1015    OpTypeFunction = 33,
1016    OpTypeEvent = 34,
1017    OpTypeDeviceEvent = 35,
1018    OpTypeReserveId = 36,
1019    OpTypeQueue = 37,
1020    OpTypePipe = 38,
1021    OpTypeForwardPointer = 39,
1022    OpConstantTrue = 41,
1023    OpConstantFalse = 42,
1024    OpConstant = 43,
1025    OpConstantComposite = 44,
1026    OpConstantSampler = 45,
1027    OpConstantNull = 46,
1028    OpSpecConstantTrue = 48,
1029    OpSpecConstantFalse = 49,
1030    OpSpecConstant = 50,
1031    OpSpecConstantComposite = 51,
1032    OpSpecConstantOp = 52,
1033    OpFunction = 54,
1034    OpFunctionParameter = 55,
1035    OpFunctionEnd = 56,
1036    OpFunctionCall = 57,
1037    OpVariable = 59,
1038    OpImageTexelPointer = 60,
1039    OpLoad = 61,
1040    OpStore = 62,
1041    OpCopyMemory = 63,
1042    OpCopyMemorySized = 64,
1043    OpAccessChain = 65,
1044    OpInBoundsAccessChain = 66,
1045    OpPtrAccessChain = 67,
1046    OpArrayLength = 68,
1047    OpGenericPtrMemSemantics = 69,
1048    OpInBoundsPtrAccessChain = 70,
1049    OpDecorate = 71,
1050    OpMemberDecorate = 72,
1051    OpDecorationGroup = 73,
1052    OpGroupDecorate = 74,
1053    OpGroupMemberDecorate = 75,
1054    OpVectorExtractDynamic = 77,
1055    OpVectorInsertDynamic = 78,
1056    OpVectorShuffle = 79,
1057    OpCompositeConstruct = 80,
1058    OpCompositeExtract = 81,
1059    OpCompositeInsert = 82,
1060    OpCopyObject = 83,
1061    OpTranspose = 84,
1062    OpSampledImage = 86,
1063    OpImageSampleImplicitLod = 87,
1064    OpImageSampleExplicitLod = 88,
1065    OpImageSampleDrefImplicitLod = 89,
1066    OpImageSampleDrefExplicitLod = 90,
1067    OpImageSampleProjImplicitLod = 91,
1068    OpImageSampleProjExplicitLod = 92,
1069    OpImageSampleProjDrefImplicitLod = 93,
1070    OpImageSampleProjDrefExplicitLod = 94,
1071    OpImageFetch = 95,
1072    OpImageGather = 96,
1073    OpImageDrefGather = 97,
1074    OpImageRead = 98,
1075    OpImageWrite = 99,
1076    OpImage = 100,
1077    OpImageQueryFormat = 101,
1078    OpImageQueryOrder = 102,
1079    OpImageQuerySizeLod = 103,
1080    OpImageQuerySize = 104,
1081    OpImageQueryLod = 105,
1082    OpImageQueryLevels = 106,
1083    OpImageQuerySamples = 107,
1084    OpConvertFToU = 109,
1085    OpConvertFToS = 110,
1086    OpConvertSToF = 111,
1087    OpConvertUToF = 112,
1088    OpUConvert = 113,
1089    OpSConvert = 114,
1090    OpFConvert = 115,
1091    OpQuantizeToF16 = 116,
1092    OpConvertPtrToU = 117,
1093    OpSatConvertSToU = 118,
1094    OpSatConvertUToS = 119,
1095    OpConvertUToPtr = 120,
1096    OpPtrCastToGeneric = 121,
1097    OpGenericCastToPtr = 122,
1098    OpGenericCastToPtrExplicit = 123,
1099    OpBitcast = 124,
1100    OpSNegate = 126,
1101    OpFNegate = 127,
1102    OpIAdd = 128,
1103    OpFAdd = 129,
1104    OpISub = 130,
1105    OpFSub = 131,
1106    OpIMul = 132,
1107    OpFMul = 133,
1108    OpUDiv = 134,
1109    OpSDiv = 135,
1110    OpFDiv = 136,
1111    OpUMod = 137,
1112    OpSRem = 138,
1113    OpSMod = 139,
1114    OpFRem = 140,
1115    OpFMod = 141,
1116    OpVectorTimesScalar = 142,
1117    OpMatrixTimesScalar = 143,
1118    OpVectorTimesMatrix = 144,
1119    OpMatrixTimesVector = 145,
1120    OpMatrixTimesMatrix = 146,
1121    OpOuterProduct = 147,
1122    OpDot = 148,
1123    OpIAddCarry = 149,
1124    OpISubBorrow = 150,
1125    OpUMulExtended = 151,
1126    OpSMulExtended = 152,
1127    OpAny = 154,
1128    OpAll = 155,
1129    OpIsNan = 156,
1130    OpIsInf = 157,
1131    OpIsFinite = 158,
1132    OpIsNormal = 159,
1133    OpSignBitSet = 160,
1134    OpLessOrGreater = 161,
1135    OpOrdered = 162,
1136    OpUnordered = 163,
1137    OpLogicalEqual = 164,
1138    OpLogicalNotEqual = 165,
1139    OpLogicalOr = 166,
1140    OpLogicalAnd = 167,
1141    OpLogicalNot = 168,
1142    OpSelect = 169,
1143    OpIEqual = 170,
1144    OpINotEqual = 171,
1145    OpUGreaterThan = 172,
1146    OpSGreaterThan = 173,
1147    OpUGreaterThanEqual = 174,
1148    OpSGreaterThanEqual = 175,
1149    OpULessThan = 176,
1150    OpSLessThan = 177,
1151    OpULessThanEqual = 178,
1152    OpSLessThanEqual = 179,
1153    OpFOrdEqual = 180,
1154    OpFUnordEqual = 181,
1155    OpFOrdNotEqual = 182,
1156    OpFUnordNotEqual = 183,
1157    OpFOrdLessThan = 184,
1158    OpFUnordLessThan = 185,
1159    OpFOrdGreaterThan = 186,
1160    OpFUnordGreaterThan = 187,
1161    OpFOrdLessThanEqual = 188,
1162    OpFUnordLessThanEqual = 189,
1163    OpFOrdGreaterThanEqual = 190,
1164    OpFUnordGreaterThanEqual = 191,
1165    OpShiftRightLogical = 194,
1166    OpShiftRightArithmetic = 195,
1167    OpShiftLeftLogical = 196,
1168    OpBitwiseOr = 197,
1169    OpBitwiseXor = 198,
1170    OpBitwiseAnd = 199,
1171    OpNot = 200,
1172    OpBitFieldInsert = 201,
1173    OpBitFieldSExtract = 202,
1174    OpBitFieldUExtract = 203,
1175    OpBitReverse = 204,
1176    OpBitCount = 205,
1177    OpDPdx = 207,
1178    OpDPdy = 208,
1179    OpFwidth = 209,
1180    OpDPdxFine = 210,
1181    OpDPdyFine = 211,
1182    OpFwidthFine = 212,
1183    OpDPdxCoarse = 213,
1184    OpDPdyCoarse = 214,
1185    OpFwidthCoarse = 215,
1186    OpEmitVertex = 218,
1187    OpEndPrimitive = 219,
1188    OpEmitStreamVertex = 220,
1189    OpEndStreamPrimitive = 221,
1190    OpControlBarrier = 224,
1191    OpMemoryBarrier = 225,
1192    OpAtomicLoad = 227,
1193    OpAtomicStore = 228,
1194    OpAtomicExchange = 229,
1195    OpAtomicCompareExchange = 230,
1196    OpAtomicCompareExchangeWeak = 231,
1197    OpAtomicIIncrement = 232,
1198    OpAtomicIDecrement = 233,
1199    OpAtomicIAdd = 234,
1200    OpAtomicISub = 235,
1201    OpAtomicSMin = 236,
1202    OpAtomicUMin = 237,
1203    OpAtomicSMax = 238,
1204    OpAtomicUMax = 239,
1205    OpAtomicAnd = 240,
1206    OpAtomicOr = 241,
1207    OpAtomicXor = 242,
1208    OpPhi = 245,
1209    OpLoopMerge = 246,
1210    OpSelectionMerge = 247,
1211    OpLabel = 248,
1212    OpBranch = 249,
1213    OpBranchConditional = 250,
1214    OpSwitch = 251,
1215    OpKill = 252,
1216    OpReturn = 253,
1217    OpReturnValue = 254,
1218    OpUnreachable = 255,
1219    OpLifetimeStart = 256,
1220    OpLifetimeStop = 257,
1221    OpGroupAsyncCopy = 259,
1222    OpGroupWaitEvents = 260,
1223    OpGroupAll = 261,
1224    OpGroupAny = 262,
1225    OpGroupBroadcast = 263,
1226    OpGroupIAdd = 264,
1227    OpGroupFAdd = 265,
1228    OpGroupFMin = 266,
1229    OpGroupUMin = 267,
1230    OpGroupSMin = 268,
1231    OpGroupFMax = 269,
1232    OpGroupUMax = 270,
1233    OpGroupSMax = 271,
1234    OpReadPipe = 274,
1235    OpWritePipe = 275,
1236    OpReservedReadPipe = 276,
1237    OpReservedWritePipe = 277,
1238    OpReserveReadPipePackets = 278,
1239    OpReserveWritePipePackets = 279,
1240    OpCommitReadPipe = 280,
1241    OpCommitWritePipe = 281,
1242    OpIsValidReserveId = 282,
1243    OpGetNumPipePackets = 283,
1244    OpGetMaxPipePackets = 284,
1245    OpGroupReserveReadPipePackets = 285,
1246    OpGroupReserveWritePipePackets = 286,
1247    OpGroupCommitReadPipe = 287,
1248    OpGroupCommitWritePipe = 288,
1249    OpEnqueueMarker = 291,
1250    OpEnqueueKernel = 292,
1251    OpGetKernelNDrangeSubGroupCount = 293,
1252    OpGetKernelNDrangeMaxSubGroupSize = 294,
1253    OpGetKernelWorkGroupSize = 295,
1254    OpGetKernelPreferredWorkGroupSizeMultiple = 296,
1255    OpRetainEvent = 297,
1256    OpReleaseEvent = 298,
1257    OpCreateUserEvent = 299,
1258    OpIsValidEvent = 300,
1259    OpSetUserEventStatus = 301,
1260    OpCaptureEventProfilingInfo = 302,
1261    OpGetDefaultQueue = 303,
1262    OpBuildNDRange = 304,
1263    OpImageSparseSampleImplicitLod = 305,
1264    OpImageSparseSampleExplicitLod = 306,
1265    OpImageSparseSampleDrefImplicitLod = 307,
1266    OpImageSparseSampleDrefExplicitLod = 308,
1267    OpImageSparseSampleProjImplicitLod = 309,
1268    OpImageSparseSampleProjExplicitLod = 310,
1269    OpImageSparseSampleProjDrefImplicitLod = 311,
1270    OpImageSparseSampleProjDrefExplicitLod = 312,
1271    OpImageSparseFetch = 313,
1272    OpImageSparseGather = 314,
1273    OpImageSparseDrefGather = 315,
1274    OpImageSparseTexelsResident = 316,
1275    OpNoLine = 317,
1276    OpAtomicFlagTestAndSet = 318,
1277    OpAtomicFlagClear = 319,
1278    OpImageSparseRead = 320,
1279    OpSizeOf = 321,
1280    OpTypePipeStorage = 322,
1281    OpConstantPipeStorage = 323,
1282    OpCreatePipeFromPipeStorage = 324,
1283    OpGetKernelLocalSizeForSubgroupCount = 325,
1284    OpGetKernelMaxNumSubgroups = 326,
1285    OpTypeNamedBarrier = 327,
1286    OpNamedBarrierInitialize = 328,
1287    OpMemoryNamedBarrier = 329,
1288    OpModuleProcessed = 330,
1289    OpExecutionModeId = 331,
1290    OpDecorateId = 332,
1291    OpGroupNonUniformElect = 333,
1292    OpGroupNonUniformAll = 334,
1293    OpGroupNonUniformAny = 335,
1294    OpGroupNonUniformAllEqual = 336,
1295    OpGroupNonUniformBroadcast = 337,
1296    OpGroupNonUniformBroadcastFirst = 338,
1297    OpGroupNonUniformBallot = 339,
1298    OpGroupNonUniformInverseBallot = 340,
1299    OpGroupNonUniformBallotBitExtract = 341,
1300    OpGroupNonUniformBallotBitCount = 342,
1301    OpGroupNonUniformBallotFindLSB = 343,
1302    OpGroupNonUniformBallotFindMSB = 344,
1303    OpGroupNonUniformShuffle = 345,
1304    OpGroupNonUniformShuffleXor = 346,
1305    OpGroupNonUniformShuffleUp = 347,
1306    OpGroupNonUniformShuffleDown = 348,
1307    OpGroupNonUniformIAdd = 349,
1308    OpGroupNonUniformFAdd = 350,
1309    OpGroupNonUniformIMul = 351,
1310    OpGroupNonUniformFMul = 352,
1311    OpGroupNonUniformSMin = 353,
1312    OpGroupNonUniformUMin = 354,
1313    OpGroupNonUniformFMin = 355,
1314    OpGroupNonUniformSMax = 356,
1315    OpGroupNonUniformUMax = 357,
1316    OpGroupNonUniformFMax = 358,
1317    OpGroupNonUniformBitwiseAnd = 359,
1318    OpGroupNonUniformBitwiseOr = 360,
1319    OpGroupNonUniformBitwiseXor = 361,
1320    OpGroupNonUniformLogicalAnd = 362,
1321    OpGroupNonUniformLogicalOr = 363,
1322    OpGroupNonUniformLogicalXor = 364,
1323    OpGroupNonUniformQuadBroadcast = 365,
1324    OpGroupNonUniformQuadSwap = 366,
1325    OpCopyLogical = 400,
1326    OpPtrEqual = 401,
1327    OpPtrNotEqual = 402,
1328    OpPtrDiff = 403,
1329    OpSubgroupBallotKHR = 4421,
1330    OpSubgroupFirstInvocationKHR = 4422,
1331    OpSubgroupAllKHR = 4428,
1332    OpSubgroupAnyKHR = 4429,
1333    OpSubgroupAllEqualKHR = 4430,
1334    OpSubgroupReadInvocationKHR = 4432,
1335    OpTypeRayQueryProvisionalKHR = 4472,
1336    OpRayQueryInitializeKHR = 4473,
1337    OpRayQueryTerminateKHR = 4474,
1338    OpRayQueryGenerateIntersectionKHR = 4475,
1339    OpRayQueryConfirmIntersectionKHR = 4476,
1340    OpRayQueryProceedKHR = 4477,
1341    OpRayQueryGetIntersectionTypeKHR = 4479,
1342    OpGroupIAddNonUniformAMD = 5000,
1343    OpGroupFAddNonUniformAMD = 5001,
1344    OpGroupFMinNonUniformAMD = 5002,
1345    OpGroupUMinNonUniformAMD = 5003,
1346    OpGroupSMinNonUniformAMD = 5004,
1347    OpGroupFMaxNonUniformAMD = 5005,
1348    OpGroupUMaxNonUniformAMD = 5006,
1349    OpGroupSMaxNonUniformAMD = 5007,
1350    OpFragmentMaskFetchAMD = 5011,
1351    OpFragmentFetchAMD = 5012,
1352    OpReadClockKHR = 5056,
1353    OpImageSampleFootprintNV = 5283,
1354    OpGroupNonUniformPartitionNV = 5296,
1355    OpWritePackedPrimitiveIndices4x8NV = 5299,
1356    OpReportIntersectionKHR = 5334,
1357    OpReportIntersectionNV = 5334,
1358    OpIgnoreIntersectionKHR = 5335,
1359    OpIgnoreIntersectionNV = 5335,
1360    OpTerminateRayKHR = 5336,
1361    OpTerminateRayNV = 5336,
1362    OpTraceNV = 5337,
1363    OpTraceRayKHR = 5337,
1364    OpTypeAccelerationStructureKHR = 5341,
1365    OpTypeAccelerationStructureNV = 5341,
1366    OpExecuteCallableKHR = 5344,
1367    OpExecuteCallableNV = 5344,
1368    OpTypeCooperativeMatrixNV = 5358,
1369    OpCooperativeMatrixLoadNV = 5359,
1370    OpCooperativeMatrixStoreNV = 5360,
1371    OpCooperativeMatrixMulAddNV = 5361,
1372    OpCooperativeMatrixLengthNV = 5362,
1373    OpBeginInvocationInterlockEXT = 5364,
1374    OpEndInvocationInterlockEXT = 5365,
1375    OpDemoteToHelperInvocationEXT = 5380,
1376    OpIsHelperInvocationEXT = 5381,
1377    OpSubgroupShuffleINTEL = 5571,
1378    OpSubgroupShuffleDownINTEL = 5572,
1379    OpSubgroupShuffleUpINTEL = 5573,
1380    OpSubgroupShuffleXorINTEL = 5574,
1381    OpSubgroupBlockReadINTEL = 5575,
1382    OpSubgroupBlockWriteINTEL = 5576,
1383    OpSubgroupImageBlockReadINTEL = 5577,
1384    OpSubgroupImageBlockWriteINTEL = 5578,
1385    OpSubgroupImageMediaBlockReadINTEL = 5580,
1386    OpSubgroupImageMediaBlockWriteINTEL = 5581,
1387    OpUCountLeadingZerosINTEL = 5585,
1388    OpUCountTrailingZerosINTEL = 5586,
1389    OpAbsISubINTEL = 5587,
1390    OpAbsUSubINTEL = 5588,
1391    OpIAddSatINTEL = 5589,
1392    OpUAddSatINTEL = 5590,
1393    OpIAverageINTEL = 5591,
1394    OpUAverageINTEL = 5592,
1395    OpIAverageRoundedINTEL = 5593,
1396    OpUAverageRoundedINTEL = 5594,
1397    OpISubSatINTEL = 5595,
1398    OpUSubSatINTEL = 5596,
1399    OpIMul32x16INTEL = 5597,
1400    OpUMul32x16INTEL = 5598,
1401    OpDecorateString = 5632,
1402    OpDecorateStringGOOGLE = 5632,
1403    OpMemberDecorateString = 5633,
1404    OpMemberDecorateStringGOOGLE = 5633,
1405    OpVmeImageINTEL = 5699,
1406    OpTypeVmeImageINTEL = 5700,
1407    OpTypeAvcImePayloadINTEL = 5701,
1408    OpTypeAvcRefPayloadINTEL = 5702,
1409    OpTypeAvcSicPayloadINTEL = 5703,
1410    OpTypeAvcMcePayloadINTEL = 5704,
1411    OpTypeAvcMceResultINTEL = 5705,
1412    OpTypeAvcImeResultINTEL = 5706,
1413    OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
1414    OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
1415    OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
1416    OpTypeAvcImeDualReferenceStreaminINTEL = 5710,
1417    OpTypeAvcRefResultINTEL = 5711,
1418    OpTypeAvcSicResultINTEL = 5712,
1419    OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
1420    OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
1421    OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
1422    OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
1423    OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
1424    OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
1425    OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
1426    OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
1427    OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
1428    OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
1429    OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
1430    OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
1431    OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
1432    OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
1433    OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
1434    OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
1435    OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
1436    OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
1437    OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
1438    OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
1439    OpSubgroupAvcMceConvertToImeResultINTEL = 5733,
1440    OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
1441    OpSubgroupAvcMceConvertToRefResultINTEL = 5735,
1442    OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
1443    OpSubgroupAvcMceConvertToSicResultINTEL = 5737,
1444    OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
1445    OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
1446    OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
1447    OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
1448    OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
1449    OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
1450    OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
1451    OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
1452    OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
1453    OpSubgroupAvcImeInitializeINTEL = 5747,
1454    OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
1455    OpSubgroupAvcImeSetDualReferenceINTEL = 5749,
1456    OpSubgroupAvcImeRefWindowSizeINTEL = 5750,
1457    OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
1458    OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
1459    OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
1460    OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
1461    OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
1462    OpSubgroupAvcImeSetWeightedSadINTEL = 5756,
1463    OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
1464    OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
1465    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
1466    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
1467    OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
1468    OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
1469    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
1470    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
1471    OpSubgroupAvcImeConvertToMceResultINTEL = 5765,
1472    OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
1473    OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
1474    OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
1475    OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
1476    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
1477    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
1478    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
1479    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
1480    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
1481    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
1482    OpSubgroupAvcImeGetBorderReachedINTEL = 5776,
1483    OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
1484    OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
1485    OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
1486    OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
1487    OpSubgroupAvcFmeInitializeINTEL = 5781,
1488    OpSubgroupAvcBmeInitializeINTEL = 5782,
1489    OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
1490    OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
1491    OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
1492    OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
1493    OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
1494    OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
1495    OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
1496    OpSubgroupAvcRefConvertToMceResultINTEL = 5790,
1497    OpSubgroupAvcSicInitializeINTEL = 5791,
1498    OpSubgroupAvcSicConfigureSkcINTEL = 5792,
1499    OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
1500    OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
1501    OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
1502    OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
1503    OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
1504    OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
1505    OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
1506    OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
1507    OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
1508    OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
1509    OpSubgroupAvcSicEvaluateIpeINTEL = 5803,
1510    OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
1511    OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
1512    OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
1513    OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
1514    OpSubgroupAvcSicConvertToMceResultINTEL = 5808,
1515    OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
1516    OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
1517    OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
1518    OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
1519    OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
1520    OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
1521    OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
1522    OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
1523    OpRayQueryGetRayTMinKHR = 6016,
1524    OpRayQueryGetRayFlagsKHR = 6017,
1525    OpRayQueryGetIntersectionTKHR = 6018,
1526    OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
1527    OpRayQueryGetIntersectionInstanceIdKHR = 6020,
1528    OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
1529    OpRayQueryGetIntersectionGeometryIndexKHR = 6022,
1530    OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
1531    OpRayQueryGetIntersectionBarycentricsKHR = 6024,
1532    OpRayQueryGetIntersectionFrontFaceKHR = 6025,
1533    OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
1534    OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
1535    OpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
1536    OpRayQueryGetWorldRayDirectionKHR = 6029,
1537    OpRayQueryGetWorldRayOriginKHR = 6030,
1538    OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
1539    OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
1540    Max = 0x7fffffff,
1541};
1542
1543#ifdef SPV_ENABLE_UTILITY_CODE
1544inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
1545    *hasResult = *hasResultType = false;
1546    switch (opcode) {
1547    default: /* unknown opcode */ break;
1548    case Op::OpNop: *hasResult = false; *hasResultType = false; break;
1549    case Op::OpUndef: *hasResult = true; *hasResultType = true; break;
1550    case Op::OpSourceContinued: *hasResult = false; *hasResultType = false; break;
1551    case Op::OpSource: *hasResult = false; *hasResultType = false; break;
1552    case Op::OpSourceExtension: *hasResult = false; *hasResultType = false; break;
1553    case Op::OpName: *hasResult = false; *hasResultType = false; break;
1554    case Op::OpMemberName: *hasResult = false; *hasResultType = false; break;
1555    case Op::OpString: *hasResult = true; *hasResultType = false; break;
1556    case Op::OpLine: *hasResult = false; *hasResultType = false; break;
1557    case Op::OpExtension: *hasResult = false; *hasResultType = false; break;
1558    case Op::OpExtInstImport: *hasResult = true; *hasResultType = false; break;
1559    case Op::OpExtInst: *hasResult = true; *hasResultType = true; break;
1560    case Op::OpMemoryModel: *hasResult = false; *hasResultType = false; break;
1561    case Op::OpEntryPoint: *hasResult = false; *hasResultType = false; break;
1562    case Op::OpExecutionMode: *hasResult = false; *hasResultType = false; break;
1563    case Op::OpCapability: *hasResult = false; *hasResultType = false; break;
1564    case Op::OpTypeVoid: *hasResult = true; *hasResultType = false; break;
1565    case Op::OpTypeBool: *hasResult = true; *hasResultType = false; break;
1566    case Op::OpTypeInt: *hasResult = true; *hasResultType = false; break;
1567    case Op::OpTypeFloat: *hasResult = true; *hasResultType = false; break;
1568    case Op::OpTypeVector: *hasResult = true; *hasResultType = false; break;
1569    case Op::OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
1570    case Op::OpTypeImage: *hasResult = true; *hasResultType = false; break;
1571    case Op::OpTypeSampler: *hasResult = true; *hasResultType = false; break;
1572    case Op::OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
1573    case Op::OpTypeArray: *hasResult = true; *hasResultType = false; break;
1574    case Op::OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
1575    case Op::OpTypeStruct: *hasResult = true; *hasResultType = false; break;
1576    case Op::OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
1577    case Op::OpTypePointer: *hasResult = true; *hasResultType = false; break;
1578    case Op::OpTypeFunction: *hasResult = true; *hasResultType = false; break;
1579    case Op::OpTypeEvent: *hasResult = true; *hasResultType = false; break;
1580    case Op::OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
1581    case Op::OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
1582    case Op::OpTypeQueue: *hasResult = true; *hasResultType = false; break;
1583    case Op::OpTypePipe: *hasResult = true; *hasResultType = false; break;
1584    case Op::OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
1585    case Op::OpConstantTrue: *hasResult = true; *hasResultType = true; break;
1586    case Op::OpConstantFalse: *hasResult = true; *hasResultType = true; break;
1587    case Op::OpConstant: *hasResult = true; *hasResultType = true; break;
1588    case Op::OpConstantComposite: *hasResult = true; *hasResultType = true; break;
1589    case Op::OpConstantSampler: *hasResult = true; *hasResultType = true; break;
1590    case Op::OpConstantNull: *hasResult = true; *hasResultType = true; break;
1591    case Op::OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
1592    case Op::OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
1593    case Op::OpSpecConstant: *hasResult = true; *hasResultType = true; break;
1594    case Op::OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
1595    case Op::OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
1596    case Op::OpFunction: *hasResult = true; *hasResultType = true; break;
1597    case Op::OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
1598    case Op::OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
1599    case Op::OpFunctionCall: *hasResult = true; *hasResultType = true; break;
1600    case Op::OpVariable: *hasResult = true; *hasResultType = true; break;
1601    case Op::OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
1602    case Op::OpLoad: *hasResult = true; *hasResultType = true; break;
1603    case Op::OpStore: *hasResult = false; *hasResultType = false; break;
1604    case Op::OpCopyMemory: *hasResult = false; *hasResultType = false; break;
1605    case Op::OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
1606    case Op::OpAccessChain: *hasResult = true; *hasResultType = true; break;
1607    case Op::OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
1608    case Op::OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
1609    case Op::OpArrayLength: *hasResult = true; *hasResultType = true; break;
1610    case Op::OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
1611    case Op::OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
1612    case Op::OpDecorate: *hasResult = false; *hasResultType = false; break;
1613    case Op::OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
1614    case Op::OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
1615    case Op::OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
1616    case Op::OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
1617    case Op::OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
1618    case Op::OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
1619    case Op::OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
1620    case Op::OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
1621    case Op::OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
1622    case Op::OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
1623    case Op::OpCopyObject: *hasResult = true; *hasResultType = true; break;
1624    case Op::OpTranspose: *hasResult = true; *hasResultType = true; break;
1625    case Op::OpSampledImage: *hasResult = true; *hasResultType = true; break;
1626    case Op::OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
1627    case Op::OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
1628    case Op::OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
1629    case Op::OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
1630    case Op::OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
1631    case Op::OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
1632    case Op::OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
1633    case Op::OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
1634    case Op::OpImageFetch: *hasResult = true; *hasResultType = true; break;
1635    case Op::OpImageGather: *hasResult = true; *hasResultType = true; break;
1636    case Op::OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
1637    case Op::OpImageRead: *hasResult = true; *hasResultType = true; break;
1638    case Op::OpImageWrite: *hasResult = false; *hasResultType = false; break;
1639    case Op::OpImage: *hasResult = true; *hasResultType = true; break;
1640    case Op::OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
1641    case Op::OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
1642    case Op::OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
1643    case Op::OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
1644    case Op::OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
1645    case Op::OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
1646    case Op::OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
1647    case Op::OpConvertFToU: *hasResult = true; *hasResultType = true; break;
1648    case Op::OpConvertFToS: *hasResult = true; *hasResultType = true; break;
1649    case Op::OpConvertSToF: *hasResult = true; *hasResultType = true; break;
1650    case Op::OpConvertUToF: *hasResult = true; *hasResultType = true; break;
1651    case Op::OpUConvert: *hasResult = true; *hasResultType = true; break;
1652    case Op::OpSConvert: *hasResult = true; *hasResultType = true; break;
1653    case Op::OpFConvert: *hasResult = true; *hasResultType = true; break;
1654    case Op::OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
1655    case Op::OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
1656    case Op::OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
1657    case Op::OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
1658    case Op::OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
1659    case Op::OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
1660    case Op::OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
1661    case Op::OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
1662    case Op::OpBitcast: *hasResult = true; *hasResultType = true; break;
1663    case Op::OpSNegate: *hasResult = true; *hasResultType = true; break;
1664    case Op::OpFNegate: *hasResult = true; *hasResultType = true; break;
1665    case Op::OpIAdd: *hasResult = true; *hasResultType = true; break;
1666    case Op::OpFAdd: *hasResult = true; *hasResultType = true; break;
1667    case Op::OpISub: *hasResult = true; *hasResultType = true; break;
1668    case Op::OpFSub: *hasResult = true; *hasResultType = true; break;
1669    case Op::OpIMul: *hasResult = true; *hasResultType = true; break;
1670    case Op::OpFMul: *hasResult = true; *hasResultType = true; break;
1671    case Op::OpUDiv: *hasResult = true; *hasResultType = true; break;
1672    case Op::OpSDiv: *hasResult = true; *hasResultType = true; break;
1673    case Op::OpFDiv: *hasResult = true; *hasResultType = true; break;
1674    case Op::OpUMod: *hasResult = true; *hasResultType = true; break;
1675    case Op::OpSRem: *hasResult = true; *hasResultType = true; break;
1676    case Op::OpSMod: *hasResult = true; *hasResultType = true; break;
1677    case Op::OpFRem: *hasResult = true; *hasResultType = true; break;
1678    case Op::OpFMod: *hasResult = true; *hasResultType = true; break;
1679    case Op::OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
1680    case Op::OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
1681    case Op::OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
1682    case Op::OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
1683    case Op::OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
1684    case Op::OpOuterProduct: *hasResult = true; *hasResultType = true; break;
1685    case Op::OpDot: *hasResult = true; *hasResultType = true; break;
1686    case Op::OpIAddCarry: *hasResult = true; *hasResultType = true; break;
1687    case Op::OpISubBorrow: *hasResult = true; *hasResultType = true; break;
1688    case Op::OpUMulExtended: *hasResult = true; *hasResultType = true; break;
1689    case Op::OpSMulExtended: *hasResult = true; *hasResultType = true; break;
1690    case Op::OpAny: *hasResult = true; *hasResultType = true; break;
1691    case Op::OpAll: *hasResult = true; *hasResultType = true; break;
1692    case Op::OpIsNan: *hasResult = true; *hasResultType = true; break;
1693    case Op::OpIsInf: *hasResult = true; *hasResultType = true; break;
1694    case Op::OpIsFinite: *hasResult = true; *hasResultType = true; break;
1695    case Op::OpIsNormal: *hasResult = true; *hasResultType = true; break;
1696    case Op::OpSignBitSet: *hasResult = true; *hasResultType = true; break;
1697    case Op::OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
1698    case Op::OpOrdered: *hasResult = true; *hasResultType = true; break;
1699    case Op::OpUnordered: *hasResult = true; *hasResultType = true; break;
1700    case Op::OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
1701    case Op::OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
1702    case Op::OpLogicalOr: *hasResult = true; *hasResultType = true; break;
1703    case Op::OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
1704    case Op::OpLogicalNot: *hasResult = true; *hasResultType = true; break;
1705    case Op::OpSelect: *hasResult = true; *hasResultType = true; break;
1706    case Op::OpIEqual: *hasResult = true; *hasResultType = true; break;
1707    case Op::OpINotEqual: *hasResult = true; *hasResultType = true; break;
1708    case Op::OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
1709    case Op::OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
1710    case Op::OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
1711    case Op::OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
1712    case Op::OpULessThan: *hasResult = true; *hasResultType = true; break;
1713    case Op::OpSLessThan: *hasResult = true; *hasResultType = true; break;
1714    case Op::OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
1715    case Op::OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
1716    case Op::OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
1717    case Op::OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
1718    case Op::OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
1719    case Op::OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
1720    case Op::OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
1721    case Op::OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
1722    case Op::OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
1723    case Op::OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
1724    case Op::OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
1725    case Op::OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
1726    case Op::OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
1727    case Op::OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
1728    case Op::OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
1729    case Op::OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
1730    case Op::OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
1731    case Op::OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
1732    case Op::OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
1733    case Op::OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
1734    case Op::OpNot: *hasResult = true; *hasResultType = true; break;
1735    case Op::OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
1736    case Op::OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
1737    case Op::OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
1738    case Op::OpBitReverse: *hasResult = true; *hasResultType = true; break;
1739    case Op::OpBitCount: *hasResult = true; *hasResultType = true; break;
1740    case Op::OpDPdx: *hasResult = true; *hasResultType = true; break;
1741    case Op::OpDPdy: *hasResult = true; *hasResultType = true; break;
1742    case Op::OpFwidth: *hasResult = true; *hasResultType = true; break;
1743    case Op::OpDPdxFine: *hasResult = true; *hasResultType = true; break;
1744    case Op::OpDPdyFine: *hasResult = true; *hasResultType = true; break;
1745    case Op::OpFwidthFine: *hasResult = true; *hasResultType = true; break;
1746    case Op::OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
1747    case Op::OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
1748    case Op::OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
1749    case Op::OpEmitVertex: *hasResult = false; *hasResultType = false; break;
1750    case Op::OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
1751    case Op::OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
1752    case Op::OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
1753    case Op::OpControlBarrier: *hasResult = false; *hasResultType = false; break;
1754    case Op::OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
1755    case Op::OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
1756    case Op::OpAtomicStore: *hasResult = false; *hasResultType = false; break;
1757    case Op::OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
1758    case Op::OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
1759    case Op::OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
1760    case Op::OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
1761    case Op::OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
1762    case Op::OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
1763    case Op::OpAtomicISub: *hasResult = true; *hasResultType = true; break;
1764    case Op::OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
1765    case Op::OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
1766    case Op::OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
1767    case Op::OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
1768    case Op::OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
1769    case Op::OpAtomicOr: *hasResult = true; *hasResultType = true; break;
1770    case Op::OpAtomicXor: *hasResult = true; *hasResultType = true; break;
1771    case Op::OpPhi: *hasResult = true; *hasResultType = true; break;
1772    case Op::OpLoopMerge: *hasResult = false; *hasResultType = false; break;
1773    case Op::OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
1774    case Op::OpLabel: *hasResult = true; *hasResultType = false; break;
1775    case Op::OpBranch: *hasResult = false; *hasResultType = false; break;
1776    case Op::OpBranchConditional: *hasResult = false; *hasResultType = false; break;
1777    case Op::OpSwitch: *hasResult = false; *hasResultType = false; break;
1778    case Op::OpKill: *hasResult = false; *hasResultType = false; break;
1779    case Op::OpReturn: *hasResult = false; *hasResultType = false; break;
1780    case Op::OpReturnValue: *hasResult = false; *hasResultType = false; break;
1781    case Op::OpUnreachable: *hasResult = false; *hasResultType = false; break;
1782    case Op::OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
1783    case Op::OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
1784    case Op::OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
1785    case Op::OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
1786    case Op::OpGroupAll: *hasResult = true; *hasResultType = true; break;
1787    case Op::OpGroupAny: *hasResult = true; *hasResultType = true; break;
1788    case Op::OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
1789    case Op::OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
1790    case Op::OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
1791    case Op::OpGroupFMin: *hasResult = true; *hasResultType = true; break;
1792    case Op::OpGroupUMin: *hasResult = true; *hasResultType = true; break;
1793    case Op::OpGroupSMin: *hasResult = true; *hasResultType = true; break;
1794    case Op::OpGroupFMax: *hasResult = true; *hasResultType = true; break;
1795    case Op::OpGroupUMax: *hasResult = true; *hasResultType = true; break;
1796    case Op::OpGroupSMax: *hasResult = true; *hasResultType = true; break;
1797    case Op::OpReadPipe: *hasResult = true; *hasResultType = true; break;
1798    case Op::OpWritePipe: *hasResult = true; *hasResultType = true; break;
1799    case Op::OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
1800    case Op::OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
1801    case Op::OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
1802    case Op::OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
1803    case Op::OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
1804    case Op::OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
1805    case Op::OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
1806    case Op::OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
1807    case Op::OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
1808    case Op::OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
1809    case Op::OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
1810    case Op::OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
1811    case Op::OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
1812    case Op::OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
1813    case Op::OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
1814    case Op::OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
1815    case Op::OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
1816    case Op::OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
1817    case Op::OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
1818    case Op::OpRetainEvent: *hasResult = false; *hasResultType = false; break;
1819    case Op::OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
1820    case Op::OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
1821    case Op::OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
1822    case Op::OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
1823    case Op::OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
1824    case Op::OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
1825    case Op::OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
1826    case Op::OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
1827    case Op::OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
1828    case Op::OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
1829    case Op::OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
1830    case Op::OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
1831    case Op::OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
1832    case Op::OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
1833    case Op::OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
1834    case Op::OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
1835    case Op::OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
1836    case Op::OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
1837    case Op::OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
1838    case Op::OpNoLine: *hasResult = false; *hasResultType = false; break;
1839    case Op::OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
1840    case Op::OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
1841    case Op::OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
1842    case Op::OpSizeOf: *hasResult = true; *hasResultType = true; break;
1843    case Op::OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
1844    case Op::OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
1845    case Op::OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
1846    case Op::OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
1847    case Op::OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
1848    case Op::OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
1849    case Op::OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
1850    case Op::OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
1851    case Op::OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
1852    case Op::OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
1853    case Op::OpDecorateId: *hasResult = false; *hasResultType = false; break;
1854    case Op::OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
1855    case Op::OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
1856    case Op::OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
1857    case Op::OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
1858    case Op::OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
1859    case Op::OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
1860    case Op::OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
1861    case Op::OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
1862    case Op::OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
1863    case Op::OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
1864    case Op::OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
1865    case Op::OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
1866    case Op::OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
1867    case Op::OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
1868    case Op::OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
1869    case Op::OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
1870    case Op::OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
1871    case Op::OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
1872    case Op::OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
1873    case Op::OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
1874    case Op::OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
1875    case Op::OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
1876    case Op::OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
1877    case Op::OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
1878    case Op::OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
1879    case Op::OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
1880    case Op::OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
1881    case Op::OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
1882    case Op::OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
1883    case Op::OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
1884    case Op::OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
1885    case Op::OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
1886    case Op::OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
1887    case Op::OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
1888    case Op::OpCopyLogical: *hasResult = true; *hasResultType = true; break;
1889    case Op::OpPtrEqual: *hasResult = true; *hasResultType = true; break;
1890    case Op::OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
1891    case Op::OpPtrDiff: *hasResult = true; *hasResultType = true; break;
1892    case Op::OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
1893    case Op::OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
1894    case Op::OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
1895    case Op::OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
1896    case Op::OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
1897    case Op::OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
1898    case Op::OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1899    case Op::OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1900    case Op::OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1901    case Op::OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1902    case Op::OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1903    case Op::OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1904    case Op::OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1905    case Op::OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
1906    case Op::OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
1907    case Op::OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
1908    case Op::OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
1909    case Op::OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
1910    case Op::OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
1911    case Op::OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
1912    case Op::OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
1913    case Op::OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
1914    case Op::OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
1915    case Op::OpTraceNV: *hasResult = false; *hasResultType = false; break;
1916    case Op::OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
1917    case Op::OpTypeRayQueryProvisionalKHR: *hasResult = true; *hasResultType = false; break;
1918    case Op::OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
1919    case Op::OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
1920    case Op::OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
1921    case Op::OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;
1922    case Op::OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;
1923    case Op::OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break;
1924    case Op::OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
1925    case Op::OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
1926    case Op::OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
1927    case Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;
1928    case Op::OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;
1929    case Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;
1930    case Op::OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;
1931    case Op::OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;
1932    case Op::OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;
1933    case Op::OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;
1934    case Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;
1935    case Op::OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
1936    case Op::OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;
1937    case Op::OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
1938    case Op::OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
1939    case Op::OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
1940    case Op::OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
1941    case Op::OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
1942    case Op::OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
1943    case Op::OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
1944    case Op::OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
1945    case Op::OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
1946    case Op::OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
1947    case Op::OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
1948    case Op::OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
1949    case Op::OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
1950    case Op::OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
1951    case Op::OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
1952    case Op::OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
1953    case Op::OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
1954    case Op::OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
1955    case Op::OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
1956    case Op::OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
1957    case Op::OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
1958    case Op::OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
1959    case Op::OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
1960    case Op::OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
1961    case Op::OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
1962    case Op::OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
1963    case Op::OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
1964    case Op::OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
1965    case Op::OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
1966    case Op::OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
1967    case Op::OpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
1968    case Op::OpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
1969    case Op::OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
1970    case Op::OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
1971    case Op::OpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
1972    case Op::OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
1973    case Op::OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
1974    case Op::OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
1975    case Op::OpDecorateString: *hasResult = false; *hasResultType = false; break;
1976    case Op::OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
1977    case Op::OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
1978    case Op::OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
1979    case Op::OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
1980    case Op::OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
1981    case Op::OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
1982    case Op::OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
1983    case Op::OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
1984    case Op::OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
1985    case Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
1986    case Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
1987    case Op::OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
1988    case Op::OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
1989    case Op::OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
1990    case Op::OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
1991    case Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1992    case Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1993    case Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1994    case Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1995    case Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1996    case Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1997    case Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
1998    case Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
1999    case Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
2000    case Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
2001    case Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
2002    case Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
2003    case Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
2004    case Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
2005    case Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
2006    case Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
2007    case Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
2008    case Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
2009    case Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
2010    case Op::OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
2011    case Op::OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
2012    case Op::OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
2013    case Op::OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
2014    case Op::OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
2015    case Op::OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
2016    case Op::OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
2017    case Op::OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
2018    case Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
2019    case Op::OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
2020    case Op::OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
2021    case Op::OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
2022    case Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
2023    case Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
2024    case Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
2025    case Op::OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
2026    case Op::OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2027    case Op::OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2028    case Op::OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
2029    case Op::OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
2030    case Op::OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
2031    case Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
2032    case Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
2033    case Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
2034    case Op::OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
2035    case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2036    case Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2037    case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
2038    case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
2039    case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
2040    case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
2041    case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
2042    case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
2043    case Op::OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
2044    case Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
2045    case Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
2046    case Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
2047    case Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
2048    case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
2049    case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
2050    case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
2051    case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
2052    case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
2053    case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
2054    case Op::OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
2055    case Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
2056    case Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
2057    case Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
2058    case Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
2059    case Op::OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
2060    case Op::OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
2061    case Op::OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
2062    case Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
2063    case Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
2064    case Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2065    case Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2066    case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2067    case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
2068    case Op::OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
2069    case Op::OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
2070    case Op::OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
2071    case Op::OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
2072    case Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
2073    case Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
2074    case Op::OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
2075    case Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
2076    case Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
2077    case Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
2078    case Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
2079    case Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
2080    case Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
2081    case Op::OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
2082    case Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2083    case Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2084    case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
2085    case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
2086    case Op::OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
2087    case Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
2088    case Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
2089    case Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
2090    case Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
2091    case Op::OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
2092    case Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
2093    case Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
2094    case Op::OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
2095    }
2096}
2097#endif /* SPV_ENABLE_UTILITY_CODE */
2098
2099// Overload operator| for mask bit combining
2100
2101inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
2102inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
2103inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
2104inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
2105inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
2106inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
2107inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
2108inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
2109inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
2110
2111}  // end namespace spv
2112
2113#endif  // #ifndef spirv_HPP
2114
2115