spirv_utils/
desc.rs

1// Copyright 2016 James Miller
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. This file may not be copied, modified, or distributed
7// except according to those terms.
8
9#![allow(non_camel_case_types)]
10#![allow(non_upper_case_globals)]
11
12use std::fmt;
13
14#[derive(Copy, Clone, PartialEq, Eq, Hash)]
15pub struct Id(pub u32);
16
17#[derive(Copy, Clone, PartialEq, Eq, Hash)]
18pub struct TypeId(pub u32);
19
20#[derive(Copy, Clone, PartialEq, Eq, Hash)]
21pub struct ValueId(pub u32);
22
23#[derive(Copy, Clone, PartialEq, Eq, Hash)]
24pub struct ResultId(pub u32);
25
26impl From<TypeId> for Id {
27    fn from(t: TypeId) -> Id {
28        Id(t.0)
29    }
30}
31
32impl From<ValueId> for Id {
33    fn from(t: ValueId) -> Id {
34        Id(t.0)
35    }
36}
37
38impl From<ResultId> for Id {
39    fn from(t: ResultId) -> Id {
40        Id(t.0)
41    }
42}
43
44impl Id {
45    pub fn is_valid(self) -> bool {
46        self.0 != 0
47    }
48    pub fn to_type_id(self) -> TypeId {
49        TypeId(self.0)
50    }
51    pub fn to_value_id(self) -> ValueId {
52        ValueId(self.0)
53    }
54    pub fn to_result_id(self) -> ResultId {
55        ResultId(self.0)
56    }
57}
58
59impl TypeId {
60    pub fn is_valid(self) -> bool {
61        self.0 != 0
62    }
63}
64
65impl ValueId {
66    pub fn is_valid(self) -> bool {
67        self.0 != 0
68    }
69}
70
71impl ResultId {
72    pub fn to_type_id(self) -> TypeId {
73        TypeId(self.0)
74    }
75    pub fn to_value_id(self) -> ValueId {
76        ValueId(self.0)
77    }
78    pub fn is_valid(self) -> bool {
79        self.0 != 0
80    }
81}
82
83impl fmt::Debug for Id {
84    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
85        write!(f, "Id({})", self.0)
86    }
87}
88
89impl fmt::Debug for ResultId {
90    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
91        write!(f, "Result({})", self.0)
92    }
93}
94
95impl fmt::Debug for TypeId {
96    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
97        write!(f, "Type({})", self.0)
98    }
99}
100
101impl fmt::Debug for ValueId {
102    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
103        write!(f, "Value({})", self.0)
104    }
105}
106
107macro_rules! def_enum {
108    (enum $en:ident { $($name:ident = $code:expr),+ }) => (
109        def_enum!(enum $en : u32 { $($name = $code),+ });
110    );
111    (enum $en:ident : $repr:ident { $($name:ident = $code:expr),+ }) => (
112        #[repr($repr)]
113        #[derive(Copy, Clone, Debug, PartialEq, Hash)]
114        pub enum $en {
115            $($name = $code,)+
116        }
117
118        impl $en {
119            pub fn from(val: $repr) -> Option<$en> {
120                match val {
121                    $($code => Some($en::$name),)+
122                    _ => None
123                }
124            }
125        }
126    )
127}
128
129macro_rules! def_bitset {
130    ($setname:ident { $($name:ident = $code:expr),+ }) => (
131        #[derive(Copy, Clone, PartialEq, Hash)]
132        pub struct $setname(u32);
133
134        impl $setname {
135            #[inline]
136            pub fn empty() -> $setname {
137                $setname(0)
138            }
139
140            #[inline]
141            pub fn all() -> $setname {
142                $setname($($code)|+)
143            }
144
145            #[inline]
146            pub fn is_empty(&self) -> bool {
147                self.0 == 0
148            }
149
150            #[inline]
151            pub fn contains(&self, val: $setname) -> bool {
152                let x = self.0 & val.0;
153                x != 0
154            }
155
156            #[inline]
157            pub fn bits(&self) -> u32 {
158                self.0
159            }
160
161            #[inline]
162            pub fn insert(&mut self, val: $setname) {
163                self.0 |= val.0;
164            }
165
166            #[inline]
167            pub fn count(&self) -> u32 {
168                self.0.count_ones()
169            }
170        }
171
172        impl From<u32> for $setname {
173            #[inline]
174            fn from(val: u32) -> $setname {
175                $setname(val)
176            }
177        }
178
179        impl fmt::Debug for $setname {
180            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
181                try!(f.write_str(concat!(stringify!($setname), "{")));
182                if !self.is_empty() {
183                    let mut _first = true;
184                    $(if self.contains($name) {
185                        if !_first {
186                            try!(f.write_str(" | "));
187                        }
188                        try!(f.write_str(stringify!($name)));
189                        _first = false;
190                    })+
191
192                }
193                f.write_str("}")
194            }
195        }
196
197        $(pub const $name : $setname = $setname($code);)+
198    );
199}
200
201def_enum!(enum SrcLang {
202    Unknown = 0,
203    ESSL = 1,
204    GLSL = 2,
205    OpenCL_C = 3,
206    OpenCl_CPP = 4
207});
208
209def_enum!(enum ExecutionModel {
210    Vertex = 0,
211    TesselationControl = 1,
212    TesselationEvaluation = 2,
213    Geometry = 3,
214    Fragment = 4,
215    GLCompute = 5,
216    Kernel = 6
217});
218
219def_enum!(enum AddressingModel {
220    Logical = 0,
221    Physical32 = 1,
222    Physical64 = 2
223});
224
225def_enum!(enum MemoryModel {
226    Simple = 0,
227    GLSL450 = 1,
228    OpenCL = 2
229});
230
231def_enum!(enum ExecutionMode {
232    Invocations = 0,
233    SpacingEqual = 1,
234    SpacingFractionalEven = 2,
235    SpacingFractionalOdd = 3,
236    VertexOrderCw = 4,
237    VertexOrderCcw = 5,
238    PixelCenterInteger = 6,
239    OriginUpperLeft = 7,
240    OriginLowerLeft = 8,
241    EarlyFragmentTests = 9,
242    PointMode = 10,
243    Xfb = 11,
244    DepthReplacing = 12,
245    DepthGreater = 14,
246    DepthLess = 15,
247    DepthUnchanged = 16,
248    LocalSize = 17,
249    LocalSizeHint = 18,
250    InputPoints = 19,
251    InputLines = 20,
252    InputLinesAdjacency = 21,
253    Triangles = 22,
254    InputTrianglesAdjacency = 23,
255    Quads = 24,
256    IsoLines = 25,
257    OutputVertices = 26,
258    OutputPoints = 27,
259    OutputLineStrip = 28,
260    OutputTriangleStrip = 29,
261    VecTypeHint = 30,
262    ContractionOff = 31
263});
264
265def_enum!(enum StorageClass {
266    UniformConstant = 0,
267    Input = 1,
268    Uniform = 2,
269    Output = 3,
270    Workgroup = 4,
271    CrossWorkgroup = 5,
272    Private = 6,
273    Function = 7,
274    Generic = 8,
275    PushConstant = 9,
276    AtomicCounter = 10,
277    Image = 11
278});
279
280def_enum!(enum Dim {
281    _1D = 0,
282    _2D = 1,
283    _3D = 2,
284    Cube = 3,
285    Rect = 4,
286    Buffer = 5,
287    SubpassData = 6
288});
289
290def_enum!(enum SamplerAddressingMode {
291    None = 0,
292    ClampToEdge = 1,
293    Clamp = 2,
294    Repeat = 3,
295    RepeatMirrored = 4
296});
297
298def_enum!(enum SamplerFilterMode {
299    Nearest = 0,
300    Linear = 1
301});
302
303def_enum!(enum ImageFormat {
304    Unknown = 0,
305    Rgba32f = 1,
306    Rgba16f = 2,
307    R32f = 3,
308    Rgba8 = 4,
309    Rgba8Snorm = 5,
310    Rg32f = 6,
311    Rg16f = 7,
312    R11fG11fB10f = 8,
313    R16f = 9,
314    Rgba16 = 10,
315    Rgb10A2 = 11,
316    Rg16 = 12,
317    Rg8 = 13,
318    R16 = 14,
319    R8 = 15,
320    Rgba16Snorm = 16,
321    Rg16Snorm = 17,
322    Rg8Snorm = 18,
323    R16Snorm = 19,
324    R8Snorm = 20,
325    Rgba32i = 21,
326    Rgba16i = 22,
327    Rgba8i = 23,
328    R32i = 24,
329    Rg32i = 25,
330    Rg16i = 26,
331    Rg8i = 27,
332    R16i = 28,
333    R8i = 29,
334    Rgba32ui = 30,
335    Rgba16ui = 31,
336    Rgba8ui = 32,
337    R32ui = 33,
338    Rgb10a2ui = 34,
339    Rg32ui = 35,
340    Rg16ui = 36,
341    Rg8ui = 37,
342    R16ui = 38,
343    R8ui = 39
344});
345
346def_enum!(enum ImageChannelOrder {
347    R = 0,
348    A = 1,
349    RG = 2,
350    RA = 3,
351    RGB = 4,
352    RGBA = 5,
353    BGRA = 6,
354    ARGB = 7,
355    Intensity = 8,
356    Luminance = 9,
357    Rx = 10,
358    RGx = 11,
359    RGBx = 12,
360    Depth = 13,
361    DepthStencil = 14,
362    sRGB = 15,
363    sRGBx = 16,
364    sRGBA = 17,
365    sBGRA = 18
366});
367
368def_enum!(enum ImageChannelDataType {
369    SnormInt8 = 0,
370    SnormInt16 = 1,
371    UnormInt8 = 2,
372    UnormInt16 = 3,
373    UnormShort565 = 4,
374    UnormShort555 = 5,
375    UnormInt101010 = 6,
376    SignedInt8 = 7,
377    SignedInt16 = 8,
378    SignedInt32 = 9,
379    UnsignedInt8 = 10,
380    UnsignedInt16 = 11,
381    UnsignedInt32 = 12,
382    HalfFloat = 13,
383    Float = 14,
384    UnormInt24 = 15,
385    UnormInt101010_2 = 16
386});
387
388def_bitset!(ImageOperands {
389    ImgOpBias         = 0x01,
390    ImgOpLod          = 0x02,
391    ImgOpGrad         = 0x04,
392    ImgOpConstOffset  = 0x08,
393    ImgOpOffset       = 0x10,
394    ImgOpConstOffsets = 0x20,
395    ImgOpSample       = 0x40,
396    ImgOpMinLod       = 0x80
397});
398
399def_bitset!(FPFastMathMode {
400    FastMathNotNaN     = 0x01,
401    FastMathNotInf     = 0x02,
402    FastMathNSZ        = 0x04,
403    FastMathAllowRecip = 0x08,
404    FastMathFast       = 0x10
405});
406
407def_enum!(enum FPRoundingMode {
408    RTE = 0,
409    RTZ = 1,
410    RTP = 2,
411    RTN = 3
412});
413
414def_enum!(enum LinkageType {
415    Export = 0,
416    Import = 1
417});
418
419def_enum!(enum AccessQualifier {
420    ReadOnly = 0,
421    WriteOnly = 1,
422    ReadWrite = 2
423});
424
425def_enum!(enum FuncParamAttr {
426    Zext = 0,
427    Sext = 1,
428    ByVal = 2,
429    Sret = 3,
430    NoAlias = 4,
431    NoCapture = 5,
432    NoWrite = 6,
433    NoReadWrite = 7
434});
435
436def_enum!(enum Decoration {
437    RelaxedPrecision = 0,
438    SpecId = 1,
439    Block = 2,
440    BufferBlock = 3,
441    RowMajor = 4,
442    ColMajor = 5,
443    ArrayStride = 6,
444    MatrixStride = 7,
445    GLSLShared = 8,
446    GLSLPacked = 9,
447    CPacked = 10,
448    BuiltIn = 11,
449    NoPerspective = 13,
450    Flat = 14,
451    Patch = 15,
452    Centroid = 16,
453    Sample = 17,
454    Invariant = 18,
455    Restrict = 19,
456    Aliased = 20,
457    Volatile = 21,
458    Constant = 22,
459    Coherent = 23,
460    NonWritable = 24,
461    NonReadable = 25,
462    Uniform = 26,
463    SaturatedConversion = 28,
464    Stream = 29,
465    Location = 30,
466    Component = 31,
467    Index = 32,
468    Binding = 33,
469    DescriptorSet = 34,
470    Offset = 35,
471    XfbBuffer = 36,
472    XfbStride = 37,
473    FuncParamAttr = 38,
474    FPRoundingMode = 39,
475    FPFastMathMode = 40,
476    LinkageAttributes = 41,
477    NoContraction = 42,
478    InputAttachmentIndex = 43,
479    Alignment = 44
480});
481
482def_enum!(enum BuiltIn {
483    Position = 0,
484    PointSize = 1,
485    ClipDistance = 3,
486    CullDistance = 4,
487    VertexId = 5,
488    InstanceId = 6,
489    PrimitiveId = 7,
490    InvocationId = 8,
491    Layer = 9,
492    ViewportIndex = 10,
493    TessLevelOuter = 11,
494    TessLevelInner = 12,
495    TessCoord = 13,
496    PatchVertices = 14,
497    FragCoord = 15,
498    PointCoord = 16,
499    FrontFacing = 17,
500    SampleId = 18,
501    SamplePosition = 19,
502    SampleMask = 20,
503    FragDepth = 22,
504    HelperInvocation = 23,
505    NumWorkgroups = 24,
506    WorkgroupSize = 25,
507    WorkgroupId = 26,
508    LocalInvocationId = 27,
509    GlobalInvocationId = 28,
510    LocalInvocationIndex = 29,
511    WorkDim = 30,
512    GlobalSize = 31,
513    EnqueuedWorkgroupSize = 32,
514    GlobalOffset = 33,
515    GlobalLinearId = 34,
516    SubgroupSize = 36,
517    SubgroupMaxSize = 37,
518    NumSubgroups = 38,
519    NumEnqueuedSubgroups = 39,
520    SubgroupId = 40,
521    SubgroupLocalInvocationId = 41,
522    VertexIndex = 42,
523    InstanceIndex = 43
524});
525
526def_bitset!(SelectionControl {
527    SelCtlFlatten     = 0x01,
528    SelCtlDontFlatten = 0x02
529});
530
531def_bitset!(LoopControl {
532    LoopCtlUnroll     = 0x01,
533    LoopCtlDontUnroll = 0x02
534});
535
536def_bitset!(FunctionControl {
537    FnCtlInline     = 0x01,
538    FnCtlDontInline = 0x02,
539    FnCtlPure       = 0x04,
540    FnCtlConst      = 0x08
541});
542
543def_bitset!(MemoryOrdering {
544    MemOrdAcquire                = 0x002,
545    MemOrdRelease                = 0x004,
546    MemOrdAcquireRelease         = 0x008,
547    MemOrdSequentiallyConsistent = 0x010,
548    MemOrdUniformMemory          = 0x040,
549    MemOrdSubgroupMemory         = 0x080,
550    MemOrdWorkgroupMemory        = 0x100,
551    MemOrdCrossWorkgroupMemory   = 0x200,
552    MemOrdAtomicCounterMemory    = 0x400,
553    MemOrdImageMemory            = 0x800
554});
555
556def_bitset!(MemoryAccess {
557    MemAccVolatile    = 0x01,
558    MemAccAligned     = 0x02,
559    MemAccNontemporal = 0x04
560});
561
562def_enum!(enum Scope {
563    CrossDevice = 0,
564    Device = 1,
565    Workgroup = 2,
566    Subgroup = 3,
567    Invocation = 4
568});
569
570def_enum!(enum GroupOperation {
571    Reduce = 0,
572    InclusiveScan = 1,
573    ExclusiveScan = 2
574});
575
576def_enum!(enum KernelEnqueueFlags {
577    NoWait = 0,
578    WaitKernel = 1,
579    WaitWorkGroup = 2
580});
581
582def_bitset!(KernelProfilingInfo {
583    ProfInfoCmdExecTime = 0x01
584});
585
586def_enum!(enum Capability {
587    Matrix = 0,
588    Shader = 1,
589    Geometry = 2,
590    Tessellation = 3,
591    Addresses = 4,
592    Linkage = 5,
593    Kernel = 6,
594    Vector16 = 7,
595    Float16Buffer = 8,
596    Float16 = 9,
597    Float64 = 10,
598    Int64 = 11,
599    Int64Atomics = 12,
600    ImageBasic = 13,
601    ImageReadWrite = 14,
602    ImageMipmap = 15,
603    Pipes = 17,
604    Groups = 18,
605    DeviceEnqueue = 19,
606    LiteralSampler = 20,
607    AtomicStorage = 21,
608    Int16 = 22,
609    TessellationPointSize = 23,
610    GeometryPointSize = 24,
611    ImageGatherExtended = 25,
612    StorageImageMultisample = 27,
613    UniformBufferArrayDynamicIndexing = 28,
614    SampledImageArrayDynamicIndexing = 29,
615    StorageBufferArrayDynamicIndexing = 30,
616    StorageImageArrayDynamicIndexing = 31,
617    ClipDistance = 32,
618    CullDistance = 33,
619    ImageCubeArray = 34,
620    SampleRateShading = 35,
621    ImageRect = 36,
622    SampledRect = 37,
623    GenericPointer = 38,
624    Int8 = 39,
625    InputAttachment = 40,
626    SparseResidency = 41,
627    MinLod = 42,
628    Sampled1D = 43,
629    Image1D = 44,
630    SampledCubeArray = 45,
631    SampledBuffer = 46,
632    ImageBuffer = 47,
633    ImageMSArray = 48,
634    StorageImageExtendedFormats = 49,
635    ImageQuery = 50,
636    DerivativeControl = 51,
637    InterpolationFunction = 52,
638    TransformFeedback = 53,
639    GeometryStreams = 54,
640    StorageImageReadWithoutFormat = 55,
641    StorageImageWriteWithoutFormat = 56,
642    MultiViewport = 57
643});
644
645def_enum!(enum Op : u16 {
646    Nop = 0,
647    Undef = 1,
648    SourceContinued = 2,
649    Source = 3,
650    SourceExtension = 4,
651    Name = 5,
652    MemberName = 6,
653    String = 7,
654    Line = 8,
655    Extension = 10,
656    ExtInstImport = 11,
657    ExtInst = 12,
658    MemoryModel = 14,
659    EntryPoint = 15,
660    ExecutionMode = 16,
661    Capability = 17,
662    TypeVoid = 19,
663    TypeBool = 20,
664    TypeInt = 21,
665    TypeFloat = 22,
666    TypeVector = 23,
667    TypeMatrix = 24,
668    TypeImage = 25,
669    TypeSampler = 26,
670    TypeSampledImage = 27,
671    TypeArray = 28,
672    TypeRuntimeArray = 29,
673    TypeStruct = 30,
674    TypeOpaque = 31,
675    TypePointer = 32,
676    TypeFunction = 33,
677    TypeEvent = 34,
678    TypeDeviceEvent = 35,
679    TypeReserveId = 36,
680    TypeQueue = 37,
681    TypePipe = 38,
682    TypeForwardPointer = 39,
683    ConstantTrue = 41,
684    ConstantFalse = 42,
685    Constant = 43,
686    ConstantComposite = 44,
687    ConstantSampler = 45,
688    ConstantNull = 46,
689    SpecConstantTrue = 48,
690    SpecConstantFalse = 49,
691    SpecConstant = 50,
692    SpecConstantComposite = 51,
693    SpecConstantOp = 52,
694    Function = 54,
695    FunctionParameter = 55,
696    FunctionEnd = 56,
697    FunctionCall = 57,
698    Variable = 59,
699    ImageTexelPointer = 60,
700    Load = 61,
701    Store = 62,
702    CopyMemory = 63,
703    CopyMemorySized = 64,
704    AccessChain = 65,
705    InBoundsAccessChain = 66,
706    PtrAccessChain = 67,
707    ArrayLength = 68,
708    GenericPtrMemSemantics = 69,
709    InBoundsPtrAccessChain = 70,
710    Decorate = 71,
711    MemberDecorate = 72,
712    DecorationGroup = 73,
713    GroupDecorate = 74,
714    GroupMemberDecorate = 75,
715    VectorExtractDynamic = 77,
716    VectorInsertDynamic = 78,
717    VectorShuffle = 79,
718    CompositeConstruct = 80,
719    CompositeExtract = 81,
720    CompositeInsert = 82,
721    CopyObject = 83,
722    Transpose = 84,
723    SampledImage = 86,
724    ImageSampleImplicitLod = 87,
725    ImageSampleExplicitLod = 88,
726    ImageSampleDrefImplicitLod = 89,
727    ImageSampleDrefExplicitLod = 90,
728    ImageSampleProjImplicitLod = 91,
729    ImageSampleProjExplicitLod = 92,
730    ImageSampleProjDrefImplicitLod = 93,
731    ImageSampleProjDrefExplicitLod = 94,
732    ImageFetch = 95,
733    ImageGather = 96,
734    ImageDrefGather = 97,
735    ImageRead = 98,
736    ImageWrite = 99,
737    Image = 100,
738    ImageQueryFormat = 101,
739    ImageQueryOrder = 102,
740    ImageQuerySizeLod = 103,
741    ImageQuerySize = 104,
742    ImageQueryLod = 105,
743    ImageQueryLevels = 106,
744    ImageQuerySamples = 107,
745    ConvertFToU = 109,
746    ConvertFToS = 110,
747    ConvertSToF = 111,
748    ConvertUToF = 112,
749    UConvert = 113,
750    SConvert = 114,
751    FConvert = 115,
752    QuantizeToF16 = 116,
753    ConvertPtrToU = 117,
754    SatConvertSToU = 118,
755    SatConvertUToS = 119,
756    ConvertUToPtr = 120,
757    PtrCastToGeneric = 121,
758    GenericCastToPtr = 122,
759    GenericCastToPtrExplicit = 123,
760    Bitcast = 124,
761    SNegate = 126,
762    FNegate = 127,
763    IAdd = 128,
764    FAdd = 129,
765    ISub = 130,
766    FSub = 131,
767    IMul = 132,
768    FMul = 133,
769    UDiv = 134,
770    SDiv = 135,
771    FDiv = 136,
772    UMod = 137,
773    SRem = 138,
774    SMod = 139,
775    FRem = 140,
776    FMod = 141,
777    VectorTimesScalar = 142,
778    MatrixTimesScalar = 143,
779    VectorTimesMatrix = 144,
780    MatrixTimesVector = 145,
781    MatrixTimesMatrix = 146,
782    OuterProduct = 147,
783    Dot = 148,
784    IAddCarry = 149,
785    ISubBorrow = 150,
786    UMulExtended = 151,
787    SMulExtended = 152,
788    Any = 154,
789    All = 155,
790    IsNan = 156,
791    IsInf = 157,
792    IsFinite = 158,
793    IsNormal = 159,
794    SignBitSet = 160,
795    LessOrGreater = 161,
796    Ordered = 162,
797    Unordered = 163,
798    LogicalEqual = 164,
799    LogicalNotEqual = 165,
800    LogicalOr = 166,
801    LogicalAnd = 167,
802    LogicalNot = 168,
803    Select = 169,
804    IEqual = 170,
805    INotEqual = 171,
806    UGreaterThan = 172,
807    SGreaterThan = 173,
808    UGreaterThanEqual = 174,
809    SGreaterThanEqual = 175,
810    ULessThan = 176,
811    SLessThan = 177,
812    ULessThanEqual = 178,
813    SLessThanEqual = 179,
814    FOrdEqual = 180,
815    FUnordEqual = 181,
816    FOrdNotEqual = 182,
817    FUnordNotEqual = 183,
818    FOrdLessThan = 184,
819    FUnordLessThan = 185,
820    FOrdGreaterThan = 186,
821    FUnordGreaterThan = 187,
822    FOrdLessThanEqual = 188,
823    FUnordLessThanEqual = 189,
824    FOrdGreaterThanEqual = 190,
825    FUnordGreaterThanEqual = 191,
826    ShiftRightLogical = 194,
827    ShiftRightArithmetic = 195,
828    ShiftLeftLogical = 196,
829    BitwiseOr = 197,
830    BitwiseXor = 198,
831    BitwiseAnd = 199,
832    Not = 200,
833    BitFieldInsert = 201,
834    BitFieldSExtract = 202,
835    BitFieldUExtract = 203,
836    BitReverse = 204,
837    BitCount = 205,
838    DPdx = 207,
839    DPdy = 208,
840    Fwidth = 209,
841    DPdxFine = 210,
842    DPdyFine = 211,
843    FwidthFine = 212,
844    DPdxCoarse = 213,
845    DPdyCoarse = 214,
846    FwidthCoarse = 215,
847    EmitVertex = 218,
848    EndPrimitive = 219,
849    EmitStreamVertex = 220,
850    EndStreamPrimitive = 221,
851    ControlBarrier = 224,
852    MemoryBarrier = 225,
853    AtomicLoad = 227,
854    AtomicStore = 228,
855    AtomicExchange = 229,
856    AtomicCompareExchange = 230,
857    AtomicCompareExchangeWeak = 231,
858    AtomicIIncrement = 232,
859    AtomicIDecrement = 233,
860    AtomicIAdd = 234,
861    AtomicISub = 235,
862    AtomicSMin = 236,
863    AtomicUMin = 237,
864    AtomicSMax = 238,
865    AtomicUMax = 239,
866    AtomicAnd = 240,
867    AtomicOr = 241,
868    AtomicXor = 242,
869    Phi = 245,
870    LoopMerge = 246,
871    SelectionMerge = 247,
872    Label = 248,
873    Branch = 249,
874    BranchConditional = 250,
875    Switch = 251,
876    Kill = 252,
877    Return = 253,
878    ReturnValue = 254,
879    Unreachable = 255,
880    LifetimeStart = 256,
881    LifetimeStop = 257,
882    GroupAsyncCopy = 259,
883    GroupWaitEvents = 260,
884    GroupAll = 261,
885    GroupAny = 262,
886    GroupBroadcast = 263,
887    GroupIAdd = 264,
888    GroupFAdd = 265,
889    GroupFMin = 266,
890    GroupUMin = 267,
891    GroupSMin = 268,
892    GroupFMax = 269,
893    GroupUMax = 270,
894    GroupSMax = 271,
895    ReadPipe = 274,
896    WritePipe = 275,
897    ReservedReadPipe = 276,
898    ReservedWritePipe = 277,
899    ReserveReadPipePackets = 278,
900    ReserveWritePipePackets = 279,
901    CommitReadPipe = 280,
902    CommitWritePipe = 281,
903    IsValidReserveId = 282,
904    GetNumPipePackets = 283,
905    GetMaxPipePackets = 284,
906    GroupReserveReadPipePackets = 285,
907    GroupReserveWritePipePackets = 286,
908    GroupCommitReadPipe = 287,
909    GroupCommitWritePipe = 288,
910    EnqueueMarker = 291,
911    EnqueueKernel = 292,
912    GetKernelNDrangeSubGroupCount = 293,
913    GetKernelNDrangeMaxSubGroupSize = 294,
914    GetKernelWorkGroupSize = 295,
915    GetKernelPreferredWorkGroupSizeMultiple = 296,
916    RetainEvent = 297,
917    ReleaseEvent = 298,
918    CreateUserEvent = 299,
919    IsValidEvent = 300,
920    SetUserEventStatus = 301,
921    CaptureEventProfilingInfo = 302,
922    GetDefaultQueue = 303,
923    BuildNDRange = 304,
924    ImageSparseSampleImplicitLod = 305,
925    ImageSparseSampleExplicitLod = 306,
926    ImageSparseSampleDrefImplicitLod = 307,
927    ImageSparseSampleDrefExplicitLod = 308,
928    ImageSparseSampleProjImplicitLod = 309,
929    ImageSparseSampleProjExplicitLod = 310,
930    ImageSparseSampleProjDrefImplicitLod = 311,
931    ImageSparseSampleProjDrefExplicitLod = 312,
932    ImageSparseFetch = 313,
933    ImageSparseGather = 314,
934    ImageSparseDrefGather = 315,
935    ImageSparseTexelsResident = 316,
936    NoLine = 317,
937    AtomicFlagTestAndSet = 318,
938    AtomicFlagClear = 319,
939    ImageSparseRead = 320
940});