Commit 94dd763936

Robin Voetter <robin@voetter.nl>
2022-01-21 15:07:01
spirv: regenerate spec
Regenerate the specification with the improvements previously made to the spirv spec generator.
1 parent ff042e8
Changed files (1)
src
codegen
spirv
src/codegen/spirv/spec.zig
@@ -1,8 +1,46 @@
 //! This file is auto-generated by tools/gen_spirv_spec.zig.
 
 const Version = @import("std").builtin.Version;
+
+pub const Word = u32;
+pub const IdResultType = struct {
+    id: Word,
+    pub fn toRef(self: IdResultType) IdRef {
+        return .{ .id = self.id };
+    }
+};
+pub const IdResult = struct {
+    id: Word,
+    pub fn toRef(self: IdResult) IdRef {
+        return .{ .id = self.id };
+    }
+    pub fn toResultType(self: IdResult) IdResultType {
+        return .{ .id = self.id };
+    }
+};
+pub const IdRef = struct { id: Word };
+
+pub const IdMemorySemantics = IdRef;
+pub const IdScope = IdRef;
+
+pub const LiteralInteger = Word;
+pub const LiteralString = []const u8;
+pub const LiteralContextDependentNumber = union(enum) {
+    int32: i32,
+    uint32: u32,
+    int64: i64,
+    uint64: u64,
+    float32: f32,
+    float64: f64,
+};
+pub const LiteralExtInstInteger = struct { inst: Word };
+pub const LiteralSpecConstantOpInteger = struct { opcode: Opcode };
+pub const PairLiteralIntegerIdRef = struct { value: LiteralInteger, label: IdRef };
+pub const PairIdRefLiteralInteger = struct { target: IdRef, member: LiteralInteger };
+pub const PairIdRefIdRef = [2]IdRef;
+
 pub const version = Version{ .major = 1, .minor = 5, .patch = 4 };
-pub const magic_number: u32 = 0x07230203;
+pub const magic_number: Word = 0x07230203;
 pub const Opcode = enum(u16) {
     OpNop = 0,
     OpUndef = 1,
@@ -381,11 +419,11 @@ pub const Opcode = enum(u16) {
     OpImageSampleFootprintNV = 5283,
     OpGroupNonUniformPartitionNV = 5296,
     OpWritePackedPrimitiveIndices4x8NV = 5299,
-    OpReportIntersectionNV = 5334,
+    OpReportIntersectionKHR = 5334,
     OpIgnoreIntersectionNV = 5335,
     OpTerminateRayNV = 5336,
     OpTraceNV = 5337,
-    OpTypeAccelerationStructureNV = 5341,
+    OpTypeAccelerationStructureKHR = 5341,
     OpExecuteCallableNV = 5344,
     OpTypeCooperativeMatrixNV = 5358,
     OpCooperativeMatrixLoadNV = 5359,
@@ -580,10 +618,592 @@ pub const Opcode = enum(u16) {
     OpTypeStructContinuedINTEL = 6090,
     OpConstantCompositeContinuedINTEL = 6091,
     OpSpecConstantCompositeContinuedINTEL = 6092,
-    _,
 
-    const OpReportIntersectionKHR: Opcode = .OpReportIntersectionNV;
-    const OpTypeAccelerationStructureKHR: Opcode = .OpTypeAccelerationStructureNV;
+    pub const OpReportIntersectionNV = Opcode.OpReportIntersectionKHR;
+    pub const OpTypeAccelerationStructureNV = Opcode.OpTypeAccelerationStructureKHR;
+    pub const OpDecorateStringGOOGLE = Opcode.OpDecorateString;
+    pub const OpMemberDecorateStringGOOGLE = Opcode.OpMemberDecorateString;
+
+    pub fn Operands(comptime self: Opcode) type {
+        return switch (self) {
+            .OpNop => void,
+            .OpUndef => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSourceContinued => struct { continued_source: LiteralString },
+            .OpSource => struct { source_language: SourceLanguage, version: LiteralInteger, file: ?IdRef = null, source: ?LiteralString = null },
+            .OpSourceExtension => struct { extension: LiteralString },
+            .OpName => struct { target: IdRef, name: LiteralString },
+            .OpMemberName => struct { type: IdRef, member: LiteralInteger, name: LiteralString },
+            .OpString => struct { id_result: IdResult, string: LiteralString },
+            .OpLine => struct { file: IdRef, line: LiteralInteger, column: LiteralInteger },
+            .OpExtension => struct { name: LiteralString },
+            .OpExtInstImport => struct { id_result: IdResult, name: LiteralString },
+            .OpExtInst => struct { id_result_type: IdResultType, id_result: IdResult, set: IdRef, instruction: LiteralExtInstInteger, id_ref_4: []const IdRef = &.{} },
+            .OpMemoryModel => struct { addressing_model: AddressingModel, memory_model: MemoryModel },
+            .OpEntryPoint => struct { execution_model: ExecutionModel, entry_point: IdRef, name: LiteralString, interface: []const IdRef = &.{} },
+            .OpExecutionMode => struct { entry_point: IdRef, mode: ExecutionMode.Extended },
+            .OpCapability => struct { capability: Capability },
+            .OpTypeVoid => struct { id_result: IdResult },
+            .OpTypeBool => struct { id_result: IdResult },
+            .OpTypeInt => struct { id_result: IdResult, width: LiteralInteger, signedness: LiteralInteger },
+            .OpTypeFloat => struct { id_result: IdResult, width: LiteralInteger },
+            .OpTypeVector => struct { id_result: IdResult, component_type: IdRef, component_count: LiteralInteger },
+            .OpTypeMatrix => struct { id_result: IdResult, column_type: IdRef, column_count: LiteralInteger },
+            .OpTypeImage => struct { id_result: IdResult, sampled_type: IdRef, dim: Dim, depth: LiteralInteger, arrayed: LiteralInteger, ms: LiteralInteger, sampled: LiteralInteger, image_format: ImageFormat, access_qualifier: ?AccessQualifier = null },
+            .OpTypeSampler => struct { id_result: IdResult },
+            .OpTypeSampledImage => struct { id_result: IdResult, image_type: IdRef },
+            .OpTypeArray => struct { id_result: IdResult, element_type: IdRef, length: IdRef },
+            .OpTypeRuntimeArray => struct { id_result: IdResult, element_type: IdRef },
+            .OpTypeStruct => struct { id_result: IdResult, id_ref: []const IdRef = &.{} },
+            .OpTypeOpaque => struct { id_result: IdResult, literal_string: LiteralString },
+            .OpTypePointer => struct { id_result: IdResult, storage_class: StorageClass, type: IdRef },
+            .OpTypeFunction => struct { id_result: IdResult, return_type: IdRef, id_ref_2: []const IdRef = &.{} },
+            .OpTypeEvent => struct { id_result: IdResult },
+            .OpTypeDeviceEvent => struct { id_result: IdResult },
+            .OpTypeReserveId => struct { id_result: IdResult },
+            .OpTypeQueue => struct { id_result: IdResult },
+            .OpTypePipe => struct { id_result: IdResult, qualifier: AccessQualifier },
+            .OpTypeForwardPointer => struct { pointer_type: IdRef, storage_class: StorageClass },
+            .OpConstantTrue => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpConstantFalse => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpConstant => struct { id_result_type: IdResultType, id_result: IdResult, value: LiteralContextDependentNumber },
+            .OpConstantComposite => struct { id_result_type: IdResultType, id_result: IdResult, constituents: []const IdRef = &.{} },
+            .OpConstantSampler => struct { id_result_type: IdResultType, id_result: IdResult, sampler_addressing_mode: SamplerAddressingMode, param: LiteralInteger, sampler_filter_mode: SamplerFilterMode },
+            .OpConstantNull => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSpecConstantTrue => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSpecConstantFalse => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSpecConstant => struct { id_result_type: IdResultType, id_result: IdResult, value: LiteralContextDependentNumber },
+            .OpSpecConstantComposite => struct { id_result_type: IdResultType, id_result: IdResult, constituents: []const IdRef = &.{} },
+            .OpSpecConstantOp => struct { id_result_type: IdResultType, id_result: IdResult, opcode: LiteralSpecConstantOpInteger },
+            .OpFunction => struct { id_result_type: IdResultType, id_result: IdResult, function_control: FunctionControl, function_type: IdRef },
+            .OpFunctionParameter => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpFunctionEnd => void,
+            .OpFunctionCall => struct { id_result_type: IdResultType, id_result: IdResult, function: IdRef, id_ref_3: []const IdRef = &.{} },
+            .OpVariable => struct { id_result_type: IdResultType, id_result: IdResult, storage_class: StorageClass, initializer: ?IdRef = null },
+            .OpImageTexelPointer => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, sample: IdRef },
+            .OpLoad => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory_access: ?MemoryAccess.Extended = null },
+            .OpStore => struct { pointer: IdRef, object: IdRef, memory_access: ?MemoryAccess.Extended = null },
+            .OpCopyMemory => struct { target: IdRef, source: IdRef, memory_access_2: ?MemoryAccess.Extended = null, memory_access_3: ?MemoryAccess.Extended = null },
+            .OpCopyMemorySized => struct { target: IdRef, source: IdRef, size: IdRef, memory_access_3: ?MemoryAccess.Extended = null, memory_access_4: ?MemoryAccess.Extended = null },
+            .OpAccessChain => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, indexes: []const IdRef = &.{} },
+            .OpInBoundsAccessChain => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, indexes: []const IdRef = &.{} },
+            .OpPtrAccessChain => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, element: IdRef, indexes: []const IdRef = &.{} },
+            .OpArrayLength => struct { id_result_type: IdResultType, id_result: IdResult, structure: IdRef, array_member: LiteralInteger },
+            .OpGenericPtrMemSemantics => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpInBoundsPtrAccessChain => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, element: IdRef, indexes: []const IdRef = &.{} },
+            .OpDecorate => struct { target: IdRef, decoration: Decoration.Extended },
+            .OpMemberDecorate => struct { structure_type: IdRef, member: LiteralInteger, decoration: Decoration.Extended },
+            .OpDecorationGroup => struct { id_result: IdResult },
+            .OpGroupDecorate => struct { decoration_group: IdRef, targets: []const IdRef = &.{} },
+            .OpGroupMemberDecorate => struct { decoration_group: IdRef, targets: []const PairIdRefLiteralInteger = &.{} },
+            .OpVectorExtractDynamic => struct { id_result_type: IdResultType, id_result: IdResult, vector: IdRef, index: IdRef },
+            .OpVectorInsertDynamic => struct { id_result_type: IdResultType, id_result: IdResult, vector: IdRef, component: IdRef, index: IdRef },
+            .OpVectorShuffle => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, components: []const LiteralInteger = &.{} },
+            .OpCompositeConstruct => struct { id_result_type: IdResultType, id_result: IdResult, constituents: []const IdRef = &.{} },
+            .OpCompositeExtract => struct { id_result_type: IdResultType, id_result: IdResult, composite: IdRef, indexes: []const LiteralInteger = &.{} },
+            .OpCompositeInsert => struct { id_result_type: IdResultType, id_result: IdResult, object: IdRef, composite: IdRef, indexes: []const LiteralInteger = &.{} },
+            .OpCopyObject => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpTranspose => struct { id_result_type: IdResultType, id_result: IdResult, matrix: IdRef },
+            .OpSampledImage => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, sampler: IdRef },
+            .OpImageSampleImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSampleExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSampleDrefImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSampleDrefExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSampleProjImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSampleProjExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSampleProjDrefImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSampleProjDrefExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageFetch => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageGather => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, component: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageDrefGather => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageRead => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageWrite => struct { image: IdRef, coordinate: IdRef, texel: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImage => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef },
+            .OpImageQueryFormat => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef },
+            .OpImageQueryOrder => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef },
+            .OpImageQuerySizeLod => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, level_of_detail: IdRef },
+            .OpImageQuerySize => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef },
+            .OpImageQueryLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef },
+            .OpImageQueryLevels => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef },
+            .OpImageQuerySamples => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef },
+            .OpConvertFToU => struct { id_result_type: IdResultType, id_result: IdResult, float_value: IdRef },
+            .OpConvertFToS => struct { id_result_type: IdResultType, id_result: IdResult, float_value: IdRef },
+            .OpConvertSToF => struct { id_result_type: IdResultType, id_result: IdResult, signed_value: IdRef },
+            .OpConvertUToF => struct { id_result_type: IdResultType, id_result: IdResult, unsigned_value: IdRef },
+            .OpUConvert => struct { id_result_type: IdResultType, id_result: IdResult, unsigned_value: IdRef },
+            .OpSConvert => struct { id_result_type: IdResultType, id_result: IdResult, signed_value: IdRef },
+            .OpFConvert => struct { id_result_type: IdResultType, id_result: IdResult, float_value: IdRef },
+            .OpQuantizeToF16 => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
+            .OpConvertPtrToU => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpSatConvertSToU => struct { id_result_type: IdResultType, id_result: IdResult, signed_value: IdRef },
+            .OpSatConvertUToS => struct { id_result_type: IdResultType, id_result: IdResult, unsigned_value: IdRef },
+            .OpConvertUToPtr => struct { id_result_type: IdResultType, id_result: IdResult, integer_value: IdRef },
+            .OpPtrCastToGeneric => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpGenericCastToPtr => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpGenericCastToPtrExplicit => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, storage: StorageClass },
+            .OpBitcast => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpSNegate => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpFNegate => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpIAdd => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFAdd => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpISub => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFSub => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpIMul => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFMul => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUDiv => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSDiv => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFDiv => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUMod => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSRem => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSMod => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFRem => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFMod => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpVectorTimesScalar => struct { id_result_type: IdResultType, id_result: IdResult, vector: IdRef, scalar: IdRef },
+            .OpMatrixTimesScalar => struct { id_result_type: IdResultType, id_result: IdResult, matrix: IdRef, scalar: IdRef },
+            .OpVectorTimesMatrix => struct { id_result_type: IdResultType, id_result: IdResult, vector: IdRef, matrix: IdRef },
+            .OpMatrixTimesVector => struct { id_result_type: IdResultType, id_result: IdResult, matrix: IdRef, vector: IdRef },
+            .OpMatrixTimesMatrix => struct { id_result_type: IdResultType, id_result: IdResult, leftmatrix: IdRef, rightmatrix: IdRef },
+            .OpOuterProduct => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef },
+            .OpDot => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef },
+            .OpIAddCarry => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpISubBorrow => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUMulExtended => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSMulExtended => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpAny => struct { id_result_type: IdResultType, id_result: IdResult, vector: IdRef },
+            .OpAll => struct { id_result_type: IdResultType, id_result: IdResult, vector: IdRef },
+            .OpIsNan => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef },
+            .OpIsInf => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef },
+            .OpIsFinite => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef },
+            .OpIsNormal => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef },
+            .OpSignBitSet => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef },
+            .OpLessOrGreater => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef, y: IdRef },
+            .OpOrdered => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef, y: IdRef },
+            .OpUnordered => struct { id_result_type: IdResultType, id_result: IdResult, x: IdRef, y: IdRef },
+            .OpLogicalEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpLogicalNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpLogicalOr => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpLogicalAnd => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpLogicalNot => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpSelect => struct { id_result_type: IdResultType, id_result: IdResult, condition: IdRef, object_1: IdRef, object_2: IdRef },
+            .OpIEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpINotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUGreaterThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSGreaterThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUGreaterThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSGreaterThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpULessThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSLessThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpULessThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpSLessThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFOrdEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFUnordEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFOrdNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFUnordNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFOrdLessThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFUnordLessThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFOrdGreaterThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFUnordGreaterThan => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFOrdLessThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFUnordLessThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFOrdGreaterThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpFUnordGreaterThanEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpShiftRightLogical => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, shift: IdRef },
+            .OpShiftRightArithmetic => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, shift: IdRef },
+            .OpShiftLeftLogical => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, shift: IdRef },
+            .OpBitwiseOr => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpBitwiseXor => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpBitwiseAnd => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpNot => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpBitFieldInsert => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, insert: IdRef, offset: IdRef, count: IdRef },
+            .OpBitFieldSExtract => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, offset: IdRef, count: IdRef },
+            .OpBitFieldUExtract => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, offset: IdRef, count: IdRef },
+            .OpBitReverse => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef },
+            .OpBitCount => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef },
+            .OpDPdx => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpDPdy => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpFwidth => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpDPdxFine => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpDPdyFine => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpFwidthFine => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpDPdxCoarse => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpDPdyCoarse => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpFwidthCoarse => struct { id_result_type: IdResultType, id_result: IdResult, p: IdRef },
+            .OpEmitVertex => void,
+            .OpEndPrimitive => void,
+            .OpEmitStreamVertex => struct { stream: IdRef },
+            .OpEndStreamPrimitive => struct { stream: IdRef },
+            .OpControlBarrier => struct { execution: IdScope, memory: IdScope, semantics: IdMemorySemantics },
+            .OpMemoryBarrier => struct { memory: IdScope, semantics: IdMemorySemantics },
+            .OpAtomicLoad => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics },
+            .OpAtomicStore => struct { pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicExchange => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicCompareExchange => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, equal: IdMemorySemantics, unequal: IdMemorySemantics, value: IdRef, comparator: IdRef },
+            .OpAtomicCompareExchangeWeak => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, equal: IdMemorySemantics, unequal: IdMemorySemantics, value: IdRef, comparator: IdRef },
+            .OpAtomicIIncrement => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics },
+            .OpAtomicIDecrement => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics },
+            .OpAtomicIAdd => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicISub => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicSMin => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicUMin => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicSMax => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicUMax => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicAnd => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicOr => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicXor => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpPhi => struct { id_result_type: IdResultType, id_result: IdResult, pair_id_ref_id_ref: []const PairIdRefIdRef = &.{} },
+            .OpLoopMerge => struct { merge_block: IdRef, continue_target: IdRef, loop_control: LoopControl.Extended },
+            .OpSelectionMerge => struct { merge_block: IdRef, selection_control: SelectionControl },
+            .OpLabel => struct { id_result: IdResult },
+            .OpBranch => struct { target_label: IdRef },
+            .OpBranchConditional => struct { condition: IdRef, true_label: IdRef, false_label: IdRef, branch_weights: []const LiteralInteger = &.{} },
+            .OpSwitch => struct { selector: IdRef, default: IdRef, target: []const PairLiteralIntegerIdRef = &.{} },
+            .OpKill => void,
+            .OpReturn => void,
+            .OpReturnValue => struct { value: IdRef },
+            .OpUnreachable => void,
+            .OpLifetimeStart => struct { pointer: IdRef, size: LiteralInteger },
+            .OpLifetimeStop => struct { pointer: IdRef, size: LiteralInteger },
+            .OpGroupAsyncCopy => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, destination: IdRef, source: IdRef, num_elements: IdRef, stride: IdRef, event: IdRef },
+            .OpGroupWaitEvents => struct { execution: IdScope, num_events: IdRef, events_list: IdRef },
+            .OpGroupAll => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, predicate: IdRef },
+            .OpGroupAny => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, predicate: IdRef },
+            .OpGroupBroadcast => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, localid: IdRef },
+            .OpGroupIAdd => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupFAdd => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupFMin => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupUMin => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupSMin => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupFMax => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupUMax => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupSMax => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpReadPipe => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, pointer: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpWritePipe => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, pointer: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpReservedReadPipe => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, reserve_id: IdRef, index: IdRef, pointer: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpReservedWritePipe => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, reserve_id: IdRef, index: IdRef, pointer: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpReserveReadPipePackets => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, num_packets: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpReserveWritePipePackets => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, num_packets: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpCommitReadPipe => struct { pipe: IdRef, reserve_id: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpCommitWritePipe => struct { pipe: IdRef, reserve_id: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpIsValidReserveId => struct { id_result_type: IdResultType, id_result: IdResult, reserve_id: IdRef },
+            .OpGetNumPipePackets => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpGetMaxPipePackets => struct { id_result_type: IdResultType, id_result: IdResult, pipe: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpGroupReserveReadPipePackets => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, pipe: IdRef, num_packets: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpGroupReserveWritePipePackets => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, pipe: IdRef, num_packets: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpGroupCommitReadPipe => struct { execution: IdScope, pipe: IdRef, reserve_id: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpGroupCommitWritePipe => struct { execution: IdScope, pipe: IdRef, reserve_id: IdRef, packet_size: IdRef, packet_alignment: IdRef },
+            .OpEnqueueMarker => struct { id_result_type: IdResultType, id_result: IdResult, queue: IdRef, num_events: IdRef, wait_events: IdRef, ret_event: IdRef },
+            .OpEnqueueKernel => struct { id_result_type: IdResultType, id_result: IdResult, queue: IdRef, flags: IdRef, nd_range: IdRef, num_events: IdRef, wait_events: IdRef, ret_event: IdRef, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef, local_size: []const IdRef = &.{} },
+            .OpGetKernelNDrangeSubGroupCount => struct { id_result_type: IdResultType, id_result: IdResult, nd_range: IdRef, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef },
+            .OpGetKernelNDrangeMaxSubGroupSize => struct { id_result_type: IdResultType, id_result: IdResult, nd_range: IdRef, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef },
+            .OpGetKernelWorkGroupSize => struct { id_result_type: IdResultType, id_result: IdResult, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef },
+            .OpGetKernelPreferredWorkGroupSizeMultiple => struct { id_result_type: IdResultType, id_result: IdResult, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef },
+            .OpRetainEvent => struct { event: IdRef },
+            .OpReleaseEvent => struct { event: IdRef },
+            .OpCreateUserEvent => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpIsValidEvent => struct { id_result_type: IdResultType, id_result: IdResult, event: IdRef },
+            .OpSetUserEventStatus => struct { event: IdRef, status: IdRef },
+            .OpCaptureEventProfilingInfo => struct { event: IdRef, profiling_info: IdRef, value: IdRef },
+            .OpGetDefaultQueue => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpBuildNDRange => struct { id_result_type: IdResultType, id_result: IdResult, globalworksize: IdRef, localworksize: IdRef, globalworkoffset: IdRef },
+            .OpImageSparseSampleImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseSampleExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSparseSampleDrefImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseSampleDrefExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSparseSampleProjImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseSampleProjExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSparseSampleProjDrefImplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseSampleProjDrefExplicitLod => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ImageOperands.Extended },
+            .OpImageSparseFetch => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseGather => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, component: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseDrefGather => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, d_ref: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpImageSparseTexelsResident => struct { id_result_type: IdResultType, id_result: IdResult, resident_code: IdRef },
+            .OpNoLine => void,
+            .OpAtomicFlagTestAndSet => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics },
+            .OpAtomicFlagClear => struct { pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics },
+            .OpImageSparseRead => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpSizeOf => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpTypePipeStorage => struct { id_result: IdResult },
+            .OpConstantPipeStorage => struct { id_result_type: IdResultType, id_result: IdResult, packet_size: LiteralInteger, packet_alignment: LiteralInteger, capacity: LiteralInteger },
+            .OpCreatePipeFromPipeStorage => struct { id_result_type: IdResultType, id_result: IdResult, pipe_storage: IdRef },
+            .OpGetKernelLocalSizeForSubgroupCount => struct { id_result_type: IdResultType, id_result: IdResult, subgroup_count: IdRef, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef },
+            .OpGetKernelMaxNumSubgroups => struct { id_result_type: IdResultType, id_result: IdResult, invoke: IdRef, param: IdRef, param_size: IdRef, param_align: IdRef },
+            .OpTypeNamedBarrier => struct { id_result: IdResult },
+            .OpNamedBarrierInitialize => struct { id_result_type: IdResultType, id_result: IdResult, subgroup_count: IdRef },
+            .OpMemoryNamedBarrier => struct { named_barrier: IdRef, memory: IdScope, semantics: IdMemorySemantics },
+            .OpModuleProcessed => struct { process: LiteralString },
+            .OpExecutionModeId => struct { entry_point: IdRef, mode: ExecutionMode.Extended },
+            .OpDecorateId => struct { target: IdRef, decoration: Decoration.Extended },
+            .OpGroupNonUniformElect => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope },
+            .OpGroupNonUniformAll => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, predicate: IdRef },
+            .OpGroupNonUniformAny => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, predicate: IdRef },
+            .OpGroupNonUniformAllEqual => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef },
+            .OpGroupNonUniformBroadcast => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, id: IdRef },
+            .OpGroupNonUniformBroadcastFirst => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef },
+            .OpGroupNonUniformBallot => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, predicate: IdRef },
+            .OpGroupNonUniformInverseBallot => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef },
+            .OpGroupNonUniformBallotBitExtract => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, index: IdRef },
+            .OpGroupNonUniformBallotBitCount => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef },
+            .OpGroupNonUniformBallotFindLSB => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef },
+            .OpGroupNonUniformBallotFindMSB => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef },
+            .OpGroupNonUniformShuffle => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, id: IdRef },
+            .OpGroupNonUniformShuffleXor => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, mask: IdRef },
+            .OpGroupNonUniformShuffleUp => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, delta: IdRef },
+            .OpGroupNonUniformShuffleDown => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, delta: IdRef },
+            .OpGroupNonUniformIAdd => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformFAdd => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformIMul => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformFMul => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformSMin => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformUMin => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformFMin => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformSMax => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformUMax => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformFMax => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformBitwiseAnd => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformBitwiseOr => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformBitwiseXor => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformLogicalAnd => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformLogicalOr => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformLogicalXor => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, value: IdRef, clustersize: ?IdRef = null },
+            .OpGroupNonUniformQuadBroadcast => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, index: IdRef },
+            .OpGroupNonUniformQuadSwap => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, direction: IdRef },
+            .OpCopyLogical => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpPtrEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpPtrNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpPtrDiff => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpTerminateInvocation => void,
+            .OpSubgroupBallotKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
+            .OpSubgroupFirstInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
+            .OpSubgroupAllKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
+            .OpSubgroupAnyKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
+            .OpSubgroupAllEqualKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
+            .OpSubgroupReadInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef, index: IdRef },
+            .OpTraceRayKHR => struct { accel: IdRef, ray_flags: IdRef, cull_mask: IdRef, sbt_offset: IdRef, sbt_stride: IdRef, miss_index: IdRef, ray_origin: IdRef, ray_tmin: IdRef, ray_direction: IdRef, ray_tmax: IdRef, payload: IdRef },
+            .OpExecuteCallableKHR => struct { sbt_index: IdRef, callable_data: IdRef },
+            .OpConvertUToAccelerationStructureKHR => struct { id_result_type: IdResultType, id_result: IdResult, accel: IdRef },
+            .OpIgnoreIntersectionKHR => void,
+            .OpTerminateRayKHR => void,
+            .OpTypeRayQueryKHR => struct { id_result: IdResult },
+            .OpRayQueryInitializeKHR => struct { rayquery: IdRef, accel: IdRef, rayflags: IdRef, cullmask: IdRef, rayorigin: IdRef, raytmin: IdRef, raydirection: IdRef, raytmax: IdRef },
+            .OpRayQueryTerminateKHR => struct { rayquery: IdRef },
+            .OpRayQueryGenerateIntersectionKHR => struct { rayquery: IdRef, hitt: IdRef },
+            .OpRayQueryConfirmIntersectionKHR => struct { rayquery: IdRef },
+            .OpRayQueryProceedKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
+            .OpRayQueryGetIntersectionTypeKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpGroupIAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupFAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupFMinNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupUMinNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupSMinNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupFMaxNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupUMaxNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpGroupSMaxNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
+            .OpFragmentMaskFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef },
+            .OpFragmentFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, fragment_index: IdRef },
+            .OpReadClockKHR => struct { id_result_type: IdResultType, id_result: IdResult, scope: IdScope },
+            .OpImageSampleFootprintNV => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, granularity: IdRef, coarse: IdRef, image_operands: ?ImageOperands.Extended = null },
+            .OpGroupNonUniformPartitionNV => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
+            .OpWritePackedPrimitiveIndices4x8NV => struct { index_offset: IdRef, packed_indices: IdRef },
+            .OpReportIntersectionKHR => struct { id_result_type: IdResultType, id_result: IdResult, hit: IdRef, hitkind: IdRef },
+            .OpIgnoreIntersectionNV => void,
+            .OpTerminateRayNV => void,
+            .OpTraceNV => struct { accel: IdRef, ray_flags: IdRef, cull_mask: IdRef, sbt_offset: IdRef, sbt_stride: IdRef, miss_index: IdRef, ray_origin: IdRef, ray_tmin: IdRef, ray_direction: IdRef, ray_tmax: IdRef, payloadid: IdRef },
+            .OpTypeAccelerationStructureKHR => struct { id_result: IdResult },
+            .OpExecuteCallableNV => struct { sbt_index: IdRef, callable_dataid: IdRef },
+            .OpTypeCooperativeMatrixNV => struct { id_result: IdResult, component_type: IdRef, execution: IdScope, rows: IdRef, columns: IdRef },
+            .OpCooperativeMatrixLoadNV => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, stride: IdRef, column_major: IdRef, memory_access: ?MemoryAccess.Extended = null },
+            .OpCooperativeMatrixStoreNV => struct { pointer: IdRef, object: IdRef, stride: IdRef, column_major: IdRef, memory_access: ?MemoryAccess.Extended = null },
+            .OpCooperativeMatrixMulAddNV => struct { id_result_type: IdResultType, id_result: IdResult, a: IdRef, b: IdRef, c: IdRef },
+            .OpCooperativeMatrixLengthNV => struct { id_result_type: IdResultType, id_result: IdResult, type: IdRef },
+            .OpBeginInvocationInterlockEXT => void,
+            .OpEndInvocationInterlockEXT => void,
+            .OpDemoteToHelperInvocationEXT => void,
+            .OpIsHelperInvocationEXT => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSubgroupShuffleINTEL => struct { id_result_type: IdResultType, id_result: IdResult, data: IdRef, invocationid: IdRef },
+            .OpSubgroupShuffleDownINTEL => struct { id_result_type: IdResultType, id_result: IdResult, current: IdRef, next: IdRef, delta: IdRef },
+            .OpSubgroupShuffleUpINTEL => struct { id_result_type: IdResultType, id_result: IdResult, previous: IdRef, current: IdRef, delta: IdRef },
+            .OpSubgroupShuffleXorINTEL => struct { id_result_type: IdResultType, id_result: IdResult, data: IdRef, value: IdRef },
+            .OpSubgroupBlockReadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, ptr: IdRef },
+            .OpSubgroupBlockWriteINTEL => struct { ptr: IdRef, data: IdRef },
+            .OpSubgroupImageBlockReadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef },
+            .OpSubgroupImageBlockWriteINTEL => struct { image: IdRef, coordinate: IdRef, data: IdRef },
+            .OpSubgroupImageMediaBlockReadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, width: IdRef, height: IdRef },
+            .OpSubgroupImageMediaBlockWriteINTEL => struct { image: IdRef, coordinate: IdRef, width: IdRef, height: IdRef, data: IdRef },
+            .OpUCountLeadingZerosINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpUCountTrailingZerosINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
+            .OpAbsISubINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpAbsUSubINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpIAddSatINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUAddSatINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpIAverageINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUAverageINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpIAverageRoundedINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUAverageRoundedINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpISubSatINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUSubSatINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpIMul32x16INTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpUMul32x16INTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
+            .OpConstFunctionPointerINTEL => struct { id_result_type: IdResultType, id_result: IdResult, function: IdRef },
+            .OpFunctionPointerCallINTEL => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: []const IdRef = &.{} },
+            .OpAsmTargetINTEL => struct { id_result_type: IdResultType, id_result: IdResult, asm_target: LiteralString },
+            .OpAsmINTEL => struct { id_result_type: IdResultType, id_result: IdResult, asm_type: IdRef, target: IdRef, asm_instructions: LiteralString, constraints: LiteralString },
+            .OpAsmCallINTEL => struct { id_result_type: IdResultType, id_result: IdResult, @"asm": IdRef, argument_0: []const IdRef = &.{} },
+            .OpAtomicFMinEXT => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAtomicFMaxEXT => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpAssumeTrueKHR => struct { condition: IdRef },
+            .OpExpectKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef, expectedvalue: IdRef },
+            .OpDecorateString => struct { target: IdRef, decoration: Decoration.Extended },
+            .OpMemberDecorateString => struct { struct_type: IdRef, member: LiteralInteger, decoration: Decoration.Extended },
+            .OpVmeImageINTEL => struct { id_result_type: IdResultType, id_result: IdResult, image_type: IdRef, sampler: IdRef },
+            .OpTypeVmeImageINTEL => struct { id_result: IdResult, image_type: IdRef },
+            .OpTypeAvcImePayloadINTEL => struct { id_result: IdResult },
+            .OpTypeAvcRefPayloadINTEL => struct { id_result: IdResult },
+            .OpTypeAvcSicPayloadINTEL => struct { id_result: IdResult },
+            .OpTypeAvcMcePayloadINTEL => struct { id_result: IdResult },
+            .OpTypeAvcMceResultINTEL => struct { id_result: IdResult },
+            .OpTypeAvcImeResultINTEL => struct { id_result: IdResult },
+            .OpTypeAvcImeResultSingleReferenceStreamoutINTEL => struct { id_result: IdResult },
+            .OpTypeAvcImeResultDualReferenceStreamoutINTEL => struct { id_result: IdResult },
+            .OpTypeAvcImeSingleReferenceStreaminINTEL => struct { id_result: IdResult },
+            .OpTypeAvcImeDualReferenceStreaminINTEL => struct { id_result: IdResult },
+            .OpTypeAvcRefResultINTEL => struct { id_result: IdResult },
+            .OpTypeAvcSicResultINTEL => struct { id_result: IdResult },
+            .OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, slice_type: IdRef, qp: IdRef },
+            .OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, reference_base_penalty: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, slice_type: IdRef, qp: IdRef },
+            .OpSubgroupAvcMceSetInterShapePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packed_shape_penalty: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, slice_type: IdRef, qp: IdRef },
+            .OpSubgroupAvcMceSetInterDirectionPenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, direction_cost: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, slice_type: IdRef, qp: IdRef },
+            .OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL => struct { id_result_type: IdResultType, id_result: IdResult, slice_type: IdRef, qp: IdRef },
+            .OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packed_cost_center_delta: IdRef, packed_cost_table: IdRef, cost_precision: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, slice_type: IdRef, qp: IdRef },
+            .OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpSubgroupAvcMceSetAcOnlyHaarINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL => struct { id_result_type: IdResultType, id_result: IdResult, source_field_polarity: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL => struct { id_result_type: IdResultType, id_result: IdResult, reference_field_polarity: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL => struct { id_result_type: IdResultType, id_result: IdResult, forward_reference_field_polarity: IdRef, backward_reference_field_polarity: IdRef, payload: IdRef },
+            .OpSubgroupAvcMceConvertToImePayloadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceConvertToImeResultINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceConvertToRefPayloadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceConvertToRefResultINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceConvertToSicPayloadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceConvertToSicResultINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetMotionVectorsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterDistortionsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetBestInterDistortionsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterMajorShapeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterMinorShapeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterDirectionsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterMotionVectorCountINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterReferenceIdsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packed_reference_ids: IdRef, packed_reference_parameter_field_polarities: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeInitializeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_coord: IdRef, partition_mask: IdRef, sad_adjustment: IdRef },
+            .OpSubgroupAvcImeSetSingleReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, ref_offset: IdRef, search_window_config: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeSetDualReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, fwd_ref_offset: IdRef, bwd_ref_offset: IdRef, id_ref_4: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeRefWindowSizeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, search_window_config: IdRef, dual_ref: IdRef },
+            .OpSubgroupAvcImeAdjustRefOffsetINTEL => struct { id_result_type: IdResultType, id_result: IdResult, ref_offset: IdRef, src_coord: IdRef, ref_window_size: IdRef, image_size: IdRef },
+            .OpSubgroupAvcImeConvertToMcePayloadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeSetMaxMotionVectorCountINTEL => struct { id_result_type: IdResultType, id_result: IdResult, max_motion_vector_count: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL => struct { id_result_type: IdResultType, id_result: IdResult, threshold: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeSetWeightedSadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packed_sad_weights: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeEvaluateWithDualReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, fwd_ref_image: IdRef, bwd_ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, ref_image: IdRef, payload: IdRef, streamin_components: IdRef },
+            .OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, fwd_ref_image: IdRef, bwd_ref_image: IdRef, payload: IdRef, streamin_components: IdRef },
+            .OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, fwd_ref_image: IdRef, bwd_ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, ref_image: IdRef, payload: IdRef, streamin_components: IdRef },
+            .OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, fwd_ref_image: IdRef, bwd_ref_image: IdRef, payload: IdRef, streamin_components: IdRef },
+            .OpSubgroupAvcImeConvertToMceResultINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeGetSingleReferenceStreaminINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeGetDualReferenceStreaminINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeStripDualReferenceStreamoutINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef, major_shape: IdRef },
+            .OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef, major_shape: IdRef },
+            .OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef, major_shape: IdRef },
+            .OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef, major_shape: IdRef, direction: IdRef },
+            .OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef, major_shape: IdRef, direction: IdRef },
+            .OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef, major_shape: IdRef, direction: IdRef },
+            .OpSubgroupAvcImeGetBorderReachedINTEL => struct { id_result_type: IdResultType, id_result: IdResult, image_select: IdRef, payload: IdRef },
+            .OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcFmeInitializeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_coord: IdRef, motion_vectors: IdRef, major_shapes: IdRef, minor_shapes: IdRef, direction: IdRef, pixel_resolution: IdRef, sad_adjustment: IdRef },
+            .OpSubgroupAvcBmeInitializeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_coord: IdRef, motion_vectors: IdRef, major_shapes: IdRef, minor_shapes: IdRef, direction: IdRef, pixel_resolution: IdRef, bidirectional_weight: IdRef, sad_adjustment: IdRef },
+            .OpSubgroupAvcRefConvertToMcePayloadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcRefSetBidirectionalMixDisableINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcRefSetBilinearFilterEnableINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcRefEvaluateWithDualReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, fwd_ref_image: IdRef, bwd_ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, packed_reference_ids: IdRef, payload: IdRef },
+            .OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, packed_reference_ids: IdRef, packed_reference_field_polarities: IdRef, payload: IdRef },
+            .OpSubgroupAvcRefConvertToMceResultINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicInitializeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_coord: IdRef },
+            .OpSubgroupAvcSicConfigureSkcINTEL => struct { id_result_type: IdResultType, id_result: IdResult, skip_block_partition_type: IdRef, skip_motion_vector_mask: IdRef, motion_vectors: IdRef, bidirectional_weight: IdRef, sad_adjustment: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicConfigureIpeLumaINTEL => struct { id_result_type: IdResultType, id_result: IdResult, luma_intra_partition_mask: IdRef, intra_neighbour_availabilty: IdRef, left_edge_luma_pixels: IdRef, upper_left_corner_luma_pixel: IdRef, upper_edge_luma_pixels: IdRef, upper_right_edge_luma_pixels: IdRef, sad_adjustment: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicConfigureIpeLumaChromaINTEL => struct { id_result_type: IdResultType, id_result: IdResult, luma_intra_partition_mask: IdRef, intra_neighbour_availabilty: IdRef, left_edge_luma_pixels: IdRef, upper_left_corner_luma_pixel: IdRef, upper_edge_luma_pixels: IdRef, upper_right_edge_luma_pixels: IdRef, left_edge_chroma_pixels: IdRef, upper_left_corner_chroma_pixel: IdRef, upper_edge_chroma_pixels: IdRef, sad_adjustment: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicGetMotionVectorMaskINTEL => struct { id_result_type: IdResultType, id_result: IdResult, skip_block_partition_type: IdRef, direction: IdRef },
+            .OpSubgroupAvcSicConvertToMcePayloadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packed_shape_penalty: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL => struct { id_result_type: IdResultType, id_result: IdResult, luma_mode_penalty: IdRef, luma_packed_neighbor_modes: IdRef, luma_packed_non_dc_penalty: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL => struct { id_result_type: IdResultType, id_result: IdResult, chroma_mode_base_penalty: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicSetBilinearFilterEnableINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packed_sad_coefficients: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL => struct { id_result_type: IdResultType, id_result: IdResult, block_based_skip_type: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicEvaluateIpeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicEvaluateWithDualReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, fwd_ref_image: IdRef, bwd_ref_image: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, packed_reference_ids: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL => struct { id_result_type: IdResultType, id_result: IdResult, src_image: IdRef, packed_reference_ids: IdRef, packed_reference_field_polarities: IdRef, payload: IdRef },
+            .OpSubgroupAvcSicConvertToMceResultINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetIpeLumaShapeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetPackedIpeLumaModesINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetIpeChromaModeINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpSubgroupAvcSicGetInterRawSadsINTEL => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
+            .OpVariableLengthArrayINTEL => struct { id_result_type: IdResultType, id_result: IdResult, lenght: IdRef },
+            .OpSaveMemoryINTEL => struct { id_result_type: IdResultType, id_result: IdResult },
+            .OpRestoreMemoryINTEL => struct { ptr: IdRef },
+            .OpLoopControlINTEL => struct { loop_control_parameters: []const LiteralInteger = &.{} },
+            .OpPtrCastToCrossWorkgroupINTEL => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpCrossWorkgroupCastToPtrINTEL => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef },
+            .OpReadPipeBlockingINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packet_size: IdRef, packet_alignment: IdRef },
+            .OpWritePipeBlockingINTEL => struct { id_result_type: IdResultType, id_result: IdResult, packet_size: IdRef, packet_alignment: IdRef },
+            .OpFPGARegINTEL => struct { id_result_type: IdResultType, id_result: IdResult, result: IdRef, input: IdRef },
+            .OpRayQueryGetRayTMinKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
+            .OpRayQueryGetRayFlagsKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
+            .OpRayQueryGetIntersectionTKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionInstanceCustomIndexKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionInstanceIdKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionGeometryIndexKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionPrimitiveIndexKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionBarycentricsKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionFrontFaceKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionCandidateAABBOpaqueKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
+            .OpRayQueryGetIntersectionObjectRayDirectionKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionObjectRayOriginKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetWorldRayDirectionKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
+            .OpRayQueryGetWorldRayOriginKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
+            .OpRayQueryGetIntersectionObjectToWorldKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpRayQueryGetIntersectionWorldToObjectKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
+            .OpAtomicFAddEXT => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memory: IdScope, semantics: IdMemorySemantics, value: IdRef },
+            .OpTypeBufferSurfaceINTEL => struct { id_result: IdResult },
+            .OpTypeStructContinuedINTEL => struct { id_ref: []const IdRef = &.{} },
+            .OpConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },
+            .OpSpecConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },
+        };
+    }
 };
 pub const ImageOperands = packed struct {
     Bias: bool align(@alignOf(u32)) = false,
@@ -618,6 +1238,46 @@ pub const ImageOperands = packed struct {
     _reserved_bit_29: bool = false,
     _reserved_bit_30: bool = false,
     _reserved_bit_31: bool = false,
+
+    pub const MakeTexelAvailableKHR: ImageOperands = .{ .MakeTexelAvailable = true };
+    pub const MakeTexelVisibleKHR: ImageOperands = .{ .MakeTexelVisible = true };
+    pub const NonPrivateTexelKHR: ImageOperands = .{ .NonPrivateTexel = true };
+    pub const VolatileTexelKHR: ImageOperands = .{ .VolatileTexel = true };
+
+    pub const Extended = struct {
+        Bias: ?struct { id_ref: IdRef } = null,
+        Lod: ?struct { id_ref: IdRef } = null,
+        Grad: ?struct { id_ref_0: IdRef, id_ref_1: IdRef } = null,
+        ConstOffset: ?struct { id_ref: IdRef } = null,
+        Offset: ?struct { id_ref: IdRef } = null,
+        ConstOffsets: ?struct { id_ref: IdRef } = null,
+        Sample: ?struct { id_ref: IdRef } = null,
+        MinLod: ?struct { id_ref: IdRef } = null,
+        MakeTexelAvailable: ?struct { id_scope: IdScope } = null,
+        MakeTexelVisible: ?struct { id_scope: IdScope } = null,
+        NonPrivateTexel: bool = false,
+        VolatileTexel: bool = false,
+        SignExtend: bool = false,
+        ZeroExtend: bool = false,
+        _reserved_bit_14: bool = false,
+        _reserved_bit_15: bool = false,
+        _reserved_bit_16: bool = false,
+        _reserved_bit_17: bool = false,
+        _reserved_bit_18: bool = false,
+        _reserved_bit_19: bool = false,
+        _reserved_bit_20: bool = false,
+        _reserved_bit_21: bool = false,
+        _reserved_bit_22: bool = false,
+        _reserved_bit_23: bool = false,
+        _reserved_bit_24: bool = false,
+        _reserved_bit_25: bool = false,
+        _reserved_bit_26: bool = false,
+        _reserved_bit_27: bool = false,
+        _reserved_bit_28: bool = false,
+        _reserved_bit_29: bool = false,
+        _reserved_bit_30: bool = false,
+        _reserved_bit_31: bool = false,
+    };
 };
 pub const FPFastMathMode = packed struct {
     NotNaN: bool align(@alignOf(u32)) = false,
@@ -720,6 +1380,41 @@ pub const LoopControl = packed struct {
     _reserved_bit_29: bool = false,
     _reserved_bit_30: bool = false,
     _reserved_bit_31: bool = false,
+
+    pub const Extended = struct {
+        Unroll: bool = false,
+        DontUnroll: bool = false,
+        DependencyInfinite: bool = false,
+        DependencyLength: ?struct { literal_integer: LiteralInteger } = null,
+        MinIterations: ?struct { literal_integer: LiteralInteger } = null,
+        MaxIterations: ?struct { literal_integer: LiteralInteger } = null,
+        IterationMultiple: ?struct { literal_integer: LiteralInteger } = null,
+        PeelCount: ?struct { literal_integer: LiteralInteger } = null,
+        PartialCount: ?struct { literal_integer: LiteralInteger } = null,
+        _reserved_bit_9: bool = false,
+        _reserved_bit_10: bool = false,
+        _reserved_bit_11: bool = false,
+        _reserved_bit_12: bool = false,
+        _reserved_bit_13: bool = false,
+        _reserved_bit_14: bool = false,
+        _reserved_bit_15: bool = false,
+        InitiationIntervalINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        MaxConcurrencyINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        DependencyArrayINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        PipelineEnableINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        LoopCoalesceINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        MaxInterleavingINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        SpeculatedIterationsINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        NoFusionINTEL: ?struct { literal_integer: LiteralInteger } = null,
+        _reserved_bit_24: bool = false,
+        _reserved_bit_25: bool = false,
+        _reserved_bit_26: bool = false,
+        _reserved_bit_27: bool = false,
+        _reserved_bit_28: bool = false,
+        _reserved_bit_29: bool = false,
+        _reserved_bit_30: bool = false,
+        _reserved_bit_31: bool = false,
+    };
 };
 pub const FunctionControl = packed struct {
     Inline: bool align(@alignOf(u32)) = false,
@@ -788,6 +1483,10 @@ pub const MemorySemantics = packed struct {
     _reserved_bit_29: bool = false,
     _reserved_bit_30: bool = false,
     _reserved_bit_31: bool = false,
+
+    pub const OutputMemoryKHR: MemorySemantics = .{ .OutputMemory = true };
+    pub const MakeAvailableKHR: MemorySemantics = .{ .MakeAvailable = true };
+    pub const MakeVisibleKHR: MemorySemantics = .{ .MakeVisible = true };
 };
 pub const MemoryAccess = packed struct {
     Volatile: bool align(@alignOf(u32)) = false,
@@ -822,6 +1521,45 @@ pub const MemoryAccess = packed struct {
     _reserved_bit_29: bool = false,
     _reserved_bit_30: bool = false,
     _reserved_bit_31: bool = false,
+
+    pub const MakePointerAvailableKHR: MemoryAccess = .{ .MakePointerAvailable = true };
+    pub const MakePointerVisibleKHR: MemoryAccess = .{ .MakePointerVisible = true };
+    pub const NonPrivatePointerKHR: MemoryAccess = .{ .NonPrivatePointer = true };
+
+    pub const Extended = struct {
+        Volatile: bool = false,
+        Aligned: ?struct { literal_integer: LiteralInteger } = null,
+        Nontemporal: bool = false,
+        MakePointerAvailable: ?struct { id_scope: IdScope } = null,
+        MakePointerVisible: ?struct { id_scope: IdScope } = null,
+        NonPrivatePointer: bool = false,
+        _reserved_bit_6: bool = false,
+        _reserved_bit_7: bool = false,
+        _reserved_bit_8: bool = false,
+        _reserved_bit_9: bool = false,
+        _reserved_bit_10: bool = false,
+        _reserved_bit_11: bool = false,
+        _reserved_bit_12: bool = false,
+        _reserved_bit_13: bool = false,
+        _reserved_bit_14: bool = false,
+        _reserved_bit_15: bool = false,
+        _reserved_bit_16: bool = false,
+        _reserved_bit_17: bool = false,
+        _reserved_bit_18: bool = false,
+        _reserved_bit_19: bool = false,
+        _reserved_bit_20: bool = false,
+        _reserved_bit_21: bool = false,
+        _reserved_bit_22: bool = false,
+        _reserved_bit_23: bool = false,
+        _reserved_bit_24: bool = false,
+        _reserved_bit_25: bool = false,
+        _reserved_bit_26: bool = false,
+        _reserved_bit_27: bool = false,
+        _reserved_bit_28: bool = false,
+        _reserved_bit_29: bool = false,
+        _reserved_bit_30: bool = false,
+        _reserved_bit_31: bool = false,
+    };
 };
 pub const KernelProfilingInfo = packed struct {
     CmdExecTime: bool align(@alignOf(u32)) = false,
@@ -932,7 +1670,6 @@ pub const SourceLanguage = enum(u32) {
     OpenCL_C = 3,
     OpenCL_CPP = 4,
     HLSL = 5,
-    _,
 };
 pub const ExecutionModel = enum(u32) {
     Vertex = 0,
@@ -944,33 +1681,35 @@ pub const ExecutionModel = enum(u32) {
     Kernel = 6,
     TaskNV = 5267,
     MeshNV = 5268,
-    RayGenerationNV = 5313,
     RayGenerationKHR = 5313,
-    IntersectionNV = 5314,
     IntersectionKHR = 5314,
-    AnyHitNV = 5315,
     AnyHitKHR = 5315,
-    ClosestHitNV = 5316,
     ClosestHitKHR = 5316,
-    MissNV = 5317,
     MissKHR = 5317,
-    CallableNV = 5318,
     CallableKHR = 5318,
-    _,
+
+    pub const RayGenerationNV = ExecutionModel.RayGenerationKHR;
+    pub const IntersectionNV = ExecutionModel.IntersectionKHR;
+    pub const AnyHitNV = ExecutionModel.AnyHitKHR;
+    pub const ClosestHitNV = ExecutionModel.ClosestHitKHR;
+    pub const MissNV = ExecutionModel.MissKHR;
+    pub const CallableNV = ExecutionModel.CallableKHR;
 };
 pub const AddressingModel = enum(u32) {
     Logical = 0,
     Physical32 = 1,
     Physical64 = 2,
     PhysicalStorageBuffer64 = 5348,
-    _,
+
+    pub const PhysicalStorageBuffer64EXT = AddressingModel.PhysicalStorageBuffer64;
 };
 pub const MemoryModel = enum(u32) {
     Simple = 0,
     GLSL450 = 1,
     OpenCL = 2,
     Vulkan = 3,
-    _,
+
+    pub const VulkanKHR = MemoryModel.Vulkan;
 };
 pub const ExecutionMode = enum(u32) {
     Invocations = 0,
@@ -1039,7 +1778,75 @@ pub const ExecutionMode = enum(u32) {
     NoGlobalOffsetINTEL = 5895,
     NumSIMDWorkitemsINTEL = 5896,
     SchedulerTargetFmaxMhzINTEL = 5903,
-    _,
+
+    pub const Extended = union(ExecutionMode) {
+        Invocations: struct { literal_integer: LiteralInteger },
+        SpacingEqual,
+        SpacingFractionalEven,
+        SpacingFractionalOdd,
+        VertexOrderCw,
+        VertexOrderCcw,
+        PixelCenterInteger,
+        OriginUpperLeft,
+        OriginLowerLeft,
+        EarlyFragmentTests,
+        PointMode,
+        Xfb,
+        DepthReplacing,
+        DepthGreater,
+        DepthLess,
+        DepthUnchanged,
+        LocalSize: struct { x_size: LiteralInteger, y_size: LiteralInteger, z_size: LiteralInteger },
+        LocalSizeHint: struct { x_size: LiteralInteger, y_size: LiteralInteger, z_size: LiteralInteger },
+        InputPoints,
+        InputLines,
+        InputLinesAdjacency,
+        Triangles,
+        InputTrianglesAdjacency,
+        Quads,
+        Isolines,
+        OutputVertices: struct { vertex_count: LiteralInteger },
+        OutputPoints,
+        OutputLineStrip,
+        OutputTriangleStrip,
+        VecTypeHint: struct { vector_type: LiteralInteger },
+        ContractionOff,
+        Initializer,
+        Finalizer,
+        SubgroupSize: struct { subgroup_size: LiteralInteger },
+        SubgroupsPerWorkgroup: struct { subgroups_per_workgroup: LiteralInteger },
+        SubgroupsPerWorkgroupId: struct { subgroups_per_workgroup: IdRef },
+        LocalSizeId: struct { x_size: IdRef, y_size: IdRef, z_size: IdRef },
+        LocalSizeHintId: struct { local_size_hint: IdRef },
+        PostDepthCoverage,
+        DenormPreserve: struct { target_width: LiteralInteger },
+        DenormFlushToZero: struct { target_width: LiteralInteger },
+        SignedZeroInfNanPreserve: struct { target_width: LiteralInteger },
+        RoundingModeRTE: struct { target_width: LiteralInteger },
+        RoundingModeRTZ: struct { target_width: LiteralInteger },
+        StencilRefReplacingEXT,
+        OutputLinesNV,
+        OutputPrimitivesNV: struct { primitive_count: LiteralInteger },
+        DerivativeGroupQuadsNV,
+        DerivativeGroupLinearNV,
+        OutputTrianglesNV,
+        PixelInterlockOrderedEXT,
+        PixelInterlockUnorderedEXT,
+        SampleInterlockOrderedEXT,
+        SampleInterlockUnorderedEXT,
+        ShadingRateInterlockOrderedEXT,
+        ShadingRateInterlockUnorderedEXT,
+        SharedLocalMemorySizeINTEL: struct { size: LiteralInteger },
+        RoundingModeRTPINTEL: struct { target_width: LiteralInteger },
+        RoundingModeRTNINTEL: struct { target_width: LiteralInteger },
+        FloatingPointModeALTINTEL: struct { target_width: LiteralInteger },
+        FloatingPointModeIEEEINTEL: struct { target_width: LiteralInteger },
+        MaxWorkgroupSizeINTEL: struct { literal_integer_0: LiteralInteger, literal_integer_1: LiteralInteger, literal_integer_2: LiteralInteger },
+        MaxWorkDimINTEL: struct { literal_integer: LiteralInteger },
+        NoGlobalOffsetINTEL,
+        NumSIMDWorkitemsINTEL: struct { literal_integer: LiteralInteger },
+        SchedulerTargetFmaxMhzINTEL: struct { literal_integer: LiteralInteger },
+    };
 };
 pub const StorageClass = enum(u32) {
     UniformConstant = 0,
@@ -1065,7 +1872,14 @@ pub const StorageClass = enum(u32) {
     CodeSectionINTEL = 5605,
     DeviceOnlyINTEL = 5936,
     HostOnlyINTEL = 5937,
-    _,
+
+    pub const CallableDataNV = StorageClass.CallableDataKHR;
+    pub const IncomingCallableDataNV = StorageClass.IncomingCallableDataKHR;
+    pub const RayPayloadNV = StorageClass.RayPayloadKHR;
+    pub const HitAttributeNV = StorageClass.HitAttributeKHR;
+    pub const IncomingRayPayloadNV = StorageClass.IncomingRayPayloadKHR;
+    pub const ShaderRecordBufferNV = StorageClass.ShaderRecordBufferKHR;
+    pub const PhysicalStorageBufferEXT = StorageClass.PhysicalStorageBuffer;
 };
 pub const Dim = enum(u32) {
     @"1D" = 0,
@@ -1075,7 +1889,6 @@ pub const Dim = enum(u32) {
     Rect = 4,
     Buffer = 5,
     SubpassData = 6,
-    _,
 };
 pub const SamplerAddressingMode = enum(u32) {
     None = 0,
@@ -1083,12 +1896,10 @@ pub const SamplerAddressingMode = enum(u32) {
     Clamp = 2,
     Repeat = 3,
     RepeatMirrored = 4,
-    _,
 };
 pub const SamplerFilterMode = enum(u32) {
     Nearest = 0,
     Linear = 1,
-    _,
 };
 pub const ImageFormat = enum(u32) {
     Unknown = 0,
@@ -1133,7 +1944,6 @@ pub const ImageFormat = enum(u32) {
     R8ui = 39,
     R64ui = 40,
     R64i = 41,
-    _,
 };
 pub const ImageChannelOrder = enum(u32) {
     R = 0,
@@ -1156,7 +1966,6 @@ pub const ImageChannelOrder = enum(u32) {
     sRGBA = 17,
     sBGRA = 18,
     ABGR = 19,
-    _,
 };
 pub const ImageChannelDataType = enum(u32) {
     SnormInt8 = 0,
@@ -1176,36 +1985,30 @@ pub const ImageChannelDataType = enum(u32) {
     Float = 14,
     UnormInt24 = 15,
     UnormInt101010_2 = 16,
-    _,
 };
 pub const FPRoundingMode = enum(u32) {
     RTE = 0,
     RTZ = 1,
     RTP = 2,
     RTN = 3,
-    _,
 };
 pub const FPDenormMode = enum(u32) {
     Preserve = 0,
     FlushToZero = 1,
-    _,
 };
 pub const FPOperationMode = enum(u32) {
     IEEE = 0,
     ALT = 1,
-    _,
 };
 pub const LinkageType = enum(u32) {
     Export = 0,
     Import = 1,
     LinkOnceODR = 2,
-    _,
 };
 pub const AccessQualifier = enum(u32) {
     ReadOnly = 0,
     WriteOnly = 1,
     ReadWrite = 2,
-    _,
 };
 pub const FunctionParameterAttribute = enum(u32) {
     Zext = 0,
@@ -1216,7 +2019,6 @@ pub const FunctionParameterAttribute = enum(u32) {
     NoCapture = 5,
     NoWrite = 6,
     NoReadWrite = 7,
-    _,
 };
 pub const Decoration = enum(u32) {
     RelaxedPrecision = 0,
@@ -1278,11 +2080,8 @@ pub const Decoration = enum(u32) {
     PerTaskNV = 5273,
     PerVertexNV = 5285,
     NonUniform = 5300,
-    NonUniformEXT = 5300,
     RestrictPointer = 5355,
-    RestrictPointerEXT = 5355,
     AliasedPointer = 5356,
-    AliasedPointerEXT = 5356,
     SIMTCallINTEL = 5599,
     ReferencedIndirectlyINTEL = 5602,
     ClobberINTEL = 5607,
@@ -1293,9 +2092,7 @@ pub const Decoration = enum(u32) {
     StackCallINTEL = 5627,
     GlobalVariableOffsetINTEL = 5628,
     CounterBuffer = 5634,
-    HlslCounterBufferGOOGLE = 5634,
     UserSemantic = 5635,
-    HlslSemanticGOOGLE = 5635,
     UserTypeGOOGLE = 5636,
     FunctionRoundingModeINTEL = 5822,
     FunctionDenormModeINTEL = 5823,
@@ -1322,7 +2119,113 @@ pub const Decoration = enum(u32) {
     FunctionFloatingPointModeINTEL = 6080,
     SingleElementVectorINTEL = 6085,
     VectorComputeCallableFunctionINTEL = 6087,
-    _,
+
+    pub const NonUniformEXT = Decoration.NonUniform;
+    pub const RestrictPointerEXT = Decoration.RestrictPointer;
+    pub const AliasedPointerEXT = Decoration.AliasedPointer;
+    pub const HlslCounterBufferGOOGLE = Decoration.CounterBuffer;
+    pub const HlslSemanticGOOGLE = Decoration.UserSemantic;
+
+    pub const Extended = union(Decoration) {
+        RelaxedPrecision,
+        SpecId: struct { specialization_constant_id: LiteralInteger },
+        Block,
+        BufferBlock,
+        RowMajor,
+        ColMajor,
+        ArrayStride: struct { array_stride: LiteralInteger },
+        MatrixStride: struct { matrix_stride: LiteralInteger },
+        GLSLShared,
+        GLSLPacked,
+        CPacked,
+        BuiltIn: struct { built_in: BuiltIn },
+        NoPerspective,
+        Flat,
+        Patch,
+        Centroid,
+        Sample,
+        Invariant,
+        Restrict,
+        Aliased,
+        Volatile,
+        Constant,
+        Coherent,
+        NonWritable,
+        NonReadable,
+        Uniform,
+        UniformId: struct { execution: IdScope },
+        SaturatedConversion,
+        Stream: struct { stream_number: LiteralInteger },
+        Location: struct { location: LiteralInteger },
+        Component: struct { component: LiteralInteger },
+        Index: struct { index: LiteralInteger },
+        Binding: struct { binding_point: LiteralInteger },
+        DescriptorSet: struct { descriptor_set: LiteralInteger },
+        Offset: struct { byte_offset: LiteralInteger },
+        XfbBuffer: struct { xfb_buffer_number: LiteralInteger },
+        XfbStride: struct { xfb_stride: LiteralInteger },
+        FuncParamAttr: struct { function_parameter_attribute: FunctionParameterAttribute },
+        FPRoundingMode: struct { fprounding_mode: FPRoundingMode },
+        FPFastMathMode: struct { fpfast_math_mode: FPFastMathMode },
+        LinkageAttributes: struct { name: LiteralString, linkage_type: LinkageType },
+        NoContraction,
+        InputAttachmentIndex: struct { attachment_index: LiteralInteger },
+        Alignment: struct { alignment: LiteralInteger },
+        MaxByteOffset: struct { max_byte_offset: LiteralInteger },
+        AlignmentId: struct { alignment: IdRef },
+        MaxByteOffsetId: struct { max_byte_offset: IdRef },
+        NoSignedWrap,
+        NoUnsignedWrap,
+        ExplicitInterpAMD,
+        OverrideCoverageNV,
+        PassthroughNV,
+        ViewportRelativeNV,
+        SecondaryViewportRelativeNV: struct { offset: LiteralInteger },
+        PerPrimitiveNV,
+        PerViewNV,
+        PerTaskNV,
+        PerVertexNV,
+        NonUniform,
+        RestrictPointer,
+        AliasedPointer,
+        SIMTCallINTEL: struct { n: LiteralInteger },
+        ReferencedIndirectlyINTEL,
+        ClobberINTEL: struct { register: LiteralString },
+        SideEffectsINTEL,
+        VectorComputeVariableINTEL,
+        FuncParamIOKindINTEL: struct { kind: LiteralInteger },
+        VectorComputeFunctionINTEL,
+        StackCallINTEL,
+        GlobalVariableOffsetINTEL: struct { offset: LiteralInteger },
+        CounterBuffer: struct { counter_buffer: IdRef },
+        UserSemantic: struct { semantic: LiteralString },
+        UserTypeGOOGLE: struct { user_type: LiteralString },
+        FunctionRoundingModeINTEL: struct { target_width: LiteralInteger, fp_rounding_mode: FPRoundingMode },
+        FunctionDenormModeINTEL: struct { target_width: LiteralInteger, fp_denorm_mode: FPDenormMode },
+        RegisterINTEL,
+        MemoryINTEL: struct { memory_type: LiteralString },
+        NumbanksINTEL: struct { banks: LiteralInteger },
+        BankwidthINTEL: struct { bank_width: LiteralInteger },
+        MaxPrivateCopiesINTEL: struct { maximum_copies: LiteralInteger },
+        SinglepumpINTEL,
+        DoublepumpINTEL,
+        MaxReplicatesINTEL: struct { maximum_replicates: LiteralInteger },
+        SimpleDualPortINTEL,
+        MergeINTEL: struct { merge_key: LiteralString, merge_type: LiteralString },
+        BankBitsINTEL: struct { bank_bits: []const LiteralInteger = &.{} },
+        ForcePow2DepthINTEL: struct { force_key: LiteralInteger },
+        BurstCoalesceINTEL,
+        CacheSizeINTEL: struct { cache_size_in_bytes: LiteralInteger },
+        DontStaticallyCoalesceINTEL,
+        PrefetchINTEL: struct { prefetcher_size_in_bytes: LiteralInteger },
+        StallEnableINTEL,
+        FuseLoopsInFunctionINTEL,
+        BufferLocationINTEL: struct { buffer_location_id: LiteralInteger },
+        IOPipeStorageINTEL: struct { io_pipe_id: LiteralInteger },
+        FunctionFloatingPointModeINTEL: struct { target_width: LiteralInteger, fp_operation_mode: FPOperationMode },
+        SingleElementVectorINTEL,
+        VectorComputeCallableFunctionINTEL,
+    };
 };
 pub const BuiltIn = enum(u32) {
     Position = 0,
@@ -1367,15 +2270,10 @@ pub const BuiltIn = enum(u32) {
     VertexIndex = 42,
     InstanceIndex = 43,
     SubgroupEqMask = 4416,
-    SubgroupEqMaskKHR = 4416,
     SubgroupGeMask = 4417,
-    SubgroupGeMaskKHR = 4417,
     SubgroupGtMask = 4418,
-    SubgroupGtMaskKHR = 4418,
     SubgroupLeMask = 4419,
-    SubgroupLeMaskKHR = 4419,
     SubgroupLtMask = 4420,
-    SubgroupLtMaskKHR = 4420,
     BaseVertex = 4424,
     BaseInstance = 4425,
     DrawIndex = 4426,
@@ -1408,42 +2306,47 @@ pub const BuiltIn = enum(u32) {
     BaryCoordNV = 5286,
     BaryCoordNoPerspNV = 5287,
     FragSizeEXT = 5292,
-    FragmentSizeNV = 5292,
     FragInvocationCountEXT = 5293,
-    InvocationsPerPixelNV = 5293,
-    LaunchIdNV = 5319,
     LaunchIdKHR = 5319,
-    LaunchSizeNV = 5320,
     LaunchSizeKHR = 5320,
-    WorldRayOriginNV = 5321,
     WorldRayOriginKHR = 5321,
-    WorldRayDirectionNV = 5322,
     WorldRayDirectionKHR = 5322,
-    ObjectRayOriginNV = 5323,
     ObjectRayOriginKHR = 5323,
-    ObjectRayDirectionNV = 5324,
     ObjectRayDirectionKHR = 5324,
-    RayTminNV = 5325,
     RayTminKHR = 5325,
-    RayTmaxNV = 5326,
     RayTmaxKHR = 5326,
-    InstanceCustomIndexNV = 5327,
     InstanceCustomIndexKHR = 5327,
-    ObjectToWorldNV = 5330,
     ObjectToWorldKHR = 5330,
-    WorldToObjectNV = 5331,
     WorldToObjectKHR = 5331,
     HitTNV = 5332,
-    HitKindNV = 5333,
     HitKindKHR = 5333,
-    IncomingRayFlagsNV = 5351,
     IncomingRayFlagsKHR = 5351,
     RayGeometryIndexKHR = 5352,
     WarpsPerSMNV = 5374,
     SMCountNV = 5375,
     WarpIDNV = 5376,
     SMIDNV = 5377,
-    _,
+
+    pub const SubgroupEqMaskKHR = BuiltIn.SubgroupEqMask;
+    pub const SubgroupGeMaskKHR = BuiltIn.SubgroupGeMask;
+    pub const SubgroupGtMaskKHR = BuiltIn.SubgroupGtMask;
+    pub const SubgroupLeMaskKHR = BuiltIn.SubgroupLeMask;
+    pub const SubgroupLtMaskKHR = BuiltIn.SubgroupLtMask;
+    pub const FragmentSizeNV = BuiltIn.FragSizeEXT;
+    pub const InvocationsPerPixelNV = BuiltIn.FragInvocationCountEXT;
+    pub const LaunchIdNV = BuiltIn.LaunchIdKHR;
+    pub const LaunchSizeNV = BuiltIn.LaunchSizeKHR;
+    pub const WorldRayOriginNV = BuiltIn.WorldRayOriginKHR;
+    pub const WorldRayDirectionNV = BuiltIn.WorldRayDirectionKHR;
+    pub const ObjectRayOriginNV = BuiltIn.ObjectRayOriginKHR;
+    pub const ObjectRayDirectionNV = BuiltIn.ObjectRayDirectionKHR;
+    pub const RayTminNV = BuiltIn.RayTminKHR;
+    pub const RayTmaxNV = BuiltIn.RayTmaxKHR;
+    pub const InstanceCustomIndexNV = BuiltIn.InstanceCustomIndexKHR;
+    pub const ObjectToWorldNV = BuiltIn.ObjectToWorldKHR;
+    pub const WorldToObjectNV = BuiltIn.WorldToObjectKHR;
+    pub const HitKindNV = BuiltIn.HitKindKHR;
+    pub const IncomingRayFlagsNV = BuiltIn.IncomingRayFlagsKHR;
 };
 pub const Scope = enum(u32) {
     CrossDevice = 0,
@@ -1452,9 +2355,9 @@ pub const Scope = enum(u32) {
     Subgroup = 3,
     Invocation = 4,
     QueueFamily = 5,
-    QueueFamilyKHR = 5,
     ShaderCallKHR = 6,
-    _,
+
+    pub const QueueFamilyKHR = Scope.QueueFamily;
 };
 pub const GroupOperation = enum(u32) {
     Reduce = 0,
@@ -1464,13 +2367,11 @@ pub const GroupOperation = enum(u32) {
     PartitionedReduceNV = 6,
     PartitionedInclusiveScanNV = 7,
     PartitionedExclusiveScanNV = 8,
-    _,
 };
 pub const KernelEnqueueFlags = enum(u32) {
     NoWait = 0,
     WaitKernel = 1,
     WaitWorkGroup = 2,
-    _,
 };
 pub const Capability = enum(u32) {
     Matrix = 0,
@@ -1550,7 +2451,7 @@ pub const Capability = enum(u32) {
     WorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
     SubgroupVoteKHR = 4431,
     StorageBuffer16BitAccess = 4433,
-    StorageUniform16 = 4434,
+    UniformAndStorageBuffer16BitAccess = 4434,
     StoragePushConstant16 = 4435,
     StorageInputOutput16 = 4436,
     DeviceGroup = 4437,
@@ -1580,7 +2481,7 @@ pub const Capability = enum(u32) {
     ShaderClockKHR = 5055,
     SampleMaskOverrideCoverageNV = 5249,
     GeometryShaderPassthroughNV = 5251,
-    ShaderViewportIndexLayerNV = 5254,
+    ShaderViewportIndexLayerEXT = 5254,
     ShaderViewportMaskNV = 5255,
     ShaderStereoViewNV = 5259,
     PerViewAttributesNV = 5260,
@@ -1589,7 +2490,7 @@ pub const Capability = enum(u32) {
     ImageFootprintNV = 5282,
     FragmentBarycentricNV = 5284,
     ComputeDerivativeGroupQuadsNV = 5288,
-    ShadingRateNV = 5291,
+    FragmentDensityEXT = 5291,
     GroupNonUniformPartitionedNV = 5297,
     ShaderNonUniform = 5301,
     RuntimeDescriptorArray = 5302,
@@ -1654,21 +2555,37 @@ pub const Capability = enum(u32) {
     AtomicFloat32AddEXT = 6033,
     AtomicFloat64AddEXT = 6034,
     LongConstantCompositeINTEL = 6089,
-    _,
+
+    pub const StorageUniformBufferBlock16 = Capability.StorageBuffer16BitAccess;
+    pub const StorageUniform16 = Capability.UniformAndStorageBuffer16BitAccess;
+    pub const ShaderViewportIndexLayerNV = Capability.ShaderViewportIndexLayerEXT;
+    pub const ShadingRateNV = Capability.FragmentDensityEXT;
+    pub const ShaderNonUniformEXT = Capability.ShaderNonUniform;
+    pub const RuntimeDescriptorArrayEXT = Capability.RuntimeDescriptorArray;
+    pub const InputAttachmentArrayDynamicIndexingEXT = Capability.InputAttachmentArrayDynamicIndexing;
+    pub const UniformTexelBufferArrayDynamicIndexingEXT = Capability.UniformTexelBufferArrayDynamicIndexing;
+    pub const StorageTexelBufferArrayDynamicIndexingEXT = Capability.StorageTexelBufferArrayDynamicIndexing;
+    pub const UniformBufferArrayNonUniformIndexingEXT = Capability.UniformBufferArrayNonUniformIndexing;
+    pub const SampledImageArrayNonUniformIndexingEXT = Capability.SampledImageArrayNonUniformIndexing;
+    pub const StorageBufferArrayNonUniformIndexingEXT = Capability.StorageBufferArrayNonUniformIndexing;
+    pub const StorageImageArrayNonUniformIndexingEXT = Capability.StorageImageArrayNonUniformIndexing;
+    pub const InputAttachmentArrayNonUniformIndexingEXT = Capability.InputAttachmentArrayNonUniformIndexing;
+    pub const UniformTexelBufferArrayNonUniformIndexingEXT = Capability.UniformTexelBufferArrayNonUniformIndexing;
+    pub const StorageTexelBufferArrayNonUniformIndexingEXT = Capability.StorageTexelBufferArrayNonUniformIndexing;
+    pub const VulkanMemoryModelKHR = Capability.VulkanMemoryModel;
+    pub const VulkanMemoryModelDeviceScopeKHR = Capability.VulkanMemoryModelDeviceScope;
+    pub const PhysicalStorageBufferAddressesEXT = Capability.PhysicalStorageBufferAddresses;
 };
 pub const RayQueryIntersection = enum(u32) {
     RayQueryCandidateIntersectionKHR = 0,
     RayQueryCommittedIntersectionKHR = 1,
-    _,
 };
 pub const RayQueryCommittedIntersectionType = enum(u32) {
     RayQueryCommittedIntersectionNoneKHR = 0,
     RayQueryCommittedIntersectionTriangleKHR = 1,
     RayQueryCommittedIntersectionGeneratedKHR = 2,
-    _,
 };
 pub const RayQueryCandidateIntersectionType = enum(u32) {
     RayQueryCandidateIntersectionTriangleKHR = 0,
     RayQueryCandidateIntersectionAABBKHR = 1,
-    _,
 };