authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2024-03-19 09:34:59+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-03-19 09:34:59+01:00
log7057bffc14602add697eb566b83934b7ad3fd81c
tree88f8279ed60317545704ba0ae49c8e2fb53c5418
parentc52a2c338d706862c2cc73f7321172eb24ab4430
parent2f9e37ade072b32ab40ef56f343b0fc572fdf8f1
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #19337 from Snektron/spirv-globals

spirv: rework generic global

23 files changed, 14997 insertions(+), 3357 deletions(-)

src/codegen/spirv.zig+432-259
......@@ -30,6 +30,8 @@ const SpvAssembler = @import("spirv/Assembler.zig");
3030
3131const InstMap = std.AutoHashMapUnmanaged(Air.Inst.Index, IdRef);
3232
33pub const zig_call_abi_ver = 3;
34
3335/// We want to store some extra facts about types as mapped from Zig to SPIR-V.
3436/// This structure is used to keep that extra information, as well as
3537/// the cached reference to the type.
......@@ -252,15 +254,18 @@ pub const Object = struct {
252254 /// Note: Function does not actually generate the decl, it just allocates an index.
253255 pub fn resolveDecl(self: *Object, mod: *Module, decl_index: InternPool.DeclIndex) !SpvModule.Decl.Index {
254256 const decl = mod.declPtr(decl_index);
257 assert(decl.has_tv); // TODO: Do we need to handle a situation where this is false?
255258 try mod.markDeclAlive(decl);
256259
257260 const entry = try self.decl_link.getOrPut(self.gpa, decl_index);
258261 if (!entry.found_existing) {
259262 // TODO: Extern fn?
260 const kind: SpvModule.DeclKind = if (decl.val.isFuncBody(mod))
263 const kind: SpvModule.Decl.Kind = if (decl.val.isFuncBody(mod))
261264 .func
262 else
263 .global;
265 else switch (decl.@"addrspace") {
266 .generic => .invocation_global,
267 else => .global,
268 };
264269
265270 entry.value_ptr.* = try self.spv.allocDecl(kind);
266271 }
......@@ -443,87 +448,90 @@ const DeclGen = struct {
443448 return self.inst_results.get(index).?; // Assertion means instruction does not dominate usage.
444449 }
445450
446 fn resolveAnonDecl(self: *DeclGen, val: InternPool.Index, storage_class: StorageClass) !IdRef {
451 fn resolveAnonDecl(self: *DeclGen, val: InternPool.Index) !IdRef {
447452 // TODO: This cannot be a function at this point, but it should probably be handled anyway.
453
454 const mod = self.module;
455 const ty = Type.fromInterned(mod.intern_pool.typeOf(val));
456 const decl_ptr_ty_ref = try self.ptrType(ty, .Generic);
457
448458 const spv_decl_index = blk: {
449 const entry = try self.object.anon_decl_link.getOrPut(self.object.gpa, .{ val, storage_class });
459 const entry = try self.object.anon_decl_link.getOrPut(self.object.gpa, .{ val, .Function });
450460 if (entry.found_existing) {
451 try self.addFunctionDep(entry.value_ptr.*, storage_class);
452 return self.spv.declPtr(entry.value_ptr.*).result_id;
461 try self.addFunctionDep(entry.value_ptr.*, .Function);
462
463 const result_id = self.spv.declPtr(entry.value_ptr.*).result_id;
464 return try self.castToGeneric(self.typeId(decl_ptr_ty_ref), result_id);
453465 }
454466
455 const spv_decl_index = try self.spv.allocDecl(.global);
456 try self.addFunctionDep(spv_decl_index, storage_class);
467 const spv_decl_index = try self.spv.allocDecl(.invocation_global);
468 try self.addFunctionDep(spv_decl_index, .Function);
457469 entry.value_ptr.* = spv_decl_index;
458470 break :blk spv_decl_index;
459471 };
460472
461 const mod = self.module;
462 const ty = Type.fromInterned(mod.intern_pool.typeOf(val));
463 const ptr_ty_ref = try self.ptrType(ty, storage_class);
464
465 const var_id = self.spv.declPtr(spv_decl_index).result_id;
466
467 const section = &self.spv.sections.types_globals_constants;
468 try section.emit(self.spv.gpa, .OpVariable, .{
469 .id_result_type = self.typeId(ptr_ty_ref),
470 .id_result = var_id,
471 .storage_class = storage_class,
472 });
473
474473 // TODO: At some point we will be able to generate this all constant here, but then all of
475474 // constant() will need to be implemented such that it doesn't generate any at-runtime code.
476475 // NOTE: Because this is a global, we really only want to initialize it once. Therefore the
477 // constant lowering of this value will need to be deferred to some other function, which
478 // is then added to the list of initializers using endGlobal().
476 // constant lowering of this value will need to be deferred to an initializer similar to
477 // other globals.
479478
480 // Save the current state so that we can temporarily generate into a different function.
481 // TODO: This should probably be made a little more robust.
482 const func = self.func;
483 defer self.func = func;
484 const block_label = self.current_block_label;
485 defer self.current_block_label = block_label;
479 const result_id = self.spv.declPtr(spv_decl_index).result_id;
486480
487 self.func = .{};
488 defer self.func.deinit(self.gpa);
481 {
482 // Save the current state so that we can temporarily generate into a different function.
483 // TODO: This should probably be made a little more robust.
484 const func = self.func;
485 defer self.func = func;
486 const block_label = self.current_block_label;
487 defer self.current_block_label = block_label;
489488
490 // TODO: Merge this with genDecl?
491 const begin = self.spv.beginGlobal();
489 self.func = .{};
490 defer self.func.deinit(self.gpa);
492491
493 const void_ty_ref = try self.resolveType(Type.void, .direct);
494 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{
495 .return_type = void_ty_ref,
496 .parameters = &.{},
497 } });
492 const void_ty_ref = try self.resolveType(Type.void, .direct);
493 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{
494 .return_type = void_ty_ref,
495 .parameters = &.{},
496 } });
498497
499 const initializer_id = self.spv.allocId();
500 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
501 .id_result_type = self.typeId(void_ty_ref),
502 .id_result = initializer_id,
503 .function_control = .{},
504 .function_type = self.typeId(initializer_proto_ty_ref),
505 });
506 const root_block_id = self.spv.allocId();
507 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
508 .id_result = root_block_id,
509 });
510 self.current_block_label = root_block_id;
498 const initializer_id = self.spv.allocId();
511499
512 const val_id = try self.constant(ty, Value.fromInterned(val), .indirect);
513 try self.func.body.emit(self.spv.gpa, .OpStore, .{
514 .pointer = var_id,
515 .object = val_id,
516 });
500 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
501 .id_result_type = self.typeId(void_ty_ref),
502 .id_result = initializer_id,
503 .function_control = .{},
504 .function_type = self.typeId(initializer_proto_ty_ref),
505 });
506 const root_block_id = self.spv.allocId();
507 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
508 .id_result = root_block_id,
509 });
510 self.current_block_label = root_block_id;
517511
518 self.spv.endGlobal(spv_decl_index, begin, var_id, initializer_id);
519 try self.func.body.emit(self.spv.gpa, .OpReturn, {});
520 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
521 try self.spv.addFunction(spv_decl_index, self.func);
512 const val_id = try self.constant(ty, Value.fromInterned(val), .indirect);
513 try self.func.body.emit(self.spv.gpa, .OpStore, .{
514 .pointer = result_id,
515 .object = val_id,
516 });
522517
523 try self.spv.debugNameFmt(var_id, "__anon_{d}", .{@intFromEnum(val)});
524 try self.spv.debugNameFmt(initializer_id, "initializer of __anon_{d}", .{@intFromEnum(val)});
518 try self.func.body.emit(self.spv.gpa, .OpReturn, {});
519 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
520 try self.spv.addFunction(spv_decl_index, self.func);
521
522 try self.spv.debugNameFmt(initializer_id, "initializer of __anon_{d}", .{@intFromEnum(val)});
523
524 const fn_decl_ptr_ty_ref = try self.ptrType(ty, .Function);
525 try self.spv.sections.types_globals_constants.emit(self.spv.gpa, .OpExtInst, .{
526 .id_result_type = self.typeId(fn_decl_ptr_ty_ref),
527 .id_result = result_id,
528 .set = try self.spv.importInstructionSet(.zig),
529 .instruction = .{ .inst = 0 }, // TODO: Put this definition somewhere...
530 .id_ref_4 = &.{initializer_id},
531 });
532 }
525533
526 return var_id;
534 return try self.castToGeneric(self.typeId(decl_ptr_ty_ref), result_id);
527535 }
528536
529537 fn addFunctionDep(self: *DeclGen, decl_index: SpvModule.Decl.Index, storage_class: StorageClass) !void {
......@@ -768,18 +776,75 @@ const DeclGen = struct {
768776 };
769777 }
770778
771 /// Construct a composite value at runtime. If the parameters are in direct
772 /// representation, then the result is also in direct representation. Otherwise,
773 /// if the parameters are in indirect representation, then the result is too.
774 fn constructComposite(self: *DeclGen, ty: Type, constituents: []const IdRef) !IdRef {
775 const constituents_id = self.spv.allocId();
776 const type_id = try self.resolveType(ty, .direct);
777 try self.func.body.emit(self.spv.gpa, .OpCompositeConstruct, .{
778 .id_result_type = self.typeId(type_id),
779 .id_result = constituents_id,
780 .constituents = constituents,
781 });
782 return constituents_id;
779 /// Construct a struct at runtime.
780 /// ty must be a struct type.
781 /// Constituents should be in `indirect` representation (as the elements of a struct should be).
782 /// Result is in `direct` representation.
783 fn constructStruct(self: *DeclGen, ty: Type, types: []const Type, constituents: []const IdRef) !IdRef {
784 assert(types.len == constituents.len);
785 // The Khronos LLVM-SPIRV translator crashes because it cannot construct structs which'
786 // operands are not constant.
787 // See https://github.com/KhronosGroup/SPIRV-LLVM-Translator/issues/1349
788 // For now, just initialize the struct by setting the fields manually...
789 // TODO: Make this OpCompositeConstruct when we can
790 const ptr_composite_id = try self.alloc(ty, .{ .storage_class = .Function });
791 for (constituents, types, 0..) |constitent_id, member_ty, index| {
792 const ptr_member_ty_ref = try self.ptrType(member_ty, .Function);
793 const ptr_id = try self.accessChain(ptr_member_ty_ref, ptr_composite_id, &.{@as(u32, @intCast(index))});
794 try self.func.body.emit(self.spv.gpa, .OpStore, .{
795 .pointer = ptr_id,
796 .object = constitent_id,
797 });
798 }
799 return try self.load(ty, ptr_composite_id, .{});
800 }
801
802 /// Construct a vector at runtime.
803 /// ty must be an vector type.
804 /// Constituents should be in `indirect` representation (as the elements of an vector should be).
805 /// Result is in `direct` representation.
806 fn constructVector(self: *DeclGen, ty: Type, constituents: []const IdRef) !IdRef {
807 // The Khronos LLVM-SPIRV translator crashes because it cannot construct structs which'
808 // operands are not constant.
809 // See https://github.com/KhronosGroup/SPIRV-LLVM-Translator/issues/1349
810 // For now, just initialize the struct by setting the fields manually...
811 // TODO: Make this OpCompositeConstruct when we can
812 const mod = self.module;
813 const ptr_composite_id = try self.alloc(ty, .{ .storage_class = .Function });
814 const ptr_elem_ty_ref = try self.ptrType(ty.elemType2(mod), .Function);
815 for (constituents, 0..) |constitent_id, index| {
816 const ptr_id = try self.accessChain(ptr_elem_ty_ref, ptr_composite_id, &.{@as(u32, @intCast(index))});
817 try self.func.body.emit(self.spv.gpa, .OpStore, .{
818 .pointer = ptr_id,
819 .object = constitent_id,
820 });
821 }
822
823 return try self.load(ty, ptr_composite_id, .{});
824 }
825
826 /// Construct an array at runtime.
827 /// ty must be an array type.
828 /// Constituents should be in `indirect` representation (as the elements of an array should be).
829 /// Result is in `direct` representation.
830 fn constructArray(self: *DeclGen, ty: Type, constituents: []const IdRef) !IdRef {
831 // The Khronos LLVM-SPIRV translator crashes because it cannot construct structs which'
832 // operands are not constant.
833 // See https://github.com/KhronosGroup/SPIRV-LLVM-Translator/issues/1349
834 // For now, just initialize the struct by setting the fields manually...
835 // TODO: Make this OpCompositeConstruct when we can
836 const mod = self.module;
837 const ptr_composite_id = try self.alloc(ty, .{ .storage_class = .Function });
838 const ptr_elem_ty_ref = try self.ptrType(ty.elemType2(mod), .Function);
839 for (constituents, 0..) |constitent_id, index| {
840 const ptr_id = try self.accessChain(ptr_elem_ty_ref, ptr_composite_id, &.{@as(u32, @intCast(index))});
841 try self.func.body.emit(self.spv.gpa, .OpStore, .{
842 .pointer = ptr_id,
843 .object = constitent_id,
844 });
845 }
846
847 return try self.load(ty, ptr_composite_id, .{});
783848 }
784849
785850 /// This function generates a load for a constant in direct (ie, non-memory) representation.
......@@ -887,15 +952,18 @@ const DeclGen = struct {
887952 });
888953
889954 var constituents: [2]IdRef = undefined;
955 var types: [2]Type = undefined;
890956 if (eu_layout.error_first) {
891957 constituents[0] = try self.constant(err_ty, err_val, .indirect);
892958 constituents[1] = try self.constant(payload_ty, payload_val, .indirect);
959 types = .{ err_ty, payload_ty };
893960 } else {
894961 constituents[0] = try self.constant(payload_ty, payload_val, .indirect);
895962 constituents[1] = try self.constant(err_ty, err_val, .indirect);
963 types = .{ payload_ty, err_ty };
896964 }
897965
898 return try self.constructComposite(ty, &constituents);
966 return try self.constructStruct(ty, &types, &constituents);
899967 },
900968 .enum_tag => {
901969 const int_val = try val.intFromEnum(ty, mod);
......@@ -907,7 +975,11 @@ const DeclGen = struct {
907975 const ptr_ty = ty.slicePtrFieldType(mod);
908976 const ptr_id = try self.constantPtr(ptr_ty, Value.fromInterned(slice.ptr));
909977 const len_id = try self.constant(Type.usize, Value.fromInterned(slice.len), .indirect);
910 return self.constructComposite(ty, &.{ ptr_id, len_id });
978 return self.constructStruct(
979 ty,
980 &.{ ptr_ty, Type.usize },
981 &.{ ptr_id, len_id },
982 );
911983 },
912984 .opt => {
913985 const payload_ty = ty.optionalChild(mod);
......@@ -934,7 +1006,11 @@ const DeclGen = struct {
9341006 else
9351007 try self.spv.constUndef(try self.resolveType(payload_ty, .indirect));
9361008
937 return try self.constructComposite(ty, &.{ payload_id, has_pl_id });
1009 return try self.constructStruct(
1010 ty,
1011 &.{ payload_ty, Type.bool },
1012 &.{ payload_id, has_pl_id },
1013 );
9381014 },
9391015 .aggregate => |aggregate| switch (ip.indexToKey(ty.ip_index)) {
9401016 inline .array_type, .vector_type => |array_type, tag| {
......@@ -971,9 +1047,9 @@ const DeclGen = struct {
9711047 const sentinel = Value.fromInterned(array_type.sentinel);
9721048 constituents[constituents.len - 1] = try self.constant(elem_ty, sentinel, .indirect);
9731049 }
974 return self.constructComposite(ty, constituents);
1050 return self.constructArray(ty, constituents);
9751051 },
976 inline .vector_type => return self.constructComposite(ty, constituents),
1052 inline .vector_type => return self.constructVector(ty, constituents),
9771053 else => unreachable,
9781054 }
9791055 },
......@@ -983,6 +1059,9 @@ const DeclGen = struct {
9831059 return self.todo("packed struct constants", .{});
9841060 }
9851061
1062 var types = std.ArrayList(Type).init(self.gpa);
1063 defer types.deinit();
1064
9861065 var constituents = std.ArrayList(IdRef).init(self.gpa);
9871066 defer constituents.deinit();
9881067
......@@ -998,10 +1077,11 @@ const DeclGen = struct {
9981077 const field_val = try val.fieldValue(mod, field_index);
9991078 const field_id = try self.constant(field_ty, field_val, .indirect);
10001079
1080 try types.append(field_ty);
10011081 try constituents.append(field_id);
10021082 }
10031083
1004 return try self.constructComposite(ty, constituents.items);
1084 return try self.constructStruct(ty, types.items, constituents.items);
10051085 },
10061086 .anon_struct_type => unreachable, // TODO
10071087 else => unreachable,
......@@ -1107,19 +1187,10 @@ const DeclGen = struct {
11071187 unreachable; // TODO
11081188 }
11091189
1110 const final_storage_class = self.spvStorageClass(ty.ptrAddressSpace(mod));
1111 const actual_storage_class = switch (final_storage_class) {
1112 .Generic => .CrossWorkgroup,
1113 else => |other| other,
1114 };
1115
1116 const decl_id = try self.resolveAnonDecl(decl_val, actual_storage_class);
1117 const decl_ptr_ty_ref = try self.ptrType(decl_ty, final_storage_class);
1118
1119 const ptr_id = switch (final_storage_class) {
1120 .Generic => try self.castToGeneric(self.typeId(decl_ptr_ty_ref), decl_id),
1121 else => decl_id,
1122 };
1190 // Anon decl refs are always generic.
1191 assert(ty.ptrAddressSpace(mod) == .generic);
1192 const decl_ptr_ty_ref = try self.ptrType(decl_ty, .Generic);
1193 const ptr_id = try self.resolveAnonDecl(decl_val);
11231194
11241195 if (decl_ptr_ty_ref != ty_ref) {
11251196 // Differing pointer types, insert a cast.
......@@ -1157,8 +1228,13 @@ const DeclGen = struct {
11571228 }
11581229
11591230 const spv_decl_index = try self.object.resolveDecl(mod, decl_index);
1231 const spv_decl = self.spv.declPtr(spv_decl_index);
1232
1233 const decl_id = switch (spv_decl.kind) {
1234 .func => unreachable, // TODO: Is this possible?
1235 .global, .invocation_global => spv_decl.result_id,
1236 };
11601237
1161 const decl_id = self.spv.declPtr(spv_decl_index).result_id;
11621238 const final_storage_class = self.spvStorageClass(decl.@"addrspace");
11631239 try self.addFunctionDep(spv_decl_index, final_storage_class);
11641240
......@@ -1437,6 +1513,13 @@ const DeclGen = struct {
14371513 if (self.type_map.get(ty.toIntern())) |info| return info.ty_ref;
14381514
14391515 const fn_info = mod.typeToFunc(ty).?;
1516
1517 comptime assert(zig_call_abi_ver == 3);
1518 switch (fn_info.cc) {
1519 .Unspecified, .Kernel, .Fragment, .Vertex, .C => {},
1520 else => unreachable, // TODO
1521 }
1522
14401523 // TODO: Put this somewhere in Sema.zig
14411524 if (fn_info.is_var_args)
14421525 return self.fail("VarArgs functions are unsupported for SPIR-V", .{});
......@@ -1841,7 +1924,7 @@ const DeclGen = struct {
18411924 for (wip.results) |*result| {
18421925 result.* = try wip.dg.convertToIndirect(wip.ty, result.*);
18431926 }
1844 return try wip.dg.constructComposite(wip.result_ty, wip.results);
1927 return try wip.dg.constructArray(wip.result_ty, wip.results);
18451928 } else {
18461929 return wip.results[0];
18471930 }
......@@ -1884,13 +1967,15 @@ const DeclGen = struct {
18841967 /// (anyerror!void has the same layout as anyerror).
18851968 /// Each test declaration generates a function like.
18861969 /// %anyerror = OpTypeInt 0 16
1970 /// %p_invocation_globals_struct_ty = ...
18871971 /// %p_anyerror = OpTypePointer CrossWorkgroup %anyerror
1888 /// %K = OpTypeFunction %void %p_anyerror
1972 /// %K = OpTypeFunction %void %p_invocation_globals_struct_ty %p_anyerror
18891973 ///
18901974 /// %test = OpFunction %void %K
1975 /// %p_invocation_globals = OpFunctionParameter p_invocation_globals_struct_ty
18911976 /// %p_err = OpFunctionParameter %p_anyerror
18921977 /// %lbl = OpLabel
1893 /// %result = OpFunctionCall %anyerror %func
1978 /// %result = OpFunctionCall %anyerror %func %p_invocation_globals
18941979 /// OpStore %p_err %result
18951980 /// OpFunctionEnd
18961981 /// TODO is to also write out the error as a function call parameter, and to somehow fetch
......@@ -1900,10 +1985,12 @@ const DeclGen = struct {
19001985 const ptr_anyerror_ty_ref = try self.ptrType(Type.anyerror, .CrossWorkgroup);
19011986 const void_ty_ref = try self.resolveType(Type.void, .direct);
19021987
1903 const kernel_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{
1904 .return_type = void_ty_ref,
1905 .parameters = &.{ptr_anyerror_ty_ref},
1906 } });
1988 const kernel_proto_ty_ref = try self.spv.resolve(.{
1989 .function_type = .{
1990 .return_type = void_ty_ref,
1991 .parameters = &.{ptr_anyerror_ty_ref},
1992 },
1993 });
19071994
19081995 const test_id = self.spv.declPtr(spv_test_decl_index).result_id;
19091996
......@@ -1954,147 +2041,164 @@ const DeclGen = struct {
19542041 const ip = &mod.intern_pool;
19552042 const decl = mod.declPtr(self.decl_index);
19562043 const spv_decl_index = try self.object.resolveDecl(mod, self.decl_index);
1957 const target = self.getTarget();
2044 const result_id = self.spv.declPtr(spv_decl_index).result_id;
19582045
1959 const decl_id = self.spv.declPtr(spv_decl_index).result_id;
2046 switch (self.spv.declPtr(spv_decl_index).kind) {
2047 .func => {
2048 assert(decl.ty.zigTypeTag(mod) == .Fn);
2049 const fn_info = mod.typeToFunc(decl.ty).?;
2050 const return_ty_ref = try self.resolveFnReturnType(Type.fromInterned(fn_info.return_type));
19602051
1961 if (decl.val.getFunction(mod)) |_| {
1962 assert(decl.ty.zigTypeTag(mod) == .Fn);
1963 const fn_info = mod.typeToFunc(decl.ty).?;
1964 const return_ty_ref = try self.resolveFnReturnType(Type.fromInterned(fn_info.return_type));
2052 const prototype_ty_ref = try self.resolveType(decl.ty, .direct);
2053 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
2054 .id_result_type = self.typeId(return_ty_ref),
2055 .id_result = result_id,
2056 .function_control = switch (fn_info.cc) {
2057 .Inline => .{ .Inline = true },
2058 else => .{},
2059 },
2060 .function_type = self.typeId(prototype_ty_ref),
2061 });
19652062
1966 const prototype_id = try self.resolveTypeId(decl.ty);
1967 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
1968 .id_result_type = self.typeId(return_ty_ref),
1969 .id_result = decl_id,
1970 .function_control = switch (fn_info.cc) {
1971 .Inline => .{ .Inline = true },
1972 else => .{},
1973 },
1974 .function_type = prototype_id,
1975 });
2063 comptime assert(zig_call_abi_ver == 3);
2064 try self.args.ensureUnusedCapacity(self.gpa, fn_info.param_types.len);
2065 for (fn_info.param_types.get(ip)) |param_ty_index| {
2066 const param_ty = Type.fromInterned(param_ty_index);
2067 if (!param_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
2068
2069 const param_type_id = try self.resolveTypeId(param_ty);
2070 const arg_result_id = self.spv.allocId();
2071 try self.func.prologue.emit(self.spv.gpa, .OpFunctionParameter, .{
2072 .id_result_type = param_type_id,
2073 .id_result = arg_result_id,
2074 });
2075 self.args.appendAssumeCapacity(arg_result_id);
2076 }
19762077
1977 try self.args.ensureUnusedCapacity(self.gpa, fn_info.param_types.len);
1978 for (fn_info.param_types.get(ip)) |param_ty_index| {
1979 const param_ty = Type.fromInterned(param_ty_index);
1980 if (!param_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
2078 // TODO: This could probably be done in a better way...
2079 const root_block_id = self.spv.allocId();
19812080
1982 const param_type_id = try self.resolveTypeId(param_ty);
1983 const arg_result_id = self.spv.allocId();
1984 try self.func.prologue.emit(self.spv.gpa, .OpFunctionParameter, .{
1985 .id_result_type = param_type_id,
1986 .id_result = arg_result_id,
2081 // The root block of a function declaration should appear before OpVariable instructions,
2082 // so it is generated into the function's prologue.
2083 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
2084 .id_result = root_block_id,
19872085 });
1988 self.args.appendAssumeCapacity(arg_result_id);
1989 }
2086 self.current_block_label = root_block_id;
19902087
1991 // TODO: This could probably be done in a better way...
1992 const root_block_id = self.spv.allocId();
2088 const main_body = self.air.getMainBody();
2089 switch (self.control_flow) {
2090 .structured => {
2091 _ = try self.genStructuredBody(.selection, main_body);
2092 // We always expect paths to here to end, but we still need the block
2093 // to act as a dummy merge block.
2094 try self.func.body.emit(self.spv.gpa, .OpUnreachable, {});
2095 },
2096 .unstructured => {
2097 try self.genBody(main_body);
2098 },
2099 }
2100 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
2101 // Append the actual code into the functions section.
2102 try self.spv.addFunction(spv_decl_index, self.func);
19932103
1994 // The root block of a function declaration should appear before OpVariable instructions,
1995 // so it is generated into the function's prologue.
1996 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
1997 .id_result = root_block_id,
1998 });
1999 self.current_block_label = root_block_id;
2104 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
2105 try self.spv.debugName(result_id, fqn);
20002106
2001 const main_body = self.air.getMainBody();
2002 switch (self.control_flow) {
2003 .structured => {
2004 _ = try self.genStructuredBody(.selection, main_body);
2005 // We always expect paths to here to end, but we still need the block
2006 // to act as a dummy merge block.
2007 try self.func.body.emit(self.spv.gpa, .OpUnreachable, {});
2008 },
2009 .unstructured => {
2010 try self.genBody(main_body);
2011 },
2012 }
2013 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
2014 // Append the actual code into the functions section.
2015 try self.spv.addFunction(spv_decl_index, self.func);
2107 // Temporarily generate a test kernel declaration if this is a test function.
2108 if (self.module.test_functions.contains(self.decl_index)) {
2109 try self.generateTestEntryPoint(fqn, spv_decl_index);
2110 }
2111 },
2112 .global => {
2113 const maybe_init_val: ?Value = blk: {
2114 if (decl.val.getVariable(mod)) |payload| {
2115 if (payload.is_extern) break :blk null;
2116 break :blk Value.fromInterned(payload.init);
2117 }
2118 break :blk decl.val;
2119 };
2120 assert(maybe_init_val == null); // TODO
20162121
2017 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
2018 try self.spv.debugName(decl_id, fqn);
2122 const final_storage_class = self.spvStorageClass(decl.@"addrspace");
2123 assert(final_storage_class != .Generic); // These should be instance globals
20192124
2020 // Temporarily generate a test kernel declaration if this is a test function.
2021 if (self.module.test_functions.contains(self.decl_index)) {
2022 try self.generateTestEntryPoint(fqn, spv_decl_index);
2023 }
2024 } else {
2025 const opt_init_val: ?Value = blk: {
2026 if (decl.val.getVariable(mod)) |payload| {
2027 if (payload.is_extern) break :blk null;
2028 break :blk Value.fromInterned(payload.init);
2029 }
2030 break :blk decl.val;
2031 };
2125 const ptr_ty_ref = try self.ptrType(decl.ty, final_storage_class);
20322126
2033 // Generate the actual variable for the global...
2034 const final_storage_class = self.spvStorageClass(decl.@"addrspace");
2035 const actual_storage_class = blk: {
2036 if (target.os.tag != .vulkan) {
2037 break :blk switch (final_storage_class) {
2038 .Generic => .CrossWorkgroup,
2039 else => final_storage_class,
2040 };
2041 }
2042 break :blk final_storage_class;
2043 };
2127 try self.spv.sections.types_globals_constants.emit(self.spv.gpa, .OpVariable, .{
2128 .id_result_type = self.typeId(ptr_ty_ref),
2129 .id_result = result_id,
2130 .storage_class = final_storage_class,
2131 });
20442132
2045 const ptr_ty_ref = try self.ptrType(decl.ty, actual_storage_class);
2133 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
2134 try self.spv.debugName(result_id, fqn);
2135 try self.spv.declareDeclDeps(spv_decl_index, &.{});
2136 },
2137 .invocation_global => {
2138 const maybe_init_val: ?Value = blk: {
2139 if (decl.val.getVariable(mod)) |payload| {
2140 if (payload.is_extern) break :blk null;
2141 break :blk Value.fromInterned(payload.init);
2142 }
2143 break :blk decl.val;
2144 };
20462145
2047 const begin = self.spv.beginGlobal();
2048 try self.spv.globals.section.emit(self.spv.gpa, .OpVariable, .{
2049 .id_result_type = self.typeId(ptr_ty_ref),
2050 .id_result = decl_id,
2051 .storage_class = actual_storage_class,
2052 });
2053 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
2054 try self.spv.debugName(decl_id, fqn);
2146 try self.spv.declareDeclDeps(spv_decl_index, &.{});
20552147
2056 if (opt_init_val) |init_val| {
2057 // Currently, initializers for CrossWorkgroup variables is not implemented
2058 // in Mesa. Therefore we generate an initialization kernel instead.
2059 const void_ty_ref = try self.resolveType(Type.void, .direct);
2148 const ptr_ty_ref = try self.ptrType(decl.ty, .Function);
20602149
2061 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{
2062 .return_type = void_ty_ref,
2063 .parameters = &.{},
2064 } });
2150 if (maybe_init_val) |init_val| {
2151 // TODO: Combine with resolveAnonDecl?
2152 const void_ty_ref = try self.resolveType(Type.void, .direct);
2153 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{
2154 .return_type = void_ty_ref,
2155 .parameters = &.{},
2156 } });
20652157
2066 // Now emit the instructions that initialize the variable.
2067 const initializer_id = self.spv.allocId();
2068 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
2069 .id_result_type = self.typeId(void_ty_ref),
2070 .id_result = initializer_id,
2071 .function_control = .{},
2072 .function_type = self.typeId(initializer_proto_ty_ref),
2073 });
2074 const root_block_id = self.spv.allocId();
2075 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
2076 .id_result = root_block_id,
2077 });
2078 self.current_block_label = root_block_id;
2158 const initializer_id = self.spv.allocId();
2159 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
2160 .id_result_type = self.typeId(void_ty_ref),
2161 .id_result = initializer_id,
2162 .function_control = .{},
2163 .function_type = self.typeId(initializer_proto_ty_ref),
2164 });
20792165
2080 const val_id = try self.constant(decl.ty, init_val, .indirect);
2081 try self.func.body.emit(self.spv.gpa, .OpStore, .{
2082 .pointer = decl_id,
2083 .object = val_id,
2084 });
2166 const root_block_id = self.spv.allocId();
2167 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
2168 .id_result = root_block_id,
2169 });
2170 self.current_block_label = root_block_id;
20852171
2086 // TODO: We should be able to get rid of this by now...
2087 self.spv.endGlobal(spv_decl_index, begin, decl_id, initializer_id);
2172 const val_id = try self.constant(decl.ty, init_val, .indirect);
2173 try self.func.body.emit(self.spv.gpa, .OpStore, .{
2174 .pointer = result_id,
2175 .object = val_id,
2176 });
20882177
2089 try self.func.body.emit(self.spv.gpa, .OpReturn, {});
2090 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
2091 try self.spv.addFunction(spv_decl_index, self.func);
2178 try self.func.body.emit(self.spv.gpa, .OpReturn, {});
2179 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
2180 try self.spv.addFunction(spv_decl_index, self.func);
20922181
2093 try self.spv.debugNameFmt(initializer_id, "initializer of {s}", .{fqn});
2094 } else {
2095 self.spv.endGlobal(spv_decl_index, begin, decl_id, null);
2096 try self.spv.declareDeclDeps(spv_decl_index, &.{});
2097 }
2182 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
2183 try self.spv.debugNameFmt(initializer_id, "initializer of {s}", .{fqn});
2184
2185 try self.spv.sections.types_globals_constants.emit(self.spv.gpa, .OpExtInst, .{
2186 .id_result_type = self.typeId(ptr_ty_ref),
2187 .id_result = result_id,
2188 .set = try self.spv.importInstructionSet(.zig),
2189 .instruction = .{ .inst = 0 }, // TODO: Put this definition somewhere...
2190 .id_ref_4 = &.{initializer_id},
2191 });
2192 } else {
2193 try self.spv.sections.types_globals_constants.emit(self.spv.gpa, .OpExtInst, .{
2194 .id_result_type = self.typeId(ptr_ty_ref),
2195 .id_result = result_id,
2196 .set = try self.spv.importInstructionSet(.zig),
2197 .instruction = .{ .inst = 0 }, // TODO: Put this definition somewhere...
2198 .id_ref_4 = &.{},
2199 });
2200 }
2201 },
20982202 }
20992203 }
21002204
......@@ -2487,8 +2591,8 @@ const DeclGen = struct {
24872591 else => unreachable,
24882592 };
24892593 const set_id = switch (target.os.tag) {
2490 .opencl => try self.spv.importInstructionSet(.opencl),
2491 .vulkan => try self.spv.importInstructionSet(.glsl),
2594 .opencl => try self.spv.importInstructionSet(.@"OpenCL.std"),
2595 .vulkan => try self.spv.importInstructionSet(.@"GLSL.std.450"),
24922596 else => unreachable,
24932597 };
24942598
......@@ -2662,8 +2766,8 @@ const DeclGen = struct {
26622766 else => unreachable,
26632767 };
26642768 const set_id = switch (target.os.tag) {
2665 .opencl => try self.spv.importInstructionSet(.opencl),
2666 .vulkan => try self.spv.importInstructionSet(.glsl),
2769 .opencl => try self.spv.importInstructionSet(.@"OpenCL.std"),
2770 .vulkan => try self.spv.importInstructionSet(.@"GLSL.std.450"),
26672771 else => unreachable,
26682772 };
26692773
......@@ -2792,8 +2896,9 @@ const DeclGen = struct {
27922896 ov_id.* = try self.intFromBool(wip_ov.ty_ref, overflowed_id);
27932897 }
27942898
2795 return try self.constructComposite(
2899 return try self.constructStruct(
27962900 result_ty,
2901 &.{ operand_ty, ov_ty },
27972902 &.{ try wip_result.finalize(), try wip_ov.finalize() },
27982903 );
27992904 }
......@@ -2885,8 +2990,9 @@ const DeclGen = struct {
28852990 ov_id.* = try self.intFromBool(wip_ov.ty_ref, overflowed_id);
28862991 }
28872992
2888 return try self.constructComposite(
2993 return try self.constructStruct(
28892994 result_ty,
2995 &.{ operand_ty, ov_ty },
28902996 &.{ try wip_result.finalize(), try wip_ov.finalize() },
28912997 );
28922998 }
......@@ -3201,35 +3307,76 @@ const DeclGen = struct {
32013307 else
32023308 try self.convertToDirect(Type.bool, rhs_id);
32033309
3204 const valid_cmp_id = try self.cmp(op, Type.bool, Type.bool, lhs_valid_id, rhs_valid_id);
32053310 if (!payload_ty.hasRuntimeBitsIgnoreComptime(mod)) {
3206 return valid_cmp_id;
3311 return try self.cmp(op, Type.bool, Type.bool, lhs_valid_id, rhs_valid_id);
32073312 }
32083313
3209 // TODO: Should we short circuit here? It shouldn't affect correctness, but
3210 // perhaps it will generate more efficient code.
3314 // a = lhs_valid
3315 // b = rhs_valid
3316 // c = lhs_pl == rhs_pl
3317 //
3318 // For op == .eq we have:
3319 // a == b && a -> c
3320 // = a == b && (!a || c)
3321 //
3322 // For op == .neq we have
3323 // a == b && a -> c
3324 // = !(a == b && a -> c)
3325 // = a != b || !(a -> c
3326 // = a != b || !(!a || c)
3327 // = a != b || a && !c
32113328
32123329 const lhs_pl_id = try self.extractField(payload_ty, lhs_id, 0);
32133330 const rhs_pl_id = try self.extractField(payload_ty, rhs_id, 0);
32143331
3215 const pl_cmp_id = try self.cmp(op, Type.bool, payload_ty, lhs_pl_id, rhs_pl_id);
3216
3217 // op == .eq => lhs_valid == rhs_valid && lhs_pl == rhs_pl
3218 // op == .neq => lhs_valid != rhs_valid || lhs_pl != rhs_pl
3219
3220 const result_id = self.spv.allocId();
3221 const args = .{
3222 .id_result_type = self.typeId(bool_ty_ref),
3223 .id_result = result_id,
3224 .operand_1 = valid_cmp_id,
3225 .operand_2 = pl_cmp_id,
3226 };
32273332 switch (op) {
3228 .eq => try self.func.body.emit(self.spv.gpa, .OpLogicalAnd, args),
3229 .neq => try self.func.body.emit(self.spv.gpa, .OpLogicalOr, args),
3333 .eq => {
3334 const valid_eq_id = try self.cmp(.eq, Type.bool, Type.bool, lhs_valid_id, rhs_valid_id);
3335 const pl_eq_id = try self.cmp(op, Type.bool, payload_ty, lhs_pl_id, rhs_pl_id);
3336 const lhs_not_valid_id = self.spv.allocId();
3337 try self.func.body.emit(self.spv.gpa, .OpLogicalNot, .{
3338 .id_result_type = self.typeId(bool_ty_ref),
3339 .id_result = lhs_not_valid_id,
3340 .operand = lhs_valid_id,
3341 });
3342 const impl_id = self.spv.allocId();
3343 try self.func.body.emit(self.spv.gpa, .OpLogicalOr, .{
3344 .id_result_type = self.typeId(bool_ty_ref),
3345 .id_result = impl_id,
3346 .operand_1 = lhs_not_valid_id,
3347 .operand_2 = pl_eq_id,
3348 });
3349 const result_id = self.spv.allocId();
3350 try self.func.body.emit(self.spv.gpa, .OpLogicalAnd, .{
3351 .id_result_type = self.typeId(bool_ty_ref),
3352 .id_result = result_id,
3353 .operand_1 = valid_eq_id,
3354 .operand_2 = impl_id,
3355 });
3356 return result_id;
3357 },
3358 .neq => {
3359 const valid_neq_id = try self.cmp(.neq, Type.bool, Type.bool, lhs_valid_id, rhs_valid_id);
3360 const pl_neq_id = try self.cmp(op, Type.bool, payload_ty, lhs_pl_id, rhs_pl_id);
3361
3362 const impl_id = self.spv.allocId();
3363 try self.func.body.emit(self.spv.gpa, .OpLogicalAnd, .{
3364 .id_result_type = self.typeId(bool_ty_ref),
3365 .id_result = impl_id,
3366 .operand_1 = lhs_valid_id,
3367 .operand_2 = pl_neq_id,
3368 });
3369 const result_id = self.spv.allocId();
3370 try self.func.body.emit(self.spv.gpa, .OpLogicalOr, .{
3371 .id_result_type = self.typeId(bool_ty_ref),
3372 .id_result = result_id,
3373 .operand_1 = valid_neq_id,
3374 .operand_2 = impl_id,
3375 });
3376 return result_id;
3377 },
32303378 else => unreachable,
32313379 }
3232 return result_id;
32333380 },
32343381 .Vector => {
32353382 var wip = try self.elementWise(result_ty, true);
......@@ -3588,7 +3735,11 @@ const DeclGen = struct {
35883735 // Convert the pointer-to-array to a pointer to the first element.
35893736 try self.accessChain(elem_ptr_ty_ref, array_ptr_id, &.{0});
35903737
3591 return try self.constructComposite(slice_ty, &.{ elem_ptr_id, len_id });
3738 return try self.constructStruct(
3739 slice_ty,
3740 &.{ elem_ptr_ty, Type.usize },
3741 &.{ elem_ptr_id, len_id },
3742 );
35923743 }
35933744
35943745 fn airSlice(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
......@@ -3596,11 +3747,16 @@ const DeclGen = struct {
35963747 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
35973748 const ptr_id = try self.resolve(bin_op.lhs);
35983749 const len_id = try self.resolve(bin_op.rhs);
3750 const ptr_ty = self.typeOf(bin_op.lhs);
35993751 const slice_ty = self.typeOfIndex(inst);
36003752
36013753 // Note: Types should not need to be converted to direct, these types
36023754 // dont need to be converted.
3603 return try self.constructComposite(slice_ty, &.{ ptr_id, len_id });
3755 return try self.constructStruct(
3756 slice_ty,
3757 &.{ ptr_ty, Type.usize },
3758 &.{ ptr_id, len_id },
3759 );
36043760 }
36053761
36063762 fn airAggregateInit(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
......@@ -3618,6 +3774,8 @@ const DeclGen = struct {
36183774 unreachable; // TODO
36193775 }
36203776
3777 const types = try self.gpa.alloc(Type, elements.len);
3778 defer self.gpa.free(types);
36213779 const constituents = try self.gpa.alloc(IdRef, elements.len);
36223780 defer self.gpa.free(constituents);
36233781 var index: usize = 0;
......@@ -3629,6 +3787,7 @@ const DeclGen = struct {
36293787 assert(Type.fromInterned(field_ty).hasRuntimeBits(mod));
36303788
36313789 const id = try self.resolve(element);
3790 types[index] = Type.fromInterned(field_ty);
36323791 constituents[index] = try self.convertToIndirect(Type.fromInterned(field_ty), id);
36333792 index += 1;
36343793 }
......@@ -3643,6 +3802,7 @@ const DeclGen = struct {
36433802 assert(field_ty.hasRuntimeBitsIgnoreComptime(mod));
36443803
36453804 const id = try self.resolve(element);
3805 types[index] = field_ty;
36463806 constituents[index] = try self.convertToIndirect(field_ty, id);
36473807 index += 1;
36483808 }
......@@ -3650,7 +3810,11 @@ const DeclGen = struct {
36503810 else => unreachable,
36513811 }
36523812
3653 return try self.constructComposite(result_ty, constituents[0..index]);
3813 return try self.constructStruct(
3814 result_ty,
3815 types[0..index],
3816 constituents[0..index],
3817 );
36543818 },
36553819 .Vector => {
36563820 const n_elems = result_ty.vectorLen(mod);
......@@ -3662,7 +3826,7 @@ const DeclGen = struct {
36623826 elem_ids[i] = try self.convertToIndirect(result_ty.childType(mod), id);
36633827 }
36643828
3665 return try self.constructComposite(result_ty, elem_ids);
3829 return try self.constructVector(result_ty, elem_ids);
36663830 },
36673831 .Array => {
36683832 const array_info = result_ty.arrayInfo(mod);
......@@ -3679,7 +3843,7 @@ const DeclGen = struct {
36793843 elem_ids[n_elems - 1] = try self.constant(array_info.elem_type, sentinel_val, .indirect);
36803844 }
36813845
3682 return try self.constructComposite(result_ty, elem_ids);
3846 return try self.constructArray(result_ty, elem_ids);
36833847 },
36843848 else => unreachable,
36853849 }
......@@ -4792,7 +4956,11 @@ const DeclGen = struct {
47924956 members[eu_layout.errorFieldIndex()] = operand_id;
47934957 members[eu_layout.payloadFieldIndex()] = try self.spv.constUndef(payload_ty_ref);
47944958
4795 return try self.constructComposite(err_union_ty, &members);
4959 var types: [2]Type = undefined;
4960 types[eu_layout.errorFieldIndex()] = Type.anyerror;
4961 types[eu_layout.payloadFieldIndex()] = payload_ty;
4962
4963 return try self.constructStruct(err_union_ty, &types, &members);
47964964 }
47974965
47984966 fn airWrapErrUnionPayload(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
......@@ -4811,7 +4979,11 @@ const DeclGen = struct {
48114979 members[eu_layout.errorFieldIndex()] = try self.constInt(err_ty_ref, 0);
48124980 members[eu_layout.payloadFieldIndex()] = try self.convertToIndirect(payload_ty, operand_id);
48134981
4814 return try self.constructComposite(err_union_ty, &members);
4982 var types: [2]Type = undefined;
4983 types[eu_layout.errorFieldIndex()] = Type.anyerror;
4984 types[eu_layout.payloadFieldIndex()] = payload_ty;
4985
4986 return try self.constructStruct(err_union_ty, &types, &members);
48154987 }
48164988
48174989 fn airIsNull(self: *DeclGen, inst: Air.Inst.Index, is_pointer: bool, pred: enum { is_null, is_non_null }) !?IdRef {
......@@ -4978,7 +5150,8 @@ const DeclGen = struct {
49785150
49795151 const payload_id = try self.convertToIndirect(payload_ty, operand_id);
49805152 const members = [_]IdRef{ payload_id, try self.constBool(true, .indirect) };
4981 return try self.constructComposite(optional_ty, &members);
5153 const types = [_]Type{ payload_ty, Type.bool };
5154 return try self.constructStruct(optional_ty, &types, &members);
49825155 }
49835156
49845157 fn airSwitchBr(self: *DeclGen, inst: Air.Inst.Index) !void {
......@@ -5058,7 +5231,7 @@ const DeclGen = struct {
50585231 const case_body = self.air.extra[case.end + items.len ..][0..case.data.body_len];
50595232 extra_index = case.end + case.data.items_len + case_body.len;
50605233
5061 const label = IdRef{ .id = @intCast(first_case_label.id + case_i) };
5234 const label: IdRef = @enumFromInt(@intFromEnum(first_case_label) + case_i);
50625235
50635236 for (items) |item| {
50645237 const value = (try self.air.value(item, mod)) orelse unreachable;
......@@ -5072,7 +5245,7 @@ const DeclGen = struct {
50725245 else => unreachable,
50735246 };
50745247 const int_lit: spec.LiteralContextDependentNumber = switch (cond_words) {
5075 1 => .{ .uint32 = @as(u32, @intCast(int_val)) },
5248 1 => .{ .uint32 = @intCast(int_val) },
50765249 2 => .{ .uint64 = int_val },
50775250 else => unreachable,
50785251 };
......@@ -5097,7 +5270,7 @@ const DeclGen = struct {
50975270 const case_body: []const Air.Inst.Index = @ptrCast(self.air.extra[case.end + items.len ..][0..case.data.body_len]);
50985271 extra_index = case.end + case.data.items_len + case_body.len;
50995272
5100 const label = IdResult{ .id = @intCast(first_case_label.id + case_i) };
5273 const label: IdResult = @enumFromInt(@intFromEnum(first_case_label) + case_i);
51015274
51025275 try self.beginSpvBlock(label);
51035276
......@@ -5327,9 +5500,9 @@ const DeclGen = struct {
53275500 const result_id = self.spv.allocId();
53285501 const callee_id = try self.resolve(pl_op.operand);
53295502
5503 comptime assert(zig_call_abi_ver == 3);
53305504 const params = try self.gpa.alloc(spec.IdRef, args.len);
53315505 defer self.gpa.free(params);
5332
53335506 var n_params: usize = 0;
53345507 for (args) |arg| {
53355508 // Note: resolve() might emit instructions, so we need to call it
src/codegen/spirv/Assembler.zig+21-3
......@@ -194,6 +194,11 @@ inst: struct {
194194/// This map maps results to their tracked values.
195195value_map: AsmValueMap = .{},
196196
197/// This set is used to quickly transform from an opcode name to the
198/// index in its instruction set. The index of the key is the
199/// index in `spec.InstructionSet.core.instructions()`.
200instruction_map: std.StringArrayHashMapUnmanaged(void) = .{},
201
197202/// Free the resources owned by this assembler.
198203pub fn deinit(self: *Assembler) void {
199204 for (self.errors.items) |err| {
......@@ -204,9 +209,20 @@ pub fn deinit(self: *Assembler) void {
204209 self.inst.operands.deinit(self.gpa);
205210 self.inst.string_bytes.deinit(self.gpa);
206211 self.value_map.deinit(self.gpa);
212 self.instruction_map.deinit(self.gpa);
207213}
208214
209215pub fn assemble(self: *Assembler) Error!void {
216 // Populate the opcode map if it isn't already
217 if (self.instruction_map.count() == 0) {
218 const instructions = spec.InstructionSet.core.instructions();
219 try self.instruction_map.ensureUnusedCapacity(self.gpa, @intCast(instructions.len));
220 for (spec.InstructionSet.core.instructions(), 0..) |inst, i| {
221 const entry = try self.instruction_map.getOrPut(self.gpa, inst.name);
222 assert(entry.index == i);
223 }
224 }
225
210226 try self.tokenize();
211227 while (!self.testToken(.eof)) {
212228 try self.parseInstruction();
......@@ -475,12 +491,14 @@ fn parseInstruction(self: *Assembler) !void {
475491 }
476492
477493 const opcode_text = self.tokenText(opcode_tok);
478 @setEvalBranchQuota(10000);
479 self.inst.opcode = std.meta.stringToEnum(Opcode, opcode_text) orelse {
494 const index = self.instruction_map.getIndex(opcode_text) orelse {
480495 return self.fail(opcode_tok.start, "invalid opcode '{s}'", .{opcode_text});
481496 };
482497
483 const expected_operands = self.inst.opcode.operands();
498 const inst = spec.InstructionSet.core.instructions()[index];
499 self.inst.opcode = @enumFromInt(inst.opcode);
500
501 const expected_operands = inst.operands;
484502 // This is a loop because the result-id is not always the first operand.
485503 const requires_lhs_result = for (expected_operands) |op| {
486504 if (op.kind == .IdResult) break true;
src/codegen/spirv/Cache.zig+10-21
......@@ -134,7 +134,10 @@ const Tag = enum {
134134 /// data is (bool) type
135135 bool_false,
136136
137 const SimpleType = enum { void, bool };
137 const SimpleType = enum {
138 void,
139 bool,
140 };
138141
139142 const VectorType = Key.VectorType;
140143 const ArrayType = Key.ArrayType;
......@@ -287,11 +290,12 @@ pub const Key = union(enum) {
287290 pub const PointerType = struct {
288291 storage_class: StorageClass,
289292 child_type: Ref,
293 /// Ref to a .fwd_ptr_type.
290294 fwd: Ref,
291295 // TODO: Decorations:
292296 // - Alignment
293 // - ArrayStride,
294 // - MaxByteOffset,
297 // - ArrayStride
298 // - MaxByteOffset
295299 };
296300
297301 pub const ForwardPointerType = struct {
......@@ -728,6 +732,9 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref {
728732 // },
729733 .ptr_type => |ptr| Item{
730734 .tag = .type_ptr_simple,
735 // For this variant we need to steal the ID of the forward-declaration, instead
736 // of allocating one manually. This will make sure that we get a single result-id
737 // any possibly forward declared pointer type.
731738 .result_id = self.resultId(ptr.fwd),
732739 .data = try self.addExtra(spv, Tag.SimplePointerType{
733740 .storage_class = ptr.storage_class,
......@@ -896,24 +903,6 @@ pub fn lookup(self: *const Self, ref: Ref) Key {
896903 },
897904 };
898905 },
899 // .type_ptr_generic => .{
900 // .ptr_type = .{
901 // .storage_class = .Generic,
902 // .child_type = @enumFromInt(data),
903 // },
904 // },
905 // .type_ptr_crosswgp => .{
906 // .ptr_type = .{
907 // .storage_class = .CrossWorkgroup,
908 // .child_type = @enumFromInt(data),
909 // },
910 // },
911 // .type_ptr_function => .{
912 // .ptr_type = .{
913 // .storage_class = .Function,
914 // .child_type = @enumFromInt(data),
915 // },
916 // },
917906 .type_ptr_simple => {
918907 const payload = self.extraData(Tag.SimplePointerType, data);
919908 return .{
src/codegen/spirv/Module.zig+45-229
......@@ -72,9 +72,20 @@ pub const Decl = struct {
7272 /// Index to refer to a Decl by.
7373 pub const Index = enum(u32) { _ };
7474
75 /// The result-id to be used for this declaration. This is the final result-id
76 /// of the decl, which may be an OpFunction, OpVariable, or the result of a sequence
77 /// of OpSpecConstantOp operations.
75 /// Useful to tell what kind of decl this is, and hold the result-id or field index
76 /// to be used for this decl.
77 pub const Kind = enum {
78 func,
79 global,
80 invocation_global,
81 };
82
83 /// See comment on Kind
84 kind: Kind,
85 /// The result-id associated to this decl. The specific meaning of this depends on `kind`:
86 /// - For `func`, this is the result-id of the associated OpFunction instruction.
87 /// - For `global`, this is the result-id of the associated OpVariable instruction.
88 /// - For `invocation_global`, this is the result-id of the associated InvocationGlobal instruction.
7889 result_id: IdRef,
7990 /// The offset of the first dependency of this decl in the `decl_deps` array.
8091 begin_dep: u32,
......@@ -82,20 +93,6 @@ pub const Decl = struct {
8293 end_dep: u32,
8394};
8495
85/// Globals must be kept in order: operations involving globals must be ordered
86/// so that the global declaration precedes any usage.
87pub const Global = struct {
88 /// This is the result-id of the OpVariable instruction that declares the global.
89 result_id: IdRef,
90 /// The offset into `self.globals.section` of the first instruction of this global
91 /// declaration.
92 begin_inst: u32,
93 /// The past-end offset into `self.flobals.section`.
94 end_inst: u32,
95 /// The result-id of the function that initializes this value.
96 initializer_id: ?IdRef,
97};
98
9996/// This models a kernel entry point.
10097pub const EntryPoint = struct {
10198 /// The declaration that should be exported.
......@@ -165,18 +162,8 @@ decl_deps: std.ArrayListUnmanaged(Decl.Index) = .{},
165162/// The list of entry points that should be exported from this module.
166163entry_points: std.ArrayListUnmanaged(EntryPoint) = .{},
167164
168/// The fields in this structure help to maintain the required order for global variables.
169globals: struct {
170 /// Set of globals, referred to by Decl.Index.
171 globals: std.AutoArrayHashMapUnmanaged(Decl.Index, Global) = .{},
172 /// This pseudo-section contains the initialization code for all the globals. Instructions from
173 /// here are reordered when flushing the module. Its contents should be part of the
174 /// `types_globals_constants` SPIR-V section when the module is emitted.
175 section: Section = .{},
176} = .{},
177
178165/// The list of extended instruction sets that should be imported.
179extended_instruction_set: std.AutoHashMapUnmanaged(ExtendedInstructionSet, IdRef) = .{},
166extended_instruction_set: std.AutoHashMapUnmanaged(spec.InstructionSet, IdRef) = .{},
180167
181168pub fn init(gpa: Allocator) Module {
182169 return .{
......@@ -205,9 +192,6 @@ pub fn deinit(self: *Module) void {
205192
206193 self.entry_points.deinit(self.gpa);
207194
208 self.globals.globals.deinit(self.gpa);
209 self.globals.section.deinit(self.gpa);
210
211195 self.extended_instruction_set.deinit(self.gpa);
212196
213197 self.* = undefined;
......@@ -215,12 +199,12 @@ pub fn deinit(self: *Module) void {
215199
216200pub fn allocId(self: *Module) spec.IdResult {
217201 defer self.next_result_id += 1;
218 return .{ .id = self.next_result_id };
202 return @enumFromInt(self.next_result_id);
219203}
220204
221205pub fn allocIds(self: *Module, n: u32) spec.IdResult {
222206 defer self.next_result_id += n;
223 return .{ .id = self.next_result_id };
207 return @enumFromInt(self.next_result_id);
224208}
225209
226210pub fn idBound(self: Module) Word {
......@@ -243,46 +227,6 @@ pub fn resolveString(self: *Module, str: []const u8) !CacheString {
243227 return try self.cache.addString(self, str);
244228}
245229
246fn orderGlobalsInto(
247 self: *Module,
248 decl_index: Decl.Index,
249 section: *Section,
250 seen: *std.DynamicBitSetUnmanaged,
251) !void {
252 const decl = self.declPtr(decl_index);
253 const deps = self.decl_deps.items[decl.begin_dep..decl.end_dep];
254 const global = self.globalPtr(decl_index).?;
255 const insts = self.globals.section.instructions.items[global.begin_inst..global.end_inst];
256
257 seen.set(@intFromEnum(decl_index));
258
259 for (deps) |dep| {
260 if (!seen.isSet(@intFromEnum(dep))) {
261 try self.orderGlobalsInto(dep, section, seen);
262 }
263 }
264
265 try section.instructions.appendSlice(self.gpa, insts);
266}
267
268fn orderGlobals(self: *Module) !Section {
269 const globals = self.globals.globals.keys();
270
271 var seen = try std.DynamicBitSetUnmanaged.initEmpty(self.gpa, self.decls.items.len);
272 defer seen.deinit(self.gpa);
273
274 var ordered_globals = Section{};
275 errdefer ordered_globals.deinit(self.gpa);
276
277 for (globals) |decl_index| {
278 if (!seen.isSet(@intFromEnum(decl_index))) {
279 try self.orderGlobalsInto(decl_index, &ordered_globals, &seen);
280 }
281 }
282
283 return ordered_globals;
284}
285
286230fn addEntryPointDeps(
287231 self: *Module,
288232 decl_index: Decl.Index,
......@@ -298,8 +242,8 @@ fn addEntryPointDeps(
298242
299243 seen.set(@intFromEnum(decl_index));
300244
301 if (self.globalPtr(decl_index)) |global| {
302 try interface.append(global.result_id);
245 if (decl.kind == .global) {
246 try interface.append(decl.result_id);
303247 }
304248
305249 for (deps) |dep| {
......@@ -335,81 +279,9 @@ fn entryPoints(self: *Module) !Section {
335279 return entry_points;
336280}
337281
338/// Generate a function that calls all initialization functions,
339/// in unspecified order (an order should not be required here).
340/// It generated as follows:
341/// %init = OpFunction %void None
342/// foreach %initializer:
343/// OpFunctionCall %initializer
344/// OpReturn
345/// OpFunctionEnd
346fn initializer(self: *Module, entry_points: *Section) !Section {
347 var section = Section{};
348 errdefer section.deinit(self.gpa);
349
350 // const void_ty_ref = try self.resolveType(Type.void, .direct);
351 const void_ty_ref = try self.resolve(.void_type);
352 const void_ty_id = self.resultId(void_ty_ref);
353 const init_proto_ty_ref = try self.resolve(.{ .function_type = .{
354 .return_type = void_ty_ref,
355 .parameters = &.{},
356 } });
357
358 const init_id = self.allocId();
359 try section.emit(self.gpa, .OpFunction, .{
360 .id_result_type = void_ty_id,
361 .id_result = init_id,
362 .function_control = .{},
363 .function_type = self.resultId(init_proto_ty_ref),
364 });
365 try section.emit(self.gpa, .OpLabel, .{
366 .id_result = self.allocId(),
367 });
368
369 var seen = try std.DynamicBitSetUnmanaged.initEmpty(self.gpa, self.decls.items.len);
370 defer seen.deinit(self.gpa);
371
372 var interface = std.ArrayList(IdRef).init(self.gpa);
373 defer interface.deinit();
374
375 for (self.globals.globals.keys(), self.globals.globals.values()) |decl_index, global| {
376 try self.addEntryPointDeps(decl_index, &seen, &interface);
377 if (global.initializer_id) |initializer_id| {
378 try section.emit(self.gpa, .OpFunctionCall, .{
379 .id_result_type = void_ty_id,
380 .id_result = self.allocId(),
381 .function = initializer_id,
382 });
383 }
384 }
385
386 try section.emit(self.gpa, .OpReturn, {});
387 try section.emit(self.gpa, .OpFunctionEnd, {});
388
389 try entry_points.emit(self.gpa, .OpEntryPoint, .{
390 // TODO: Rusticl does not support this because its poorly defined.
391 // Do we need to generate a workaround here?
392 .execution_model = .Kernel,
393 .entry_point = init_id,
394 .name = "zig global initializer",
395 .interface = interface.items,
396 });
397
398 try self.sections.execution_modes.emit(self.gpa, .OpExecutionMode, .{
399 .entry_point = init_id,
400 .mode = .Initializer,
401 });
402
403 return section;
404}
405
406/// Emit this module as a spir-v binary.
407pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
282pub fn finalize(self: *Module, a: Allocator, target: std.Target) ![]Word {
408283 // See SPIR-V Spec section 2.3, "Physical Layout of a SPIR-V Module and Instruction"
409
410 // TODO: Perform topological sort on the globals.
411 var globals = try self.orderGlobals();
412 defer globals.deinit(self.gpa);
284 // TODO: Audit calls to allocId() in this function to make it idempotent.
413285
414286 var entry_points = try self.entryPoints();
415287 defer entry_points.deinit(self.gpa);
......@@ -417,13 +289,6 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
417289 var types_constants = try self.cache.materialize(self);
418290 defer types_constants.deinit(self.gpa);
419291
420 // // TODO: Pass global variables as function parameters
421 // var init_func = if (target.os.tag != .vulkan)
422 // try self.initializer(&entry_points)
423 // else
424 // Section{};
425 // defer init_func.deinit(self.gpa);
426
427292 const header = [_]Word{
428293 spec.magic_number,
429294 // TODO: From cpu features
......@@ -436,7 +301,7 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
436301 else => 4,
437302 },
438303 }),
439 0, // TODO: Register Zig compiler magic number.
304 spec.zig_generator_id,
440305 self.idBound(),
441306 0, // Schema (currently reserved for future use)
442307 };
......@@ -468,30 +333,23 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
468333 self.sections.annotations.toWords(),
469334 types_constants.toWords(),
470335 self.sections.types_globals_constants.toWords(),
471 globals.toWords(),
472336 self.sections.functions.toWords(),
473337 };
474338
475 if (builtin.zig_backend == .stage2_x86_64) {
476 for (buffers) |buf| {
477 try file.writeAll(std.mem.sliceAsBytes(buf));
478 }
479 } else {
480 // miscompiles with x86_64 backend
481 var iovc_buffers: [buffers.len]std.os.iovec_const = undefined;
482 var file_size: u64 = 0;
483 for (&iovc_buffers, 0..) |*iovc, i| {
484 // Note, since spir-v supports both little and big endian we can ignore byte order here and
485 // just treat the words as a sequence of bytes.
486 const bytes = std.mem.sliceAsBytes(buffers[i]);
487 iovc.* = .{ .iov_base = bytes.ptr, .iov_len = bytes.len };
488 file_size += bytes.len;
489 }
490
491 try file.seekTo(0);
492 try file.setEndPos(file_size);
493 try file.pwritevAll(&iovc_buffers, 0);
339 var total_result_size: usize = 0;
340 for (buffers) |buffer| {
341 total_result_size += buffer.len;
342 }
343 const result = try a.alloc(Word, total_result_size);
344 errdefer a.free(result);
345
346 var offset: usize = 0;
347 for (buffers) |buffer| {
348 @memcpy(result[offset..][0..buffer.len], buffer);
349 offset += buffer.len;
494350 }
351
352 return result;
495353}
496354
497355/// Merge the sections making up a function declaration into this module.
......@@ -501,23 +359,17 @@ pub fn addFunction(self: *Module, decl_index: Decl.Index, func: Fn) !void {
501359 try self.declareDeclDeps(decl_index, func.decl_deps.keys());
502360}
503361
504pub const ExtendedInstructionSet = enum {
505 glsl,
506 opencl,
507};
508
509362/// Imports or returns the existing id of an extended instruction set
510pub fn importInstructionSet(self: *Module, set: ExtendedInstructionSet) !IdRef {
363pub fn importInstructionSet(self: *Module, set: spec.InstructionSet) !IdRef {
364 assert(set != .core);
365
511366 const gop = try self.extended_instruction_set.getOrPut(self.gpa, set);
512367 if (gop.found_existing) return gop.value_ptr.*;
513368
514369 const result_id = self.allocId();
515370 try self.sections.extended_instruction_set.emit(self.gpa, .OpExtInstImport, .{
516371 .id_result = result_id,
517 .name = switch (set) {
518 .glsl => "GLSL.std.450",
519 .opencl => "OpenCL.std",
520 },
372 .name = @tagName(set),
521373 });
522374 gop.value_ptr.* = result_id;
523375
......@@ -631,40 +483,21 @@ pub fn decorateMember(
631483 });
632484}
633485
634pub const DeclKind = enum {
635 func,
636 global,
637};
638
639pub fn allocDecl(self: *Module, kind: DeclKind) !Decl.Index {
486pub fn allocDecl(self: *Module, kind: Decl.Kind) !Decl.Index {
640487 try self.decls.append(self.gpa, .{
488 .kind = kind,
641489 .result_id = self.allocId(),
642490 .begin_dep = undefined,
643491 .end_dep = undefined,
644492 });
645 const index = @as(Decl.Index, @enumFromInt(@as(u32, @intCast(self.decls.items.len - 1))));
646 switch (kind) {
647 .func => {},
648 // If the decl represents a global, also allocate a global node.
649 .global => try self.globals.globals.putNoClobber(self.gpa, index, .{
650 .result_id = undefined,
651 .begin_inst = undefined,
652 .end_inst = undefined,
653 .initializer_id = undefined,
654 }),
655 }
656493
657 return index;
494 return @as(Decl.Index, @enumFromInt(@as(u32, @intCast(self.decls.items.len - 1))));
658495}
659496
660497pub fn declPtr(self: *Module, index: Decl.Index) *Decl {
661498 return &self.decls.items[@intFromEnum(index)];
662499}
663500
664pub fn globalPtr(self: *Module, index: Decl.Index) ?*Global {
665 return self.globals.globals.getPtr(index);
666}
667
668501/// Declare ALL dependencies for a decl.
669502pub fn declareDeclDeps(self: *Module, decl_index: Decl.Index, deps: []const Decl.Index) !void {
670503 const begin_dep = @as(u32, @intCast(self.decl_deps.items.len));
......@@ -676,26 +509,9 @@ pub fn declareDeclDeps(self: *Module, decl_index: Decl.Index, deps: []const Decl
676509 decl.end_dep = end_dep;
677510}
678511
679pub fn beginGlobal(self: *Module) u32 {
680 return @as(u32, @intCast(self.globals.section.instructions.items.len));
681}
682
683pub fn endGlobal(
684 self: *Module,
685 global_index: Decl.Index,
686 begin_inst: u32,
687 result_id: IdRef,
688 initializer_id: ?IdRef,
689) void {
690 const global = self.globalPtr(global_index).?;
691 global.* = .{
692 .result_id = result_id,
693 .begin_inst = begin_inst,
694 .end_inst = @intCast(self.globals.section.instructions.items.len),
695 .initializer_id = initializer_id,
696 };
697}
698
512/// Declare a SPIR-V function as an entry point. This causes an extra wrapper
513/// function to be generated, which is then exported as the real entry point. The purpose of this
514/// wrapper is to allocate and initialize the structure holding the instance globals.
699515pub fn declareEntryPoint(
700516 self: *Module,
701517 decl_index: Decl.Index,
src/codegen/spirv/Section.zig+21-10
......@@ -53,6 +53,17 @@ pub fn emitRaw(
5353 section.writeWord((@as(Word, @intCast(word_count << 16))) | @intFromEnum(opcode));
5454}
5555
56/// Write an entire instruction, including all operands
57pub fn emitRawInstruction(
58 section: *Section,
59 allocator: Allocator,
60 opcode: Opcode,
61 operands: []const Word,
62) !void {
63 try section.emitRaw(allocator, opcode, operands.len);
64 section.writeWords(operands);
65}
66
5667pub fn emit(
5768 section: *Section,
5869 allocator: Allocator,
......@@ -123,7 +134,7 @@ fn writeOperands(section: *Section, comptime Operands: type, operands: Operands)
123134
124135pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand) void {
125136 switch (Operand) {
126 spec.IdResult => section.writeWord(operand.id),
137 spec.IdResult => section.writeWord(@intFromEnum(operand)),
127138
128139 spec.LiteralInteger => section.writeWord(operand),
129140
......@@ -138,9 +149,9 @@ pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand)
138149 // instruction in which it is used.
139150 spec.LiteralSpecConstantOpInteger => section.writeWord(@intFromEnum(operand.opcode)),
140151
141 spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, operand.label.id }),
142 spec.PairIdRefLiteralInteger => section.writeWords(&.{ operand.target.id, operand.member }),
143 spec.PairIdRefIdRef => section.writeWords(&.{ operand[0].id, operand[1].id }),
152 spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, @enumFromInt(operand.label) }),
153 spec.PairIdRefLiteralInteger => section.writeWords(&.{ @intFromEnum(operand.target), operand.member }),
154 spec.PairIdRefIdRef => section.writeWords(&.{ @intFromEnum(operand[0]), @intFromEnum(operand[1]) }),
144155
145156 else => switch (@typeInfo(Operand)) {
146157 .Enum => section.writeWord(@intFromEnum(operand)),
......@@ -338,8 +349,8 @@ test "SPIR-V Section emit() - simple" {
338349 defer section.deinit(std.testing.allocator);
339350
340351 try section.emit(std.testing.allocator, .OpUndef, .{
341 .id_result_type = .{ .id = 0 },
342 .id_result = .{ .id = 1 },
352 .id_result_type = @enumFromInt(0),
353 .id_result = @enumFromInt(1),
343354 });
344355
345356 try testing.expectEqualSlices(Word, &.{
......@@ -356,7 +367,7 @@ test "SPIR-V Section emit() - string" {
356367 try section.emit(std.testing.allocator, .OpSource, .{
357368 .source_language = .Unknown,
358369 .version = 123,
359 .file = .{ .id = 456 },
370 .file = @enumFromInt(256),
360371 .source = "pub fn main() void {}",
361372 });
362373
......@@ -381,8 +392,8 @@ test "SPIR-V Section emit() - extended mask" {
381392 defer section.deinit(std.testing.allocator);
382393
383394 try section.emit(std.testing.allocator, .OpLoopMerge, .{
384 .merge_block = .{ .id = 10 },
385 .continue_target = .{ .id = 20 },
395 .merge_block = @enumFromInt(10),
396 .continue_target = @enumFromInt(20),
386397 .loop_control = .{
387398 .Unroll = true,
388399 .DependencyLength = .{
......@@ -405,7 +416,7 @@ test "SPIR-V Section emit() - extended union" {
405416 defer section.deinit(std.testing.allocator);
406417
407418 try section.emit(std.testing.allocator, .OpExecutionMode, .{
408 .entry_point = .{ .id = 888 },
419 .entry_point = @enumFromInt(888),
409420 .mode = .{
410421 .LocalSize = .{ .x_size = 4, .y_size = 8, .z_size = 16 },
411422 },
src/codegen/spirv/extinst.zig.grammar.json created+13
......@@ -0,0 +1,13 @@
1{
2 "version": 0,
3 "revision": 0,
4 "instructions": [
5 {
6 "opname": "InvocationGlobal",
7 "opcode": 0,
8 "operands": [
9 { "kind": "IdRef", "name": "initializer function" }
10 ]
11 }
12 ]
13}
src/codegen/spirv/spec.zig+12579-2721
......@@ -1,5 +1,7 @@
11//! This file is auto-generated by tools/gen_spirv_spec.zig.
22
3const std = @import("std");
4
35pub const Version = packed struct(Word) {
46 padding: u8 = 0,
57 minor: u8,
......@@ -12,8 +14,21 @@ pub const Version = packed struct(Word) {
1214};
1315
1416pub const Word = u32;
15pub const IdResult = struct {
16 id: Word,
17pub const IdResult = enum(Word) {
18 none,
19 _,
20
21 pub fn format(
22 self: IdResult,
23 comptime _: []const u8,
24 _: std.fmt.FormatOptions,
25 writer: anytype,
26 ) @TypeOf(writer).Error!void {
27 switch (self) {
28 .none => try writer.writeAll("(none)"),
29 else => try writer.print("%{}", .{@intFromEnum(self)}),
30 }
31 }
1732};
1833pub const IdResultType = IdResult;
1934pub const IdRef = IdResult;
......@@ -22,6 +37,7 @@ pub const IdMemorySemantics = IdRef;
2237pub const IdScope = IdRef;
2338
2439pub const LiteralInteger = Word;
40pub const LiteralFloat = Word;
2541pub const LiteralString = []const u8;
2642pub const LiteralContextDependentNumber = union(enum) {
2743 int32: i32,
......@@ -62,6 +78,13 @@ pub const Enumerant = struct {
6278 parameters: []const OperandKind,
6379};
6480
81pub const Instruction = struct {
82 name: []const u8,
83 opcode: Word,
84 operands: []const Operand,
85};
86
87pub const zig_generator_id: Word = 41;
6588pub const version = Version{ .major = 1, .minor = 6, .patch = 1 };
6689pub const magic_number: Word = 0x07230203;
6790
......@@ -92,7 +115,9 @@ pub const Class = enum {
92115 NonUniform,
93116 Reserved,
94117};
118
95119pub const OperandKind = enum {
120 Opcode,
96121 ImageOperands,
97122 FPFastMathMode,
98123 SelectionControl,
......@@ -103,6 +128,7 @@ pub const OperandKind = enum {
103128 KernelProfilingInfo,
104129 RayFlags,
105130 FragmentShadingRate,
131 RawAccessChainOperands,
106132 SourceLanguage,
107133 ExecutionModel,
108134 AddressingModel,
......@@ -122,6 +148,7 @@ pub const OperandKind = enum {
122148 OverflowModes,
123149 LinkageType,
124150 AccessQualifier,
151 HostAccessQualifier,
125152 FunctionParameterAttribute,
126153 Decoration,
127154 BuiltIn,
......@@ -133,6 +160,13 @@ pub const OperandKind = enum {
133160 RayQueryCommittedIntersectionType,
134161 RayQueryCandidateIntersectionType,
135162 PackedVectorFormat,
163 CooperativeMatrixOperands,
164 CooperativeMatrixLayout,
165 CooperativeMatrixUse,
166 InitializationModeQualifier,
167 LoadCacheControl,
168 StoreCacheControl,
169 NamedMaximumNumberOfRegisters,
136170 IdResultType,
137171 IdResult,
138172 IdMemorySemantics,
......@@ -140,15 +174,36 @@ pub const OperandKind = enum {
140174 IdRef,
141175 LiteralInteger,
142176 LiteralString,
177 LiteralFloat,
143178 LiteralContextDependentNumber,
144179 LiteralExtInstInteger,
145180 LiteralSpecConstantOpInteger,
146181 PairLiteralIntegerIdRef,
147182 PairIdRefLiteralInteger,
148183 PairIdRefIdRef,
184 @"OpenCL.DebugInfo.100.DebugInfoFlags",
185 @"OpenCL.DebugInfo.100.DebugBaseTypeAttributeEncoding",
186 @"OpenCL.DebugInfo.100.DebugCompositeType",
187 @"OpenCL.DebugInfo.100.DebugTypeQualifier",
188 @"OpenCL.DebugInfo.100.DebugOperation",
189 @"OpenCL.DebugInfo.100.DebugImportedEntity",
190 @"NonSemantic.Shader.DebugInfo.100.DebugInfoFlags",
191 @"NonSemantic.Shader.DebugInfo.100.BuildIdentifierFlags",
192 @"NonSemantic.Shader.DebugInfo.100.DebugBaseTypeAttributeEncoding",
193 @"NonSemantic.Shader.DebugInfo.100.DebugCompositeType",
194 @"NonSemantic.Shader.DebugInfo.100.DebugTypeQualifier",
195 @"NonSemantic.Shader.DebugInfo.100.DebugOperation",
196 @"NonSemantic.Shader.DebugInfo.100.DebugImportedEntity",
197 @"NonSemantic.ClspvReflection.6.KernelPropertyFlags",
198 @"DebugInfo.DebugInfoFlags",
199 @"DebugInfo.DebugBaseTypeAttributeEncoding",
200 @"DebugInfo.DebugCompositeType",
201 @"DebugInfo.DebugTypeQualifier",
202 @"DebugInfo.DebugOperation",
149203
150204 pub fn category(self: OperandKind) OperandCategory {
151205 return switch (self) {
206 .Opcode => .literal,
152207 .ImageOperands => .bit_enum,
153208 .FPFastMathMode => .bit_enum,
154209 .SelectionControl => .bit_enum,
......@@ -159,6 +214,7 @@ pub const OperandKind = enum {
159214 .KernelProfilingInfo => .bit_enum,
160215 .RayFlags => .bit_enum,
161216 .FragmentShadingRate => .bit_enum,
217 .RawAccessChainOperands => .bit_enum,
162218 .SourceLanguage => .value_enum,
163219 .ExecutionModel => .value_enum,
164220 .AddressingModel => .value_enum,
......@@ -178,6 +234,7 @@ pub const OperandKind = enum {
178234 .OverflowModes => .value_enum,
179235 .LinkageType => .value_enum,
180236 .AccessQualifier => .value_enum,
237 .HostAccessQualifier => .value_enum,
181238 .FunctionParameterAttribute => .value_enum,
182239 .Decoration => .value_enum,
183240 .BuiltIn => .value_enum,
......@@ -189,6 +246,13 @@ pub const OperandKind = enum {
189246 .RayQueryCommittedIntersectionType => .value_enum,
190247 .RayQueryCandidateIntersectionType => .value_enum,
191248 .PackedVectorFormat => .value_enum,
249 .CooperativeMatrixOperands => .bit_enum,
250 .CooperativeMatrixLayout => .value_enum,
251 .CooperativeMatrixUse => .value_enum,
252 .InitializationModeQualifier => .value_enum,
253 .LoadCacheControl => .value_enum,
254 .StoreCacheControl => .value_enum,
255 .NamedMaximumNumberOfRegisters => .value_enum,
192256 .IdResultType => .id,
193257 .IdResult => .id,
194258 .IdMemorySemantics => .id,
......@@ -196,16 +260,37 @@ pub const OperandKind = enum {
196260 .IdRef => .id,
197261 .LiteralInteger => .literal,
198262 .LiteralString => .literal,
263 .LiteralFloat => .literal,
199264 .LiteralContextDependentNumber => .literal,
200265 .LiteralExtInstInteger => .literal,
201266 .LiteralSpecConstantOpInteger => .literal,
202267 .PairLiteralIntegerIdRef => .composite,
203268 .PairIdRefLiteralInteger => .composite,
204269 .PairIdRefIdRef => .composite,
270 .@"OpenCL.DebugInfo.100.DebugInfoFlags" => .bit_enum,
271 .@"OpenCL.DebugInfo.100.DebugBaseTypeAttributeEncoding" => .value_enum,
272 .@"OpenCL.DebugInfo.100.DebugCompositeType" => .value_enum,
273 .@"OpenCL.DebugInfo.100.DebugTypeQualifier" => .value_enum,
274 .@"OpenCL.DebugInfo.100.DebugOperation" => .value_enum,
275 .@"OpenCL.DebugInfo.100.DebugImportedEntity" => .value_enum,
276 .@"NonSemantic.Shader.DebugInfo.100.DebugInfoFlags" => .bit_enum,
277 .@"NonSemantic.Shader.DebugInfo.100.BuildIdentifierFlags" => .bit_enum,
278 .@"NonSemantic.Shader.DebugInfo.100.DebugBaseTypeAttributeEncoding" => .value_enum,
279 .@"NonSemantic.Shader.DebugInfo.100.DebugCompositeType" => .value_enum,
280 .@"NonSemantic.Shader.DebugInfo.100.DebugTypeQualifier" => .value_enum,
281 .@"NonSemantic.Shader.DebugInfo.100.DebugOperation" => .value_enum,
282 .@"NonSemantic.Shader.DebugInfo.100.DebugImportedEntity" => .value_enum,
283 .@"NonSemantic.ClspvReflection.6.KernelPropertyFlags" => .bit_enum,
284 .@"DebugInfo.DebugInfoFlags" => .bit_enum,
285 .@"DebugInfo.DebugBaseTypeAttributeEncoding" => .value_enum,
286 .@"DebugInfo.DebugCompositeType" => .value_enum,
287 .@"DebugInfo.DebugTypeQualifier" => .value_enum,
288 .@"DebugInfo.DebugOperation" => .value_enum,
205289 };
206290 }
207291 pub fn enumerants(self: OperandKind) []const Enumerant {
208292 return switch (self) {
293 .Opcode => unreachable,
209294 .ImageOperands => &[_]Enumerant{
210295 .{ .name = "Bias", .value = 0x0001, .parameters = &[_]OperandKind{.IdRef} },
211296 .{ .name = "Lod", .value = 0x0002, .parameters = &[_]OperandKind{.IdRef} },
......@@ -234,8 +319,11 @@ pub const OperandKind = enum {
234319 .{ .name = "NSZ", .value = 0x0004, .parameters = &[_]OperandKind{} },
235320 .{ .name = "AllowRecip", .value = 0x0008, .parameters = &[_]OperandKind{} },
236321 .{ .name = "Fast", .value = 0x0010, .parameters = &[_]OperandKind{} },
322 .{ .name = "AllowContract", .value = 0x10000, .parameters = &[_]OperandKind{} },
237323 .{ .name = "AllowContractFastINTEL", .value = 0x10000, .parameters = &[_]OperandKind{} },
324 .{ .name = "AllowReassoc", .value = 0x20000, .parameters = &[_]OperandKind{} },
238325 .{ .name = "AllowReassocINTEL", .value = 0x20000, .parameters = &[_]OperandKind{} },
326 .{ .name = "AllowTransform", .value = 0x40000, .parameters = &[_]OperandKind{} },
239327 },
240328 .SelectionControl => &[_]Enumerant{
241329 .{ .name = "Flatten", .value = 0x0001, .parameters = &[_]OperandKind{} },
......@@ -258,7 +346,9 @@ pub const OperandKind = enum {
258346 .{ .name = "LoopCoalesceINTEL", .value = 0x100000, .parameters = &[_]OperandKind{.LiteralInteger} },
259347 .{ .name = "MaxInterleavingINTEL", .value = 0x200000, .parameters = &[_]OperandKind{.LiteralInteger} },
260348 .{ .name = "SpeculatedIterationsINTEL", .value = 0x400000, .parameters = &[_]OperandKind{.LiteralInteger} },
261 .{ .name = "NoFusionINTEL", .value = 0x800000, .parameters = &[_]OperandKind{.LiteralInteger} },
349 .{ .name = "NoFusionINTEL", .value = 0x800000, .parameters = &[_]OperandKind{} },
350 .{ .name = "LoopCountINTEL", .value = 0x1000000, .parameters = &[_]OperandKind{.LiteralInteger} },
351 .{ .name = "MaxReinvocationDelayINTEL", .value = 0x2000000, .parameters = &[_]OperandKind{.LiteralInteger} },
262352 },
263353 .FunctionControl => &[_]Enumerant{
264354 .{ .name = "Inline", .value = 0x0001, .parameters = &[_]OperandKind{} },
......@@ -297,6 +387,8 @@ pub const OperandKind = enum {
297387 .{ .name = "MakePointerVisibleKHR", .value = 0x0010, .parameters = &[_]OperandKind{.IdScope} },
298388 .{ .name = "NonPrivatePointer", .value = 0x0020, .parameters = &[_]OperandKind{} },
299389 .{ .name = "NonPrivatePointerKHR", .value = 0x0020, .parameters = &[_]OperandKind{} },
390 .{ .name = "AliasScopeINTELMask", .value = 0x10000, .parameters = &[_]OperandKind{.IdRef} },
391 .{ .name = "NoAliasINTELMask", .value = 0x20000, .parameters = &[_]OperandKind{.IdRef} },
300392 },
301393 .KernelProfilingInfo => &[_]Enumerant{
302394 .{ .name = "CmdExecTime", .value = 0x0001, .parameters = &[_]OperandKind{} },
......@@ -313,6 +405,7 @@ pub const OperandKind = enum {
313405 .{ .name = "CullNoOpaqueKHR", .value = 0x0080, .parameters = &[_]OperandKind{} },
314406 .{ .name = "SkipTrianglesKHR", .value = 0x0100, .parameters = &[_]OperandKind{} },
315407 .{ .name = "SkipAABBsKHR", .value = 0x0200, .parameters = &[_]OperandKind{} },
408 .{ .name = "ForceOpacityMicromap2StateEXT", .value = 0x0400, .parameters = &[_]OperandKind{} },
316409 },
317410 .FragmentShadingRate => &[_]Enumerant{
318411 .{ .name = "Vertical2Pixels", .value = 0x0001, .parameters = &[_]OperandKind{} },
......@@ -320,6 +413,10 @@ pub const OperandKind = enum {
320413 .{ .name = "Horizontal2Pixels", .value = 0x0004, .parameters = &[_]OperandKind{} },
321414 .{ .name = "Horizontal4Pixels", .value = 0x0008, .parameters = &[_]OperandKind{} },
322415 },
416 .RawAccessChainOperands => &[_]Enumerant{
417 .{ .name = "RobustnessPerComponentNV", .value = 0x0001, .parameters = &[_]OperandKind{} },
418 .{ .name = "RobustnessPerElementNV", .value = 0x0002, .parameters = &[_]OperandKind{} },
419 },
323420 .SourceLanguage => &[_]Enumerant{
324421 .{ .name = "Unknown", .value = 0, .parameters = &[_]OperandKind{} },
325422 .{ .name = "ESSL", .value = 1, .parameters = &[_]OperandKind{} },
......@@ -328,6 +425,12 @@ pub const OperandKind = enum {
328425 .{ .name = "OpenCL_CPP", .value = 4, .parameters = &[_]OperandKind{} },
329426 .{ .name = "HLSL", .value = 5, .parameters = &[_]OperandKind{} },
330427 .{ .name = "CPP_for_OpenCL", .value = 6, .parameters = &[_]OperandKind{} },
428 .{ .name = "SYCL", .value = 7, .parameters = &[_]OperandKind{} },
429 .{ .name = "HERO_C", .value = 8, .parameters = &[_]OperandKind{} },
430 .{ .name = "NZSL", .value = 9, .parameters = &[_]OperandKind{} },
431 .{ .name = "WGSL", .value = 10, .parameters = &[_]OperandKind{} },
432 .{ .name = "Slang", .value = 11, .parameters = &[_]OperandKind{} },
433 .{ .name = "Zig", .value = 12, .parameters = &[_]OperandKind{} },
331434 },
332435 .ExecutionModel => &[_]Enumerant{
333436 .{ .name = "Vertex", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -351,6 +454,8 @@ pub const OperandKind = enum {
351454 .{ .name = "MissKHR", .value = 5317, .parameters = &[_]OperandKind{} },
352455 .{ .name = "CallableNV", .value = 5318, .parameters = &[_]OperandKind{} },
353456 .{ .name = "CallableKHR", .value = 5318, .parameters = &[_]OperandKind{} },
457 .{ .name = "TaskEXT", .value = 5364, .parameters = &[_]OperandKind{} },
458 .{ .name = "MeshEXT", .value = 5365, .parameters = &[_]OperandKind{} },
354459 },
355460 .AddressingModel => &[_]Enumerant{
356461 .{ .name = "Logical", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -405,6 +510,9 @@ pub const OperandKind = enum {
405510 .{ .name = "SubgroupsPerWorkgroupId", .value = 37, .parameters = &[_]OperandKind{.IdRef} },
406511 .{ .name = "LocalSizeId", .value = 38, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },
407512 .{ .name = "LocalSizeHintId", .value = 39, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },
513 .{ .name = "NonCoherentColorAttachmentReadEXT", .value = 4169, .parameters = &[_]OperandKind{} },
514 .{ .name = "NonCoherentDepthAttachmentReadEXT", .value = 4170, .parameters = &[_]OperandKind{} },
515 .{ .name = "NonCoherentStencilAttachmentReadEXT", .value = 4171, .parameters = &[_]OperandKind{} },
408516 .{ .name = "SubgroupUniformControlFlowKHR", .value = 4421, .parameters = &[_]OperandKind{} },
409517 .{ .name = "PostDepthCoverage", .value = 4446, .parameters = &[_]OperandKind{} },
410518 .{ .name = "DenormPreserve", .value = 4459, .parameters = &[_]OperandKind{.LiteralInteger} },
......@@ -412,12 +520,29 @@ pub const OperandKind = enum {
412520 .{ .name = "SignedZeroInfNanPreserve", .value = 4461, .parameters = &[_]OperandKind{.LiteralInteger} },
413521 .{ .name = "RoundingModeRTE", .value = 4462, .parameters = &[_]OperandKind{.LiteralInteger} },
414522 .{ .name = "RoundingModeRTZ", .value = 4463, .parameters = &[_]OperandKind{.LiteralInteger} },
523 .{ .name = "EarlyAndLateFragmentTestsAMD", .value = 5017, .parameters = &[_]OperandKind{} },
415524 .{ .name = "StencilRefReplacingEXT", .value = 5027, .parameters = &[_]OperandKind{} },
525 .{ .name = "CoalescingAMDX", .value = 5069, .parameters = &[_]OperandKind{} },
526 .{ .name = "MaxNodeRecursionAMDX", .value = 5071, .parameters = &[_]OperandKind{.IdRef} },
527 .{ .name = "StaticNumWorkgroupsAMDX", .value = 5072, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },
528 .{ .name = "ShaderIndexAMDX", .value = 5073, .parameters = &[_]OperandKind{.IdRef} },
529 .{ .name = "MaxNumWorkgroupsAMDX", .value = 5077, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },
530 .{ .name = "StencilRefUnchangedFrontAMD", .value = 5079, .parameters = &[_]OperandKind{} },
531 .{ .name = "StencilRefGreaterFrontAMD", .value = 5080, .parameters = &[_]OperandKind{} },
532 .{ .name = "StencilRefLessFrontAMD", .value = 5081, .parameters = &[_]OperandKind{} },
533 .{ .name = "StencilRefUnchangedBackAMD", .value = 5082, .parameters = &[_]OperandKind{} },
534 .{ .name = "StencilRefGreaterBackAMD", .value = 5083, .parameters = &[_]OperandKind{} },
535 .{ .name = "StencilRefLessBackAMD", .value = 5084, .parameters = &[_]OperandKind{} },
536 .{ .name = "QuadDerivativesKHR", .value = 5088, .parameters = &[_]OperandKind{} },
537 .{ .name = "RequireFullQuadsKHR", .value = 5089, .parameters = &[_]OperandKind{} },
416538 .{ .name = "OutputLinesNV", .value = 5269, .parameters = &[_]OperandKind{} },
539 .{ .name = "OutputLinesEXT", .value = 5269, .parameters = &[_]OperandKind{} },
417540 .{ .name = "OutputPrimitivesNV", .value = 5270, .parameters = &[_]OperandKind{.LiteralInteger} },
541 .{ .name = "OutputPrimitivesEXT", .value = 5270, .parameters = &[_]OperandKind{.LiteralInteger} },
418542 .{ .name = "DerivativeGroupQuadsNV", .value = 5289, .parameters = &[_]OperandKind{} },
419543 .{ .name = "DerivativeGroupLinearNV", .value = 5290, .parameters = &[_]OperandKind{} },
420544 .{ .name = "OutputTrianglesNV", .value = 5298, .parameters = &[_]OperandKind{} },
545 .{ .name = "OutputTrianglesEXT", .value = 5298, .parameters = &[_]OperandKind{} },
421546 .{ .name = "PixelInterlockOrderedEXT", .value = 5366, .parameters = &[_]OperandKind{} },
422547 .{ .name = "PixelInterlockUnorderedEXT", .value = 5367, .parameters = &[_]OperandKind{} },
423548 .{ .name = "SampleInterlockOrderedEXT", .value = 5368, .parameters = &[_]OperandKind{} },
......@@ -434,6 +559,14 @@ pub const OperandKind = enum {
434559 .{ .name = "NoGlobalOffsetINTEL", .value = 5895, .parameters = &[_]OperandKind{} },
435560 .{ .name = "NumSIMDWorkitemsINTEL", .value = 5896, .parameters = &[_]OperandKind{.LiteralInteger} },
436561 .{ .name = "SchedulerTargetFmaxMhzINTEL", .value = 5903, .parameters = &[_]OperandKind{.LiteralInteger} },
562 .{ .name = "MaximallyReconvergesKHR", .value = 6023, .parameters = &[_]OperandKind{} },
563 .{ .name = "FPFastMathDefault", .value = 6028, .parameters = &[_]OperandKind{ .IdRef, .IdRef } },
564 .{ .name = "StreamingInterfaceINTEL", .value = 6154, .parameters = &[_]OperandKind{.LiteralInteger} },
565 .{ .name = "RegisterMapInterfaceINTEL", .value = 6160, .parameters = &[_]OperandKind{.LiteralInteger} },
566 .{ .name = "NamedBarrierCountINTEL", .value = 6417, .parameters = &[_]OperandKind{.LiteralInteger} },
567 .{ .name = "MaximumRegistersINTEL", .value = 6461, .parameters = &[_]OperandKind{.LiteralInteger} },
568 .{ .name = "MaximumRegistersIdINTEL", .value = 6462, .parameters = &[_]OperandKind{.IdRef} },
569 .{ .name = "NamedMaximumRegistersINTEL", .value = 6463, .parameters = &[_]OperandKind{.NamedMaximumNumberOfRegisters} },
437570 },
438571 .StorageClass => &[_]Enumerant{
439572 .{ .name = "UniformConstant", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -449,6 +582,9 @@ pub const OperandKind = enum {
449582 .{ .name = "AtomicCounter", .value = 10, .parameters = &[_]OperandKind{} },
450583 .{ .name = "Image", .value = 11, .parameters = &[_]OperandKind{} },
451584 .{ .name = "StorageBuffer", .value = 12, .parameters = &[_]OperandKind{} },
585 .{ .name = "TileImageEXT", .value = 4172, .parameters = &[_]OperandKind{} },
586 .{ .name = "NodePayloadAMDX", .value = 5068, .parameters = &[_]OperandKind{} },
587 .{ .name = "NodeOutputPayloadAMDX", .value = 5076, .parameters = &[_]OperandKind{} },
452588 .{ .name = "CallableDataNV", .value = 5328, .parameters = &[_]OperandKind{} },
453589 .{ .name = "CallableDataKHR", .value = 5328, .parameters = &[_]OperandKind{} },
454590 .{ .name = "IncomingCallableDataNV", .value = 5329, .parameters = &[_]OperandKind{} },
......@@ -463,6 +599,8 @@ pub const OperandKind = enum {
463599 .{ .name = "ShaderRecordBufferKHR", .value = 5343, .parameters = &[_]OperandKind{} },
464600 .{ .name = "PhysicalStorageBuffer", .value = 5349, .parameters = &[_]OperandKind{} },
465601 .{ .name = "PhysicalStorageBufferEXT", .value = 5349, .parameters = &[_]OperandKind{} },
602 .{ .name = "HitObjectAttributeNV", .value = 5385, .parameters = &[_]OperandKind{} },
603 .{ .name = "TaskPayloadWorkgroupEXT", .value = 5402, .parameters = &[_]OperandKind{} },
466604 .{ .name = "CodeSectionINTEL", .value = 5605, .parameters = &[_]OperandKind{} },
467605 .{ .name = "DeviceOnlyINTEL", .value = 5936, .parameters = &[_]OperandKind{} },
468606 .{ .name = "HostOnlyINTEL", .value = 5937, .parameters = &[_]OperandKind{} },
......@@ -475,6 +613,7 @@ pub const OperandKind = enum {
475613 .{ .name = "Rect", .value = 4, .parameters = &[_]OperandKind{} },
476614 .{ .name = "Buffer", .value = 5, .parameters = &[_]OperandKind{} },
477615 .{ .name = "SubpassData", .value = 6, .parameters = &[_]OperandKind{} },
616 .{ .name = "TileImageDataEXT", .value = 4173, .parameters = &[_]OperandKind{} },
478617 },
479618 .SamplerAddressingMode => &[_]Enumerant{
480619 .{ .name = "None", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -571,6 +710,8 @@ pub const OperandKind = enum {
571710 .{ .name = "Float", .value = 14, .parameters = &[_]OperandKind{} },
572711 .{ .name = "UnormInt24", .value = 15, .parameters = &[_]OperandKind{} },
573712 .{ .name = "UnormInt101010_2", .value = 16, .parameters = &[_]OperandKind{} },
713 .{ .name = "UnsignedIntRaw10EXT", .value = 19, .parameters = &[_]OperandKind{} },
714 .{ .name = "UnsignedIntRaw12EXT", .value = 20, .parameters = &[_]OperandKind{} },
574715 },
575716 .FPRoundingMode => &[_]Enumerant{
576717 .{ .name = "RTE", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -612,6 +753,12 @@ pub const OperandKind = enum {
612753 .{ .name = "WriteOnly", .value = 1, .parameters = &[_]OperandKind{} },
613754 .{ .name = "ReadWrite", .value = 2, .parameters = &[_]OperandKind{} },
614755 },
756 .HostAccessQualifier => &[_]Enumerant{
757 .{ .name = "NoneINTEL", .value = 0, .parameters = &[_]OperandKind{} },
758 .{ .name = "ReadINTEL", .value = 1, .parameters = &[_]OperandKind{} },
759 .{ .name = "WriteINTEL", .value = 2, .parameters = &[_]OperandKind{} },
760 .{ .name = "ReadWriteINTEL", .value = 3, .parameters = &[_]OperandKind{} },
761 },
615762 .FunctionParameterAttribute => &[_]Enumerant{
616763 .{ .name = "Zext", .value = 0, .parameters = &[_]OperandKind{} },
617764 .{ .name = "Sext", .value = 1, .parameters = &[_]OperandKind{} },
......@@ -621,6 +768,7 @@ pub const OperandKind = enum {
621768 .{ .name = "NoCapture", .value = 5, .parameters = &[_]OperandKind{} },
622769 .{ .name = "NoWrite", .value = 6, .parameters = &[_]OperandKind{} },
623770 .{ .name = "NoReadWrite", .value = 7, .parameters = &[_]OperandKind{} },
771 .{ .name = "RuntimeAlignedINTEL", .value = 5940, .parameters = &[_]OperandKind{} },
624772 },
625773 .Decoration => &[_]Enumerant{
626774 .{ .name = "RelaxedPrecision", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -672,12 +820,20 @@ pub const OperandKind = enum {
672820 .{ .name = "MaxByteOffsetId", .value = 47, .parameters = &[_]OperandKind{.IdRef} },
673821 .{ .name = "NoSignedWrap", .value = 4469, .parameters = &[_]OperandKind{} },
674822 .{ .name = "NoUnsignedWrap", .value = 4470, .parameters = &[_]OperandKind{} },
823 .{ .name = "WeightTextureQCOM", .value = 4487, .parameters = &[_]OperandKind{} },
824 .{ .name = "BlockMatchTextureQCOM", .value = 4488, .parameters = &[_]OperandKind{} },
825 .{ .name = "BlockMatchSamplerQCOM", .value = 4499, .parameters = &[_]OperandKind{} },
675826 .{ .name = "ExplicitInterpAMD", .value = 4999, .parameters = &[_]OperandKind{} },
827 .{ .name = "NodeSharesPayloadLimitsWithAMDX", .value = 5019, .parameters = &[_]OperandKind{.IdRef} },
828 .{ .name = "NodeMaxPayloadsAMDX", .value = 5020, .parameters = &[_]OperandKind{.IdRef} },
829 .{ .name = "TrackFinishWritingAMDX", .value = 5078, .parameters = &[_]OperandKind{} },
830 .{ .name = "PayloadNodeNameAMDX", .value = 5091, .parameters = &[_]OperandKind{.LiteralString} },
676831 .{ .name = "OverrideCoverageNV", .value = 5248, .parameters = &[_]OperandKind{} },
677832 .{ .name = "PassthroughNV", .value = 5250, .parameters = &[_]OperandKind{} },
678833 .{ .name = "ViewportRelativeNV", .value = 5252, .parameters = &[_]OperandKind{} },
679834 .{ .name = "SecondaryViewportRelativeNV", .value = 5256, .parameters = &[_]OperandKind{.LiteralInteger} },
680835 .{ .name = "PerPrimitiveNV", .value = 5271, .parameters = &[_]OperandKind{} },
836 .{ .name = "PerPrimitiveEXT", .value = 5271, .parameters = &[_]OperandKind{} },
681837 .{ .name = "PerViewNV", .value = 5272, .parameters = &[_]OperandKind{} },
682838 .{ .name = "PerTaskNV", .value = 5273, .parameters = &[_]OperandKind{} },
683839 .{ .name = "PerVertexKHR", .value = 5285, .parameters = &[_]OperandKind{} },
......@@ -688,6 +844,7 @@ pub const OperandKind = enum {
688844 .{ .name = "RestrictPointerEXT", .value = 5355, .parameters = &[_]OperandKind{} },
689845 .{ .name = "AliasedPointer", .value = 5356, .parameters = &[_]OperandKind{} },
690846 .{ .name = "AliasedPointerEXT", .value = 5356, .parameters = &[_]OperandKind{} },
847 .{ .name = "HitObjectShaderRecordBufferNV", .value = 5386, .parameters = &[_]OperandKind{} },
691848 .{ .name = "BindlessSamplerNV", .value = 5398, .parameters = &[_]OperandKind{} },
692849 .{ .name = "BindlessImageNV", .value = 5399, .parameters = &[_]OperandKind{} },
693850 .{ .name = "BoundSamplerNV", .value = 5400, .parameters = &[_]OperandKind{} },
......@@ -720,18 +877,45 @@ pub const OperandKind = enum {
720877 .{ .name = "MergeINTEL", .value = 5834, .parameters = &[_]OperandKind{ .LiteralString, .LiteralString } },
721878 .{ .name = "BankBitsINTEL", .value = 5835, .parameters = &[_]OperandKind{.LiteralInteger} },
722879 .{ .name = "ForcePow2DepthINTEL", .value = 5836, .parameters = &[_]OperandKind{.LiteralInteger} },
880 .{ .name = "StridesizeINTEL", .value = 5883, .parameters = &[_]OperandKind{.LiteralInteger} },
881 .{ .name = "WordsizeINTEL", .value = 5884, .parameters = &[_]OperandKind{.LiteralInteger} },
882 .{ .name = "TrueDualPortINTEL", .value = 5885, .parameters = &[_]OperandKind{} },
723883 .{ .name = "BurstCoalesceINTEL", .value = 5899, .parameters = &[_]OperandKind{} },
724884 .{ .name = "CacheSizeINTEL", .value = 5900, .parameters = &[_]OperandKind{.LiteralInteger} },
725885 .{ .name = "DontStaticallyCoalesceINTEL", .value = 5901, .parameters = &[_]OperandKind{} },
726886 .{ .name = "PrefetchINTEL", .value = 5902, .parameters = &[_]OperandKind{.LiteralInteger} },
727887 .{ .name = "StallEnableINTEL", .value = 5905, .parameters = &[_]OperandKind{} },
728888 .{ .name = "FuseLoopsInFunctionINTEL", .value = 5907, .parameters = &[_]OperandKind{} },
889 .{ .name = "MathOpDSPModeINTEL", .value = 5909, .parameters = &[_]OperandKind{ .LiteralInteger, .LiteralInteger } },
890 .{ .name = "AliasScopeINTEL", .value = 5914, .parameters = &[_]OperandKind{.IdRef} },
891 .{ .name = "NoAliasINTEL", .value = 5915, .parameters = &[_]OperandKind{.IdRef} },
892 .{ .name = "InitiationIntervalINTEL", .value = 5917, .parameters = &[_]OperandKind{.LiteralInteger} },
893 .{ .name = "MaxConcurrencyINTEL", .value = 5918, .parameters = &[_]OperandKind{.LiteralInteger} },
894 .{ .name = "PipelineEnableINTEL", .value = 5919, .parameters = &[_]OperandKind{.LiteralInteger} },
729895 .{ .name = "BufferLocationINTEL", .value = 5921, .parameters = &[_]OperandKind{.LiteralInteger} },
730896 .{ .name = "IOPipeStorageINTEL", .value = 5944, .parameters = &[_]OperandKind{.LiteralInteger} },
731897 .{ .name = "FunctionFloatingPointModeINTEL", .value = 6080, .parameters = &[_]OperandKind{ .LiteralInteger, .FPOperationMode } },
732898 .{ .name = "SingleElementVectorINTEL", .value = 6085, .parameters = &[_]OperandKind{} },
733899 .{ .name = "VectorComputeCallableFunctionINTEL", .value = 6087, .parameters = &[_]OperandKind{} },
734900 .{ .name = "MediaBlockIOINTEL", .value = 6140, .parameters = &[_]OperandKind{} },
901 .{ .name = "StallFreeINTEL", .value = 6151, .parameters = &[_]OperandKind{} },
902 .{ .name = "FPMaxErrorDecorationINTEL", .value = 6170, .parameters = &[_]OperandKind{.LiteralFloat} },
903 .{ .name = "LatencyControlLabelINTEL", .value = 6172, .parameters = &[_]OperandKind{.LiteralInteger} },
904 .{ .name = "LatencyControlConstraintINTEL", .value = 6173, .parameters = &[_]OperandKind{ .LiteralInteger, .LiteralInteger, .LiteralInteger } },
905 .{ .name = "ConduitKernelArgumentINTEL", .value = 6175, .parameters = &[_]OperandKind{} },
906 .{ .name = "RegisterMapKernelArgumentINTEL", .value = 6176, .parameters = &[_]OperandKind{} },
907 .{ .name = "MMHostInterfaceAddressWidthINTEL", .value = 6177, .parameters = &[_]OperandKind{.LiteralInteger} },
908 .{ .name = "MMHostInterfaceDataWidthINTEL", .value = 6178, .parameters = &[_]OperandKind{.LiteralInteger} },
909 .{ .name = "MMHostInterfaceLatencyINTEL", .value = 6179, .parameters = &[_]OperandKind{.LiteralInteger} },
910 .{ .name = "MMHostInterfaceReadWriteModeINTEL", .value = 6180, .parameters = &[_]OperandKind{.AccessQualifier} },
911 .{ .name = "MMHostInterfaceMaxBurstINTEL", .value = 6181, .parameters = &[_]OperandKind{.LiteralInteger} },
912 .{ .name = "MMHostInterfaceWaitRequestINTEL", .value = 6182, .parameters = &[_]OperandKind{.LiteralInteger} },
913 .{ .name = "StableKernelArgumentINTEL", .value = 6183, .parameters = &[_]OperandKind{} },
914 .{ .name = "HostAccessINTEL", .value = 6188, .parameters = &[_]OperandKind{ .HostAccessQualifier, .LiteralString } },
915 .{ .name = "InitModeINTEL", .value = 6190, .parameters = &[_]OperandKind{.InitializationModeQualifier} },
916 .{ .name = "ImplementInRegisterMapINTEL", .value = 6191, .parameters = &[_]OperandKind{.LiteralInteger} },
917 .{ .name = "CacheControlLoadINTEL", .value = 6442, .parameters = &[_]OperandKind{ .LiteralInteger, .LoadCacheControl } },
918 .{ .name = "CacheControlStoreINTEL", .value = 6443, .parameters = &[_]OperandKind{ .LiteralInteger, .StoreCacheControl } },
735919 },
736920 .BuiltIn => &[_]Enumerant{
737921 .{ .name = "Position", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -775,6 +959,11 @@ pub const OperandKind = enum {
775959 .{ .name = "SubgroupLocalInvocationId", .value = 41, .parameters = &[_]OperandKind{} },
776960 .{ .name = "VertexIndex", .value = 42, .parameters = &[_]OperandKind{} },
777961 .{ .name = "InstanceIndex", .value = 43, .parameters = &[_]OperandKind{} },
962 .{ .name = "CoreIDARM", .value = 4160, .parameters = &[_]OperandKind{} },
963 .{ .name = "CoreCountARM", .value = 4161, .parameters = &[_]OperandKind{} },
964 .{ .name = "CoreMaxIDARM", .value = 4162, .parameters = &[_]OperandKind{} },
965 .{ .name = "WarpIDARM", .value = 4163, .parameters = &[_]OperandKind{} },
966 .{ .name = "WarpMaxIDARM", .value = 4164, .parameters = &[_]OperandKind{} },
778967 .{ .name = "SubgroupEqMask", .value = 4416, .parameters = &[_]OperandKind{} },
779968 .{ .name = "SubgroupEqMaskKHR", .value = 4416, .parameters = &[_]OperandKind{} },
780969 .{ .name = "SubgroupGeMask", .value = 4417, .parameters = &[_]OperandKind{} },
......@@ -800,6 +989,8 @@ pub const OperandKind = enum {
800989 .{ .name = "BaryCoordSmoothSampleAMD", .value = 4997, .parameters = &[_]OperandKind{} },
801990 .{ .name = "BaryCoordPullModelAMD", .value = 4998, .parameters = &[_]OperandKind{} },
802991 .{ .name = "FragStencilRefEXT", .value = 5014, .parameters = &[_]OperandKind{} },
992 .{ .name = "CoalescedInputCountAMDX", .value = 5021, .parameters = &[_]OperandKind{} },
993 .{ .name = "ShaderIndexAMDX", .value = 5073, .parameters = &[_]OperandKind{} },
803994 .{ .name = "ViewportMaskNV", .value = 5253, .parameters = &[_]OperandKind{} },
804995 .{ .name = "SecondaryPositionNV", .value = 5257, .parameters = &[_]OperandKind{} },
805996 .{ .name = "SecondaryViewportMaskNV", .value = 5258, .parameters = &[_]OperandKind{} },
......@@ -822,6 +1013,10 @@ pub const OperandKind = enum {
8221013 .{ .name = "FragmentSizeNV", .value = 5292, .parameters = &[_]OperandKind{} },
8231014 .{ .name = "FragInvocationCountEXT", .value = 5293, .parameters = &[_]OperandKind{} },
8241015 .{ .name = "InvocationsPerPixelNV", .value = 5293, .parameters = &[_]OperandKind{} },
1016 .{ .name = "PrimitivePointIndicesEXT", .value = 5294, .parameters = &[_]OperandKind{} },
1017 .{ .name = "PrimitiveLineIndicesEXT", .value = 5295, .parameters = &[_]OperandKind{} },
1018 .{ .name = "PrimitiveTriangleIndicesEXT", .value = 5296, .parameters = &[_]OperandKind{} },
1019 .{ .name = "CullPrimitiveEXT", .value = 5299, .parameters = &[_]OperandKind{} },
8251020 .{ .name = "LaunchIdNV", .value = 5319, .parameters = &[_]OperandKind{} },
8261021 .{ .name = "LaunchIdKHR", .value = 5319, .parameters = &[_]OperandKind{} },
8271022 .{ .name = "LaunchSizeNV", .value = 5320, .parameters = &[_]OperandKind{} },
......@@ -848,6 +1043,9 @@ pub const OperandKind = enum {
8481043 .{ .name = "HitKindNV", .value = 5333, .parameters = &[_]OperandKind{} },
8491044 .{ .name = "HitKindKHR", .value = 5333, .parameters = &[_]OperandKind{} },
8501045 .{ .name = "CurrentRayTimeNV", .value = 5334, .parameters = &[_]OperandKind{} },
1046 .{ .name = "HitTriangleVertexPositionsKHR", .value = 5335, .parameters = &[_]OperandKind{} },
1047 .{ .name = "HitMicroTriangleVertexPositionsNV", .value = 5337, .parameters = &[_]OperandKind{} },
1048 .{ .name = "HitMicroTriangleVertexBarycentricsNV", .value = 5344, .parameters = &[_]OperandKind{} },
8511049 .{ .name = "IncomingRayFlagsNV", .value = 5351, .parameters = &[_]OperandKind{} },
8521050 .{ .name = "IncomingRayFlagsKHR", .value = 5351, .parameters = &[_]OperandKind{} },
8531051 .{ .name = "RayGeometryIndexKHR", .value = 5352, .parameters = &[_]OperandKind{} },
......@@ -855,6 +1053,9 @@ pub const OperandKind = enum {
8551053 .{ .name = "SMCountNV", .value = 5375, .parameters = &[_]OperandKind{} },
8561054 .{ .name = "WarpIDNV", .value = 5376, .parameters = &[_]OperandKind{} },
8571055 .{ .name = "SMIDNV", .value = 5377, .parameters = &[_]OperandKind{} },
1056 .{ .name = "HitKindFrontFacingMicroTriangleNV", .value = 5405, .parameters = &[_]OperandKind{} },
1057 .{ .name = "HitKindBackFacingMicroTriangleNV", .value = 5406, .parameters = &[_]OperandKind{} },
1058 .{ .name = "CullMaskKHR", .value = 6021, .parameters = &[_]OperandKind{} },
8581059 },
8591060 .Scope => &[_]Enumerant{
8601061 .{ .name = "CrossDevice", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -951,6 +1152,10 @@ pub const OperandKind = enum {
9511152 .{ .name = "ShaderLayer", .value = 69, .parameters = &[_]OperandKind{} },
9521153 .{ .name = "ShaderViewportIndex", .value = 70, .parameters = &[_]OperandKind{} },
9531154 .{ .name = "UniformDecoration", .value = 71, .parameters = &[_]OperandKind{} },
1155 .{ .name = "CoreBuiltinsARM", .value = 4165, .parameters = &[_]OperandKind{} },
1156 .{ .name = "TileImageColorReadAccessEXT", .value = 4166, .parameters = &[_]OperandKind{} },
1157 .{ .name = "TileImageDepthReadAccessEXT", .value = 4167, .parameters = &[_]OperandKind{} },
1158 .{ .name = "TileImageStencilReadAccessEXT", .value = 4168, .parameters = &[_]OperandKind{} },
9541159 .{ .name = "FragmentShadingRateKHR", .value = 4422, .parameters = &[_]OperandKind{} },
9551160 .{ .name = "SubgroupBallotKHR", .value = 4423, .parameters = &[_]OperandKind{} },
9561161 .{ .name = "DrawParameters", .value = 4427, .parameters = &[_]OperandKind{} },
......@@ -982,6 +1187,10 @@ pub const OperandKind = enum {
9821187 .{ .name = "RayQueryKHR", .value = 4472, .parameters = &[_]OperandKind{} },
9831188 .{ .name = "RayTraversalPrimitiveCullingKHR", .value = 4478, .parameters = &[_]OperandKind{} },
9841189 .{ .name = "RayTracingKHR", .value = 4479, .parameters = &[_]OperandKind{} },
1190 .{ .name = "TextureSampleWeightedQCOM", .value = 4484, .parameters = &[_]OperandKind{} },
1191 .{ .name = "TextureBoxFilterQCOM", .value = 4485, .parameters = &[_]OperandKind{} },
1192 .{ .name = "TextureBlockMatchQCOM", .value = 4486, .parameters = &[_]OperandKind{} },
1193 .{ .name = "TextureBlockMatch2QCOM", .value = 4498, .parameters = &[_]OperandKind{} },
9851194 .{ .name = "Float16ImageAMD", .value = 5008, .parameters = &[_]OperandKind{} },
9861195 .{ .name = "ImageGatherBiasLodAMD", .value = 5009, .parameters = &[_]OperandKind{} },
9871196 .{ .name = "FragmentMaskAMD", .value = 5010, .parameters = &[_]OperandKind{} },
......@@ -989,6 +1198,8 @@ pub const OperandKind = enum {
9891198 .{ .name = "ImageReadWriteLodAMD", .value = 5015, .parameters = &[_]OperandKind{} },
9901199 .{ .name = "Int64ImageEXT", .value = 5016, .parameters = &[_]OperandKind{} },
9911200 .{ .name = "ShaderClockKHR", .value = 5055, .parameters = &[_]OperandKind{} },
1201 .{ .name = "ShaderEnqueueAMDX", .value = 5067, .parameters = &[_]OperandKind{} },
1202 .{ .name = "QuadControlKHR", .value = 5087, .parameters = &[_]OperandKind{} },
9921203 .{ .name = "SampleMaskOverrideCoverageNV", .value = 5249, .parameters = &[_]OperandKind{} },
9931204 .{ .name = "GeometryShaderPassthroughNV", .value = 5251, .parameters = &[_]OperandKind{} },
9941205 .{ .name = "ShaderViewportIndexLayerEXT", .value = 5254, .parameters = &[_]OperandKind{} },
......@@ -999,6 +1210,7 @@ pub const OperandKind = enum {
9991210 .{ .name = "FragmentFullyCoveredEXT", .value = 5265, .parameters = &[_]OperandKind{} },
10001211 .{ .name = "MeshShadingNV", .value = 5266, .parameters = &[_]OperandKind{} },
10011212 .{ .name = "ImageFootprintNV", .value = 5282, .parameters = &[_]OperandKind{} },
1213 .{ .name = "MeshShadingEXT", .value = 5283, .parameters = &[_]OperandKind{} },
10021214 .{ .name = "FragmentBarycentricKHR", .value = 5284, .parameters = &[_]OperandKind{} },
10031215 .{ .name = "FragmentBarycentricNV", .value = 5284, .parameters = &[_]OperandKind{} },
10041216 .{ .name = "ComputeDerivativeGroupQuadsNV", .value = 5288, .parameters = &[_]OperandKind{} },
......@@ -1029,6 +1241,7 @@ pub const OperandKind = enum {
10291241 .{ .name = "UniformTexelBufferArrayNonUniformIndexingEXT", .value = 5311, .parameters = &[_]OperandKind{} },
10301242 .{ .name = "StorageTexelBufferArrayNonUniformIndexing", .value = 5312, .parameters = &[_]OperandKind{} },
10311243 .{ .name = "StorageTexelBufferArrayNonUniformIndexingEXT", .value = 5312, .parameters = &[_]OperandKind{} },
1244 .{ .name = "RayTracingPositionFetchKHR", .value = 5336, .parameters = &[_]OperandKind{} },
10321245 .{ .name = "RayTracingNV", .value = 5340, .parameters = &[_]OperandKind{} },
10331246 .{ .name = "RayTracingMotionBlurNV", .value = 5341, .parameters = &[_]OperandKind{} },
10341247 .{ .name = "VulkanMemoryModel", .value = 5345, .parameters = &[_]OperandKind{} },
......@@ -1046,7 +1259,14 @@ pub const OperandKind = enum {
10461259 .{ .name = "FragmentShaderPixelInterlockEXT", .value = 5378, .parameters = &[_]OperandKind{} },
10471260 .{ .name = "DemoteToHelperInvocation", .value = 5379, .parameters = &[_]OperandKind{} },
10481261 .{ .name = "DemoteToHelperInvocationEXT", .value = 5379, .parameters = &[_]OperandKind{} },
1262 .{ .name = "DisplacementMicromapNV", .value = 5380, .parameters = &[_]OperandKind{} },
1263 .{ .name = "RayTracingOpacityMicromapEXT", .value = 5381, .parameters = &[_]OperandKind{} },
1264 .{ .name = "ShaderInvocationReorderNV", .value = 5383, .parameters = &[_]OperandKind{} },
10491265 .{ .name = "BindlessTextureNV", .value = 5390, .parameters = &[_]OperandKind{} },
1266 .{ .name = "RayQueryPositionFetchKHR", .value = 5391, .parameters = &[_]OperandKind{} },
1267 .{ .name = "AtomicFloat16VectorNV", .value = 5404, .parameters = &[_]OperandKind{} },
1268 .{ .name = "RayTracingDisplacementMicromapNV", .value = 5409, .parameters = &[_]OperandKind{} },
1269 .{ .name = "RawAccessChainsNV", .value = 5414, .parameters = &[_]OperandKind{} },
10501270 .{ .name = "SubgroupShuffleINTEL", .value = 5568, .parameters = &[_]OperandKind{} },
10511271 .{ .name = "SubgroupBufferBlockIOINTEL", .value = 5569, .parameters = &[_]OperandKind{} },
10521272 .{ .name = "SubgroupImageBlockIOINTEL", .value = 5570, .parameters = &[_]OperandKind{} },
......@@ -1079,9 +1299,13 @@ pub const OperandKind = enum {
10791299 .{ .name = "FPGAMemoryAccessesINTEL", .value = 5898, .parameters = &[_]OperandKind{} },
10801300 .{ .name = "FPGAClusterAttributesINTEL", .value = 5904, .parameters = &[_]OperandKind{} },
10811301 .{ .name = "LoopFuseINTEL", .value = 5906, .parameters = &[_]OperandKind{} },
1302 .{ .name = "FPGADSPControlINTEL", .value = 5908, .parameters = &[_]OperandKind{} },
1303 .{ .name = "MemoryAccessAliasingINTEL", .value = 5910, .parameters = &[_]OperandKind{} },
1304 .{ .name = "FPGAInvocationPipeliningAttributesINTEL", .value = 5916, .parameters = &[_]OperandKind{} },
10821305 .{ .name = "FPGABufferLocationINTEL", .value = 5920, .parameters = &[_]OperandKind{} },
10831306 .{ .name = "ArbitraryPrecisionFixedPointINTEL", .value = 5922, .parameters = &[_]OperandKind{} },
10841307 .{ .name = "USMStorageClassesINTEL", .value = 5935, .parameters = &[_]OperandKind{} },
1308 .{ .name = "RuntimeAlignedAttributeINTEL", .value = 5939, .parameters = &[_]OperandKind{} },
10851309 .{ .name = "IOPipesINTEL", .value = 5943, .parameters = &[_]OperandKind{} },
10861310 .{ .name = "BlockingPipesINTEL", .value = 5945, .parameters = &[_]OperandKind{} },
10871311 .{ .name = "FPGARegINTEL", .value = 5948, .parameters = &[_]OperandKind{} },
......@@ -1093,13 +1317,30 @@ pub const OperandKind = enum {
10931317 .{ .name = "DotProductInput4x8BitPackedKHR", .value = 6018, .parameters = &[_]OperandKind{} },
10941318 .{ .name = "DotProduct", .value = 6019, .parameters = &[_]OperandKind{} },
10951319 .{ .name = "DotProductKHR", .value = 6019, .parameters = &[_]OperandKind{} },
1320 .{ .name = "RayCullMaskKHR", .value = 6020, .parameters = &[_]OperandKind{} },
1321 .{ .name = "CooperativeMatrixKHR", .value = 6022, .parameters = &[_]OperandKind{} },
10961322 .{ .name = "BitInstructions", .value = 6025, .parameters = &[_]OperandKind{} },
1323 .{ .name = "GroupNonUniformRotateKHR", .value = 6026, .parameters = &[_]OperandKind{} },
1324 .{ .name = "FloatControls2", .value = 6029, .parameters = &[_]OperandKind{} },
10971325 .{ .name = "AtomicFloat32AddEXT", .value = 6033, .parameters = &[_]OperandKind{} },
10981326 .{ .name = "AtomicFloat64AddEXT", .value = 6034, .parameters = &[_]OperandKind{} },
1099 .{ .name = "LongConstantCompositeINTEL", .value = 6089, .parameters = &[_]OperandKind{} },
1327 .{ .name = "LongCompositesINTEL", .value = 6089, .parameters = &[_]OperandKind{} },
11001328 .{ .name = "OptNoneINTEL", .value = 6094, .parameters = &[_]OperandKind{} },
11011329 .{ .name = "AtomicFloat16AddEXT", .value = 6095, .parameters = &[_]OperandKind{} },
11021330 .{ .name = "DebugInfoModuleINTEL", .value = 6114, .parameters = &[_]OperandKind{} },
1331 .{ .name = "BFloat16ConversionINTEL", .value = 6115, .parameters = &[_]OperandKind{} },
1332 .{ .name = "SplitBarrierINTEL", .value = 6141, .parameters = &[_]OperandKind{} },
1333 .{ .name = "FPGAClusterAttributesV2INTEL", .value = 6150, .parameters = &[_]OperandKind{} },
1334 .{ .name = "FPGAKernelAttributesv2INTEL", .value = 6161, .parameters = &[_]OperandKind{} },
1335 .{ .name = "FPMaxErrorINTEL", .value = 6169, .parameters = &[_]OperandKind{} },
1336 .{ .name = "FPGALatencyControlINTEL", .value = 6171, .parameters = &[_]OperandKind{} },
1337 .{ .name = "FPGAArgumentInterfacesINTEL", .value = 6174, .parameters = &[_]OperandKind{} },
1338 .{ .name = "GlobalVariableHostAccessINTEL", .value = 6187, .parameters = &[_]OperandKind{} },
1339 .{ .name = "GlobalVariableFPGADecorationsINTEL", .value = 6189, .parameters = &[_]OperandKind{} },
1340 .{ .name = "GroupUniformArithmeticKHR", .value = 6400, .parameters = &[_]OperandKind{} },
1341 .{ .name = "MaskedGatherScatterINTEL", .value = 6427, .parameters = &[_]OperandKind{} },
1342 .{ .name = "CacheControlsINTEL", .value = 6441, .parameters = &[_]OperandKind{} },
1343 .{ .name = "RegisterLimitsINTEL", .value = 6460, .parameters = &[_]OperandKind{} },
11031344 },
11041345 .RayQueryIntersection => &[_]Enumerant{
11051346 .{ .name = "RayQueryCandidateIntersectionKHR", .value = 0, .parameters = &[_]OperandKind{} },
......@@ -1118,6 +1359,43 @@ pub const OperandKind = enum {
11181359 .{ .name = "PackedVectorFormat4x8Bit", .value = 0, .parameters = &[_]OperandKind{} },
11191360 .{ .name = "PackedVectorFormat4x8BitKHR", .value = 0, .parameters = &[_]OperandKind{} },
11201361 },
1362 .CooperativeMatrixOperands => &[_]Enumerant{
1363 .{ .name = "NoneKHR", .value = 0x0000, .parameters = &[_]OperandKind{} },
1364 .{ .name = "MatrixASignedComponentsKHR", .value = 0x0001, .parameters = &[_]OperandKind{} },
1365 .{ .name = "MatrixBSignedComponentsKHR", .value = 0x0002, .parameters = &[_]OperandKind{} },
1366 .{ .name = "MatrixCSignedComponentsKHR", .value = 0x0004, .parameters = &[_]OperandKind{} },
1367 .{ .name = "MatrixResultSignedComponentsKHR", .value = 0x0008, .parameters = &[_]OperandKind{} },
1368 .{ .name = "SaturatingAccumulationKHR", .value = 0x0010, .parameters = &[_]OperandKind{} },
1369 },
1370 .CooperativeMatrixLayout => &[_]Enumerant{
1371 .{ .name = "RowMajorKHR", .value = 0, .parameters = &[_]OperandKind{} },
1372 .{ .name = "ColumnMajorKHR", .value = 1, .parameters = &[_]OperandKind{} },
1373 },
1374 .CooperativeMatrixUse => &[_]Enumerant{
1375 .{ .name = "MatrixAKHR", .value = 0, .parameters = &[_]OperandKind{} },
1376 .{ .name = "MatrixBKHR", .value = 1, .parameters = &[_]OperandKind{} },
1377 .{ .name = "MatrixAccumulatorKHR", .value = 2, .parameters = &[_]OperandKind{} },
1378 },
1379 .InitializationModeQualifier => &[_]Enumerant{
1380 .{ .name = "InitOnDeviceReprogramINTEL", .value = 0, .parameters = &[_]OperandKind{} },
1381 .{ .name = "InitOnDeviceResetINTEL", .value = 1, .parameters = &[_]OperandKind{} },
1382 },
1383 .LoadCacheControl => &[_]Enumerant{
1384 .{ .name = "UncachedINTEL", .value = 0, .parameters = &[_]OperandKind{} },
1385 .{ .name = "CachedINTEL", .value = 1, .parameters = &[_]OperandKind{} },
1386 .{ .name = "StreamingINTEL", .value = 2, .parameters = &[_]OperandKind{} },
1387 .{ .name = "InvalidateAfterReadINTEL", .value = 3, .parameters = &[_]OperandKind{} },
1388 .{ .name = "ConstCachedINTEL", .value = 4, .parameters = &[_]OperandKind{} },
1389 },
1390 .StoreCacheControl => &[_]Enumerant{
1391 .{ .name = "UncachedINTEL", .value = 0, .parameters = &[_]OperandKind{} },
1392 .{ .name = "WriteThroughINTEL", .value = 1, .parameters = &[_]OperandKind{} },
1393 .{ .name = "WriteBackINTEL", .value = 2, .parameters = &[_]OperandKind{} },
1394 .{ .name = "StreamingINTEL", .value = 3, .parameters = &[_]OperandKind{} },
1395 },
1396 .NamedMaximumNumberOfRegisters => &[_]Enumerant{
1397 .{ .name = "AutoINTEL", .value = 0, .parameters = &[_]OperandKind{} },
1398 },
11211399 .IdResultType => unreachable,
11221400 .IdResult => unreachable,
11231401 .IdMemorySemantics => unreachable,
......@@ -1125,12 +1403,182 @@ pub const OperandKind = enum {
11251403 .IdRef => unreachable,
11261404 .LiteralInteger => unreachable,
11271405 .LiteralString => unreachable,
1406 .LiteralFloat => unreachable,
11281407 .LiteralContextDependentNumber => unreachable,
11291408 .LiteralExtInstInteger => unreachable,
11301409 .LiteralSpecConstantOpInteger => unreachable,
11311410 .PairLiteralIntegerIdRef => unreachable,
11321411 .PairIdRefLiteralInteger => unreachable,
11331412 .PairIdRefIdRef => unreachable,
1413 .@"OpenCL.DebugInfo.100.DebugInfoFlags" => &[_]Enumerant{
1414 .{ .name = "FlagIsProtected", .value = 0x01, .parameters = &[_]OperandKind{} },
1415 .{ .name = "FlagIsPrivate", .value = 0x02, .parameters = &[_]OperandKind{} },
1416 .{ .name = "FlagIsPublic", .value = 0x03, .parameters = &[_]OperandKind{} },
1417 .{ .name = "FlagIsLocal", .value = 0x04, .parameters = &[_]OperandKind{} },
1418 .{ .name = "FlagIsDefinition", .value = 0x08, .parameters = &[_]OperandKind{} },
1419 .{ .name = "FlagFwdDecl", .value = 0x10, .parameters = &[_]OperandKind{} },
1420 .{ .name = "FlagArtificial", .value = 0x20, .parameters = &[_]OperandKind{} },
1421 .{ .name = "FlagExplicit", .value = 0x40, .parameters = &[_]OperandKind{} },
1422 .{ .name = "FlagPrototyped", .value = 0x80, .parameters = &[_]OperandKind{} },
1423 .{ .name = "FlagObjectPointer", .value = 0x100, .parameters = &[_]OperandKind{} },
1424 .{ .name = "FlagStaticMember", .value = 0x200, .parameters = &[_]OperandKind{} },
1425 .{ .name = "FlagIndirectVariable", .value = 0x400, .parameters = &[_]OperandKind{} },
1426 .{ .name = "FlagLValueReference", .value = 0x800, .parameters = &[_]OperandKind{} },
1427 .{ .name = "FlagRValueReference", .value = 0x1000, .parameters = &[_]OperandKind{} },
1428 .{ .name = "FlagIsOptimized", .value = 0x2000, .parameters = &[_]OperandKind{} },
1429 .{ .name = "FlagIsEnumClass", .value = 0x4000, .parameters = &[_]OperandKind{} },
1430 .{ .name = "FlagTypePassByValue", .value = 0x8000, .parameters = &[_]OperandKind{} },
1431 .{ .name = "FlagTypePassByReference", .value = 0x10000, .parameters = &[_]OperandKind{} },
1432 },
1433 .@"OpenCL.DebugInfo.100.DebugBaseTypeAttributeEncoding" => &[_]Enumerant{
1434 .{ .name = "Unspecified", .value = 0, .parameters = &[_]OperandKind{} },
1435 .{ .name = "Address", .value = 1, .parameters = &[_]OperandKind{} },
1436 .{ .name = "Boolean", .value = 2, .parameters = &[_]OperandKind{} },
1437 .{ .name = "Float", .value = 3, .parameters = &[_]OperandKind{} },
1438 .{ .name = "Signed", .value = 4, .parameters = &[_]OperandKind{} },
1439 .{ .name = "SignedChar", .value = 5, .parameters = &[_]OperandKind{} },
1440 .{ .name = "Unsigned", .value = 6, .parameters = &[_]OperandKind{} },
1441 .{ .name = "UnsignedChar", .value = 7, .parameters = &[_]OperandKind{} },
1442 },
1443 .@"OpenCL.DebugInfo.100.DebugCompositeType" => &[_]Enumerant{
1444 .{ .name = "Class", .value = 0, .parameters = &[_]OperandKind{} },
1445 .{ .name = "Structure", .value = 1, .parameters = &[_]OperandKind{} },
1446 .{ .name = "Union", .value = 2, .parameters = &[_]OperandKind{} },
1447 },
1448 .@"OpenCL.DebugInfo.100.DebugTypeQualifier" => &[_]Enumerant{
1449 .{ .name = "ConstType", .value = 0, .parameters = &[_]OperandKind{} },
1450 .{ .name = "VolatileType", .value = 1, .parameters = &[_]OperandKind{} },
1451 .{ .name = "RestrictType", .value = 2, .parameters = &[_]OperandKind{} },
1452 .{ .name = "AtomicType", .value = 3, .parameters = &[_]OperandKind{} },
1453 },
1454 .@"OpenCL.DebugInfo.100.DebugOperation" => &[_]Enumerant{
1455 .{ .name = "Deref", .value = 0, .parameters = &[_]OperandKind{} },
1456 .{ .name = "Plus", .value = 1, .parameters = &[_]OperandKind{} },
1457 .{ .name = "Minus", .value = 2, .parameters = &[_]OperandKind{} },
1458 .{ .name = "PlusUconst", .value = 3, .parameters = &[_]OperandKind{.LiteralInteger} },
1459 .{ .name = "BitPiece", .value = 4, .parameters = &[_]OperandKind{ .LiteralInteger, .LiteralInteger } },
1460 .{ .name = "Swap", .value = 5, .parameters = &[_]OperandKind{} },
1461 .{ .name = "Xderef", .value = 6, .parameters = &[_]OperandKind{} },
1462 .{ .name = "StackValue", .value = 7, .parameters = &[_]OperandKind{} },
1463 .{ .name = "Constu", .value = 8, .parameters = &[_]OperandKind{.LiteralInteger} },
1464 .{ .name = "Fragment", .value = 9, .parameters = &[_]OperandKind{ .LiteralInteger, .LiteralInteger } },
1465 },
1466 .@"OpenCL.DebugInfo.100.DebugImportedEntity" => &[_]Enumerant{
1467 .{ .name = "ImportedModule", .value = 0, .parameters = &[_]OperandKind{} },
1468 .{ .name = "ImportedDeclaration", .value = 1, .parameters = &[_]OperandKind{} },
1469 },
1470 .@"NonSemantic.Shader.DebugInfo.100.DebugInfoFlags" => &[_]Enumerant{
1471 .{ .name = "FlagIsProtected", .value = 0x01, .parameters = &[_]OperandKind{} },
1472 .{ .name = "FlagIsPrivate", .value = 0x02, .parameters = &[_]OperandKind{} },
1473 .{ .name = "FlagIsPublic", .value = 0x03, .parameters = &[_]OperandKind{} },
1474 .{ .name = "FlagIsLocal", .value = 0x04, .parameters = &[_]OperandKind{} },
1475 .{ .name = "FlagIsDefinition", .value = 0x08, .parameters = &[_]OperandKind{} },
1476 .{ .name = "FlagFwdDecl", .value = 0x10, .parameters = &[_]OperandKind{} },
1477 .{ .name = "FlagArtificial", .value = 0x20, .parameters = &[_]OperandKind{} },
1478 .{ .name = "FlagExplicit", .value = 0x40, .parameters = &[_]OperandKind{} },
1479 .{ .name = "FlagPrototyped", .value = 0x80, .parameters = &[_]OperandKind{} },
1480 .{ .name = "FlagObjectPointer", .value = 0x100, .parameters = &[_]OperandKind{} },
1481 .{ .name = "FlagStaticMember", .value = 0x200, .parameters = &[_]OperandKind{} },
1482 .{ .name = "FlagIndirectVariable", .value = 0x400, .parameters = &[_]OperandKind{} },
1483 .{ .name = "FlagLValueReference", .value = 0x800, .parameters = &[_]OperandKind{} },
1484 .{ .name = "FlagRValueReference", .value = 0x1000, .parameters = &[_]OperandKind{} },
1485 .{ .name = "FlagIsOptimized", .value = 0x2000, .parameters = &[_]OperandKind{} },
1486 .{ .name = "FlagIsEnumClass", .value = 0x4000, .parameters = &[_]OperandKind{} },
1487 .{ .name = "FlagTypePassByValue", .value = 0x8000, .parameters = &[_]OperandKind{} },
1488 .{ .name = "FlagTypePassByReference", .value = 0x10000, .parameters = &[_]OperandKind{} },
1489 .{ .name = "FlagUnknownPhysicalLayout", .value = 0x20000, .parameters = &[_]OperandKind{} },
1490 },
1491 .@"NonSemantic.Shader.DebugInfo.100.BuildIdentifierFlags" => &[_]Enumerant{
1492 .{ .name = "IdentifierPossibleDuplicates", .value = 0x01, .parameters = &[_]OperandKind{} },
1493 },
1494 .@"NonSemantic.Shader.DebugInfo.100.DebugBaseTypeAttributeEncoding" => &[_]Enumerant{
1495 .{ .name = "Unspecified", .value = 0, .parameters = &[_]OperandKind{} },
1496 .{ .name = "Address", .value = 1, .parameters = &[_]OperandKind{} },
1497 .{ .name = "Boolean", .value = 2, .parameters = &[_]OperandKind{} },
1498 .{ .name = "Float", .value = 3, .parameters = &[_]OperandKind{} },
1499 .{ .name = "Signed", .value = 4, .parameters = &[_]OperandKind{} },
1500 .{ .name = "SignedChar", .value = 5, .parameters = &[_]OperandKind{} },
1501 .{ .name = "Unsigned", .value = 6, .parameters = &[_]OperandKind{} },
1502 .{ .name = "UnsignedChar", .value = 7, .parameters = &[_]OperandKind{} },
1503 },
1504 .@"NonSemantic.Shader.DebugInfo.100.DebugCompositeType" => &[_]Enumerant{
1505 .{ .name = "Class", .value = 0, .parameters = &[_]OperandKind{} },
1506 .{ .name = "Structure", .value = 1, .parameters = &[_]OperandKind{} },
1507 .{ .name = "Union", .value = 2, .parameters = &[_]OperandKind{} },
1508 },
1509 .@"NonSemantic.Shader.DebugInfo.100.DebugTypeQualifier" => &[_]Enumerant{
1510 .{ .name = "ConstType", .value = 0, .parameters = &[_]OperandKind{} },
1511 .{ .name = "VolatileType", .value = 1, .parameters = &[_]OperandKind{} },
1512 .{ .name = "RestrictType", .value = 2, .parameters = &[_]OperandKind{} },
1513 .{ .name = "AtomicType", .value = 3, .parameters = &[_]OperandKind{} },
1514 },
1515 .@"NonSemantic.Shader.DebugInfo.100.DebugOperation" => &[_]Enumerant{
1516 .{ .name = "Deref", .value = 0, .parameters = &[_]OperandKind{} },
1517 .{ .name = "Plus", .value = 1, .parameters = &[_]OperandKind{} },
1518 .{ .name = "Minus", .value = 2, .parameters = &[_]OperandKind{} },
1519 .{ .name = "PlusUconst", .value = 3, .parameters = &[_]OperandKind{.IdRef} },
1520 .{ .name = "BitPiece", .value = 4, .parameters = &[_]OperandKind{ .IdRef, .IdRef } },
1521 .{ .name = "Swap", .value = 5, .parameters = &[_]OperandKind{} },
1522 .{ .name = "Xderef", .value = 6, .parameters = &[_]OperandKind{} },
1523 .{ .name = "StackValue", .value = 7, .parameters = &[_]OperandKind{} },
1524 .{ .name = "Constu", .value = 8, .parameters = &[_]OperandKind{.IdRef} },
1525 .{ .name = "Fragment", .value = 9, .parameters = &[_]OperandKind{ .IdRef, .IdRef } },
1526 },
1527 .@"NonSemantic.Shader.DebugInfo.100.DebugImportedEntity" => &[_]Enumerant{
1528 .{ .name = "ImportedModule", .value = 0, .parameters = &[_]OperandKind{} },
1529 .{ .name = "ImportedDeclaration", .value = 1, .parameters = &[_]OperandKind{} },
1530 },
1531 .@"NonSemantic.ClspvReflection.6.KernelPropertyFlags" => &[_]Enumerant{
1532 .{ .name = "MayUsePrintf", .value = 0x1, .parameters = &[_]OperandKind{} },
1533 },
1534 .@"DebugInfo.DebugInfoFlags" => &[_]Enumerant{
1535 .{ .name = "FlagIsProtected", .value = 0x01, .parameters = &[_]OperandKind{} },
1536 .{ .name = "FlagIsPrivate", .value = 0x02, .parameters = &[_]OperandKind{} },
1537 .{ .name = "FlagIsPublic", .value = 0x03, .parameters = &[_]OperandKind{} },
1538 .{ .name = "FlagIsLocal", .value = 0x04, .parameters = &[_]OperandKind{} },
1539 .{ .name = "FlagIsDefinition", .value = 0x08, .parameters = &[_]OperandKind{} },
1540 .{ .name = "FlagFwdDecl", .value = 0x10, .parameters = &[_]OperandKind{} },
1541 .{ .name = "FlagArtificial", .value = 0x20, .parameters = &[_]OperandKind{} },
1542 .{ .name = "FlagExplicit", .value = 0x40, .parameters = &[_]OperandKind{} },
1543 .{ .name = "FlagPrototyped", .value = 0x80, .parameters = &[_]OperandKind{} },
1544 .{ .name = "FlagObjectPointer", .value = 0x100, .parameters = &[_]OperandKind{} },
1545 .{ .name = "FlagStaticMember", .value = 0x200, .parameters = &[_]OperandKind{} },
1546 .{ .name = "FlagIndirectVariable", .value = 0x400, .parameters = &[_]OperandKind{} },
1547 .{ .name = "FlagLValueReference", .value = 0x800, .parameters = &[_]OperandKind{} },
1548 .{ .name = "FlagRValueReference", .value = 0x1000, .parameters = &[_]OperandKind{} },
1549 .{ .name = "FlagIsOptimized", .value = 0x2000, .parameters = &[_]OperandKind{} },
1550 },
1551 .@"DebugInfo.DebugBaseTypeAttributeEncoding" => &[_]Enumerant{
1552 .{ .name = "Unspecified", .value = 0, .parameters = &[_]OperandKind{} },
1553 .{ .name = "Address", .value = 1, .parameters = &[_]OperandKind{} },
1554 .{ .name = "Boolean", .value = 2, .parameters = &[_]OperandKind{} },
1555 .{ .name = "Float", .value = 4, .parameters = &[_]OperandKind{} },
1556 .{ .name = "Signed", .value = 5, .parameters = &[_]OperandKind{} },
1557 .{ .name = "SignedChar", .value = 6, .parameters = &[_]OperandKind{} },
1558 .{ .name = "Unsigned", .value = 7, .parameters = &[_]OperandKind{} },
1559 .{ .name = "UnsignedChar", .value = 8, .parameters = &[_]OperandKind{} },
1560 },
1561 .@"DebugInfo.DebugCompositeType" => &[_]Enumerant{
1562 .{ .name = "Class", .value = 0, .parameters = &[_]OperandKind{} },
1563 .{ .name = "Structure", .value = 1, .parameters = &[_]OperandKind{} },
1564 .{ .name = "Union", .value = 2, .parameters = &[_]OperandKind{} },
1565 },
1566 .@"DebugInfo.DebugTypeQualifier" => &[_]Enumerant{
1567 .{ .name = "ConstType", .value = 0, .parameters = &[_]OperandKind{} },
1568 .{ .name = "VolatileType", .value = 1, .parameters = &[_]OperandKind{} },
1569 .{ .name = "RestrictType", .value = 2, .parameters = &[_]OperandKind{} },
1570 },
1571 .@"DebugInfo.DebugOperation" => &[_]Enumerant{
1572 .{ .name = "Deref", .value = 0, .parameters = &[_]OperandKind{} },
1573 .{ .name = "Plus", .value = 1, .parameters = &[_]OperandKind{} },
1574 .{ .name = "Minus", .value = 2, .parameters = &[_]OperandKind{} },
1575 .{ .name = "PlusUconst", .value = 3, .parameters = &[_]OperandKind{.LiteralInteger} },
1576 .{ .name = "BitPiece", .value = 4, .parameters = &[_]OperandKind{ .LiteralInteger, .LiteralInteger } },
1577 .{ .name = "Swap", .value = 5, .parameters = &[_]OperandKind{} },
1578 .{ .name = "Xderef", .value = 6, .parameters = &[_]OperandKind{} },
1579 .{ .name = "StackValue", .value = 7, .parameters = &[_]OperandKind{} },
1580 .{ .name = "Constu", .value = 8, .parameters = &[_]OperandKind{.LiteralInteger} },
1581 },
11341582 };
11351583 }
11361584};
......@@ -1479,12 +1927,16 @@ pub const Opcode = enum(u16) {
14791927 OpPtrEqual = 401,
14801928 OpPtrNotEqual = 402,
14811929 OpPtrDiff = 403,
1930 OpColorAttachmentReadEXT = 4160,
1931 OpDepthAttachmentReadEXT = 4161,
1932 OpStencilAttachmentReadEXT = 4162,
14821933 OpTerminateInvocation = 4416,
14831934 OpSubgroupBallotKHR = 4421,
14841935 OpSubgroupFirstInvocationKHR = 4422,
14851936 OpSubgroupAllKHR = 4428,
14861937 OpSubgroupAnyKHR = 4429,
14871938 OpSubgroupAllEqualKHR = 4430,
1939 OpGroupNonUniformRotateKHR = 4431,
14881940 OpSubgroupReadInvocationKHR = 4432,
14891941 OpTraceRayKHR = 4445,
14901942 OpExecuteCallableKHR = 4446,
......@@ -1497,6 +1949,11 @@ pub const Opcode = enum(u16) {
14971949 OpSDotAccSat = 4453,
14981950 OpUDotAccSat = 4454,
14991951 OpSUDotAccSat = 4455,
1952 OpTypeCooperativeMatrixKHR = 4456,
1953 OpCooperativeMatrixLoadKHR = 4457,
1954 OpCooperativeMatrixStoreKHR = 4458,
1955 OpCooperativeMatrixMulAddKHR = 4459,
1956 OpCooperativeMatrixLengthKHR = 4460,
15001957 OpTypeRayQueryKHR = 4472,
15011958 OpRayQueryInitializeKHR = 4473,
15021959 OpRayQueryTerminateKHR = 4474,
......@@ -1504,6 +1961,14 @@ pub const Opcode = enum(u16) {
15041961 OpRayQueryConfirmIntersectionKHR = 4476,
15051962 OpRayQueryProceedKHR = 4477,
15061963 OpRayQueryGetIntersectionTypeKHR = 4479,
1964 OpImageSampleWeightedQCOM = 4480,
1965 OpImageBoxFilterQCOM = 4481,
1966 OpImageBlockMatchSSDQCOM = 4482,
1967 OpImageBlockMatchSADQCOM = 4483,
1968 OpImageBlockMatchWindowSSDQCOM = 4500,
1969 OpImageBlockMatchWindowSADQCOM = 4501,
1970 OpImageBlockMatchGatherSSDQCOM = 4502,
1971 OpImageBlockMatchGatherSADQCOM = 4503,
15071972 OpGroupIAddNonUniformAMD = 5000,
15081973 OpGroupFAddNonUniformAMD = 5001,
15091974 OpGroupFMinNonUniformAMD = 5002,
......@@ -1515,15 +1980,58 @@ pub const Opcode = enum(u16) {
15151980 OpFragmentMaskFetchAMD = 5011,
15161981 OpFragmentFetchAMD = 5012,
15171982 OpReadClockKHR = 5056,
1983 OpFinalizeNodePayloadsAMDX = 5075,
1984 OpFinishWritingNodePayloadAMDX = 5078,
1985 OpInitializeNodePayloadsAMDX = 5090,
1986 OpGroupNonUniformQuadAllKHR = 5110,
1987 OpGroupNonUniformQuadAnyKHR = 5111,
1988 OpHitObjectRecordHitMotionNV = 5249,
1989 OpHitObjectRecordHitWithIndexMotionNV = 5250,
1990 OpHitObjectRecordMissMotionNV = 5251,
1991 OpHitObjectGetWorldToObjectNV = 5252,
1992 OpHitObjectGetObjectToWorldNV = 5253,
1993 OpHitObjectGetObjectRayDirectionNV = 5254,
1994 OpHitObjectGetObjectRayOriginNV = 5255,
1995 OpHitObjectTraceRayMotionNV = 5256,
1996 OpHitObjectGetShaderRecordBufferHandleNV = 5257,
1997 OpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
1998 OpHitObjectRecordEmptyNV = 5259,
1999 OpHitObjectTraceRayNV = 5260,
2000 OpHitObjectRecordHitNV = 5261,
2001 OpHitObjectRecordHitWithIndexNV = 5262,
2002 OpHitObjectRecordMissNV = 5263,
2003 OpHitObjectExecuteShaderNV = 5264,
2004 OpHitObjectGetCurrentTimeNV = 5265,
2005 OpHitObjectGetAttributesNV = 5266,
2006 OpHitObjectGetHitKindNV = 5267,
2007 OpHitObjectGetPrimitiveIndexNV = 5268,
2008 OpHitObjectGetGeometryIndexNV = 5269,
2009 OpHitObjectGetInstanceIdNV = 5270,
2010 OpHitObjectGetInstanceCustomIndexNV = 5271,
2011 OpHitObjectGetWorldRayDirectionNV = 5272,
2012 OpHitObjectGetWorldRayOriginNV = 5273,
2013 OpHitObjectGetRayTMaxNV = 5274,
2014 OpHitObjectGetRayTMinNV = 5275,
2015 OpHitObjectIsEmptyNV = 5276,
2016 OpHitObjectIsHitNV = 5277,
2017 OpHitObjectIsMissNV = 5278,
2018 OpReorderThreadWithHitObjectNV = 5279,
2019 OpReorderThreadWithHintNV = 5280,
2020 OpTypeHitObjectNV = 5281,
15182021 OpImageSampleFootprintNV = 5283,
2022 OpEmitMeshTasksEXT = 5294,
2023 OpSetMeshOutputsEXT = 5295,
15192024 OpGroupNonUniformPartitionNV = 5296,
15202025 OpWritePackedPrimitiveIndices4x8NV = 5299,
2026 OpFetchMicroTriangleVertexPositionNV = 5300,
2027 OpFetchMicroTriangleVertexBarycentricNV = 5301,
15212028 OpReportIntersectionKHR = 5334,
15222029 OpIgnoreIntersectionNV = 5335,
15232030 OpTerminateRayNV = 5336,
15242031 OpTraceNV = 5337,
15252032 OpTraceMotionNV = 5338,
15262033 OpTraceRayMotionNV = 5339,
2034 OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
15272035 OpTypeAccelerationStructureKHR = 5341,
15282036 OpExecuteCallableNV = 5344,
15292037 OpTypeCooperativeMatrixNV = 5358,
......@@ -1542,6 +2050,7 @@ pub const Opcode = enum(u16) {
15422050 OpConvertUToSampledImageNV = 5395,
15432051 OpConvertSampledImageToUNV = 5396,
15442052 OpSamplerImageAddressingModeNV = 5397,
2053 OpRawAccessChainNV = 5398,
15452054 OpSubgroupShuffleINTEL = 5571,
15462055 OpSubgroupShuffleDownINTEL = 5572,
15472056 OpSubgroupShuffleUpINTEL = 5573,
......@@ -1598,7 +2107,21 @@ pub const Opcode = enum(u16) {
15982107 OpTypeStructContinuedINTEL = 6090,
15992108 OpConstantCompositeContinuedINTEL = 6091,
16002109 OpSpecConstantCompositeContinuedINTEL = 6092,
1601
2110 OpCompositeConstructContinuedINTEL = 6096,
2111 OpConvertFToBF16INTEL = 6116,
2112 OpConvertBF16ToFINTEL = 6117,
2113 OpControlBarrierArriveINTEL = 6142,
2114 OpControlBarrierWaitINTEL = 6143,
2115 OpGroupIMulKHR = 6401,
2116 OpGroupFMulKHR = 6402,
2117 OpGroupBitwiseAndKHR = 6403,
2118 OpGroupBitwiseOrKHR = 6404,
2119 OpGroupBitwiseXorKHR = 6405,
2120 OpGroupLogicalAndKHR = 6406,
2121 OpGroupLogicalOrKHR = 6407,
2122 OpGroupLogicalXorKHR = 6408,
2123 OpMaskedGatherINTEL = 6428,
2124 OpMaskedScatterINTEL = 6429,
16022125 pub const OpSDotKHR = Opcode.OpSDot;
16032126 pub const OpUDotKHR = Opcode.OpUDot;
16042127 pub const OpSUDotKHR = Opcode.OpSUDot;
......@@ -1957,12 +2480,16 @@ pub const Opcode = enum(u16) {
19572480 .OpPtrEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
19582481 .OpPtrNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
19592482 .OpPtrDiff => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
2483 .OpColorAttachmentReadEXT => struct { id_result_type: IdResultType, id_result: IdResult, attachment: IdRef, sample: ?IdRef = null },
2484 .OpDepthAttachmentReadEXT => struct { id_result_type: IdResultType, id_result: IdResult, sample: ?IdRef = null },
2485 .OpStencilAttachmentReadEXT => struct { id_result_type: IdResultType, id_result: IdResult, sample: ?IdRef = null },
19602486 .OpTerminateInvocation => void,
19612487 .OpSubgroupBallotKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
19622488 .OpSubgroupFirstInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
19632489 .OpSubgroupAllKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
19642490 .OpSubgroupAnyKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
19652491 .OpSubgroupAllEqualKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
2492 .OpGroupNonUniformRotateKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, value: IdRef, delta: IdRef, clustersize: ?IdRef = null },
19662493 .OpSubgroupReadInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef, index: IdRef },
19672494 .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 },
19682495 .OpExecuteCallableKHR => struct { sbt_index: IdRef, callable_data: IdRef },
......@@ -1975,6 +2502,11 @@ pub const Opcode = enum(u16) {
19752502 .OpSDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },
19762503 .OpUDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },
19772504 .OpSUDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },
2505 .OpTypeCooperativeMatrixKHR => struct { id_result: IdResult, component_type: IdRef, scope: IdScope, rows: IdRef, columns: IdRef, use: IdRef },
2506 .OpCooperativeMatrixLoadKHR => struct { id_result_type: IdResultType, id_result: IdResult, pointer: IdRef, memorylayout: IdRef, stride: ?IdRef = null, memory_operand: ?MemoryAccess.Extended = null },
2507 .OpCooperativeMatrixStoreKHR => struct { pointer: IdRef, object: IdRef, memorylayout: IdRef, stride: ?IdRef = null, memory_operand: ?MemoryAccess.Extended = null },
2508 .OpCooperativeMatrixMulAddKHR => struct { id_result_type: IdResultType, id_result: IdResult, a: IdRef, b: IdRef, c: IdRef, cooperative_matrix_operands: ?CooperativeMatrixOperands = null },
2509 .OpCooperativeMatrixLengthKHR => struct { id_result_type: IdResultType, id_result: IdResult, type: IdRef },
19782510 .OpTypeRayQueryKHR => struct { id_result: IdResult },
19792511 .OpRayQueryInitializeKHR => struct { rayquery: IdRef, accel: IdRef, rayflags: IdRef, cullmask: IdRef, rayorigin: IdRef, raytmin: IdRef, raydirection: IdRef, raytmax: IdRef },
19802512 .OpRayQueryTerminateKHR => struct { rayquery: IdRef },
......@@ -1982,6 +2514,14 @@ pub const Opcode = enum(u16) {
19822514 .OpRayQueryConfirmIntersectionKHR => struct { rayquery: IdRef },
19832515 .OpRayQueryProceedKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
19842516 .OpRayQueryGetIntersectionTypeKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
2517 .OpImageSampleWeightedQCOM => struct { id_result_type: IdResultType, id_result: IdResult, texture: IdRef, coordinates: IdRef, weights: IdRef },
2518 .OpImageBoxFilterQCOM => struct { id_result_type: IdResultType, id_result: IdResult, texture: IdRef, coordinates: IdRef, box_size: IdRef },
2519 .OpImageBlockMatchSSDQCOM => struct { id_result_type: IdResultType, id_result: IdResult, target: IdRef, target_coordinates: IdRef, reference: IdRef, reference_coordinates: IdRef, block_size: IdRef },
2520 .OpImageBlockMatchSADQCOM => struct { id_result_type: IdResultType, id_result: IdResult, target: IdRef, target_coordinates: IdRef, reference: IdRef, reference_coordinates: IdRef, block_size: IdRef },
2521 .OpImageBlockMatchWindowSSDQCOM => struct { id_result_type: IdResultType, id_result: IdResult, target_sampled_image: IdRef, target_coordinates: IdRef, reference_sampled_image: IdRef, reference_coordinates: IdRef, block_size: IdRef },
2522 .OpImageBlockMatchWindowSADQCOM => struct { id_result_type: IdResultType, id_result: IdResult, target_sampled_image: IdRef, target_coordinates: IdRef, reference_sampled_image: IdRef, reference_coordinates: IdRef, block_size: IdRef },
2523 .OpImageBlockMatchGatherSSDQCOM => struct { id_result_type: IdResultType, id_result: IdResult, target_sampled_image: IdRef, target_coordinates: IdRef, reference_sampled_image: IdRef, reference_coordinates: IdRef, block_size: IdRef },
2524 .OpImageBlockMatchGatherSADQCOM => struct { id_result_type: IdResultType, id_result: IdResult, target_sampled_image: IdRef, target_coordinates: IdRef, reference_sampled_image: IdRef, reference_coordinates: IdRef, block_size: IdRef },
19852525 .OpGroupIAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
19862526 .OpGroupFAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
19872527 .OpGroupFMinNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
......@@ -1993,15 +2533,58 @@ pub const Opcode = enum(u16) {
19932533 .OpFragmentMaskFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef },
19942534 .OpFragmentFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, fragment_index: IdRef },
19952535 .OpReadClockKHR => struct { id_result_type: IdResultType, id_result: IdResult, scope: IdScope },
2536 .OpFinalizeNodePayloadsAMDX => struct { payload_array: IdRef },
2537 .OpFinishWritingNodePayloadAMDX => struct { id_result_type: IdResultType, id_result: IdResult, payload: IdRef },
2538 .OpInitializeNodePayloadsAMDX => struct { payload_array: IdRef, visibility: IdScope, payload_count: IdRef, node_index: IdRef },
2539 .OpGroupNonUniformQuadAllKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
2540 .OpGroupNonUniformQuadAnyKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
2541 .OpHitObjectRecordHitMotionNV => struct { hit_object: IdRef, acceleration_structure: IdRef, instanceid: IdRef, primitiveid: IdRef, geometryindex: IdRef, hit_kind: IdRef, sbt_record_offset: IdRef, sbt_record_stride: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, current_time: IdRef, hitobject_attributes: IdRef },
2542 .OpHitObjectRecordHitWithIndexMotionNV => struct { hit_object: IdRef, acceleration_structure: IdRef, instanceid: IdRef, primitiveid: IdRef, geometryindex: IdRef, hit_kind: IdRef, sbt_record_index: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, current_time: IdRef, hitobject_attributes: IdRef },
2543 .OpHitObjectRecordMissMotionNV => struct { hit_object: IdRef, sbt_index: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, current_time: IdRef },
2544 .OpHitObjectGetWorldToObjectNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2545 .OpHitObjectGetObjectToWorldNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2546 .OpHitObjectGetObjectRayDirectionNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2547 .OpHitObjectGetObjectRayOriginNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2548 .OpHitObjectTraceRayMotionNV => struct { hit_object: IdRef, acceleration_structure: IdRef, rayflags: IdRef, cullmask: IdRef, sbt_record_offset: IdRef, sbt_record_stride: IdRef, miss_index: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, time: IdRef, payload: IdRef },
2549 .OpHitObjectGetShaderRecordBufferHandleNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2550 .OpHitObjectGetShaderBindingTableRecordIndexNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2551 .OpHitObjectRecordEmptyNV => struct { hit_object: IdRef },
2552 .OpHitObjectTraceRayNV => struct { hit_object: IdRef, acceleration_structure: IdRef, rayflags: IdRef, cullmask: IdRef, sbt_record_offset: IdRef, sbt_record_stride: IdRef, miss_index: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, payload: IdRef },
2553 .OpHitObjectRecordHitNV => struct { hit_object: IdRef, acceleration_structure: IdRef, instanceid: IdRef, primitiveid: IdRef, geometryindex: IdRef, hit_kind: IdRef, sbt_record_offset: IdRef, sbt_record_stride: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, hitobject_attributes: IdRef },
2554 .OpHitObjectRecordHitWithIndexNV => struct { hit_object: IdRef, acceleration_structure: IdRef, instanceid: IdRef, primitiveid: IdRef, geometryindex: IdRef, hit_kind: IdRef, sbt_record_index: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef, hitobject_attributes: IdRef },
2555 .OpHitObjectRecordMissNV => struct { hit_object: IdRef, sbt_index: IdRef, origin: IdRef, tmin: IdRef, direction: IdRef, tmax: IdRef },
2556 .OpHitObjectExecuteShaderNV => struct { hit_object: IdRef, payload: IdRef },
2557 .OpHitObjectGetCurrentTimeNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2558 .OpHitObjectGetAttributesNV => struct { hit_object: IdRef, hit_object_attribute: IdRef },
2559 .OpHitObjectGetHitKindNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2560 .OpHitObjectGetPrimitiveIndexNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2561 .OpHitObjectGetGeometryIndexNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2562 .OpHitObjectGetInstanceIdNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2563 .OpHitObjectGetInstanceCustomIndexNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2564 .OpHitObjectGetWorldRayDirectionNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2565 .OpHitObjectGetWorldRayOriginNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2566 .OpHitObjectGetRayTMaxNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2567 .OpHitObjectGetRayTMinNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2568 .OpHitObjectIsEmptyNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2569 .OpHitObjectIsHitNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2570 .OpHitObjectIsMissNV => struct { id_result_type: IdResultType, id_result: IdResult, hit_object: IdRef },
2571 .OpReorderThreadWithHitObjectNV => struct { hit_object: IdRef, hint: ?IdRef = null, bits: ?IdRef = null },
2572 .OpReorderThreadWithHintNV => struct { hint: IdRef, bits: IdRef },
2573 .OpTypeHitObjectNV => struct { id_result: IdResult },
19962574 .OpImageSampleFootprintNV => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, granularity: IdRef, coarse: IdRef, image_operands: ?ImageOperands.Extended = null },
2575 .OpEmitMeshTasksEXT => struct { group_count_x: IdRef, group_count_y: IdRef, group_count_z: IdRef, payload: ?IdRef = null },
2576 .OpSetMeshOutputsEXT => struct { vertex_count: IdRef, primitive_count: IdRef },
19972577 .OpGroupNonUniformPartitionNV => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
19982578 .OpWritePackedPrimitiveIndices4x8NV => struct { index_offset: IdRef, packed_indices: IdRef },
2579 .OpFetchMicroTriangleVertexPositionNV => struct { id_result_type: IdResultType, id_result: IdResult, accel: IdRef, instance_id: IdRef, geometry_index: IdRef, primitive_index: IdRef, barycentric: IdRef },
2580 .OpFetchMicroTriangleVertexBarycentricNV => struct { id_result_type: IdResultType, id_result: IdResult, accel: IdRef, instance_id: IdRef, geometry_index: IdRef, primitive_index: IdRef, barycentric: IdRef },
19992581 .OpReportIntersectionKHR => struct { id_result_type: IdResultType, id_result: IdResult, hit: IdRef, hitkind: IdRef },
20002582 .OpIgnoreIntersectionNV => void,
20012583 .OpTerminateRayNV => void,
20022584 .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 },
20032585 .OpTraceMotionNV => 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, time: IdRef, payloadid: IdRef },
20042586 .OpTraceRayMotionNV => 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, time: IdRef, payload: IdRef },
2587 .OpRayQueryGetIntersectionTriangleVertexPositionsKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },
20052588 .OpTypeAccelerationStructureKHR => struct { id_result: IdResult },
20062589 .OpExecuteCallableNV => struct { sbt_index: IdRef, callable_dataid: IdRef },
20072590 .OpTypeCooperativeMatrixNV => struct { id_result: IdResult, component_type: IdRef, execution: IdScope, rows: IdRef, columns: IdRef },
......@@ -2020,6 +2603,7 @@ pub const Opcode = enum(u16) {
20202603 .OpConvertUToSampledImageNV => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
20212604 .OpConvertSampledImageToUNV => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
20222605 .OpSamplerImageAddressingModeNV => struct { bit_width: LiteralInteger },
2606 .OpRawAccessChainNV => struct { id_result_type: IdResultType, id_result: IdResult, base: IdRef, byte_stride: IdRef, element_index: IdRef, byte_offset: IdRef, raw_access_chain_operands: ?RawAccessChainOperands = null },
20232607 .OpSubgroupShuffleINTEL => struct { id_result_type: IdResultType, id_result: IdResult, data: IdRef, invocationid: IdRef },
20242608 .OpSubgroupShuffleDownINTEL => struct { id_result_type: IdResultType, id_result: IdResult, current: IdRef, next: IdRef, delta: IdRef },
20252609 .OpSubgroupShuffleUpINTEL => struct { id_result_type: IdResultType, id_result: IdResult, previous: IdRef, current: IdRef, delta: IdRef },
......@@ -2076,2699 +2660,24 @@ pub const Opcode = enum(u16) {
20762660 .OpTypeStructContinuedINTEL => struct { id_ref: []const IdRef = &.{} },
20772661 .OpConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },
20782662 .OpSpecConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },
2663 .OpCompositeConstructContinuedINTEL => struct { id_result_type: IdResultType, id_result: IdResult, constituents: []const IdRef = &.{} },
2664 .OpConvertFToBF16INTEL => struct { id_result_type: IdResultType, id_result: IdResult, float_value: IdRef },
2665 .OpConvertBF16ToFINTEL => struct { id_result_type: IdResultType, id_result: IdResult, bfloat16_value: IdRef },
2666 .OpControlBarrierArriveINTEL => struct { execution: IdScope, memory: IdScope, semantics: IdMemorySemantics },
2667 .OpControlBarrierWaitINTEL => struct { execution: IdScope, memory: IdScope, semantics: IdMemorySemantics },
2668 .OpGroupIMulKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2669 .OpGroupFMulKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2670 .OpGroupBitwiseAndKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2671 .OpGroupBitwiseOrKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2672 .OpGroupBitwiseXorKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2673 .OpGroupLogicalAndKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2674 .OpGroupLogicalOrKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2675 .OpGroupLogicalXorKHR => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
2676 .OpMaskedGatherINTEL => struct { id_result_type: IdResultType, id_result: IdResult, ptrvector: IdRef, alignment: LiteralInteger, mask: IdRef, fillempty: IdRef },
2677 .OpMaskedScatterINTEL => struct { inputvector: IdRef, ptrvector: IdRef, alignment: LiteralInteger, mask: IdRef },
20792678 };
20802679 }
2081 pub fn operands(self: Opcode) []const Operand {
2082 return switch (self) {
2083 .OpNop => &[_]Operand{},
2084 .OpUndef => &[_]Operand{
2085 .{ .kind = .IdResultType, .quantifier = .required },
2086 .{ .kind = .IdResult, .quantifier = .required },
2087 },
2088 .OpSourceContinued => &[_]Operand{
2089 .{ .kind = .LiteralString, .quantifier = .required },
2090 },
2091 .OpSource => &[_]Operand{
2092 .{ .kind = .SourceLanguage, .quantifier = .required },
2093 .{ .kind = .LiteralInteger, .quantifier = .required },
2094 .{ .kind = .IdRef, .quantifier = .optional },
2095 .{ .kind = .LiteralString, .quantifier = .optional },
2096 },
2097 .OpSourceExtension => &[_]Operand{
2098 .{ .kind = .LiteralString, .quantifier = .required },
2099 },
2100 .OpName => &[_]Operand{
2101 .{ .kind = .IdRef, .quantifier = .required },
2102 .{ .kind = .LiteralString, .quantifier = .required },
2103 },
2104 .OpMemberName => &[_]Operand{
2105 .{ .kind = .IdRef, .quantifier = .required },
2106 .{ .kind = .LiteralInteger, .quantifier = .required },
2107 .{ .kind = .LiteralString, .quantifier = .required },
2108 },
2109 .OpString => &[_]Operand{
2110 .{ .kind = .IdResult, .quantifier = .required },
2111 .{ .kind = .LiteralString, .quantifier = .required },
2112 },
2113 .OpLine => &[_]Operand{
2114 .{ .kind = .IdRef, .quantifier = .required },
2115 .{ .kind = .LiteralInteger, .quantifier = .required },
2116 .{ .kind = .LiteralInteger, .quantifier = .required },
2117 },
2118 .OpExtension => &[_]Operand{
2119 .{ .kind = .LiteralString, .quantifier = .required },
2120 },
2121 .OpExtInstImport => &[_]Operand{
2122 .{ .kind = .IdResult, .quantifier = .required },
2123 .{ .kind = .LiteralString, .quantifier = .required },
2124 },
2125 .OpExtInst => &[_]Operand{
2126 .{ .kind = .IdResultType, .quantifier = .required },
2127 .{ .kind = .IdResult, .quantifier = .required },
2128 .{ .kind = .IdRef, .quantifier = .required },
2129 .{ .kind = .LiteralExtInstInteger, .quantifier = .required },
2130 .{ .kind = .IdRef, .quantifier = .variadic },
2131 },
2132 .OpMemoryModel => &[_]Operand{
2133 .{ .kind = .AddressingModel, .quantifier = .required },
2134 .{ .kind = .MemoryModel, .quantifier = .required },
2135 },
2136 .OpEntryPoint => &[_]Operand{
2137 .{ .kind = .ExecutionModel, .quantifier = .required },
2138 .{ .kind = .IdRef, .quantifier = .required },
2139 .{ .kind = .LiteralString, .quantifier = .required },
2140 .{ .kind = .IdRef, .quantifier = .variadic },
2141 },
2142 .OpExecutionMode => &[_]Operand{
2143 .{ .kind = .IdRef, .quantifier = .required },
2144 .{ .kind = .ExecutionMode, .quantifier = .required },
2145 },
2146 .OpCapability => &[_]Operand{
2147 .{ .kind = .Capability, .quantifier = .required },
2148 },
2149 .OpTypeVoid => &[_]Operand{
2150 .{ .kind = .IdResult, .quantifier = .required },
2151 },
2152 .OpTypeBool => &[_]Operand{
2153 .{ .kind = .IdResult, .quantifier = .required },
2154 },
2155 .OpTypeInt => &[_]Operand{
2156 .{ .kind = .IdResult, .quantifier = .required },
2157 .{ .kind = .LiteralInteger, .quantifier = .required },
2158 .{ .kind = .LiteralInteger, .quantifier = .required },
2159 },
2160 .OpTypeFloat => &[_]Operand{
2161 .{ .kind = .IdResult, .quantifier = .required },
2162 .{ .kind = .LiteralInteger, .quantifier = .required },
2163 },
2164 .OpTypeVector => &[_]Operand{
2165 .{ .kind = .IdResult, .quantifier = .required },
2166 .{ .kind = .IdRef, .quantifier = .required },
2167 .{ .kind = .LiteralInteger, .quantifier = .required },
2168 },
2169 .OpTypeMatrix => &[_]Operand{
2170 .{ .kind = .IdResult, .quantifier = .required },
2171 .{ .kind = .IdRef, .quantifier = .required },
2172 .{ .kind = .LiteralInteger, .quantifier = .required },
2173 },
2174 .OpTypeImage => &[_]Operand{
2175 .{ .kind = .IdResult, .quantifier = .required },
2176 .{ .kind = .IdRef, .quantifier = .required },
2177 .{ .kind = .Dim, .quantifier = .required },
2178 .{ .kind = .LiteralInteger, .quantifier = .required },
2179 .{ .kind = .LiteralInteger, .quantifier = .required },
2180 .{ .kind = .LiteralInteger, .quantifier = .required },
2181 .{ .kind = .LiteralInteger, .quantifier = .required },
2182 .{ .kind = .ImageFormat, .quantifier = .required },
2183 .{ .kind = .AccessQualifier, .quantifier = .optional },
2184 },
2185 .OpTypeSampler => &[_]Operand{
2186 .{ .kind = .IdResult, .quantifier = .required },
2187 },
2188 .OpTypeSampledImage => &[_]Operand{
2189 .{ .kind = .IdResult, .quantifier = .required },
2190 .{ .kind = .IdRef, .quantifier = .required },
2191 },
2192 .OpTypeArray => &[_]Operand{
2193 .{ .kind = .IdResult, .quantifier = .required },
2194 .{ .kind = .IdRef, .quantifier = .required },
2195 .{ .kind = .IdRef, .quantifier = .required },
2196 },
2197 .OpTypeRuntimeArray => &[_]Operand{
2198 .{ .kind = .IdResult, .quantifier = .required },
2199 .{ .kind = .IdRef, .quantifier = .required },
2200 },
2201 .OpTypeStruct => &[_]Operand{
2202 .{ .kind = .IdResult, .quantifier = .required },
2203 .{ .kind = .IdRef, .quantifier = .variadic },
2204 },
2205 .OpTypeOpaque => &[_]Operand{
2206 .{ .kind = .IdResult, .quantifier = .required },
2207 .{ .kind = .LiteralString, .quantifier = .required },
2208 },
2209 .OpTypePointer => &[_]Operand{
2210 .{ .kind = .IdResult, .quantifier = .required },
2211 .{ .kind = .StorageClass, .quantifier = .required },
2212 .{ .kind = .IdRef, .quantifier = .required },
2213 },
2214 .OpTypeFunction => &[_]Operand{
2215 .{ .kind = .IdResult, .quantifier = .required },
2216 .{ .kind = .IdRef, .quantifier = .required },
2217 .{ .kind = .IdRef, .quantifier = .variadic },
2218 },
2219 .OpTypeEvent => &[_]Operand{
2220 .{ .kind = .IdResult, .quantifier = .required },
2221 },
2222 .OpTypeDeviceEvent => &[_]Operand{
2223 .{ .kind = .IdResult, .quantifier = .required },
2224 },
2225 .OpTypeReserveId => &[_]Operand{
2226 .{ .kind = .IdResult, .quantifier = .required },
2227 },
2228 .OpTypeQueue => &[_]Operand{
2229 .{ .kind = .IdResult, .quantifier = .required },
2230 },
2231 .OpTypePipe => &[_]Operand{
2232 .{ .kind = .IdResult, .quantifier = .required },
2233 .{ .kind = .AccessQualifier, .quantifier = .required },
2234 },
2235 .OpTypeForwardPointer => &[_]Operand{
2236 .{ .kind = .IdRef, .quantifier = .required },
2237 .{ .kind = .StorageClass, .quantifier = .required },
2238 },
2239 .OpConstantTrue => &[_]Operand{
2240 .{ .kind = .IdResultType, .quantifier = .required },
2241 .{ .kind = .IdResult, .quantifier = .required },
2242 },
2243 .OpConstantFalse => &[_]Operand{
2244 .{ .kind = .IdResultType, .quantifier = .required },
2245 .{ .kind = .IdResult, .quantifier = .required },
2246 },
2247 .OpConstant => &[_]Operand{
2248 .{ .kind = .IdResultType, .quantifier = .required },
2249 .{ .kind = .IdResult, .quantifier = .required },
2250 .{ .kind = .LiteralContextDependentNumber, .quantifier = .required },
2251 },
2252 .OpConstantComposite => &[_]Operand{
2253 .{ .kind = .IdResultType, .quantifier = .required },
2254 .{ .kind = .IdResult, .quantifier = .required },
2255 .{ .kind = .IdRef, .quantifier = .variadic },
2256 },
2257 .OpConstantSampler => &[_]Operand{
2258 .{ .kind = .IdResultType, .quantifier = .required },
2259 .{ .kind = .IdResult, .quantifier = .required },
2260 .{ .kind = .SamplerAddressingMode, .quantifier = .required },
2261 .{ .kind = .LiteralInteger, .quantifier = .required },
2262 .{ .kind = .SamplerFilterMode, .quantifier = .required },
2263 },
2264 .OpConstantNull => &[_]Operand{
2265 .{ .kind = .IdResultType, .quantifier = .required },
2266 .{ .kind = .IdResult, .quantifier = .required },
2267 },
2268 .OpSpecConstantTrue => &[_]Operand{
2269 .{ .kind = .IdResultType, .quantifier = .required },
2270 .{ .kind = .IdResult, .quantifier = .required },
2271 },
2272 .OpSpecConstantFalse => &[_]Operand{
2273 .{ .kind = .IdResultType, .quantifier = .required },
2274 .{ .kind = .IdResult, .quantifier = .required },
2275 },
2276 .OpSpecConstant => &[_]Operand{
2277 .{ .kind = .IdResultType, .quantifier = .required },
2278 .{ .kind = .IdResult, .quantifier = .required },
2279 .{ .kind = .LiteralContextDependentNumber, .quantifier = .required },
2280 },
2281 .OpSpecConstantComposite => &[_]Operand{
2282 .{ .kind = .IdResultType, .quantifier = .required },
2283 .{ .kind = .IdResult, .quantifier = .required },
2284 .{ .kind = .IdRef, .quantifier = .variadic },
2285 },
2286 .OpSpecConstantOp => &[_]Operand{
2287 .{ .kind = .IdResultType, .quantifier = .required },
2288 .{ .kind = .IdResult, .quantifier = .required },
2289 .{ .kind = .LiteralSpecConstantOpInteger, .quantifier = .required },
2290 },
2291 .OpFunction => &[_]Operand{
2292 .{ .kind = .IdResultType, .quantifier = .required },
2293 .{ .kind = .IdResult, .quantifier = .required },
2294 .{ .kind = .FunctionControl, .quantifier = .required },
2295 .{ .kind = .IdRef, .quantifier = .required },
2296 },
2297 .OpFunctionParameter => &[_]Operand{
2298 .{ .kind = .IdResultType, .quantifier = .required },
2299 .{ .kind = .IdResult, .quantifier = .required },
2300 },
2301 .OpFunctionEnd => &[_]Operand{},
2302 .OpFunctionCall => &[_]Operand{
2303 .{ .kind = .IdResultType, .quantifier = .required },
2304 .{ .kind = .IdResult, .quantifier = .required },
2305 .{ .kind = .IdRef, .quantifier = .required },
2306 .{ .kind = .IdRef, .quantifier = .variadic },
2307 },
2308 .OpVariable => &[_]Operand{
2309 .{ .kind = .IdResultType, .quantifier = .required },
2310 .{ .kind = .IdResult, .quantifier = .required },
2311 .{ .kind = .StorageClass, .quantifier = .required },
2312 .{ .kind = .IdRef, .quantifier = .optional },
2313 },
2314 .OpImageTexelPointer => &[_]Operand{
2315 .{ .kind = .IdResultType, .quantifier = .required },
2316 .{ .kind = .IdResult, .quantifier = .required },
2317 .{ .kind = .IdRef, .quantifier = .required },
2318 .{ .kind = .IdRef, .quantifier = .required },
2319 .{ .kind = .IdRef, .quantifier = .required },
2320 },
2321 .OpLoad => &[_]Operand{
2322 .{ .kind = .IdResultType, .quantifier = .required },
2323 .{ .kind = .IdResult, .quantifier = .required },
2324 .{ .kind = .IdRef, .quantifier = .required },
2325 .{ .kind = .MemoryAccess, .quantifier = .optional },
2326 },
2327 .OpStore => &[_]Operand{
2328 .{ .kind = .IdRef, .quantifier = .required },
2329 .{ .kind = .IdRef, .quantifier = .required },
2330 .{ .kind = .MemoryAccess, .quantifier = .optional },
2331 },
2332 .OpCopyMemory => &[_]Operand{
2333 .{ .kind = .IdRef, .quantifier = .required },
2334 .{ .kind = .IdRef, .quantifier = .required },
2335 .{ .kind = .MemoryAccess, .quantifier = .optional },
2336 .{ .kind = .MemoryAccess, .quantifier = .optional },
2337 },
2338 .OpCopyMemorySized => &[_]Operand{
2339 .{ .kind = .IdRef, .quantifier = .required },
2340 .{ .kind = .IdRef, .quantifier = .required },
2341 .{ .kind = .IdRef, .quantifier = .required },
2342 .{ .kind = .MemoryAccess, .quantifier = .optional },
2343 .{ .kind = .MemoryAccess, .quantifier = .optional },
2344 },
2345 .OpAccessChain => &[_]Operand{
2346 .{ .kind = .IdResultType, .quantifier = .required },
2347 .{ .kind = .IdResult, .quantifier = .required },
2348 .{ .kind = .IdRef, .quantifier = .required },
2349 .{ .kind = .IdRef, .quantifier = .variadic },
2350 },
2351 .OpInBoundsAccessChain => &[_]Operand{
2352 .{ .kind = .IdResultType, .quantifier = .required },
2353 .{ .kind = .IdResult, .quantifier = .required },
2354 .{ .kind = .IdRef, .quantifier = .required },
2355 .{ .kind = .IdRef, .quantifier = .variadic },
2356 },
2357 .OpPtrAccessChain => &[_]Operand{
2358 .{ .kind = .IdResultType, .quantifier = .required },
2359 .{ .kind = .IdResult, .quantifier = .required },
2360 .{ .kind = .IdRef, .quantifier = .required },
2361 .{ .kind = .IdRef, .quantifier = .required },
2362 .{ .kind = .IdRef, .quantifier = .variadic },
2363 },
2364 .OpArrayLength => &[_]Operand{
2365 .{ .kind = .IdResultType, .quantifier = .required },
2366 .{ .kind = .IdResult, .quantifier = .required },
2367 .{ .kind = .IdRef, .quantifier = .required },
2368 .{ .kind = .LiteralInteger, .quantifier = .required },
2369 },
2370 .OpGenericPtrMemSemantics => &[_]Operand{
2371 .{ .kind = .IdResultType, .quantifier = .required },
2372 .{ .kind = .IdResult, .quantifier = .required },
2373 .{ .kind = .IdRef, .quantifier = .required },
2374 },
2375 .OpInBoundsPtrAccessChain => &[_]Operand{
2376 .{ .kind = .IdResultType, .quantifier = .required },
2377 .{ .kind = .IdResult, .quantifier = .required },
2378 .{ .kind = .IdRef, .quantifier = .required },
2379 .{ .kind = .IdRef, .quantifier = .required },
2380 .{ .kind = .IdRef, .quantifier = .variadic },
2381 },
2382 .OpDecorate => &[_]Operand{
2383 .{ .kind = .IdRef, .quantifier = .required },
2384 .{ .kind = .Decoration, .quantifier = .required },
2385 },
2386 .OpMemberDecorate => &[_]Operand{
2387 .{ .kind = .IdRef, .quantifier = .required },
2388 .{ .kind = .LiteralInteger, .quantifier = .required },
2389 .{ .kind = .Decoration, .quantifier = .required },
2390 },
2391 .OpDecorationGroup => &[_]Operand{
2392 .{ .kind = .IdResult, .quantifier = .required },
2393 },
2394 .OpGroupDecorate => &[_]Operand{
2395 .{ .kind = .IdRef, .quantifier = .required },
2396 .{ .kind = .IdRef, .quantifier = .variadic },
2397 },
2398 .OpGroupMemberDecorate => &[_]Operand{
2399 .{ .kind = .IdRef, .quantifier = .required },
2400 .{ .kind = .PairIdRefLiteralInteger, .quantifier = .variadic },
2401 },
2402 .OpVectorExtractDynamic => &[_]Operand{
2403 .{ .kind = .IdResultType, .quantifier = .required },
2404 .{ .kind = .IdResult, .quantifier = .required },
2405 .{ .kind = .IdRef, .quantifier = .required },
2406 .{ .kind = .IdRef, .quantifier = .required },
2407 },
2408 .OpVectorInsertDynamic => &[_]Operand{
2409 .{ .kind = .IdResultType, .quantifier = .required },
2410 .{ .kind = .IdResult, .quantifier = .required },
2411 .{ .kind = .IdRef, .quantifier = .required },
2412 .{ .kind = .IdRef, .quantifier = .required },
2413 .{ .kind = .IdRef, .quantifier = .required },
2414 },
2415 .OpVectorShuffle => &[_]Operand{
2416 .{ .kind = .IdResultType, .quantifier = .required },
2417 .{ .kind = .IdResult, .quantifier = .required },
2418 .{ .kind = .IdRef, .quantifier = .required },
2419 .{ .kind = .IdRef, .quantifier = .required },
2420 .{ .kind = .LiteralInteger, .quantifier = .variadic },
2421 },
2422 .OpCompositeConstruct => &[_]Operand{
2423 .{ .kind = .IdResultType, .quantifier = .required },
2424 .{ .kind = .IdResult, .quantifier = .required },
2425 .{ .kind = .IdRef, .quantifier = .variadic },
2426 },
2427 .OpCompositeExtract => &[_]Operand{
2428 .{ .kind = .IdResultType, .quantifier = .required },
2429 .{ .kind = .IdResult, .quantifier = .required },
2430 .{ .kind = .IdRef, .quantifier = .required },
2431 .{ .kind = .LiteralInteger, .quantifier = .variadic },
2432 },
2433 .OpCompositeInsert => &[_]Operand{
2434 .{ .kind = .IdResultType, .quantifier = .required },
2435 .{ .kind = .IdResult, .quantifier = .required },
2436 .{ .kind = .IdRef, .quantifier = .required },
2437 .{ .kind = .IdRef, .quantifier = .required },
2438 .{ .kind = .LiteralInteger, .quantifier = .variadic },
2439 },
2440 .OpCopyObject => &[_]Operand{
2441 .{ .kind = .IdResultType, .quantifier = .required },
2442 .{ .kind = .IdResult, .quantifier = .required },
2443 .{ .kind = .IdRef, .quantifier = .required },
2444 },
2445 .OpTranspose => &[_]Operand{
2446 .{ .kind = .IdResultType, .quantifier = .required },
2447 .{ .kind = .IdResult, .quantifier = .required },
2448 .{ .kind = .IdRef, .quantifier = .required },
2449 },
2450 .OpSampledImage => &[_]Operand{
2451 .{ .kind = .IdResultType, .quantifier = .required },
2452 .{ .kind = .IdResult, .quantifier = .required },
2453 .{ .kind = .IdRef, .quantifier = .required },
2454 .{ .kind = .IdRef, .quantifier = .required },
2455 },
2456 .OpImageSampleImplicitLod => &[_]Operand{
2457 .{ .kind = .IdResultType, .quantifier = .required },
2458 .{ .kind = .IdResult, .quantifier = .required },
2459 .{ .kind = .IdRef, .quantifier = .required },
2460 .{ .kind = .IdRef, .quantifier = .required },
2461 .{ .kind = .ImageOperands, .quantifier = .optional },
2462 },
2463 .OpImageSampleExplicitLod => &[_]Operand{
2464 .{ .kind = .IdResultType, .quantifier = .required },
2465 .{ .kind = .IdResult, .quantifier = .required },
2466 .{ .kind = .IdRef, .quantifier = .required },
2467 .{ .kind = .IdRef, .quantifier = .required },
2468 .{ .kind = .ImageOperands, .quantifier = .required },
2469 },
2470 .OpImageSampleDrefImplicitLod => &[_]Operand{
2471 .{ .kind = .IdResultType, .quantifier = .required },
2472 .{ .kind = .IdResult, .quantifier = .required },
2473 .{ .kind = .IdRef, .quantifier = .required },
2474 .{ .kind = .IdRef, .quantifier = .required },
2475 .{ .kind = .IdRef, .quantifier = .required },
2476 .{ .kind = .ImageOperands, .quantifier = .optional },
2477 },
2478 .OpImageSampleDrefExplicitLod => &[_]Operand{
2479 .{ .kind = .IdResultType, .quantifier = .required },
2480 .{ .kind = .IdResult, .quantifier = .required },
2481 .{ .kind = .IdRef, .quantifier = .required },
2482 .{ .kind = .IdRef, .quantifier = .required },
2483 .{ .kind = .IdRef, .quantifier = .required },
2484 .{ .kind = .ImageOperands, .quantifier = .required },
2485 },
2486 .OpImageSampleProjImplicitLod => &[_]Operand{
2487 .{ .kind = .IdResultType, .quantifier = .required },
2488 .{ .kind = .IdResult, .quantifier = .required },
2489 .{ .kind = .IdRef, .quantifier = .required },
2490 .{ .kind = .IdRef, .quantifier = .required },
2491 .{ .kind = .ImageOperands, .quantifier = .optional },
2492 },
2493 .OpImageSampleProjExplicitLod => &[_]Operand{
2494 .{ .kind = .IdResultType, .quantifier = .required },
2495 .{ .kind = .IdResult, .quantifier = .required },
2496 .{ .kind = .IdRef, .quantifier = .required },
2497 .{ .kind = .IdRef, .quantifier = .required },
2498 .{ .kind = .ImageOperands, .quantifier = .required },
2499 },
2500 .OpImageSampleProjDrefImplicitLod => &[_]Operand{
2501 .{ .kind = .IdResultType, .quantifier = .required },
2502 .{ .kind = .IdResult, .quantifier = .required },
2503 .{ .kind = .IdRef, .quantifier = .required },
2504 .{ .kind = .IdRef, .quantifier = .required },
2505 .{ .kind = .IdRef, .quantifier = .required },
2506 .{ .kind = .ImageOperands, .quantifier = .optional },
2507 },
2508 .OpImageSampleProjDrefExplicitLod => &[_]Operand{
2509 .{ .kind = .IdResultType, .quantifier = .required },
2510 .{ .kind = .IdResult, .quantifier = .required },
2511 .{ .kind = .IdRef, .quantifier = .required },
2512 .{ .kind = .IdRef, .quantifier = .required },
2513 .{ .kind = .IdRef, .quantifier = .required },
2514 .{ .kind = .ImageOperands, .quantifier = .required },
2515 },
2516 .OpImageFetch => &[_]Operand{
2517 .{ .kind = .IdResultType, .quantifier = .required },
2518 .{ .kind = .IdResult, .quantifier = .required },
2519 .{ .kind = .IdRef, .quantifier = .required },
2520 .{ .kind = .IdRef, .quantifier = .required },
2521 .{ .kind = .ImageOperands, .quantifier = .optional },
2522 },
2523 .OpImageGather => &[_]Operand{
2524 .{ .kind = .IdResultType, .quantifier = .required },
2525 .{ .kind = .IdResult, .quantifier = .required },
2526 .{ .kind = .IdRef, .quantifier = .required },
2527 .{ .kind = .IdRef, .quantifier = .required },
2528 .{ .kind = .IdRef, .quantifier = .required },
2529 .{ .kind = .ImageOperands, .quantifier = .optional },
2530 },
2531 .OpImageDrefGather => &[_]Operand{
2532 .{ .kind = .IdResultType, .quantifier = .required },
2533 .{ .kind = .IdResult, .quantifier = .required },
2534 .{ .kind = .IdRef, .quantifier = .required },
2535 .{ .kind = .IdRef, .quantifier = .required },
2536 .{ .kind = .IdRef, .quantifier = .required },
2537 .{ .kind = .ImageOperands, .quantifier = .optional },
2538 },
2539 .OpImageRead => &[_]Operand{
2540 .{ .kind = .IdResultType, .quantifier = .required },
2541 .{ .kind = .IdResult, .quantifier = .required },
2542 .{ .kind = .IdRef, .quantifier = .required },
2543 .{ .kind = .IdRef, .quantifier = .required },
2544 .{ .kind = .ImageOperands, .quantifier = .optional },
2545 },
2546 .OpImageWrite => &[_]Operand{
2547 .{ .kind = .IdRef, .quantifier = .required },
2548 .{ .kind = .IdRef, .quantifier = .required },
2549 .{ .kind = .IdRef, .quantifier = .required },
2550 .{ .kind = .ImageOperands, .quantifier = .optional },
2551 },
2552 .OpImage => &[_]Operand{
2553 .{ .kind = .IdResultType, .quantifier = .required },
2554 .{ .kind = .IdResult, .quantifier = .required },
2555 .{ .kind = .IdRef, .quantifier = .required },
2556 },
2557 .OpImageQueryFormat => &[_]Operand{
2558 .{ .kind = .IdResultType, .quantifier = .required },
2559 .{ .kind = .IdResult, .quantifier = .required },
2560 .{ .kind = .IdRef, .quantifier = .required },
2561 },
2562 .OpImageQueryOrder => &[_]Operand{
2563 .{ .kind = .IdResultType, .quantifier = .required },
2564 .{ .kind = .IdResult, .quantifier = .required },
2565 .{ .kind = .IdRef, .quantifier = .required },
2566 },
2567 .OpImageQuerySizeLod => &[_]Operand{
2568 .{ .kind = .IdResultType, .quantifier = .required },
2569 .{ .kind = .IdResult, .quantifier = .required },
2570 .{ .kind = .IdRef, .quantifier = .required },
2571 .{ .kind = .IdRef, .quantifier = .required },
2572 },
2573 .OpImageQuerySize => &[_]Operand{
2574 .{ .kind = .IdResultType, .quantifier = .required },
2575 .{ .kind = .IdResult, .quantifier = .required },
2576 .{ .kind = .IdRef, .quantifier = .required },
2577 },
2578 .OpImageQueryLod => &[_]Operand{
2579 .{ .kind = .IdResultType, .quantifier = .required },
2580 .{ .kind = .IdResult, .quantifier = .required },
2581 .{ .kind = .IdRef, .quantifier = .required },
2582 .{ .kind = .IdRef, .quantifier = .required },
2583 },
2584 .OpImageQueryLevels => &[_]Operand{
2585 .{ .kind = .IdResultType, .quantifier = .required },
2586 .{ .kind = .IdResult, .quantifier = .required },
2587 .{ .kind = .IdRef, .quantifier = .required },
2588 },
2589 .OpImageQuerySamples => &[_]Operand{
2590 .{ .kind = .IdResultType, .quantifier = .required },
2591 .{ .kind = .IdResult, .quantifier = .required },
2592 .{ .kind = .IdRef, .quantifier = .required },
2593 },
2594 .OpConvertFToU => &[_]Operand{
2595 .{ .kind = .IdResultType, .quantifier = .required },
2596 .{ .kind = .IdResult, .quantifier = .required },
2597 .{ .kind = .IdRef, .quantifier = .required },
2598 },
2599 .OpConvertFToS => &[_]Operand{
2600 .{ .kind = .IdResultType, .quantifier = .required },
2601 .{ .kind = .IdResult, .quantifier = .required },
2602 .{ .kind = .IdRef, .quantifier = .required },
2603 },
2604 .OpConvertSToF => &[_]Operand{
2605 .{ .kind = .IdResultType, .quantifier = .required },
2606 .{ .kind = .IdResult, .quantifier = .required },
2607 .{ .kind = .IdRef, .quantifier = .required },
2608 },
2609 .OpConvertUToF => &[_]Operand{
2610 .{ .kind = .IdResultType, .quantifier = .required },
2611 .{ .kind = .IdResult, .quantifier = .required },
2612 .{ .kind = .IdRef, .quantifier = .required },
2613 },
2614 .OpUConvert => &[_]Operand{
2615 .{ .kind = .IdResultType, .quantifier = .required },
2616 .{ .kind = .IdResult, .quantifier = .required },
2617 .{ .kind = .IdRef, .quantifier = .required },
2618 },
2619 .OpSConvert => &[_]Operand{
2620 .{ .kind = .IdResultType, .quantifier = .required },
2621 .{ .kind = .IdResult, .quantifier = .required },
2622 .{ .kind = .IdRef, .quantifier = .required },
2623 },
2624 .OpFConvert => &[_]Operand{
2625 .{ .kind = .IdResultType, .quantifier = .required },
2626 .{ .kind = .IdResult, .quantifier = .required },
2627 .{ .kind = .IdRef, .quantifier = .required },
2628 },
2629 .OpQuantizeToF16 => &[_]Operand{
2630 .{ .kind = .IdResultType, .quantifier = .required },
2631 .{ .kind = .IdResult, .quantifier = .required },
2632 .{ .kind = .IdRef, .quantifier = .required },
2633 },
2634 .OpConvertPtrToU => &[_]Operand{
2635 .{ .kind = .IdResultType, .quantifier = .required },
2636 .{ .kind = .IdResult, .quantifier = .required },
2637 .{ .kind = .IdRef, .quantifier = .required },
2638 },
2639 .OpSatConvertSToU => &[_]Operand{
2640 .{ .kind = .IdResultType, .quantifier = .required },
2641 .{ .kind = .IdResult, .quantifier = .required },
2642 .{ .kind = .IdRef, .quantifier = .required },
2643 },
2644 .OpSatConvertUToS => &[_]Operand{
2645 .{ .kind = .IdResultType, .quantifier = .required },
2646 .{ .kind = .IdResult, .quantifier = .required },
2647 .{ .kind = .IdRef, .quantifier = .required },
2648 },
2649 .OpConvertUToPtr => &[_]Operand{
2650 .{ .kind = .IdResultType, .quantifier = .required },
2651 .{ .kind = .IdResult, .quantifier = .required },
2652 .{ .kind = .IdRef, .quantifier = .required },
2653 },
2654 .OpPtrCastToGeneric => &[_]Operand{
2655 .{ .kind = .IdResultType, .quantifier = .required },
2656 .{ .kind = .IdResult, .quantifier = .required },
2657 .{ .kind = .IdRef, .quantifier = .required },
2658 },
2659 .OpGenericCastToPtr => &[_]Operand{
2660 .{ .kind = .IdResultType, .quantifier = .required },
2661 .{ .kind = .IdResult, .quantifier = .required },
2662 .{ .kind = .IdRef, .quantifier = .required },
2663 },
2664 .OpGenericCastToPtrExplicit => &[_]Operand{
2665 .{ .kind = .IdResultType, .quantifier = .required },
2666 .{ .kind = .IdResult, .quantifier = .required },
2667 .{ .kind = .IdRef, .quantifier = .required },
2668 .{ .kind = .StorageClass, .quantifier = .required },
2669 },
2670 .OpBitcast => &[_]Operand{
2671 .{ .kind = .IdResultType, .quantifier = .required },
2672 .{ .kind = .IdResult, .quantifier = .required },
2673 .{ .kind = .IdRef, .quantifier = .required },
2674 },
2675 .OpSNegate => &[_]Operand{
2676 .{ .kind = .IdResultType, .quantifier = .required },
2677 .{ .kind = .IdResult, .quantifier = .required },
2678 .{ .kind = .IdRef, .quantifier = .required },
2679 },
2680 .OpFNegate => &[_]Operand{
2681 .{ .kind = .IdResultType, .quantifier = .required },
2682 .{ .kind = .IdResult, .quantifier = .required },
2683 .{ .kind = .IdRef, .quantifier = .required },
2684 },
2685 .OpIAdd => &[_]Operand{
2686 .{ .kind = .IdResultType, .quantifier = .required },
2687 .{ .kind = .IdResult, .quantifier = .required },
2688 .{ .kind = .IdRef, .quantifier = .required },
2689 .{ .kind = .IdRef, .quantifier = .required },
2690 },
2691 .OpFAdd => &[_]Operand{
2692 .{ .kind = .IdResultType, .quantifier = .required },
2693 .{ .kind = .IdResult, .quantifier = .required },
2694 .{ .kind = .IdRef, .quantifier = .required },
2695 .{ .kind = .IdRef, .quantifier = .required },
2696 },
2697 .OpISub => &[_]Operand{
2698 .{ .kind = .IdResultType, .quantifier = .required },
2699 .{ .kind = .IdResult, .quantifier = .required },
2700 .{ .kind = .IdRef, .quantifier = .required },
2701 .{ .kind = .IdRef, .quantifier = .required },
2702 },
2703 .OpFSub => &[_]Operand{
2704 .{ .kind = .IdResultType, .quantifier = .required },
2705 .{ .kind = .IdResult, .quantifier = .required },
2706 .{ .kind = .IdRef, .quantifier = .required },
2707 .{ .kind = .IdRef, .quantifier = .required },
2708 },
2709 .OpIMul => &[_]Operand{
2710 .{ .kind = .IdResultType, .quantifier = .required },
2711 .{ .kind = .IdResult, .quantifier = .required },
2712 .{ .kind = .IdRef, .quantifier = .required },
2713 .{ .kind = .IdRef, .quantifier = .required },
2714 },
2715 .OpFMul => &[_]Operand{
2716 .{ .kind = .IdResultType, .quantifier = .required },
2717 .{ .kind = .IdResult, .quantifier = .required },
2718 .{ .kind = .IdRef, .quantifier = .required },
2719 .{ .kind = .IdRef, .quantifier = .required },
2720 },
2721 .OpUDiv => &[_]Operand{
2722 .{ .kind = .IdResultType, .quantifier = .required },
2723 .{ .kind = .IdResult, .quantifier = .required },
2724 .{ .kind = .IdRef, .quantifier = .required },
2725 .{ .kind = .IdRef, .quantifier = .required },
2726 },
2727 .OpSDiv => &[_]Operand{
2728 .{ .kind = .IdResultType, .quantifier = .required },
2729 .{ .kind = .IdResult, .quantifier = .required },
2730 .{ .kind = .IdRef, .quantifier = .required },
2731 .{ .kind = .IdRef, .quantifier = .required },
2732 },
2733 .OpFDiv => &[_]Operand{
2734 .{ .kind = .IdResultType, .quantifier = .required },
2735 .{ .kind = .IdResult, .quantifier = .required },
2736 .{ .kind = .IdRef, .quantifier = .required },
2737 .{ .kind = .IdRef, .quantifier = .required },
2738 },
2739 .OpUMod => &[_]Operand{
2740 .{ .kind = .IdResultType, .quantifier = .required },
2741 .{ .kind = .IdResult, .quantifier = .required },
2742 .{ .kind = .IdRef, .quantifier = .required },
2743 .{ .kind = .IdRef, .quantifier = .required },
2744 },
2745 .OpSRem => &[_]Operand{
2746 .{ .kind = .IdResultType, .quantifier = .required },
2747 .{ .kind = .IdResult, .quantifier = .required },
2748 .{ .kind = .IdRef, .quantifier = .required },
2749 .{ .kind = .IdRef, .quantifier = .required },
2750 },
2751 .OpSMod => &[_]Operand{
2752 .{ .kind = .IdResultType, .quantifier = .required },
2753 .{ .kind = .IdResult, .quantifier = .required },
2754 .{ .kind = .IdRef, .quantifier = .required },
2755 .{ .kind = .IdRef, .quantifier = .required },
2756 },
2757 .OpFRem => &[_]Operand{
2758 .{ .kind = .IdResultType, .quantifier = .required },
2759 .{ .kind = .IdResult, .quantifier = .required },
2760 .{ .kind = .IdRef, .quantifier = .required },
2761 .{ .kind = .IdRef, .quantifier = .required },
2762 },
2763 .OpFMod => &[_]Operand{
2764 .{ .kind = .IdResultType, .quantifier = .required },
2765 .{ .kind = .IdResult, .quantifier = .required },
2766 .{ .kind = .IdRef, .quantifier = .required },
2767 .{ .kind = .IdRef, .quantifier = .required },
2768 },
2769 .OpVectorTimesScalar => &[_]Operand{
2770 .{ .kind = .IdResultType, .quantifier = .required },
2771 .{ .kind = .IdResult, .quantifier = .required },
2772 .{ .kind = .IdRef, .quantifier = .required },
2773 .{ .kind = .IdRef, .quantifier = .required },
2774 },
2775 .OpMatrixTimesScalar => &[_]Operand{
2776 .{ .kind = .IdResultType, .quantifier = .required },
2777 .{ .kind = .IdResult, .quantifier = .required },
2778 .{ .kind = .IdRef, .quantifier = .required },
2779 .{ .kind = .IdRef, .quantifier = .required },
2780 },
2781 .OpVectorTimesMatrix => &[_]Operand{
2782 .{ .kind = .IdResultType, .quantifier = .required },
2783 .{ .kind = .IdResult, .quantifier = .required },
2784 .{ .kind = .IdRef, .quantifier = .required },
2785 .{ .kind = .IdRef, .quantifier = .required },
2786 },
2787 .OpMatrixTimesVector => &[_]Operand{
2788 .{ .kind = .IdResultType, .quantifier = .required },
2789 .{ .kind = .IdResult, .quantifier = .required },
2790 .{ .kind = .IdRef, .quantifier = .required },
2791 .{ .kind = .IdRef, .quantifier = .required },
2792 },
2793 .OpMatrixTimesMatrix => &[_]Operand{
2794 .{ .kind = .IdResultType, .quantifier = .required },
2795 .{ .kind = .IdResult, .quantifier = .required },
2796 .{ .kind = .IdRef, .quantifier = .required },
2797 .{ .kind = .IdRef, .quantifier = .required },
2798 },
2799 .OpOuterProduct => &[_]Operand{
2800 .{ .kind = .IdResultType, .quantifier = .required },
2801 .{ .kind = .IdResult, .quantifier = .required },
2802 .{ .kind = .IdRef, .quantifier = .required },
2803 .{ .kind = .IdRef, .quantifier = .required },
2804 },
2805 .OpDot => &[_]Operand{
2806 .{ .kind = .IdResultType, .quantifier = .required },
2807 .{ .kind = .IdResult, .quantifier = .required },
2808 .{ .kind = .IdRef, .quantifier = .required },
2809 .{ .kind = .IdRef, .quantifier = .required },
2810 },
2811 .OpIAddCarry => &[_]Operand{
2812 .{ .kind = .IdResultType, .quantifier = .required },
2813 .{ .kind = .IdResult, .quantifier = .required },
2814 .{ .kind = .IdRef, .quantifier = .required },
2815 .{ .kind = .IdRef, .quantifier = .required },
2816 },
2817 .OpISubBorrow => &[_]Operand{
2818 .{ .kind = .IdResultType, .quantifier = .required },
2819 .{ .kind = .IdResult, .quantifier = .required },
2820 .{ .kind = .IdRef, .quantifier = .required },
2821 .{ .kind = .IdRef, .quantifier = .required },
2822 },
2823 .OpUMulExtended => &[_]Operand{
2824 .{ .kind = .IdResultType, .quantifier = .required },
2825 .{ .kind = .IdResult, .quantifier = .required },
2826 .{ .kind = .IdRef, .quantifier = .required },
2827 .{ .kind = .IdRef, .quantifier = .required },
2828 },
2829 .OpSMulExtended => &[_]Operand{
2830 .{ .kind = .IdResultType, .quantifier = .required },
2831 .{ .kind = .IdResult, .quantifier = .required },
2832 .{ .kind = .IdRef, .quantifier = .required },
2833 .{ .kind = .IdRef, .quantifier = .required },
2834 },
2835 .OpAny => &[_]Operand{
2836 .{ .kind = .IdResultType, .quantifier = .required },
2837 .{ .kind = .IdResult, .quantifier = .required },
2838 .{ .kind = .IdRef, .quantifier = .required },
2839 },
2840 .OpAll => &[_]Operand{
2841 .{ .kind = .IdResultType, .quantifier = .required },
2842 .{ .kind = .IdResult, .quantifier = .required },
2843 .{ .kind = .IdRef, .quantifier = .required },
2844 },
2845 .OpIsNan => &[_]Operand{
2846 .{ .kind = .IdResultType, .quantifier = .required },
2847 .{ .kind = .IdResult, .quantifier = .required },
2848 .{ .kind = .IdRef, .quantifier = .required },
2849 },
2850 .OpIsInf => &[_]Operand{
2851 .{ .kind = .IdResultType, .quantifier = .required },
2852 .{ .kind = .IdResult, .quantifier = .required },
2853 .{ .kind = .IdRef, .quantifier = .required },
2854 },
2855 .OpIsFinite => &[_]Operand{
2856 .{ .kind = .IdResultType, .quantifier = .required },
2857 .{ .kind = .IdResult, .quantifier = .required },
2858 .{ .kind = .IdRef, .quantifier = .required },
2859 },
2860 .OpIsNormal => &[_]Operand{
2861 .{ .kind = .IdResultType, .quantifier = .required },
2862 .{ .kind = .IdResult, .quantifier = .required },
2863 .{ .kind = .IdRef, .quantifier = .required },
2864 },
2865 .OpSignBitSet => &[_]Operand{
2866 .{ .kind = .IdResultType, .quantifier = .required },
2867 .{ .kind = .IdResult, .quantifier = .required },
2868 .{ .kind = .IdRef, .quantifier = .required },
2869 },
2870 .OpLessOrGreater => &[_]Operand{
2871 .{ .kind = .IdResultType, .quantifier = .required },
2872 .{ .kind = .IdResult, .quantifier = .required },
2873 .{ .kind = .IdRef, .quantifier = .required },
2874 .{ .kind = .IdRef, .quantifier = .required },
2875 },
2876 .OpOrdered => &[_]Operand{
2877 .{ .kind = .IdResultType, .quantifier = .required },
2878 .{ .kind = .IdResult, .quantifier = .required },
2879 .{ .kind = .IdRef, .quantifier = .required },
2880 .{ .kind = .IdRef, .quantifier = .required },
2881 },
2882 .OpUnordered => &[_]Operand{
2883 .{ .kind = .IdResultType, .quantifier = .required },
2884 .{ .kind = .IdResult, .quantifier = .required },
2885 .{ .kind = .IdRef, .quantifier = .required },
2886 .{ .kind = .IdRef, .quantifier = .required },
2887 },
2888 .OpLogicalEqual => &[_]Operand{
2889 .{ .kind = .IdResultType, .quantifier = .required },
2890 .{ .kind = .IdResult, .quantifier = .required },
2891 .{ .kind = .IdRef, .quantifier = .required },
2892 .{ .kind = .IdRef, .quantifier = .required },
2893 },
2894 .OpLogicalNotEqual => &[_]Operand{
2895 .{ .kind = .IdResultType, .quantifier = .required },
2896 .{ .kind = .IdResult, .quantifier = .required },
2897 .{ .kind = .IdRef, .quantifier = .required },
2898 .{ .kind = .IdRef, .quantifier = .required },
2899 },
2900 .OpLogicalOr => &[_]Operand{
2901 .{ .kind = .IdResultType, .quantifier = .required },
2902 .{ .kind = .IdResult, .quantifier = .required },
2903 .{ .kind = .IdRef, .quantifier = .required },
2904 .{ .kind = .IdRef, .quantifier = .required },
2905 },
2906 .OpLogicalAnd => &[_]Operand{
2907 .{ .kind = .IdResultType, .quantifier = .required },
2908 .{ .kind = .IdResult, .quantifier = .required },
2909 .{ .kind = .IdRef, .quantifier = .required },
2910 .{ .kind = .IdRef, .quantifier = .required },
2911 },
2912 .OpLogicalNot => &[_]Operand{
2913 .{ .kind = .IdResultType, .quantifier = .required },
2914 .{ .kind = .IdResult, .quantifier = .required },
2915 .{ .kind = .IdRef, .quantifier = .required },
2916 },
2917 .OpSelect => &[_]Operand{
2918 .{ .kind = .IdResultType, .quantifier = .required },
2919 .{ .kind = .IdResult, .quantifier = .required },
2920 .{ .kind = .IdRef, .quantifier = .required },
2921 .{ .kind = .IdRef, .quantifier = .required },
2922 .{ .kind = .IdRef, .quantifier = .required },
2923 },
2924 .OpIEqual => &[_]Operand{
2925 .{ .kind = .IdResultType, .quantifier = .required },
2926 .{ .kind = .IdResult, .quantifier = .required },
2927 .{ .kind = .IdRef, .quantifier = .required },
2928 .{ .kind = .IdRef, .quantifier = .required },
2929 },
2930 .OpINotEqual => &[_]Operand{
2931 .{ .kind = .IdResultType, .quantifier = .required },
2932 .{ .kind = .IdResult, .quantifier = .required },
2933 .{ .kind = .IdRef, .quantifier = .required },
2934 .{ .kind = .IdRef, .quantifier = .required },
2935 },
2936 .OpUGreaterThan => &[_]Operand{
2937 .{ .kind = .IdResultType, .quantifier = .required },
2938 .{ .kind = .IdResult, .quantifier = .required },
2939 .{ .kind = .IdRef, .quantifier = .required },
2940 .{ .kind = .IdRef, .quantifier = .required },
2941 },
2942 .OpSGreaterThan => &[_]Operand{
2943 .{ .kind = .IdResultType, .quantifier = .required },
2944 .{ .kind = .IdResult, .quantifier = .required },
2945 .{ .kind = .IdRef, .quantifier = .required },
2946 .{ .kind = .IdRef, .quantifier = .required },
2947 },
2948 .OpUGreaterThanEqual => &[_]Operand{
2949 .{ .kind = .IdResultType, .quantifier = .required },
2950 .{ .kind = .IdResult, .quantifier = .required },
2951 .{ .kind = .IdRef, .quantifier = .required },
2952 .{ .kind = .IdRef, .quantifier = .required },
2953 },
2954 .OpSGreaterThanEqual => &[_]Operand{
2955 .{ .kind = .IdResultType, .quantifier = .required },
2956 .{ .kind = .IdResult, .quantifier = .required },
2957 .{ .kind = .IdRef, .quantifier = .required },
2958 .{ .kind = .IdRef, .quantifier = .required },
2959 },
2960 .OpULessThan => &[_]Operand{
2961 .{ .kind = .IdResultType, .quantifier = .required },
2962 .{ .kind = .IdResult, .quantifier = .required },
2963 .{ .kind = .IdRef, .quantifier = .required },
2964 .{ .kind = .IdRef, .quantifier = .required },
2965 },
2966 .OpSLessThan => &[_]Operand{
2967 .{ .kind = .IdResultType, .quantifier = .required },
2968 .{ .kind = .IdResult, .quantifier = .required },
2969 .{ .kind = .IdRef, .quantifier = .required },
2970 .{ .kind = .IdRef, .quantifier = .required },
2971 },
2972 .OpULessThanEqual => &[_]Operand{
2973 .{ .kind = .IdResultType, .quantifier = .required },
2974 .{ .kind = .IdResult, .quantifier = .required },
2975 .{ .kind = .IdRef, .quantifier = .required },
2976 .{ .kind = .IdRef, .quantifier = .required },
2977 },
2978 .OpSLessThanEqual => &[_]Operand{
2979 .{ .kind = .IdResultType, .quantifier = .required },
2980 .{ .kind = .IdResult, .quantifier = .required },
2981 .{ .kind = .IdRef, .quantifier = .required },
2982 .{ .kind = .IdRef, .quantifier = .required },
2983 },
2984 .OpFOrdEqual => &[_]Operand{
2985 .{ .kind = .IdResultType, .quantifier = .required },
2986 .{ .kind = .IdResult, .quantifier = .required },
2987 .{ .kind = .IdRef, .quantifier = .required },
2988 .{ .kind = .IdRef, .quantifier = .required },
2989 },
2990 .OpFUnordEqual => &[_]Operand{
2991 .{ .kind = .IdResultType, .quantifier = .required },
2992 .{ .kind = .IdResult, .quantifier = .required },
2993 .{ .kind = .IdRef, .quantifier = .required },
2994 .{ .kind = .IdRef, .quantifier = .required },
2995 },
2996 .OpFOrdNotEqual => &[_]Operand{
2997 .{ .kind = .IdResultType, .quantifier = .required },
2998 .{ .kind = .IdResult, .quantifier = .required },
2999 .{ .kind = .IdRef, .quantifier = .required },
3000 .{ .kind = .IdRef, .quantifier = .required },
3001 },
3002 .OpFUnordNotEqual => &[_]Operand{
3003 .{ .kind = .IdResultType, .quantifier = .required },
3004 .{ .kind = .IdResult, .quantifier = .required },
3005 .{ .kind = .IdRef, .quantifier = .required },
3006 .{ .kind = .IdRef, .quantifier = .required },
3007 },
3008 .OpFOrdLessThan => &[_]Operand{
3009 .{ .kind = .IdResultType, .quantifier = .required },
3010 .{ .kind = .IdResult, .quantifier = .required },
3011 .{ .kind = .IdRef, .quantifier = .required },
3012 .{ .kind = .IdRef, .quantifier = .required },
3013 },
3014 .OpFUnordLessThan => &[_]Operand{
3015 .{ .kind = .IdResultType, .quantifier = .required },
3016 .{ .kind = .IdResult, .quantifier = .required },
3017 .{ .kind = .IdRef, .quantifier = .required },
3018 .{ .kind = .IdRef, .quantifier = .required },
3019 },
3020 .OpFOrdGreaterThan => &[_]Operand{
3021 .{ .kind = .IdResultType, .quantifier = .required },
3022 .{ .kind = .IdResult, .quantifier = .required },
3023 .{ .kind = .IdRef, .quantifier = .required },
3024 .{ .kind = .IdRef, .quantifier = .required },
3025 },
3026 .OpFUnordGreaterThan => &[_]Operand{
3027 .{ .kind = .IdResultType, .quantifier = .required },
3028 .{ .kind = .IdResult, .quantifier = .required },
3029 .{ .kind = .IdRef, .quantifier = .required },
3030 .{ .kind = .IdRef, .quantifier = .required },
3031 },
3032 .OpFOrdLessThanEqual => &[_]Operand{
3033 .{ .kind = .IdResultType, .quantifier = .required },
3034 .{ .kind = .IdResult, .quantifier = .required },
3035 .{ .kind = .IdRef, .quantifier = .required },
3036 .{ .kind = .IdRef, .quantifier = .required },
3037 },
3038 .OpFUnordLessThanEqual => &[_]Operand{
3039 .{ .kind = .IdResultType, .quantifier = .required },
3040 .{ .kind = .IdResult, .quantifier = .required },
3041 .{ .kind = .IdRef, .quantifier = .required },
3042 .{ .kind = .IdRef, .quantifier = .required },
3043 },
3044 .OpFOrdGreaterThanEqual => &[_]Operand{
3045 .{ .kind = .IdResultType, .quantifier = .required },
3046 .{ .kind = .IdResult, .quantifier = .required },
3047 .{ .kind = .IdRef, .quantifier = .required },
3048 .{ .kind = .IdRef, .quantifier = .required },
3049 },
3050 .OpFUnordGreaterThanEqual => &[_]Operand{
3051 .{ .kind = .IdResultType, .quantifier = .required },
3052 .{ .kind = .IdResult, .quantifier = .required },
3053 .{ .kind = .IdRef, .quantifier = .required },
3054 .{ .kind = .IdRef, .quantifier = .required },
3055 },
3056 .OpShiftRightLogical => &[_]Operand{
3057 .{ .kind = .IdResultType, .quantifier = .required },
3058 .{ .kind = .IdResult, .quantifier = .required },
3059 .{ .kind = .IdRef, .quantifier = .required },
3060 .{ .kind = .IdRef, .quantifier = .required },
3061 },
3062 .OpShiftRightArithmetic => &[_]Operand{
3063 .{ .kind = .IdResultType, .quantifier = .required },
3064 .{ .kind = .IdResult, .quantifier = .required },
3065 .{ .kind = .IdRef, .quantifier = .required },
3066 .{ .kind = .IdRef, .quantifier = .required },
3067 },
3068 .OpShiftLeftLogical => &[_]Operand{
3069 .{ .kind = .IdResultType, .quantifier = .required },
3070 .{ .kind = .IdResult, .quantifier = .required },
3071 .{ .kind = .IdRef, .quantifier = .required },
3072 .{ .kind = .IdRef, .quantifier = .required },
3073 },
3074 .OpBitwiseOr => &[_]Operand{
3075 .{ .kind = .IdResultType, .quantifier = .required },
3076 .{ .kind = .IdResult, .quantifier = .required },
3077 .{ .kind = .IdRef, .quantifier = .required },
3078 .{ .kind = .IdRef, .quantifier = .required },
3079 },
3080 .OpBitwiseXor => &[_]Operand{
3081 .{ .kind = .IdResultType, .quantifier = .required },
3082 .{ .kind = .IdResult, .quantifier = .required },
3083 .{ .kind = .IdRef, .quantifier = .required },
3084 .{ .kind = .IdRef, .quantifier = .required },
3085 },
3086 .OpBitwiseAnd => &[_]Operand{
3087 .{ .kind = .IdResultType, .quantifier = .required },
3088 .{ .kind = .IdResult, .quantifier = .required },
3089 .{ .kind = .IdRef, .quantifier = .required },
3090 .{ .kind = .IdRef, .quantifier = .required },
3091 },
3092 .OpNot => &[_]Operand{
3093 .{ .kind = .IdResultType, .quantifier = .required },
3094 .{ .kind = .IdResult, .quantifier = .required },
3095 .{ .kind = .IdRef, .quantifier = .required },
3096 },
3097 .OpBitFieldInsert => &[_]Operand{
3098 .{ .kind = .IdResultType, .quantifier = .required },
3099 .{ .kind = .IdResult, .quantifier = .required },
3100 .{ .kind = .IdRef, .quantifier = .required },
3101 .{ .kind = .IdRef, .quantifier = .required },
3102 .{ .kind = .IdRef, .quantifier = .required },
3103 .{ .kind = .IdRef, .quantifier = .required },
3104 },
3105 .OpBitFieldSExtract => &[_]Operand{
3106 .{ .kind = .IdResultType, .quantifier = .required },
3107 .{ .kind = .IdResult, .quantifier = .required },
3108 .{ .kind = .IdRef, .quantifier = .required },
3109 .{ .kind = .IdRef, .quantifier = .required },
3110 .{ .kind = .IdRef, .quantifier = .required },
3111 },
3112 .OpBitFieldUExtract => &[_]Operand{
3113 .{ .kind = .IdResultType, .quantifier = .required },
3114 .{ .kind = .IdResult, .quantifier = .required },
3115 .{ .kind = .IdRef, .quantifier = .required },
3116 .{ .kind = .IdRef, .quantifier = .required },
3117 .{ .kind = .IdRef, .quantifier = .required },
3118 },
3119 .OpBitReverse => &[_]Operand{
3120 .{ .kind = .IdResultType, .quantifier = .required },
3121 .{ .kind = .IdResult, .quantifier = .required },
3122 .{ .kind = .IdRef, .quantifier = .required },
3123 },
3124 .OpBitCount => &[_]Operand{
3125 .{ .kind = .IdResultType, .quantifier = .required },
3126 .{ .kind = .IdResult, .quantifier = .required },
3127 .{ .kind = .IdRef, .quantifier = .required },
3128 },
3129 .OpDPdx => &[_]Operand{
3130 .{ .kind = .IdResultType, .quantifier = .required },
3131 .{ .kind = .IdResult, .quantifier = .required },
3132 .{ .kind = .IdRef, .quantifier = .required },
3133 },
3134 .OpDPdy => &[_]Operand{
3135 .{ .kind = .IdResultType, .quantifier = .required },
3136 .{ .kind = .IdResult, .quantifier = .required },
3137 .{ .kind = .IdRef, .quantifier = .required },
3138 },
3139 .OpFwidth => &[_]Operand{
3140 .{ .kind = .IdResultType, .quantifier = .required },
3141 .{ .kind = .IdResult, .quantifier = .required },
3142 .{ .kind = .IdRef, .quantifier = .required },
3143 },
3144 .OpDPdxFine => &[_]Operand{
3145 .{ .kind = .IdResultType, .quantifier = .required },
3146 .{ .kind = .IdResult, .quantifier = .required },
3147 .{ .kind = .IdRef, .quantifier = .required },
3148 },
3149 .OpDPdyFine => &[_]Operand{
3150 .{ .kind = .IdResultType, .quantifier = .required },
3151 .{ .kind = .IdResult, .quantifier = .required },
3152 .{ .kind = .IdRef, .quantifier = .required },
3153 },
3154 .OpFwidthFine => &[_]Operand{
3155 .{ .kind = .IdResultType, .quantifier = .required },
3156 .{ .kind = .IdResult, .quantifier = .required },
3157 .{ .kind = .IdRef, .quantifier = .required },
3158 },
3159 .OpDPdxCoarse => &[_]Operand{
3160 .{ .kind = .IdResultType, .quantifier = .required },
3161 .{ .kind = .IdResult, .quantifier = .required },
3162 .{ .kind = .IdRef, .quantifier = .required },
3163 },
3164 .OpDPdyCoarse => &[_]Operand{
3165 .{ .kind = .IdResultType, .quantifier = .required },
3166 .{ .kind = .IdResult, .quantifier = .required },
3167 .{ .kind = .IdRef, .quantifier = .required },
3168 },
3169 .OpFwidthCoarse => &[_]Operand{
3170 .{ .kind = .IdResultType, .quantifier = .required },
3171 .{ .kind = .IdResult, .quantifier = .required },
3172 .{ .kind = .IdRef, .quantifier = .required },
3173 },
3174 .OpEmitVertex => &[_]Operand{},
3175 .OpEndPrimitive => &[_]Operand{},
3176 .OpEmitStreamVertex => &[_]Operand{
3177 .{ .kind = .IdRef, .quantifier = .required },
3178 },
3179 .OpEndStreamPrimitive => &[_]Operand{
3180 .{ .kind = .IdRef, .quantifier = .required },
3181 },
3182 .OpControlBarrier => &[_]Operand{
3183 .{ .kind = .IdScope, .quantifier = .required },
3184 .{ .kind = .IdScope, .quantifier = .required },
3185 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3186 },
3187 .OpMemoryBarrier => &[_]Operand{
3188 .{ .kind = .IdScope, .quantifier = .required },
3189 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3190 },
3191 .OpAtomicLoad => &[_]Operand{
3192 .{ .kind = .IdResultType, .quantifier = .required },
3193 .{ .kind = .IdResult, .quantifier = .required },
3194 .{ .kind = .IdRef, .quantifier = .required },
3195 .{ .kind = .IdScope, .quantifier = .required },
3196 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3197 },
3198 .OpAtomicStore => &[_]Operand{
3199 .{ .kind = .IdRef, .quantifier = .required },
3200 .{ .kind = .IdScope, .quantifier = .required },
3201 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3202 .{ .kind = .IdRef, .quantifier = .required },
3203 },
3204 .OpAtomicExchange => &[_]Operand{
3205 .{ .kind = .IdResultType, .quantifier = .required },
3206 .{ .kind = .IdResult, .quantifier = .required },
3207 .{ .kind = .IdRef, .quantifier = .required },
3208 .{ .kind = .IdScope, .quantifier = .required },
3209 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3210 .{ .kind = .IdRef, .quantifier = .required },
3211 },
3212 .OpAtomicCompareExchange => &[_]Operand{
3213 .{ .kind = .IdResultType, .quantifier = .required },
3214 .{ .kind = .IdResult, .quantifier = .required },
3215 .{ .kind = .IdRef, .quantifier = .required },
3216 .{ .kind = .IdScope, .quantifier = .required },
3217 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3218 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3219 .{ .kind = .IdRef, .quantifier = .required },
3220 .{ .kind = .IdRef, .quantifier = .required },
3221 },
3222 .OpAtomicCompareExchangeWeak => &[_]Operand{
3223 .{ .kind = .IdResultType, .quantifier = .required },
3224 .{ .kind = .IdResult, .quantifier = .required },
3225 .{ .kind = .IdRef, .quantifier = .required },
3226 .{ .kind = .IdScope, .quantifier = .required },
3227 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3228 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3229 .{ .kind = .IdRef, .quantifier = .required },
3230 .{ .kind = .IdRef, .quantifier = .required },
3231 },
3232 .OpAtomicIIncrement => &[_]Operand{
3233 .{ .kind = .IdResultType, .quantifier = .required },
3234 .{ .kind = .IdResult, .quantifier = .required },
3235 .{ .kind = .IdRef, .quantifier = .required },
3236 .{ .kind = .IdScope, .quantifier = .required },
3237 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3238 },
3239 .OpAtomicIDecrement => &[_]Operand{
3240 .{ .kind = .IdResultType, .quantifier = .required },
3241 .{ .kind = .IdResult, .quantifier = .required },
3242 .{ .kind = .IdRef, .quantifier = .required },
3243 .{ .kind = .IdScope, .quantifier = .required },
3244 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3245 },
3246 .OpAtomicIAdd => &[_]Operand{
3247 .{ .kind = .IdResultType, .quantifier = .required },
3248 .{ .kind = .IdResult, .quantifier = .required },
3249 .{ .kind = .IdRef, .quantifier = .required },
3250 .{ .kind = .IdScope, .quantifier = .required },
3251 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3252 .{ .kind = .IdRef, .quantifier = .required },
3253 },
3254 .OpAtomicISub => &[_]Operand{
3255 .{ .kind = .IdResultType, .quantifier = .required },
3256 .{ .kind = .IdResult, .quantifier = .required },
3257 .{ .kind = .IdRef, .quantifier = .required },
3258 .{ .kind = .IdScope, .quantifier = .required },
3259 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3260 .{ .kind = .IdRef, .quantifier = .required },
3261 },
3262 .OpAtomicSMin => &[_]Operand{
3263 .{ .kind = .IdResultType, .quantifier = .required },
3264 .{ .kind = .IdResult, .quantifier = .required },
3265 .{ .kind = .IdRef, .quantifier = .required },
3266 .{ .kind = .IdScope, .quantifier = .required },
3267 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3268 .{ .kind = .IdRef, .quantifier = .required },
3269 },
3270 .OpAtomicUMin => &[_]Operand{
3271 .{ .kind = .IdResultType, .quantifier = .required },
3272 .{ .kind = .IdResult, .quantifier = .required },
3273 .{ .kind = .IdRef, .quantifier = .required },
3274 .{ .kind = .IdScope, .quantifier = .required },
3275 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3276 .{ .kind = .IdRef, .quantifier = .required },
3277 },
3278 .OpAtomicSMax => &[_]Operand{
3279 .{ .kind = .IdResultType, .quantifier = .required },
3280 .{ .kind = .IdResult, .quantifier = .required },
3281 .{ .kind = .IdRef, .quantifier = .required },
3282 .{ .kind = .IdScope, .quantifier = .required },
3283 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3284 .{ .kind = .IdRef, .quantifier = .required },
3285 },
3286 .OpAtomicUMax => &[_]Operand{
3287 .{ .kind = .IdResultType, .quantifier = .required },
3288 .{ .kind = .IdResult, .quantifier = .required },
3289 .{ .kind = .IdRef, .quantifier = .required },
3290 .{ .kind = .IdScope, .quantifier = .required },
3291 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3292 .{ .kind = .IdRef, .quantifier = .required },
3293 },
3294 .OpAtomicAnd => &[_]Operand{
3295 .{ .kind = .IdResultType, .quantifier = .required },
3296 .{ .kind = .IdResult, .quantifier = .required },
3297 .{ .kind = .IdRef, .quantifier = .required },
3298 .{ .kind = .IdScope, .quantifier = .required },
3299 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3300 .{ .kind = .IdRef, .quantifier = .required },
3301 },
3302 .OpAtomicOr => &[_]Operand{
3303 .{ .kind = .IdResultType, .quantifier = .required },
3304 .{ .kind = .IdResult, .quantifier = .required },
3305 .{ .kind = .IdRef, .quantifier = .required },
3306 .{ .kind = .IdScope, .quantifier = .required },
3307 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3308 .{ .kind = .IdRef, .quantifier = .required },
3309 },
3310 .OpAtomicXor => &[_]Operand{
3311 .{ .kind = .IdResultType, .quantifier = .required },
3312 .{ .kind = .IdResult, .quantifier = .required },
3313 .{ .kind = .IdRef, .quantifier = .required },
3314 .{ .kind = .IdScope, .quantifier = .required },
3315 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3316 .{ .kind = .IdRef, .quantifier = .required },
3317 },
3318 .OpPhi => &[_]Operand{
3319 .{ .kind = .IdResultType, .quantifier = .required },
3320 .{ .kind = .IdResult, .quantifier = .required },
3321 .{ .kind = .PairIdRefIdRef, .quantifier = .variadic },
3322 },
3323 .OpLoopMerge => &[_]Operand{
3324 .{ .kind = .IdRef, .quantifier = .required },
3325 .{ .kind = .IdRef, .quantifier = .required },
3326 .{ .kind = .LoopControl, .quantifier = .required },
3327 },
3328 .OpSelectionMerge => &[_]Operand{
3329 .{ .kind = .IdRef, .quantifier = .required },
3330 .{ .kind = .SelectionControl, .quantifier = .required },
3331 },
3332 .OpLabel => &[_]Operand{
3333 .{ .kind = .IdResult, .quantifier = .required },
3334 },
3335 .OpBranch => &[_]Operand{
3336 .{ .kind = .IdRef, .quantifier = .required },
3337 },
3338 .OpBranchConditional => &[_]Operand{
3339 .{ .kind = .IdRef, .quantifier = .required },
3340 .{ .kind = .IdRef, .quantifier = .required },
3341 .{ .kind = .IdRef, .quantifier = .required },
3342 .{ .kind = .LiteralInteger, .quantifier = .variadic },
3343 },
3344 .OpSwitch => &[_]Operand{
3345 .{ .kind = .IdRef, .quantifier = .required },
3346 .{ .kind = .IdRef, .quantifier = .required },
3347 .{ .kind = .PairLiteralIntegerIdRef, .quantifier = .variadic },
3348 },
3349 .OpKill => &[_]Operand{},
3350 .OpReturn => &[_]Operand{},
3351 .OpReturnValue => &[_]Operand{
3352 .{ .kind = .IdRef, .quantifier = .required },
3353 },
3354 .OpUnreachable => &[_]Operand{},
3355 .OpLifetimeStart => &[_]Operand{
3356 .{ .kind = .IdRef, .quantifier = .required },
3357 .{ .kind = .LiteralInteger, .quantifier = .required },
3358 },
3359 .OpLifetimeStop => &[_]Operand{
3360 .{ .kind = .IdRef, .quantifier = .required },
3361 .{ .kind = .LiteralInteger, .quantifier = .required },
3362 },
3363 .OpGroupAsyncCopy => &[_]Operand{
3364 .{ .kind = .IdResultType, .quantifier = .required },
3365 .{ .kind = .IdResult, .quantifier = .required },
3366 .{ .kind = .IdScope, .quantifier = .required },
3367 .{ .kind = .IdRef, .quantifier = .required },
3368 .{ .kind = .IdRef, .quantifier = .required },
3369 .{ .kind = .IdRef, .quantifier = .required },
3370 .{ .kind = .IdRef, .quantifier = .required },
3371 .{ .kind = .IdRef, .quantifier = .required },
3372 },
3373 .OpGroupWaitEvents => &[_]Operand{
3374 .{ .kind = .IdScope, .quantifier = .required },
3375 .{ .kind = .IdRef, .quantifier = .required },
3376 .{ .kind = .IdRef, .quantifier = .required },
3377 },
3378 .OpGroupAll => &[_]Operand{
3379 .{ .kind = .IdResultType, .quantifier = .required },
3380 .{ .kind = .IdResult, .quantifier = .required },
3381 .{ .kind = .IdScope, .quantifier = .required },
3382 .{ .kind = .IdRef, .quantifier = .required },
3383 },
3384 .OpGroupAny => &[_]Operand{
3385 .{ .kind = .IdResultType, .quantifier = .required },
3386 .{ .kind = .IdResult, .quantifier = .required },
3387 .{ .kind = .IdScope, .quantifier = .required },
3388 .{ .kind = .IdRef, .quantifier = .required },
3389 },
3390 .OpGroupBroadcast => &[_]Operand{
3391 .{ .kind = .IdResultType, .quantifier = .required },
3392 .{ .kind = .IdResult, .quantifier = .required },
3393 .{ .kind = .IdScope, .quantifier = .required },
3394 .{ .kind = .IdRef, .quantifier = .required },
3395 .{ .kind = .IdRef, .quantifier = .required },
3396 },
3397 .OpGroupIAdd => &[_]Operand{
3398 .{ .kind = .IdResultType, .quantifier = .required },
3399 .{ .kind = .IdResult, .quantifier = .required },
3400 .{ .kind = .IdScope, .quantifier = .required },
3401 .{ .kind = .GroupOperation, .quantifier = .required },
3402 .{ .kind = .IdRef, .quantifier = .required },
3403 },
3404 .OpGroupFAdd => &[_]Operand{
3405 .{ .kind = .IdResultType, .quantifier = .required },
3406 .{ .kind = .IdResult, .quantifier = .required },
3407 .{ .kind = .IdScope, .quantifier = .required },
3408 .{ .kind = .GroupOperation, .quantifier = .required },
3409 .{ .kind = .IdRef, .quantifier = .required },
3410 },
3411 .OpGroupFMin => &[_]Operand{
3412 .{ .kind = .IdResultType, .quantifier = .required },
3413 .{ .kind = .IdResult, .quantifier = .required },
3414 .{ .kind = .IdScope, .quantifier = .required },
3415 .{ .kind = .GroupOperation, .quantifier = .required },
3416 .{ .kind = .IdRef, .quantifier = .required },
3417 },
3418 .OpGroupUMin => &[_]Operand{
3419 .{ .kind = .IdResultType, .quantifier = .required },
3420 .{ .kind = .IdResult, .quantifier = .required },
3421 .{ .kind = .IdScope, .quantifier = .required },
3422 .{ .kind = .GroupOperation, .quantifier = .required },
3423 .{ .kind = .IdRef, .quantifier = .required },
3424 },
3425 .OpGroupSMin => &[_]Operand{
3426 .{ .kind = .IdResultType, .quantifier = .required },
3427 .{ .kind = .IdResult, .quantifier = .required },
3428 .{ .kind = .IdScope, .quantifier = .required },
3429 .{ .kind = .GroupOperation, .quantifier = .required },
3430 .{ .kind = .IdRef, .quantifier = .required },
3431 },
3432 .OpGroupFMax => &[_]Operand{
3433 .{ .kind = .IdResultType, .quantifier = .required },
3434 .{ .kind = .IdResult, .quantifier = .required },
3435 .{ .kind = .IdScope, .quantifier = .required },
3436 .{ .kind = .GroupOperation, .quantifier = .required },
3437 .{ .kind = .IdRef, .quantifier = .required },
3438 },
3439 .OpGroupUMax => &[_]Operand{
3440 .{ .kind = .IdResultType, .quantifier = .required },
3441 .{ .kind = .IdResult, .quantifier = .required },
3442 .{ .kind = .IdScope, .quantifier = .required },
3443 .{ .kind = .GroupOperation, .quantifier = .required },
3444 .{ .kind = .IdRef, .quantifier = .required },
3445 },
3446 .OpGroupSMax => &[_]Operand{
3447 .{ .kind = .IdResultType, .quantifier = .required },
3448 .{ .kind = .IdResult, .quantifier = .required },
3449 .{ .kind = .IdScope, .quantifier = .required },
3450 .{ .kind = .GroupOperation, .quantifier = .required },
3451 .{ .kind = .IdRef, .quantifier = .required },
3452 },
3453 .OpReadPipe => &[_]Operand{
3454 .{ .kind = .IdResultType, .quantifier = .required },
3455 .{ .kind = .IdResult, .quantifier = .required },
3456 .{ .kind = .IdRef, .quantifier = .required },
3457 .{ .kind = .IdRef, .quantifier = .required },
3458 .{ .kind = .IdRef, .quantifier = .required },
3459 .{ .kind = .IdRef, .quantifier = .required },
3460 },
3461 .OpWritePipe => &[_]Operand{
3462 .{ .kind = .IdResultType, .quantifier = .required },
3463 .{ .kind = .IdResult, .quantifier = .required },
3464 .{ .kind = .IdRef, .quantifier = .required },
3465 .{ .kind = .IdRef, .quantifier = .required },
3466 .{ .kind = .IdRef, .quantifier = .required },
3467 .{ .kind = .IdRef, .quantifier = .required },
3468 },
3469 .OpReservedReadPipe => &[_]Operand{
3470 .{ .kind = .IdResultType, .quantifier = .required },
3471 .{ .kind = .IdResult, .quantifier = .required },
3472 .{ .kind = .IdRef, .quantifier = .required },
3473 .{ .kind = .IdRef, .quantifier = .required },
3474 .{ .kind = .IdRef, .quantifier = .required },
3475 .{ .kind = .IdRef, .quantifier = .required },
3476 .{ .kind = .IdRef, .quantifier = .required },
3477 .{ .kind = .IdRef, .quantifier = .required },
3478 },
3479 .OpReservedWritePipe => &[_]Operand{
3480 .{ .kind = .IdResultType, .quantifier = .required },
3481 .{ .kind = .IdResult, .quantifier = .required },
3482 .{ .kind = .IdRef, .quantifier = .required },
3483 .{ .kind = .IdRef, .quantifier = .required },
3484 .{ .kind = .IdRef, .quantifier = .required },
3485 .{ .kind = .IdRef, .quantifier = .required },
3486 .{ .kind = .IdRef, .quantifier = .required },
3487 .{ .kind = .IdRef, .quantifier = .required },
3488 },
3489 .OpReserveReadPipePackets => &[_]Operand{
3490 .{ .kind = .IdResultType, .quantifier = .required },
3491 .{ .kind = .IdResult, .quantifier = .required },
3492 .{ .kind = .IdRef, .quantifier = .required },
3493 .{ .kind = .IdRef, .quantifier = .required },
3494 .{ .kind = .IdRef, .quantifier = .required },
3495 .{ .kind = .IdRef, .quantifier = .required },
3496 },
3497 .OpReserveWritePipePackets => &[_]Operand{
3498 .{ .kind = .IdResultType, .quantifier = .required },
3499 .{ .kind = .IdResult, .quantifier = .required },
3500 .{ .kind = .IdRef, .quantifier = .required },
3501 .{ .kind = .IdRef, .quantifier = .required },
3502 .{ .kind = .IdRef, .quantifier = .required },
3503 .{ .kind = .IdRef, .quantifier = .required },
3504 },
3505 .OpCommitReadPipe => &[_]Operand{
3506 .{ .kind = .IdRef, .quantifier = .required },
3507 .{ .kind = .IdRef, .quantifier = .required },
3508 .{ .kind = .IdRef, .quantifier = .required },
3509 .{ .kind = .IdRef, .quantifier = .required },
3510 },
3511 .OpCommitWritePipe => &[_]Operand{
3512 .{ .kind = .IdRef, .quantifier = .required },
3513 .{ .kind = .IdRef, .quantifier = .required },
3514 .{ .kind = .IdRef, .quantifier = .required },
3515 .{ .kind = .IdRef, .quantifier = .required },
3516 },
3517 .OpIsValidReserveId => &[_]Operand{
3518 .{ .kind = .IdResultType, .quantifier = .required },
3519 .{ .kind = .IdResult, .quantifier = .required },
3520 .{ .kind = .IdRef, .quantifier = .required },
3521 },
3522 .OpGetNumPipePackets => &[_]Operand{
3523 .{ .kind = .IdResultType, .quantifier = .required },
3524 .{ .kind = .IdResult, .quantifier = .required },
3525 .{ .kind = .IdRef, .quantifier = .required },
3526 .{ .kind = .IdRef, .quantifier = .required },
3527 .{ .kind = .IdRef, .quantifier = .required },
3528 },
3529 .OpGetMaxPipePackets => &[_]Operand{
3530 .{ .kind = .IdResultType, .quantifier = .required },
3531 .{ .kind = .IdResult, .quantifier = .required },
3532 .{ .kind = .IdRef, .quantifier = .required },
3533 .{ .kind = .IdRef, .quantifier = .required },
3534 .{ .kind = .IdRef, .quantifier = .required },
3535 },
3536 .OpGroupReserveReadPipePackets => &[_]Operand{
3537 .{ .kind = .IdResultType, .quantifier = .required },
3538 .{ .kind = .IdResult, .quantifier = .required },
3539 .{ .kind = .IdScope, .quantifier = .required },
3540 .{ .kind = .IdRef, .quantifier = .required },
3541 .{ .kind = .IdRef, .quantifier = .required },
3542 .{ .kind = .IdRef, .quantifier = .required },
3543 .{ .kind = .IdRef, .quantifier = .required },
3544 },
3545 .OpGroupReserveWritePipePackets => &[_]Operand{
3546 .{ .kind = .IdResultType, .quantifier = .required },
3547 .{ .kind = .IdResult, .quantifier = .required },
3548 .{ .kind = .IdScope, .quantifier = .required },
3549 .{ .kind = .IdRef, .quantifier = .required },
3550 .{ .kind = .IdRef, .quantifier = .required },
3551 .{ .kind = .IdRef, .quantifier = .required },
3552 .{ .kind = .IdRef, .quantifier = .required },
3553 },
3554 .OpGroupCommitReadPipe => &[_]Operand{
3555 .{ .kind = .IdScope, .quantifier = .required },
3556 .{ .kind = .IdRef, .quantifier = .required },
3557 .{ .kind = .IdRef, .quantifier = .required },
3558 .{ .kind = .IdRef, .quantifier = .required },
3559 .{ .kind = .IdRef, .quantifier = .required },
3560 },
3561 .OpGroupCommitWritePipe => &[_]Operand{
3562 .{ .kind = .IdScope, .quantifier = .required },
3563 .{ .kind = .IdRef, .quantifier = .required },
3564 .{ .kind = .IdRef, .quantifier = .required },
3565 .{ .kind = .IdRef, .quantifier = .required },
3566 .{ .kind = .IdRef, .quantifier = .required },
3567 },
3568 .OpEnqueueMarker => &[_]Operand{
3569 .{ .kind = .IdResultType, .quantifier = .required },
3570 .{ .kind = .IdResult, .quantifier = .required },
3571 .{ .kind = .IdRef, .quantifier = .required },
3572 .{ .kind = .IdRef, .quantifier = .required },
3573 .{ .kind = .IdRef, .quantifier = .required },
3574 .{ .kind = .IdRef, .quantifier = .required },
3575 },
3576 .OpEnqueueKernel => &[_]Operand{
3577 .{ .kind = .IdResultType, .quantifier = .required },
3578 .{ .kind = .IdResult, .quantifier = .required },
3579 .{ .kind = .IdRef, .quantifier = .required },
3580 .{ .kind = .IdRef, .quantifier = .required },
3581 .{ .kind = .IdRef, .quantifier = .required },
3582 .{ .kind = .IdRef, .quantifier = .required },
3583 .{ .kind = .IdRef, .quantifier = .required },
3584 .{ .kind = .IdRef, .quantifier = .required },
3585 .{ .kind = .IdRef, .quantifier = .required },
3586 .{ .kind = .IdRef, .quantifier = .required },
3587 .{ .kind = .IdRef, .quantifier = .required },
3588 .{ .kind = .IdRef, .quantifier = .required },
3589 .{ .kind = .IdRef, .quantifier = .variadic },
3590 },
3591 .OpGetKernelNDrangeSubGroupCount => &[_]Operand{
3592 .{ .kind = .IdResultType, .quantifier = .required },
3593 .{ .kind = .IdResult, .quantifier = .required },
3594 .{ .kind = .IdRef, .quantifier = .required },
3595 .{ .kind = .IdRef, .quantifier = .required },
3596 .{ .kind = .IdRef, .quantifier = .required },
3597 .{ .kind = .IdRef, .quantifier = .required },
3598 .{ .kind = .IdRef, .quantifier = .required },
3599 },
3600 .OpGetKernelNDrangeMaxSubGroupSize => &[_]Operand{
3601 .{ .kind = .IdResultType, .quantifier = .required },
3602 .{ .kind = .IdResult, .quantifier = .required },
3603 .{ .kind = .IdRef, .quantifier = .required },
3604 .{ .kind = .IdRef, .quantifier = .required },
3605 .{ .kind = .IdRef, .quantifier = .required },
3606 .{ .kind = .IdRef, .quantifier = .required },
3607 .{ .kind = .IdRef, .quantifier = .required },
3608 },
3609 .OpGetKernelWorkGroupSize => &[_]Operand{
3610 .{ .kind = .IdResultType, .quantifier = .required },
3611 .{ .kind = .IdResult, .quantifier = .required },
3612 .{ .kind = .IdRef, .quantifier = .required },
3613 .{ .kind = .IdRef, .quantifier = .required },
3614 .{ .kind = .IdRef, .quantifier = .required },
3615 .{ .kind = .IdRef, .quantifier = .required },
3616 },
3617 .OpGetKernelPreferredWorkGroupSizeMultiple => &[_]Operand{
3618 .{ .kind = .IdResultType, .quantifier = .required },
3619 .{ .kind = .IdResult, .quantifier = .required },
3620 .{ .kind = .IdRef, .quantifier = .required },
3621 .{ .kind = .IdRef, .quantifier = .required },
3622 .{ .kind = .IdRef, .quantifier = .required },
3623 .{ .kind = .IdRef, .quantifier = .required },
3624 },
3625 .OpRetainEvent => &[_]Operand{
3626 .{ .kind = .IdRef, .quantifier = .required },
3627 },
3628 .OpReleaseEvent => &[_]Operand{
3629 .{ .kind = .IdRef, .quantifier = .required },
3630 },
3631 .OpCreateUserEvent => &[_]Operand{
3632 .{ .kind = .IdResultType, .quantifier = .required },
3633 .{ .kind = .IdResult, .quantifier = .required },
3634 },
3635 .OpIsValidEvent => &[_]Operand{
3636 .{ .kind = .IdResultType, .quantifier = .required },
3637 .{ .kind = .IdResult, .quantifier = .required },
3638 .{ .kind = .IdRef, .quantifier = .required },
3639 },
3640 .OpSetUserEventStatus => &[_]Operand{
3641 .{ .kind = .IdRef, .quantifier = .required },
3642 .{ .kind = .IdRef, .quantifier = .required },
3643 },
3644 .OpCaptureEventProfilingInfo => &[_]Operand{
3645 .{ .kind = .IdRef, .quantifier = .required },
3646 .{ .kind = .IdRef, .quantifier = .required },
3647 .{ .kind = .IdRef, .quantifier = .required },
3648 },
3649 .OpGetDefaultQueue => &[_]Operand{
3650 .{ .kind = .IdResultType, .quantifier = .required },
3651 .{ .kind = .IdResult, .quantifier = .required },
3652 },
3653 .OpBuildNDRange => &[_]Operand{
3654 .{ .kind = .IdResultType, .quantifier = .required },
3655 .{ .kind = .IdResult, .quantifier = .required },
3656 .{ .kind = .IdRef, .quantifier = .required },
3657 .{ .kind = .IdRef, .quantifier = .required },
3658 .{ .kind = .IdRef, .quantifier = .required },
3659 },
3660 .OpImageSparseSampleImplicitLod => &[_]Operand{
3661 .{ .kind = .IdResultType, .quantifier = .required },
3662 .{ .kind = .IdResult, .quantifier = .required },
3663 .{ .kind = .IdRef, .quantifier = .required },
3664 .{ .kind = .IdRef, .quantifier = .required },
3665 .{ .kind = .ImageOperands, .quantifier = .optional },
3666 },
3667 .OpImageSparseSampleExplicitLod => &[_]Operand{
3668 .{ .kind = .IdResultType, .quantifier = .required },
3669 .{ .kind = .IdResult, .quantifier = .required },
3670 .{ .kind = .IdRef, .quantifier = .required },
3671 .{ .kind = .IdRef, .quantifier = .required },
3672 .{ .kind = .ImageOperands, .quantifier = .required },
3673 },
3674 .OpImageSparseSampleDrefImplicitLod => &[_]Operand{
3675 .{ .kind = .IdResultType, .quantifier = .required },
3676 .{ .kind = .IdResult, .quantifier = .required },
3677 .{ .kind = .IdRef, .quantifier = .required },
3678 .{ .kind = .IdRef, .quantifier = .required },
3679 .{ .kind = .IdRef, .quantifier = .required },
3680 .{ .kind = .ImageOperands, .quantifier = .optional },
3681 },
3682 .OpImageSparseSampleDrefExplicitLod => &[_]Operand{
3683 .{ .kind = .IdResultType, .quantifier = .required },
3684 .{ .kind = .IdResult, .quantifier = .required },
3685 .{ .kind = .IdRef, .quantifier = .required },
3686 .{ .kind = .IdRef, .quantifier = .required },
3687 .{ .kind = .IdRef, .quantifier = .required },
3688 .{ .kind = .ImageOperands, .quantifier = .required },
3689 },
3690 .OpImageSparseSampleProjImplicitLod => &[_]Operand{
3691 .{ .kind = .IdResultType, .quantifier = .required },
3692 .{ .kind = .IdResult, .quantifier = .required },
3693 .{ .kind = .IdRef, .quantifier = .required },
3694 .{ .kind = .IdRef, .quantifier = .required },
3695 .{ .kind = .ImageOperands, .quantifier = .optional },
3696 },
3697 .OpImageSparseSampleProjExplicitLod => &[_]Operand{
3698 .{ .kind = .IdResultType, .quantifier = .required },
3699 .{ .kind = .IdResult, .quantifier = .required },
3700 .{ .kind = .IdRef, .quantifier = .required },
3701 .{ .kind = .IdRef, .quantifier = .required },
3702 .{ .kind = .ImageOperands, .quantifier = .required },
3703 },
3704 .OpImageSparseSampleProjDrefImplicitLod => &[_]Operand{
3705 .{ .kind = .IdResultType, .quantifier = .required },
3706 .{ .kind = .IdResult, .quantifier = .required },
3707 .{ .kind = .IdRef, .quantifier = .required },
3708 .{ .kind = .IdRef, .quantifier = .required },
3709 .{ .kind = .IdRef, .quantifier = .required },
3710 .{ .kind = .ImageOperands, .quantifier = .optional },
3711 },
3712 .OpImageSparseSampleProjDrefExplicitLod => &[_]Operand{
3713 .{ .kind = .IdResultType, .quantifier = .required },
3714 .{ .kind = .IdResult, .quantifier = .required },
3715 .{ .kind = .IdRef, .quantifier = .required },
3716 .{ .kind = .IdRef, .quantifier = .required },
3717 .{ .kind = .IdRef, .quantifier = .required },
3718 .{ .kind = .ImageOperands, .quantifier = .required },
3719 },
3720 .OpImageSparseFetch => &[_]Operand{
3721 .{ .kind = .IdResultType, .quantifier = .required },
3722 .{ .kind = .IdResult, .quantifier = .required },
3723 .{ .kind = .IdRef, .quantifier = .required },
3724 .{ .kind = .IdRef, .quantifier = .required },
3725 .{ .kind = .ImageOperands, .quantifier = .optional },
3726 },
3727 .OpImageSparseGather => &[_]Operand{
3728 .{ .kind = .IdResultType, .quantifier = .required },
3729 .{ .kind = .IdResult, .quantifier = .required },
3730 .{ .kind = .IdRef, .quantifier = .required },
3731 .{ .kind = .IdRef, .quantifier = .required },
3732 .{ .kind = .IdRef, .quantifier = .required },
3733 .{ .kind = .ImageOperands, .quantifier = .optional },
3734 },
3735 .OpImageSparseDrefGather => &[_]Operand{
3736 .{ .kind = .IdResultType, .quantifier = .required },
3737 .{ .kind = .IdResult, .quantifier = .required },
3738 .{ .kind = .IdRef, .quantifier = .required },
3739 .{ .kind = .IdRef, .quantifier = .required },
3740 .{ .kind = .IdRef, .quantifier = .required },
3741 .{ .kind = .ImageOperands, .quantifier = .optional },
3742 },
3743 .OpImageSparseTexelsResident => &[_]Operand{
3744 .{ .kind = .IdResultType, .quantifier = .required },
3745 .{ .kind = .IdResult, .quantifier = .required },
3746 .{ .kind = .IdRef, .quantifier = .required },
3747 },
3748 .OpNoLine => &[_]Operand{},
3749 .OpAtomicFlagTestAndSet => &[_]Operand{
3750 .{ .kind = .IdResultType, .quantifier = .required },
3751 .{ .kind = .IdResult, .quantifier = .required },
3752 .{ .kind = .IdRef, .quantifier = .required },
3753 .{ .kind = .IdScope, .quantifier = .required },
3754 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3755 },
3756 .OpAtomicFlagClear => &[_]Operand{
3757 .{ .kind = .IdRef, .quantifier = .required },
3758 .{ .kind = .IdScope, .quantifier = .required },
3759 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3760 },
3761 .OpImageSparseRead => &[_]Operand{
3762 .{ .kind = .IdResultType, .quantifier = .required },
3763 .{ .kind = .IdResult, .quantifier = .required },
3764 .{ .kind = .IdRef, .quantifier = .required },
3765 .{ .kind = .IdRef, .quantifier = .required },
3766 .{ .kind = .ImageOperands, .quantifier = .optional },
3767 },
3768 .OpSizeOf => &[_]Operand{
3769 .{ .kind = .IdResultType, .quantifier = .required },
3770 .{ .kind = .IdResult, .quantifier = .required },
3771 .{ .kind = .IdRef, .quantifier = .required },
3772 },
3773 .OpTypePipeStorage => &[_]Operand{
3774 .{ .kind = .IdResult, .quantifier = .required },
3775 },
3776 .OpConstantPipeStorage => &[_]Operand{
3777 .{ .kind = .IdResultType, .quantifier = .required },
3778 .{ .kind = .IdResult, .quantifier = .required },
3779 .{ .kind = .LiteralInteger, .quantifier = .required },
3780 .{ .kind = .LiteralInteger, .quantifier = .required },
3781 .{ .kind = .LiteralInteger, .quantifier = .required },
3782 },
3783 .OpCreatePipeFromPipeStorage => &[_]Operand{
3784 .{ .kind = .IdResultType, .quantifier = .required },
3785 .{ .kind = .IdResult, .quantifier = .required },
3786 .{ .kind = .IdRef, .quantifier = .required },
3787 },
3788 .OpGetKernelLocalSizeForSubgroupCount => &[_]Operand{
3789 .{ .kind = .IdResultType, .quantifier = .required },
3790 .{ .kind = .IdResult, .quantifier = .required },
3791 .{ .kind = .IdRef, .quantifier = .required },
3792 .{ .kind = .IdRef, .quantifier = .required },
3793 .{ .kind = .IdRef, .quantifier = .required },
3794 .{ .kind = .IdRef, .quantifier = .required },
3795 .{ .kind = .IdRef, .quantifier = .required },
3796 },
3797 .OpGetKernelMaxNumSubgroups => &[_]Operand{
3798 .{ .kind = .IdResultType, .quantifier = .required },
3799 .{ .kind = .IdResult, .quantifier = .required },
3800 .{ .kind = .IdRef, .quantifier = .required },
3801 .{ .kind = .IdRef, .quantifier = .required },
3802 .{ .kind = .IdRef, .quantifier = .required },
3803 .{ .kind = .IdRef, .quantifier = .required },
3804 },
3805 .OpTypeNamedBarrier => &[_]Operand{
3806 .{ .kind = .IdResult, .quantifier = .required },
3807 },
3808 .OpNamedBarrierInitialize => &[_]Operand{
3809 .{ .kind = .IdResultType, .quantifier = .required },
3810 .{ .kind = .IdResult, .quantifier = .required },
3811 .{ .kind = .IdRef, .quantifier = .required },
3812 },
3813 .OpMemoryNamedBarrier => &[_]Operand{
3814 .{ .kind = .IdRef, .quantifier = .required },
3815 .{ .kind = .IdScope, .quantifier = .required },
3816 .{ .kind = .IdMemorySemantics, .quantifier = .required },
3817 },
3818 .OpModuleProcessed => &[_]Operand{
3819 .{ .kind = .LiteralString, .quantifier = .required },
3820 },
3821 .OpExecutionModeId => &[_]Operand{
3822 .{ .kind = .IdRef, .quantifier = .required },
3823 .{ .kind = .ExecutionMode, .quantifier = .required },
3824 },
3825 .OpDecorateId => &[_]Operand{
3826 .{ .kind = .IdRef, .quantifier = .required },
3827 .{ .kind = .Decoration, .quantifier = .required },
3828 },
3829 .OpGroupNonUniformElect => &[_]Operand{
3830 .{ .kind = .IdResultType, .quantifier = .required },
3831 .{ .kind = .IdResult, .quantifier = .required },
3832 .{ .kind = .IdScope, .quantifier = .required },
3833 },
3834 .OpGroupNonUniformAll => &[_]Operand{
3835 .{ .kind = .IdResultType, .quantifier = .required },
3836 .{ .kind = .IdResult, .quantifier = .required },
3837 .{ .kind = .IdScope, .quantifier = .required },
3838 .{ .kind = .IdRef, .quantifier = .required },
3839 },
3840 .OpGroupNonUniformAny => &[_]Operand{
3841 .{ .kind = .IdResultType, .quantifier = .required },
3842 .{ .kind = .IdResult, .quantifier = .required },
3843 .{ .kind = .IdScope, .quantifier = .required },
3844 .{ .kind = .IdRef, .quantifier = .required },
3845 },
3846 .OpGroupNonUniformAllEqual => &[_]Operand{
3847 .{ .kind = .IdResultType, .quantifier = .required },
3848 .{ .kind = .IdResult, .quantifier = .required },
3849 .{ .kind = .IdScope, .quantifier = .required },
3850 .{ .kind = .IdRef, .quantifier = .required },
3851 },
3852 .OpGroupNonUniformBroadcast => &[_]Operand{
3853 .{ .kind = .IdResultType, .quantifier = .required },
3854 .{ .kind = .IdResult, .quantifier = .required },
3855 .{ .kind = .IdScope, .quantifier = .required },
3856 .{ .kind = .IdRef, .quantifier = .required },
3857 .{ .kind = .IdRef, .quantifier = .required },
3858 },
3859 .OpGroupNonUniformBroadcastFirst => &[_]Operand{
3860 .{ .kind = .IdResultType, .quantifier = .required },
3861 .{ .kind = .IdResult, .quantifier = .required },
3862 .{ .kind = .IdScope, .quantifier = .required },
3863 .{ .kind = .IdRef, .quantifier = .required },
3864 },
3865 .OpGroupNonUniformBallot => &[_]Operand{
3866 .{ .kind = .IdResultType, .quantifier = .required },
3867 .{ .kind = .IdResult, .quantifier = .required },
3868 .{ .kind = .IdScope, .quantifier = .required },
3869 .{ .kind = .IdRef, .quantifier = .required },
3870 },
3871 .OpGroupNonUniformInverseBallot => &[_]Operand{
3872 .{ .kind = .IdResultType, .quantifier = .required },
3873 .{ .kind = .IdResult, .quantifier = .required },
3874 .{ .kind = .IdScope, .quantifier = .required },
3875 .{ .kind = .IdRef, .quantifier = .required },
3876 },
3877 .OpGroupNonUniformBallotBitExtract => &[_]Operand{
3878 .{ .kind = .IdResultType, .quantifier = .required },
3879 .{ .kind = .IdResult, .quantifier = .required },
3880 .{ .kind = .IdScope, .quantifier = .required },
3881 .{ .kind = .IdRef, .quantifier = .required },
3882 .{ .kind = .IdRef, .quantifier = .required },
3883 },
3884 .OpGroupNonUniformBallotBitCount => &[_]Operand{
3885 .{ .kind = .IdResultType, .quantifier = .required },
3886 .{ .kind = .IdResult, .quantifier = .required },
3887 .{ .kind = .IdScope, .quantifier = .required },
3888 .{ .kind = .GroupOperation, .quantifier = .required },
3889 .{ .kind = .IdRef, .quantifier = .required },
3890 },
3891 .OpGroupNonUniformBallotFindLSB => &[_]Operand{
3892 .{ .kind = .IdResultType, .quantifier = .required },
3893 .{ .kind = .IdResult, .quantifier = .required },
3894 .{ .kind = .IdScope, .quantifier = .required },
3895 .{ .kind = .IdRef, .quantifier = .required },
3896 },
3897 .OpGroupNonUniformBallotFindMSB => &[_]Operand{
3898 .{ .kind = .IdResultType, .quantifier = .required },
3899 .{ .kind = .IdResult, .quantifier = .required },
3900 .{ .kind = .IdScope, .quantifier = .required },
3901 .{ .kind = .IdRef, .quantifier = .required },
3902 },
3903 .OpGroupNonUniformShuffle => &[_]Operand{
3904 .{ .kind = .IdResultType, .quantifier = .required },
3905 .{ .kind = .IdResult, .quantifier = .required },
3906 .{ .kind = .IdScope, .quantifier = .required },
3907 .{ .kind = .IdRef, .quantifier = .required },
3908 .{ .kind = .IdRef, .quantifier = .required },
3909 },
3910 .OpGroupNonUniformShuffleXor => &[_]Operand{
3911 .{ .kind = .IdResultType, .quantifier = .required },
3912 .{ .kind = .IdResult, .quantifier = .required },
3913 .{ .kind = .IdScope, .quantifier = .required },
3914 .{ .kind = .IdRef, .quantifier = .required },
3915 .{ .kind = .IdRef, .quantifier = .required },
3916 },
3917 .OpGroupNonUniformShuffleUp => &[_]Operand{
3918 .{ .kind = .IdResultType, .quantifier = .required },
3919 .{ .kind = .IdResult, .quantifier = .required },
3920 .{ .kind = .IdScope, .quantifier = .required },
3921 .{ .kind = .IdRef, .quantifier = .required },
3922 .{ .kind = .IdRef, .quantifier = .required },
3923 },
3924 .OpGroupNonUniformShuffleDown => &[_]Operand{
3925 .{ .kind = .IdResultType, .quantifier = .required },
3926 .{ .kind = .IdResult, .quantifier = .required },
3927 .{ .kind = .IdScope, .quantifier = .required },
3928 .{ .kind = .IdRef, .quantifier = .required },
3929 .{ .kind = .IdRef, .quantifier = .required },
3930 },
3931 .OpGroupNonUniformIAdd => &[_]Operand{
3932 .{ .kind = .IdResultType, .quantifier = .required },
3933 .{ .kind = .IdResult, .quantifier = .required },
3934 .{ .kind = .IdScope, .quantifier = .required },
3935 .{ .kind = .GroupOperation, .quantifier = .required },
3936 .{ .kind = .IdRef, .quantifier = .required },
3937 .{ .kind = .IdRef, .quantifier = .optional },
3938 },
3939 .OpGroupNonUniformFAdd => &[_]Operand{
3940 .{ .kind = .IdResultType, .quantifier = .required },
3941 .{ .kind = .IdResult, .quantifier = .required },
3942 .{ .kind = .IdScope, .quantifier = .required },
3943 .{ .kind = .GroupOperation, .quantifier = .required },
3944 .{ .kind = .IdRef, .quantifier = .required },
3945 .{ .kind = .IdRef, .quantifier = .optional },
3946 },
3947 .OpGroupNonUniformIMul => &[_]Operand{
3948 .{ .kind = .IdResultType, .quantifier = .required },
3949 .{ .kind = .IdResult, .quantifier = .required },
3950 .{ .kind = .IdScope, .quantifier = .required },
3951 .{ .kind = .GroupOperation, .quantifier = .required },
3952 .{ .kind = .IdRef, .quantifier = .required },
3953 .{ .kind = .IdRef, .quantifier = .optional },
3954 },
3955 .OpGroupNonUniformFMul => &[_]Operand{
3956 .{ .kind = .IdResultType, .quantifier = .required },
3957 .{ .kind = .IdResult, .quantifier = .required },
3958 .{ .kind = .IdScope, .quantifier = .required },
3959 .{ .kind = .GroupOperation, .quantifier = .required },
3960 .{ .kind = .IdRef, .quantifier = .required },
3961 .{ .kind = .IdRef, .quantifier = .optional },
3962 },
3963 .OpGroupNonUniformSMin => &[_]Operand{
3964 .{ .kind = .IdResultType, .quantifier = .required },
3965 .{ .kind = .IdResult, .quantifier = .required },
3966 .{ .kind = .IdScope, .quantifier = .required },
3967 .{ .kind = .GroupOperation, .quantifier = .required },
3968 .{ .kind = .IdRef, .quantifier = .required },
3969 .{ .kind = .IdRef, .quantifier = .optional },
3970 },
3971 .OpGroupNonUniformUMin => &[_]Operand{
3972 .{ .kind = .IdResultType, .quantifier = .required },
3973 .{ .kind = .IdResult, .quantifier = .required },
3974 .{ .kind = .IdScope, .quantifier = .required },
3975 .{ .kind = .GroupOperation, .quantifier = .required },
3976 .{ .kind = .IdRef, .quantifier = .required },
3977 .{ .kind = .IdRef, .quantifier = .optional },
3978 },
3979 .OpGroupNonUniformFMin => &[_]Operand{
3980 .{ .kind = .IdResultType, .quantifier = .required },
3981 .{ .kind = .IdResult, .quantifier = .required },
3982 .{ .kind = .IdScope, .quantifier = .required },
3983 .{ .kind = .GroupOperation, .quantifier = .required },
3984 .{ .kind = .IdRef, .quantifier = .required },
3985 .{ .kind = .IdRef, .quantifier = .optional },
3986 },
3987 .OpGroupNonUniformSMax => &[_]Operand{
3988 .{ .kind = .IdResultType, .quantifier = .required },
3989 .{ .kind = .IdResult, .quantifier = .required },
3990 .{ .kind = .IdScope, .quantifier = .required },
3991 .{ .kind = .GroupOperation, .quantifier = .required },
3992 .{ .kind = .IdRef, .quantifier = .required },
3993 .{ .kind = .IdRef, .quantifier = .optional },
3994 },
3995 .OpGroupNonUniformUMax => &[_]Operand{
3996 .{ .kind = .IdResultType, .quantifier = .required },
3997 .{ .kind = .IdResult, .quantifier = .required },
3998 .{ .kind = .IdScope, .quantifier = .required },
3999 .{ .kind = .GroupOperation, .quantifier = .required },
4000 .{ .kind = .IdRef, .quantifier = .required },
4001 .{ .kind = .IdRef, .quantifier = .optional },
4002 },
4003 .OpGroupNonUniformFMax => &[_]Operand{
4004 .{ .kind = .IdResultType, .quantifier = .required },
4005 .{ .kind = .IdResult, .quantifier = .required },
4006 .{ .kind = .IdScope, .quantifier = .required },
4007 .{ .kind = .GroupOperation, .quantifier = .required },
4008 .{ .kind = .IdRef, .quantifier = .required },
4009 .{ .kind = .IdRef, .quantifier = .optional },
4010 },
4011 .OpGroupNonUniformBitwiseAnd => &[_]Operand{
4012 .{ .kind = .IdResultType, .quantifier = .required },
4013 .{ .kind = .IdResult, .quantifier = .required },
4014 .{ .kind = .IdScope, .quantifier = .required },
4015 .{ .kind = .GroupOperation, .quantifier = .required },
4016 .{ .kind = .IdRef, .quantifier = .required },
4017 .{ .kind = .IdRef, .quantifier = .optional },
4018 },
4019 .OpGroupNonUniformBitwiseOr => &[_]Operand{
4020 .{ .kind = .IdResultType, .quantifier = .required },
4021 .{ .kind = .IdResult, .quantifier = .required },
4022 .{ .kind = .IdScope, .quantifier = .required },
4023 .{ .kind = .GroupOperation, .quantifier = .required },
4024 .{ .kind = .IdRef, .quantifier = .required },
4025 .{ .kind = .IdRef, .quantifier = .optional },
4026 },
4027 .OpGroupNonUniformBitwiseXor => &[_]Operand{
4028 .{ .kind = .IdResultType, .quantifier = .required },
4029 .{ .kind = .IdResult, .quantifier = .required },
4030 .{ .kind = .IdScope, .quantifier = .required },
4031 .{ .kind = .GroupOperation, .quantifier = .required },
4032 .{ .kind = .IdRef, .quantifier = .required },
4033 .{ .kind = .IdRef, .quantifier = .optional },
4034 },
4035 .OpGroupNonUniformLogicalAnd => &[_]Operand{
4036 .{ .kind = .IdResultType, .quantifier = .required },
4037 .{ .kind = .IdResult, .quantifier = .required },
4038 .{ .kind = .IdScope, .quantifier = .required },
4039 .{ .kind = .GroupOperation, .quantifier = .required },
4040 .{ .kind = .IdRef, .quantifier = .required },
4041 .{ .kind = .IdRef, .quantifier = .optional },
4042 },
4043 .OpGroupNonUniformLogicalOr => &[_]Operand{
4044 .{ .kind = .IdResultType, .quantifier = .required },
4045 .{ .kind = .IdResult, .quantifier = .required },
4046 .{ .kind = .IdScope, .quantifier = .required },
4047 .{ .kind = .GroupOperation, .quantifier = .required },
4048 .{ .kind = .IdRef, .quantifier = .required },
4049 .{ .kind = .IdRef, .quantifier = .optional },
4050 },
4051 .OpGroupNonUniformLogicalXor => &[_]Operand{
4052 .{ .kind = .IdResultType, .quantifier = .required },
4053 .{ .kind = .IdResult, .quantifier = .required },
4054 .{ .kind = .IdScope, .quantifier = .required },
4055 .{ .kind = .GroupOperation, .quantifier = .required },
4056 .{ .kind = .IdRef, .quantifier = .required },
4057 .{ .kind = .IdRef, .quantifier = .optional },
4058 },
4059 .OpGroupNonUniformQuadBroadcast => &[_]Operand{
4060 .{ .kind = .IdResultType, .quantifier = .required },
4061 .{ .kind = .IdResult, .quantifier = .required },
4062 .{ .kind = .IdScope, .quantifier = .required },
4063 .{ .kind = .IdRef, .quantifier = .required },
4064 .{ .kind = .IdRef, .quantifier = .required },
4065 },
4066 .OpGroupNonUniformQuadSwap => &[_]Operand{
4067 .{ .kind = .IdResultType, .quantifier = .required },
4068 .{ .kind = .IdResult, .quantifier = .required },
4069 .{ .kind = .IdScope, .quantifier = .required },
4070 .{ .kind = .IdRef, .quantifier = .required },
4071 .{ .kind = .IdRef, .quantifier = .required },
4072 },
4073 .OpCopyLogical => &[_]Operand{
4074 .{ .kind = .IdResultType, .quantifier = .required },
4075 .{ .kind = .IdResult, .quantifier = .required },
4076 .{ .kind = .IdRef, .quantifier = .required },
4077 },
4078 .OpPtrEqual => &[_]Operand{
4079 .{ .kind = .IdResultType, .quantifier = .required },
4080 .{ .kind = .IdResult, .quantifier = .required },
4081 .{ .kind = .IdRef, .quantifier = .required },
4082 .{ .kind = .IdRef, .quantifier = .required },
4083 },
4084 .OpPtrNotEqual => &[_]Operand{
4085 .{ .kind = .IdResultType, .quantifier = .required },
4086 .{ .kind = .IdResult, .quantifier = .required },
4087 .{ .kind = .IdRef, .quantifier = .required },
4088 .{ .kind = .IdRef, .quantifier = .required },
4089 },
4090 .OpPtrDiff => &[_]Operand{
4091 .{ .kind = .IdResultType, .quantifier = .required },
4092 .{ .kind = .IdResult, .quantifier = .required },
4093 .{ .kind = .IdRef, .quantifier = .required },
4094 .{ .kind = .IdRef, .quantifier = .required },
4095 },
4096 .OpTerminateInvocation => &[_]Operand{},
4097 .OpSubgroupBallotKHR => &[_]Operand{
4098 .{ .kind = .IdResultType, .quantifier = .required },
4099 .{ .kind = .IdResult, .quantifier = .required },
4100 .{ .kind = .IdRef, .quantifier = .required },
4101 },
4102 .OpSubgroupFirstInvocationKHR => &[_]Operand{
4103 .{ .kind = .IdResultType, .quantifier = .required },
4104 .{ .kind = .IdResult, .quantifier = .required },
4105 .{ .kind = .IdRef, .quantifier = .required },
4106 },
4107 .OpSubgroupAllKHR => &[_]Operand{
4108 .{ .kind = .IdResultType, .quantifier = .required },
4109 .{ .kind = .IdResult, .quantifier = .required },
4110 .{ .kind = .IdRef, .quantifier = .required },
4111 },
4112 .OpSubgroupAnyKHR => &[_]Operand{
4113 .{ .kind = .IdResultType, .quantifier = .required },
4114 .{ .kind = .IdResult, .quantifier = .required },
4115 .{ .kind = .IdRef, .quantifier = .required },
4116 },
4117 .OpSubgroupAllEqualKHR => &[_]Operand{
4118 .{ .kind = .IdResultType, .quantifier = .required },
4119 .{ .kind = .IdResult, .quantifier = .required },
4120 .{ .kind = .IdRef, .quantifier = .required },
4121 },
4122 .OpSubgroupReadInvocationKHR => &[_]Operand{
4123 .{ .kind = .IdResultType, .quantifier = .required },
4124 .{ .kind = .IdResult, .quantifier = .required },
4125 .{ .kind = .IdRef, .quantifier = .required },
4126 .{ .kind = .IdRef, .quantifier = .required },
4127 },
4128 .OpTraceRayKHR => &[_]Operand{
4129 .{ .kind = .IdRef, .quantifier = .required },
4130 .{ .kind = .IdRef, .quantifier = .required },
4131 .{ .kind = .IdRef, .quantifier = .required },
4132 .{ .kind = .IdRef, .quantifier = .required },
4133 .{ .kind = .IdRef, .quantifier = .required },
4134 .{ .kind = .IdRef, .quantifier = .required },
4135 .{ .kind = .IdRef, .quantifier = .required },
4136 .{ .kind = .IdRef, .quantifier = .required },
4137 .{ .kind = .IdRef, .quantifier = .required },
4138 .{ .kind = .IdRef, .quantifier = .required },
4139 .{ .kind = .IdRef, .quantifier = .required },
4140 },
4141 .OpExecuteCallableKHR => &[_]Operand{
4142 .{ .kind = .IdRef, .quantifier = .required },
4143 .{ .kind = .IdRef, .quantifier = .required },
4144 },
4145 .OpConvertUToAccelerationStructureKHR => &[_]Operand{
4146 .{ .kind = .IdResultType, .quantifier = .required },
4147 .{ .kind = .IdResult, .quantifier = .required },
4148 .{ .kind = .IdRef, .quantifier = .required },
4149 },
4150 .OpIgnoreIntersectionKHR => &[_]Operand{},
4151 .OpTerminateRayKHR => &[_]Operand{},
4152 .OpSDot => &[_]Operand{
4153 .{ .kind = .IdResultType, .quantifier = .required },
4154 .{ .kind = .IdResult, .quantifier = .required },
4155 .{ .kind = .IdRef, .quantifier = .required },
4156 .{ .kind = .IdRef, .quantifier = .required },
4157 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
4158 },
4159 .OpUDot => &[_]Operand{
4160 .{ .kind = .IdResultType, .quantifier = .required },
4161 .{ .kind = .IdResult, .quantifier = .required },
4162 .{ .kind = .IdRef, .quantifier = .required },
4163 .{ .kind = .IdRef, .quantifier = .required },
4164 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
4165 },
4166 .OpSUDot => &[_]Operand{
4167 .{ .kind = .IdResultType, .quantifier = .required },
4168 .{ .kind = .IdResult, .quantifier = .required },
4169 .{ .kind = .IdRef, .quantifier = .required },
4170 .{ .kind = .IdRef, .quantifier = .required },
4171 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
4172 },
4173 .OpSDotAccSat => &[_]Operand{
4174 .{ .kind = .IdResultType, .quantifier = .required },
4175 .{ .kind = .IdResult, .quantifier = .required },
4176 .{ .kind = .IdRef, .quantifier = .required },
4177 .{ .kind = .IdRef, .quantifier = .required },
4178 .{ .kind = .IdRef, .quantifier = .required },
4179 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
4180 },
4181 .OpUDotAccSat => &[_]Operand{
4182 .{ .kind = .IdResultType, .quantifier = .required },
4183 .{ .kind = .IdResult, .quantifier = .required },
4184 .{ .kind = .IdRef, .quantifier = .required },
4185 .{ .kind = .IdRef, .quantifier = .required },
4186 .{ .kind = .IdRef, .quantifier = .required },
4187 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
4188 },
4189 .OpSUDotAccSat => &[_]Operand{
4190 .{ .kind = .IdResultType, .quantifier = .required },
4191 .{ .kind = .IdResult, .quantifier = .required },
4192 .{ .kind = .IdRef, .quantifier = .required },
4193 .{ .kind = .IdRef, .quantifier = .required },
4194 .{ .kind = .IdRef, .quantifier = .required },
4195 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
4196 },
4197 .OpTypeRayQueryKHR => &[_]Operand{
4198 .{ .kind = .IdResult, .quantifier = .required },
4199 },
4200 .OpRayQueryInitializeKHR => &[_]Operand{
4201 .{ .kind = .IdRef, .quantifier = .required },
4202 .{ .kind = .IdRef, .quantifier = .required },
4203 .{ .kind = .IdRef, .quantifier = .required },
4204 .{ .kind = .IdRef, .quantifier = .required },
4205 .{ .kind = .IdRef, .quantifier = .required },
4206 .{ .kind = .IdRef, .quantifier = .required },
4207 .{ .kind = .IdRef, .quantifier = .required },
4208 .{ .kind = .IdRef, .quantifier = .required },
4209 },
4210 .OpRayQueryTerminateKHR => &[_]Operand{
4211 .{ .kind = .IdRef, .quantifier = .required },
4212 },
4213 .OpRayQueryGenerateIntersectionKHR => &[_]Operand{
4214 .{ .kind = .IdRef, .quantifier = .required },
4215 .{ .kind = .IdRef, .quantifier = .required },
4216 },
4217 .OpRayQueryConfirmIntersectionKHR => &[_]Operand{
4218 .{ .kind = .IdRef, .quantifier = .required },
4219 },
4220 .OpRayQueryProceedKHR => &[_]Operand{
4221 .{ .kind = .IdResultType, .quantifier = .required },
4222 .{ .kind = .IdResult, .quantifier = .required },
4223 .{ .kind = .IdRef, .quantifier = .required },
4224 },
4225 .OpRayQueryGetIntersectionTypeKHR => &[_]Operand{
4226 .{ .kind = .IdResultType, .quantifier = .required },
4227 .{ .kind = .IdResult, .quantifier = .required },
4228 .{ .kind = .IdRef, .quantifier = .required },
4229 .{ .kind = .IdRef, .quantifier = .required },
4230 },
4231 .OpGroupIAddNonUniformAMD => &[_]Operand{
4232 .{ .kind = .IdResultType, .quantifier = .required },
4233 .{ .kind = .IdResult, .quantifier = .required },
4234 .{ .kind = .IdScope, .quantifier = .required },
4235 .{ .kind = .GroupOperation, .quantifier = .required },
4236 .{ .kind = .IdRef, .quantifier = .required },
4237 },
4238 .OpGroupFAddNonUniformAMD => &[_]Operand{
4239 .{ .kind = .IdResultType, .quantifier = .required },
4240 .{ .kind = .IdResult, .quantifier = .required },
4241 .{ .kind = .IdScope, .quantifier = .required },
4242 .{ .kind = .GroupOperation, .quantifier = .required },
4243 .{ .kind = .IdRef, .quantifier = .required },
4244 },
4245 .OpGroupFMinNonUniformAMD => &[_]Operand{
4246 .{ .kind = .IdResultType, .quantifier = .required },
4247 .{ .kind = .IdResult, .quantifier = .required },
4248 .{ .kind = .IdScope, .quantifier = .required },
4249 .{ .kind = .GroupOperation, .quantifier = .required },
4250 .{ .kind = .IdRef, .quantifier = .required },
4251 },
4252 .OpGroupUMinNonUniformAMD => &[_]Operand{
4253 .{ .kind = .IdResultType, .quantifier = .required },
4254 .{ .kind = .IdResult, .quantifier = .required },
4255 .{ .kind = .IdScope, .quantifier = .required },
4256 .{ .kind = .GroupOperation, .quantifier = .required },
4257 .{ .kind = .IdRef, .quantifier = .required },
4258 },
4259 .OpGroupSMinNonUniformAMD => &[_]Operand{
4260 .{ .kind = .IdResultType, .quantifier = .required },
4261 .{ .kind = .IdResult, .quantifier = .required },
4262 .{ .kind = .IdScope, .quantifier = .required },
4263 .{ .kind = .GroupOperation, .quantifier = .required },
4264 .{ .kind = .IdRef, .quantifier = .required },
4265 },
4266 .OpGroupFMaxNonUniformAMD => &[_]Operand{
4267 .{ .kind = .IdResultType, .quantifier = .required },
4268 .{ .kind = .IdResult, .quantifier = .required },
4269 .{ .kind = .IdScope, .quantifier = .required },
4270 .{ .kind = .GroupOperation, .quantifier = .required },
4271 .{ .kind = .IdRef, .quantifier = .required },
4272 },
4273 .OpGroupUMaxNonUniformAMD => &[_]Operand{
4274 .{ .kind = .IdResultType, .quantifier = .required },
4275 .{ .kind = .IdResult, .quantifier = .required },
4276 .{ .kind = .IdScope, .quantifier = .required },
4277 .{ .kind = .GroupOperation, .quantifier = .required },
4278 .{ .kind = .IdRef, .quantifier = .required },
4279 },
4280 .OpGroupSMaxNonUniformAMD => &[_]Operand{
4281 .{ .kind = .IdResultType, .quantifier = .required },
4282 .{ .kind = .IdResult, .quantifier = .required },
4283 .{ .kind = .IdScope, .quantifier = .required },
4284 .{ .kind = .GroupOperation, .quantifier = .required },
4285 .{ .kind = .IdRef, .quantifier = .required },
4286 },
4287 .OpFragmentMaskFetchAMD => &[_]Operand{
4288 .{ .kind = .IdResultType, .quantifier = .required },
4289 .{ .kind = .IdResult, .quantifier = .required },
4290 .{ .kind = .IdRef, .quantifier = .required },
4291 .{ .kind = .IdRef, .quantifier = .required },
4292 },
4293 .OpFragmentFetchAMD => &[_]Operand{
4294 .{ .kind = .IdResultType, .quantifier = .required },
4295 .{ .kind = .IdResult, .quantifier = .required },
4296 .{ .kind = .IdRef, .quantifier = .required },
4297 .{ .kind = .IdRef, .quantifier = .required },
4298 .{ .kind = .IdRef, .quantifier = .required },
4299 },
4300 .OpReadClockKHR => &[_]Operand{
4301 .{ .kind = .IdResultType, .quantifier = .required },
4302 .{ .kind = .IdResult, .quantifier = .required },
4303 .{ .kind = .IdScope, .quantifier = .required },
4304 },
4305 .OpImageSampleFootprintNV => &[_]Operand{
4306 .{ .kind = .IdResultType, .quantifier = .required },
4307 .{ .kind = .IdResult, .quantifier = .required },
4308 .{ .kind = .IdRef, .quantifier = .required },
4309 .{ .kind = .IdRef, .quantifier = .required },
4310 .{ .kind = .IdRef, .quantifier = .required },
4311 .{ .kind = .IdRef, .quantifier = .required },
4312 .{ .kind = .ImageOperands, .quantifier = .optional },
4313 },
4314 .OpGroupNonUniformPartitionNV => &[_]Operand{
4315 .{ .kind = .IdResultType, .quantifier = .required },
4316 .{ .kind = .IdResult, .quantifier = .required },
4317 .{ .kind = .IdRef, .quantifier = .required },
4318 },
4319 .OpWritePackedPrimitiveIndices4x8NV => &[_]Operand{
4320 .{ .kind = .IdRef, .quantifier = .required },
4321 .{ .kind = .IdRef, .quantifier = .required },
4322 },
4323 .OpReportIntersectionKHR => &[_]Operand{
4324 .{ .kind = .IdResultType, .quantifier = .required },
4325 .{ .kind = .IdResult, .quantifier = .required },
4326 .{ .kind = .IdRef, .quantifier = .required },
4327 .{ .kind = .IdRef, .quantifier = .required },
4328 },
4329 .OpIgnoreIntersectionNV => &[_]Operand{},
4330 .OpTerminateRayNV => &[_]Operand{},
4331 .OpTraceNV => &[_]Operand{
4332 .{ .kind = .IdRef, .quantifier = .required },
4333 .{ .kind = .IdRef, .quantifier = .required },
4334 .{ .kind = .IdRef, .quantifier = .required },
4335 .{ .kind = .IdRef, .quantifier = .required },
4336 .{ .kind = .IdRef, .quantifier = .required },
4337 .{ .kind = .IdRef, .quantifier = .required },
4338 .{ .kind = .IdRef, .quantifier = .required },
4339 .{ .kind = .IdRef, .quantifier = .required },
4340 .{ .kind = .IdRef, .quantifier = .required },
4341 .{ .kind = .IdRef, .quantifier = .required },
4342 .{ .kind = .IdRef, .quantifier = .required },
4343 },
4344 .OpTraceMotionNV => &[_]Operand{
4345 .{ .kind = .IdRef, .quantifier = .required },
4346 .{ .kind = .IdRef, .quantifier = .required },
4347 .{ .kind = .IdRef, .quantifier = .required },
4348 .{ .kind = .IdRef, .quantifier = .required },
4349 .{ .kind = .IdRef, .quantifier = .required },
4350 .{ .kind = .IdRef, .quantifier = .required },
4351 .{ .kind = .IdRef, .quantifier = .required },
4352 .{ .kind = .IdRef, .quantifier = .required },
4353 .{ .kind = .IdRef, .quantifier = .required },
4354 .{ .kind = .IdRef, .quantifier = .required },
4355 .{ .kind = .IdRef, .quantifier = .required },
4356 .{ .kind = .IdRef, .quantifier = .required },
4357 },
4358 .OpTraceRayMotionNV => &[_]Operand{
4359 .{ .kind = .IdRef, .quantifier = .required },
4360 .{ .kind = .IdRef, .quantifier = .required },
4361 .{ .kind = .IdRef, .quantifier = .required },
4362 .{ .kind = .IdRef, .quantifier = .required },
4363 .{ .kind = .IdRef, .quantifier = .required },
4364 .{ .kind = .IdRef, .quantifier = .required },
4365 .{ .kind = .IdRef, .quantifier = .required },
4366 .{ .kind = .IdRef, .quantifier = .required },
4367 .{ .kind = .IdRef, .quantifier = .required },
4368 .{ .kind = .IdRef, .quantifier = .required },
4369 .{ .kind = .IdRef, .quantifier = .required },
4370 .{ .kind = .IdRef, .quantifier = .required },
4371 },
4372 .OpTypeAccelerationStructureKHR => &[_]Operand{
4373 .{ .kind = .IdResult, .quantifier = .required },
4374 },
4375 .OpExecuteCallableNV => &[_]Operand{
4376 .{ .kind = .IdRef, .quantifier = .required },
4377 .{ .kind = .IdRef, .quantifier = .required },
4378 },
4379 .OpTypeCooperativeMatrixNV => &[_]Operand{
4380 .{ .kind = .IdResult, .quantifier = .required },
4381 .{ .kind = .IdRef, .quantifier = .required },
4382 .{ .kind = .IdScope, .quantifier = .required },
4383 .{ .kind = .IdRef, .quantifier = .required },
4384 .{ .kind = .IdRef, .quantifier = .required },
4385 },
4386 .OpCooperativeMatrixLoadNV => &[_]Operand{
4387 .{ .kind = .IdResultType, .quantifier = .required },
4388 .{ .kind = .IdResult, .quantifier = .required },
4389 .{ .kind = .IdRef, .quantifier = .required },
4390 .{ .kind = .IdRef, .quantifier = .required },
4391 .{ .kind = .IdRef, .quantifier = .required },
4392 .{ .kind = .MemoryAccess, .quantifier = .optional },
4393 },
4394 .OpCooperativeMatrixStoreNV => &[_]Operand{
4395 .{ .kind = .IdRef, .quantifier = .required },
4396 .{ .kind = .IdRef, .quantifier = .required },
4397 .{ .kind = .IdRef, .quantifier = .required },
4398 .{ .kind = .IdRef, .quantifier = .required },
4399 .{ .kind = .MemoryAccess, .quantifier = .optional },
4400 },
4401 .OpCooperativeMatrixMulAddNV => &[_]Operand{
4402 .{ .kind = .IdResultType, .quantifier = .required },
4403 .{ .kind = .IdResult, .quantifier = .required },
4404 .{ .kind = .IdRef, .quantifier = .required },
4405 .{ .kind = .IdRef, .quantifier = .required },
4406 .{ .kind = .IdRef, .quantifier = .required },
4407 },
4408 .OpCooperativeMatrixLengthNV => &[_]Operand{
4409 .{ .kind = .IdResultType, .quantifier = .required },
4410 .{ .kind = .IdResult, .quantifier = .required },
4411 .{ .kind = .IdRef, .quantifier = .required },
4412 },
4413 .OpBeginInvocationInterlockEXT => &[_]Operand{},
4414 .OpEndInvocationInterlockEXT => &[_]Operand{},
4415 .OpDemoteToHelperInvocation => &[_]Operand{},
4416 .OpIsHelperInvocationEXT => &[_]Operand{
4417 .{ .kind = .IdResultType, .quantifier = .required },
4418 .{ .kind = .IdResult, .quantifier = .required },
4419 },
4420 .OpConvertUToImageNV => &[_]Operand{
4421 .{ .kind = .IdResultType, .quantifier = .required },
4422 .{ .kind = .IdResult, .quantifier = .required },
4423 .{ .kind = .IdRef, .quantifier = .required },
4424 },
4425 .OpConvertUToSamplerNV => &[_]Operand{
4426 .{ .kind = .IdResultType, .quantifier = .required },
4427 .{ .kind = .IdResult, .quantifier = .required },
4428 .{ .kind = .IdRef, .quantifier = .required },
4429 },
4430 .OpConvertImageToUNV => &[_]Operand{
4431 .{ .kind = .IdResultType, .quantifier = .required },
4432 .{ .kind = .IdResult, .quantifier = .required },
4433 .{ .kind = .IdRef, .quantifier = .required },
4434 },
4435 .OpConvertSamplerToUNV => &[_]Operand{
4436 .{ .kind = .IdResultType, .quantifier = .required },
4437 .{ .kind = .IdResult, .quantifier = .required },
4438 .{ .kind = .IdRef, .quantifier = .required },
4439 },
4440 .OpConvertUToSampledImageNV => &[_]Operand{
4441 .{ .kind = .IdResultType, .quantifier = .required },
4442 .{ .kind = .IdResult, .quantifier = .required },
4443 .{ .kind = .IdRef, .quantifier = .required },
4444 },
4445 .OpConvertSampledImageToUNV => &[_]Operand{
4446 .{ .kind = .IdResultType, .quantifier = .required },
4447 .{ .kind = .IdResult, .quantifier = .required },
4448 .{ .kind = .IdRef, .quantifier = .required },
4449 },
4450 .OpSamplerImageAddressingModeNV => &[_]Operand{
4451 .{ .kind = .LiteralInteger, .quantifier = .required },
4452 },
4453 .OpSubgroupShuffleINTEL => &[_]Operand{
4454 .{ .kind = .IdResultType, .quantifier = .required },
4455 .{ .kind = .IdResult, .quantifier = .required },
4456 .{ .kind = .IdRef, .quantifier = .required },
4457 .{ .kind = .IdRef, .quantifier = .required },
4458 },
4459 .OpSubgroupShuffleDownINTEL => &[_]Operand{
4460 .{ .kind = .IdResultType, .quantifier = .required },
4461 .{ .kind = .IdResult, .quantifier = .required },
4462 .{ .kind = .IdRef, .quantifier = .required },
4463 .{ .kind = .IdRef, .quantifier = .required },
4464 .{ .kind = .IdRef, .quantifier = .required },
4465 },
4466 .OpSubgroupShuffleUpINTEL => &[_]Operand{
4467 .{ .kind = .IdResultType, .quantifier = .required },
4468 .{ .kind = .IdResult, .quantifier = .required },
4469 .{ .kind = .IdRef, .quantifier = .required },
4470 .{ .kind = .IdRef, .quantifier = .required },
4471 .{ .kind = .IdRef, .quantifier = .required },
4472 },
4473 .OpSubgroupShuffleXorINTEL => &[_]Operand{
4474 .{ .kind = .IdResultType, .quantifier = .required },
4475 .{ .kind = .IdResult, .quantifier = .required },
4476 .{ .kind = .IdRef, .quantifier = .required },
4477 .{ .kind = .IdRef, .quantifier = .required },
4478 },
4479 .OpSubgroupBlockReadINTEL => &[_]Operand{
4480 .{ .kind = .IdResultType, .quantifier = .required },
4481 .{ .kind = .IdResult, .quantifier = .required },
4482 .{ .kind = .IdRef, .quantifier = .required },
4483 },
4484 .OpSubgroupBlockWriteINTEL => &[_]Operand{
4485 .{ .kind = .IdRef, .quantifier = .required },
4486 .{ .kind = .IdRef, .quantifier = .required },
4487 },
4488 .OpSubgroupImageBlockReadINTEL => &[_]Operand{
4489 .{ .kind = .IdResultType, .quantifier = .required },
4490 .{ .kind = .IdResult, .quantifier = .required },
4491 .{ .kind = .IdRef, .quantifier = .required },
4492 .{ .kind = .IdRef, .quantifier = .required },
4493 },
4494 .OpSubgroupImageBlockWriteINTEL => &[_]Operand{
4495 .{ .kind = .IdRef, .quantifier = .required },
4496 .{ .kind = .IdRef, .quantifier = .required },
4497 .{ .kind = .IdRef, .quantifier = .required },
4498 },
4499 .OpSubgroupImageMediaBlockReadINTEL => &[_]Operand{
4500 .{ .kind = .IdResultType, .quantifier = .required },
4501 .{ .kind = .IdResult, .quantifier = .required },
4502 .{ .kind = .IdRef, .quantifier = .required },
4503 .{ .kind = .IdRef, .quantifier = .required },
4504 .{ .kind = .IdRef, .quantifier = .required },
4505 .{ .kind = .IdRef, .quantifier = .required },
4506 },
4507 .OpSubgroupImageMediaBlockWriteINTEL => &[_]Operand{
4508 .{ .kind = .IdRef, .quantifier = .required },
4509 .{ .kind = .IdRef, .quantifier = .required },
4510 .{ .kind = .IdRef, .quantifier = .required },
4511 .{ .kind = .IdRef, .quantifier = .required },
4512 .{ .kind = .IdRef, .quantifier = .required },
4513 },
4514 .OpUCountLeadingZerosINTEL => &[_]Operand{
4515 .{ .kind = .IdResultType, .quantifier = .required },
4516 .{ .kind = .IdResult, .quantifier = .required },
4517 .{ .kind = .IdRef, .quantifier = .required },
4518 },
4519 .OpUCountTrailingZerosINTEL => &[_]Operand{
4520 .{ .kind = .IdResultType, .quantifier = .required },
4521 .{ .kind = .IdResult, .quantifier = .required },
4522 .{ .kind = .IdRef, .quantifier = .required },
4523 },
4524 .OpAbsISubINTEL => &[_]Operand{
4525 .{ .kind = .IdResultType, .quantifier = .required },
4526 .{ .kind = .IdResult, .quantifier = .required },
4527 .{ .kind = .IdRef, .quantifier = .required },
4528 .{ .kind = .IdRef, .quantifier = .required },
4529 },
4530 .OpAbsUSubINTEL => &[_]Operand{
4531 .{ .kind = .IdResultType, .quantifier = .required },
4532 .{ .kind = .IdResult, .quantifier = .required },
4533 .{ .kind = .IdRef, .quantifier = .required },
4534 .{ .kind = .IdRef, .quantifier = .required },
4535 },
4536 .OpIAddSatINTEL => &[_]Operand{
4537 .{ .kind = .IdResultType, .quantifier = .required },
4538 .{ .kind = .IdResult, .quantifier = .required },
4539 .{ .kind = .IdRef, .quantifier = .required },
4540 .{ .kind = .IdRef, .quantifier = .required },
4541 },
4542 .OpUAddSatINTEL => &[_]Operand{
4543 .{ .kind = .IdResultType, .quantifier = .required },
4544 .{ .kind = .IdResult, .quantifier = .required },
4545 .{ .kind = .IdRef, .quantifier = .required },
4546 .{ .kind = .IdRef, .quantifier = .required },
4547 },
4548 .OpIAverageINTEL => &[_]Operand{
4549 .{ .kind = .IdResultType, .quantifier = .required },
4550 .{ .kind = .IdResult, .quantifier = .required },
4551 .{ .kind = .IdRef, .quantifier = .required },
4552 .{ .kind = .IdRef, .quantifier = .required },
4553 },
4554 .OpUAverageINTEL => &[_]Operand{
4555 .{ .kind = .IdResultType, .quantifier = .required },
4556 .{ .kind = .IdResult, .quantifier = .required },
4557 .{ .kind = .IdRef, .quantifier = .required },
4558 .{ .kind = .IdRef, .quantifier = .required },
4559 },
4560 .OpIAverageRoundedINTEL => &[_]Operand{
4561 .{ .kind = .IdResultType, .quantifier = .required },
4562 .{ .kind = .IdResult, .quantifier = .required },
4563 .{ .kind = .IdRef, .quantifier = .required },
4564 .{ .kind = .IdRef, .quantifier = .required },
4565 },
4566 .OpUAverageRoundedINTEL => &[_]Operand{
4567 .{ .kind = .IdResultType, .quantifier = .required },
4568 .{ .kind = .IdResult, .quantifier = .required },
4569 .{ .kind = .IdRef, .quantifier = .required },
4570 .{ .kind = .IdRef, .quantifier = .required },
4571 },
4572 .OpISubSatINTEL => &[_]Operand{
4573 .{ .kind = .IdResultType, .quantifier = .required },
4574 .{ .kind = .IdResult, .quantifier = .required },
4575 .{ .kind = .IdRef, .quantifier = .required },
4576 .{ .kind = .IdRef, .quantifier = .required },
4577 },
4578 .OpUSubSatINTEL => &[_]Operand{
4579 .{ .kind = .IdResultType, .quantifier = .required },
4580 .{ .kind = .IdResult, .quantifier = .required },
4581 .{ .kind = .IdRef, .quantifier = .required },
4582 .{ .kind = .IdRef, .quantifier = .required },
4583 },
4584 .OpIMul32x16INTEL => &[_]Operand{
4585 .{ .kind = .IdResultType, .quantifier = .required },
4586 .{ .kind = .IdResult, .quantifier = .required },
4587 .{ .kind = .IdRef, .quantifier = .required },
4588 .{ .kind = .IdRef, .quantifier = .required },
4589 },
4590 .OpUMul32x16INTEL => &[_]Operand{
4591 .{ .kind = .IdResultType, .quantifier = .required },
4592 .{ .kind = .IdResult, .quantifier = .required },
4593 .{ .kind = .IdRef, .quantifier = .required },
4594 .{ .kind = .IdRef, .quantifier = .required },
4595 },
4596 .OpAtomicFMinEXT => &[_]Operand{
4597 .{ .kind = .IdResultType, .quantifier = .required },
4598 .{ .kind = .IdResult, .quantifier = .required },
4599 .{ .kind = .IdRef, .quantifier = .required },
4600 .{ .kind = .IdScope, .quantifier = .required },
4601 .{ .kind = .IdMemorySemantics, .quantifier = .required },
4602 .{ .kind = .IdRef, .quantifier = .required },
4603 },
4604 .OpAtomicFMaxEXT => &[_]Operand{
4605 .{ .kind = .IdResultType, .quantifier = .required },
4606 .{ .kind = .IdResult, .quantifier = .required },
4607 .{ .kind = .IdRef, .quantifier = .required },
4608 .{ .kind = .IdScope, .quantifier = .required },
4609 .{ .kind = .IdMemorySemantics, .quantifier = .required },
4610 .{ .kind = .IdRef, .quantifier = .required },
4611 },
4612 .OpAssumeTrueKHR => &[_]Operand{
4613 .{ .kind = .IdRef, .quantifier = .required },
4614 },
4615 .OpExpectKHR => &[_]Operand{
4616 .{ .kind = .IdResultType, .quantifier = .required },
4617 .{ .kind = .IdResult, .quantifier = .required },
4618 .{ .kind = .IdRef, .quantifier = .required },
4619 .{ .kind = .IdRef, .quantifier = .required },
4620 },
4621 .OpDecorateString => &[_]Operand{
4622 .{ .kind = .IdRef, .quantifier = .required },
4623 .{ .kind = .Decoration, .quantifier = .required },
4624 },
4625 .OpMemberDecorateString => &[_]Operand{
4626 .{ .kind = .IdRef, .quantifier = .required },
4627 .{ .kind = .LiteralInteger, .quantifier = .required },
4628 .{ .kind = .Decoration, .quantifier = .required },
4629 },
4630 .OpLoopControlINTEL => &[_]Operand{
4631 .{ .kind = .LiteralInteger, .quantifier = .variadic },
4632 },
4633 .OpReadPipeBlockingINTEL => &[_]Operand{
4634 .{ .kind = .IdResultType, .quantifier = .required },
4635 .{ .kind = .IdResult, .quantifier = .required },
4636 .{ .kind = .IdRef, .quantifier = .required },
4637 .{ .kind = .IdRef, .quantifier = .required },
4638 },
4639 .OpWritePipeBlockingINTEL => &[_]Operand{
4640 .{ .kind = .IdResultType, .quantifier = .required },
4641 .{ .kind = .IdResult, .quantifier = .required },
4642 .{ .kind = .IdRef, .quantifier = .required },
4643 .{ .kind = .IdRef, .quantifier = .required },
4644 },
4645 .OpFPGARegINTEL => &[_]Operand{
4646 .{ .kind = .IdResultType, .quantifier = .required },
4647 .{ .kind = .IdResult, .quantifier = .required },
4648 .{ .kind = .IdRef, .quantifier = .required },
4649 .{ .kind = .IdRef, .quantifier = .required },
4650 },
4651 .OpRayQueryGetRayTMinKHR => &[_]Operand{
4652 .{ .kind = .IdResultType, .quantifier = .required },
4653 .{ .kind = .IdResult, .quantifier = .required },
4654 .{ .kind = .IdRef, .quantifier = .required },
4655 },
4656 .OpRayQueryGetRayFlagsKHR => &[_]Operand{
4657 .{ .kind = .IdResultType, .quantifier = .required },
4658 .{ .kind = .IdResult, .quantifier = .required },
4659 .{ .kind = .IdRef, .quantifier = .required },
4660 },
4661 .OpRayQueryGetIntersectionTKHR => &[_]Operand{
4662 .{ .kind = .IdResultType, .quantifier = .required },
4663 .{ .kind = .IdResult, .quantifier = .required },
4664 .{ .kind = .IdRef, .quantifier = .required },
4665 .{ .kind = .IdRef, .quantifier = .required },
4666 },
4667 .OpRayQueryGetIntersectionInstanceCustomIndexKHR => &[_]Operand{
4668 .{ .kind = .IdResultType, .quantifier = .required },
4669 .{ .kind = .IdResult, .quantifier = .required },
4670 .{ .kind = .IdRef, .quantifier = .required },
4671 .{ .kind = .IdRef, .quantifier = .required },
4672 },
4673 .OpRayQueryGetIntersectionInstanceIdKHR => &[_]Operand{
4674 .{ .kind = .IdResultType, .quantifier = .required },
4675 .{ .kind = .IdResult, .quantifier = .required },
4676 .{ .kind = .IdRef, .quantifier = .required },
4677 .{ .kind = .IdRef, .quantifier = .required },
4678 },
4679 .OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR => &[_]Operand{
4680 .{ .kind = .IdResultType, .quantifier = .required },
4681 .{ .kind = .IdResult, .quantifier = .required },
4682 .{ .kind = .IdRef, .quantifier = .required },
4683 .{ .kind = .IdRef, .quantifier = .required },
4684 },
4685 .OpRayQueryGetIntersectionGeometryIndexKHR => &[_]Operand{
4686 .{ .kind = .IdResultType, .quantifier = .required },
4687 .{ .kind = .IdResult, .quantifier = .required },
4688 .{ .kind = .IdRef, .quantifier = .required },
4689 .{ .kind = .IdRef, .quantifier = .required },
4690 },
4691 .OpRayQueryGetIntersectionPrimitiveIndexKHR => &[_]Operand{
4692 .{ .kind = .IdResultType, .quantifier = .required },
4693 .{ .kind = .IdResult, .quantifier = .required },
4694 .{ .kind = .IdRef, .quantifier = .required },
4695 .{ .kind = .IdRef, .quantifier = .required },
4696 },
4697 .OpRayQueryGetIntersectionBarycentricsKHR => &[_]Operand{
4698 .{ .kind = .IdResultType, .quantifier = .required },
4699 .{ .kind = .IdResult, .quantifier = .required },
4700 .{ .kind = .IdRef, .quantifier = .required },
4701 .{ .kind = .IdRef, .quantifier = .required },
4702 },
4703 .OpRayQueryGetIntersectionFrontFaceKHR => &[_]Operand{
4704 .{ .kind = .IdResultType, .quantifier = .required },
4705 .{ .kind = .IdResult, .quantifier = .required },
4706 .{ .kind = .IdRef, .quantifier = .required },
4707 .{ .kind = .IdRef, .quantifier = .required },
4708 },
4709 .OpRayQueryGetIntersectionCandidateAABBOpaqueKHR => &[_]Operand{
4710 .{ .kind = .IdResultType, .quantifier = .required },
4711 .{ .kind = .IdResult, .quantifier = .required },
4712 .{ .kind = .IdRef, .quantifier = .required },
4713 },
4714 .OpRayQueryGetIntersectionObjectRayDirectionKHR => &[_]Operand{
4715 .{ .kind = .IdResultType, .quantifier = .required },
4716 .{ .kind = .IdResult, .quantifier = .required },
4717 .{ .kind = .IdRef, .quantifier = .required },
4718 .{ .kind = .IdRef, .quantifier = .required },
4719 },
4720 .OpRayQueryGetIntersectionObjectRayOriginKHR => &[_]Operand{
4721 .{ .kind = .IdResultType, .quantifier = .required },
4722 .{ .kind = .IdResult, .quantifier = .required },
4723 .{ .kind = .IdRef, .quantifier = .required },
4724 .{ .kind = .IdRef, .quantifier = .required },
4725 },
4726 .OpRayQueryGetWorldRayDirectionKHR => &[_]Operand{
4727 .{ .kind = .IdResultType, .quantifier = .required },
4728 .{ .kind = .IdResult, .quantifier = .required },
4729 .{ .kind = .IdRef, .quantifier = .required },
4730 },
4731 .OpRayQueryGetWorldRayOriginKHR => &[_]Operand{
4732 .{ .kind = .IdResultType, .quantifier = .required },
4733 .{ .kind = .IdResult, .quantifier = .required },
4734 .{ .kind = .IdRef, .quantifier = .required },
4735 },
4736 .OpRayQueryGetIntersectionObjectToWorldKHR => &[_]Operand{
4737 .{ .kind = .IdResultType, .quantifier = .required },
4738 .{ .kind = .IdResult, .quantifier = .required },
4739 .{ .kind = .IdRef, .quantifier = .required },
4740 .{ .kind = .IdRef, .quantifier = .required },
4741 },
4742 .OpRayQueryGetIntersectionWorldToObjectKHR => &[_]Operand{
4743 .{ .kind = .IdResultType, .quantifier = .required },
4744 .{ .kind = .IdResult, .quantifier = .required },
4745 .{ .kind = .IdRef, .quantifier = .required },
4746 .{ .kind = .IdRef, .quantifier = .required },
4747 },
4748 .OpAtomicFAddEXT => &[_]Operand{
4749 .{ .kind = .IdResultType, .quantifier = .required },
4750 .{ .kind = .IdResult, .quantifier = .required },
4751 .{ .kind = .IdRef, .quantifier = .required },
4752 .{ .kind = .IdScope, .quantifier = .required },
4753 .{ .kind = .IdMemorySemantics, .quantifier = .required },
4754 .{ .kind = .IdRef, .quantifier = .required },
4755 },
4756 .OpTypeBufferSurfaceINTEL => &[_]Operand{
4757 .{ .kind = .IdResult, .quantifier = .required },
4758 .{ .kind = .AccessQualifier, .quantifier = .required },
4759 },
4760 .OpTypeStructContinuedINTEL => &[_]Operand{
4761 .{ .kind = .IdRef, .quantifier = .variadic },
4762 },
4763 .OpConstantCompositeContinuedINTEL => &[_]Operand{
4764 .{ .kind = .IdRef, .quantifier = .variadic },
4765 },
4766 .OpSpecConstantCompositeContinuedINTEL => &[_]Operand{
4767 .{ .kind = .IdRef, .quantifier = .variadic },
4768 },
4769 };
4770 }
4771 pub fn class(self: Opcode) Class {
2680 pub fn class(self: Opcode) Class {
47722681 return switch (self) {
47732682 .OpNop => .Miscellaneous,
47742683 .OpUndef => .Miscellaneous,
......@@ -5114,12 +3023,16 @@ pub const Opcode = enum(u16) {
51143023 .OpPtrEqual => .Memory,
51153024 .OpPtrNotEqual => .Memory,
51163025 .OpPtrDiff => .Memory,
3026 .OpColorAttachmentReadEXT => .Image,
3027 .OpDepthAttachmentReadEXT => .Image,
3028 .OpStencilAttachmentReadEXT => .Image,
51173029 .OpTerminateInvocation => .ControlFlow,
51183030 .OpSubgroupBallotKHR => .Group,
51193031 .OpSubgroupFirstInvocationKHR => .Group,
51203032 .OpSubgroupAllKHR => .Group,
51213033 .OpSubgroupAnyKHR => .Group,
51223034 .OpSubgroupAllEqualKHR => .Group,
3035 .OpGroupNonUniformRotateKHR => .Group,
51233036 .OpSubgroupReadInvocationKHR => .Group,
51243037 .OpTraceRayKHR => .Reserved,
51253038 .OpExecuteCallableKHR => .Reserved,
......@@ -5132,13 +3045,26 @@ pub const Opcode = enum(u16) {
51323045 .OpSDotAccSat => .Arithmetic,
51333046 .OpUDotAccSat => .Arithmetic,
51343047 .OpSUDotAccSat => .Arithmetic,
5135 .OpTypeRayQueryKHR => .Reserved,
3048 .OpTypeCooperativeMatrixKHR => .TypeDeclaration,
3049 .OpCooperativeMatrixLoadKHR => .Memory,
3050 .OpCooperativeMatrixStoreKHR => .Memory,
3051 .OpCooperativeMatrixMulAddKHR => .Arithmetic,
3052 .OpCooperativeMatrixLengthKHR => .Miscellaneous,
3053 .OpTypeRayQueryKHR => .TypeDeclaration,
51363054 .OpRayQueryInitializeKHR => .Reserved,
51373055 .OpRayQueryTerminateKHR => .Reserved,
51383056 .OpRayQueryGenerateIntersectionKHR => .Reserved,
51393057 .OpRayQueryConfirmIntersectionKHR => .Reserved,
51403058 .OpRayQueryProceedKHR => .Reserved,
51413059 .OpRayQueryGetIntersectionTypeKHR => .Reserved,
3060 .OpImageSampleWeightedQCOM => .Image,
3061 .OpImageBoxFilterQCOM => .Image,
3062 .OpImageBlockMatchSSDQCOM => .Image,
3063 .OpImageBlockMatchSADQCOM => .Image,
3064 .OpImageBlockMatchWindowSSDQCOM => .Image,
3065 .OpImageBlockMatchWindowSADQCOM => .Image,
3066 .OpImageBlockMatchGatherSSDQCOM => .Image,
3067 .OpImageBlockMatchGatherSADQCOM => .Image,
51423068 .OpGroupIAddNonUniformAMD => .Group,
51433069 .OpGroupFAddNonUniformAMD => .Group,
51443070 .OpGroupFMinNonUniformAMD => .Group,
......@@ -5150,18 +3076,61 @@ pub const Opcode = enum(u16) {
51503076 .OpFragmentMaskFetchAMD => .Reserved,
51513077 .OpFragmentFetchAMD => .Reserved,
51523078 .OpReadClockKHR => .Reserved,
3079 .OpFinalizeNodePayloadsAMDX => .Reserved,
3080 .OpFinishWritingNodePayloadAMDX => .Reserved,
3081 .OpInitializeNodePayloadsAMDX => .Reserved,
3082 .OpGroupNonUniformQuadAllKHR => .NonUniform,
3083 .OpGroupNonUniformQuadAnyKHR => .NonUniform,
3084 .OpHitObjectRecordHitMotionNV => .Reserved,
3085 .OpHitObjectRecordHitWithIndexMotionNV => .Reserved,
3086 .OpHitObjectRecordMissMotionNV => .Reserved,
3087 .OpHitObjectGetWorldToObjectNV => .Reserved,
3088 .OpHitObjectGetObjectToWorldNV => .Reserved,
3089 .OpHitObjectGetObjectRayDirectionNV => .Reserved,
3090 .OpHitObjectGetObjectRayOriginNV => .Reserved,
3091 .OpHitObjectTraceRayMotionNV => .Reserved,
3092 .OpHitObjectGetShaderRecordBufferHandleNV => .Reserved,
3093 .OpHitObjectGetShaderBindingTableRecordIndexNV => .Reserved,
3094 .OpHitObjectRecordEmptyNV => .Reserved,
3095 .OpHitObjectTraceRayNV => .Reserved,
3096 .OpHitObjectRecordHitNV => .Reserved,
3097 .OpHitObjectRecordHitWithIndexNV => .Reserved,
3098 .OpHitObjectRecordMissNV => .Reserved,
3099 .OpHitObjectExecuteShaderNV => .Reserved,
3100 .OpHitObjectGetCurrentTimeNV => .Reserved,
3101 .OpHitObjectGetAttributesNV => .Reserved,
3102 .OpHitObjectGetHitKindNV => .Reserved,
3103 .OpHitObjectGetPrimitiveIndexNV => .Reserved,
3104 .OpHitObjectGetGeometryIndexNV => .Reserved,
3105 .OpHitObjectGetInstanceIdNV => .Reserved,
3106 .OpHitObjectGetInstanceCustomIndexNV => .Reserved,
3107 .OpHitObjectGetWorldRayDirectionNV => .Reserved,
3108 .OpHitObjectGetWorldRayOriginNV => .Reserved,
3109 .OpHitObjectGetRayTMaxNV => .Reserved,
3110 .OpHitObjectGetRayTMinNV => .Reserved,
3111 .OpHitObjectIsEmptyNV => .Reserved,
3112 .OpHitObjectIsHitNV => .Reserved,
3113 .OpHitObjectIsMissNV => .Reserved,
3114 .OpReorderThreadWithHitObjectNV => .Reserved,
3115 .OpReorderThreadWithHintNV => .Reserved,
3116 .OpTypeHitObjectNV => .TypeDeclaration,
51533117 .OpImageSampleFootprintNV => .Image,
3118 .OpEmitMeshTasksEXT => .Reserved,
3119 .OpSetMeshOutputsEXT => .Reserved,
51543120 .OpGroupNonUniformPartitionNV => .NonUniform,
51553121 .OpWritePackedPrimitiveIndices4x8NV => .Reserved,
3122 .OpFetchMicroTriangleVertexPositionNV => .Reserved,
3123 .OpFetchMicroTriangleVertexBarycentricNV => .Reserved,
51563124 .OpReportIntersectionKHR => .Reserved,
51573125 .OpIgnoreIntersectionNV => .Reserved,
51583126 .OpTerminateRayNV => .Reserved,
51593127 .OpTraceNV => .Reserved,
51603128 .OpTraceMotionNV => .Reserved,
51613129 .OpTraceRayMotionNV => .Reserved,
5162 .OpTypeAccelerationStructureKHR => .Reserved,
3130 .OpRayQueryGetIntersectionTriangleVertexPositionsKHR => .Reserved,
3131 .OpTypeAccelerationStructureKHR => .TypeDeclaration,
51633132 .OpExecuteCallableNV => .Reserved,
5164 .OpTypeCooperativeMatrixNV => .Reserved,
3133 .OpTypeCooperativeMatrixNV => .TypeDeclaration,
51653134 .OpCooperativeMatrixLoadNV => .Reserved,
51663135 .OpCooperativeMatrixStoreNV => .Reserved,
51673136 .OpCooperativeMatrixMulAddNV => .Reserved,
......@@ -5177,6 +3146,7 @@ pub const Opcode = enum(u16) {
51773146 .OpConvertUToSampledImageNV => .Reserved,
51783147 .OpConvertSampledImageToUNV => .Reserved,
51793148 .OpSamplerImageAddressingModeNV => .Reserved,
3149 .OpRawAccessChainNV => .Memory,
51803150 .OpSubgroupShuffleINTEL => .Group,
51813151 .OpSubgroupShuffleDownINTEL => .Group,
51823152 .OpSubgroupShuffleUpINTEL => .Group,
......@@ -5233,6 +3203,21 @@ pub const Opcode = enum(u16) {
52333203 .OpTypeStructContinuedINTEL => .TypeDeclaration,
52343204 .OpConstantCompositeContinuedINTEL => .ConstantCreation,
52353205 .OpSpecConstantCompositeContinuedINTEL => .ConstantCreation,
3206 .OpCompositeConstructContinuedINTEL => .Composite,
3207 .OpConvertFToBF16INTEL => .Conversion,
3208 .OpConvertBF16ToFINTEL => .Conversion,
3209 .OpControlBarrierArriveINTEL => .Barrier,
3210 .OpControlBarrierWaitINTEL => .Barrier,
3211 .OpGroupIMulKHR => .Group,
3212 .OpGroupFMulKHR => .Group,
3213 .OpGroupBitwiseAndKHR => .Group,
3214 .OpGroupBitwiseOrKHR => .Group,
3215 .OpGroupBitwiseXorKHR => .Group,
3216 .OpGroupLogicalAndKHR => .Group,
3217 .OpGroupLogicalOrKHR => .Group,
3218 .OpGroupLogicalXorKHR => .Group,
3219 .OpMaskedGatherINTEL => .Memory,
3220 .OpMaskedScatterINTEL => .Memory,
52363221 };
52373222 }
52383223};
......@@ -5327,9 +3312,9 @@ pub const FPFastMathMode = packed struct {
53273312 _reserved_bit_13: bool = false,
53283313 _reserved_bit_14: bool = false,
53293314 _reserved_bit_15: bool = false,
5330 AllowContractFastINTEL: bool = false,
5331 AllowReassocINTEL: bool = false,
5332 _reserved_bit_18: bool = false,
3315 AllowContract: bool = false,
3316 AllowReassoc: bool = false,
3317 AllowTransform: bool = false,
53333318 _reserved_bit_19: bool = false,
53343319 _reserved_bit_20: bool = false,
53353320 _reserved_bit_21: bool = false,
......@@ -5343,6 +3328,9 @@ pub const FPFastMathMode = packed struct {
53433328 _reserved_bit_29: bool = false,
53443329 _reserved_bit_30: bool = false,
53453330 _reserved_bit_31: bool = false,
3331
3332 pub const AllowContractFastINTEL: FPFastMathMode = .{ .AllowContract = true };
3333 pub const AllowReassocINTEL: FPFastMathMode = .{ .AllowReassoc = true };
53463334};
53473335pub const SelectionControl = packed struct {
53483336 Flatten: bool = false,
......@@ -5403,8 +3391,8 @@ pub const LoopControl = packed struct {
54033391 MaxInterleavingINTEL: bool = false,
54043392 SpeculatedIterationsINTEL: bool = false,
54053393 NoFusionINTEL: bool = false,
5406 _reserved_bit_24: bool = false,
5407 _reserved_bit_25: bool = false,
3394 LoopCountINTEL: bool = false,
3395 MaxReinvocationDelayINTEL: bool = false,
54083396 _reserved_bit_26: bool = false,
54093397 _reserved_bit_27: bool = false,
54103398 _reserved_bit_28: bool = false,
......@@ -5436,9 +3424,9 @@ pub const LoopControl = packed struct {
54363424 LoopCoalesceINTEL: ?struct { literal_integer: LiteralInteger } = null,
54373425 MaxInterleavingINTEL: ?struct { literal_integer: LiteralInteger } = null,
54383426 SpeculatedIterationsINTEL: ?struct { literal_integer: LiteralInteger } = null,
5439 NoFusionINTEL: ?struct { literal_integer: LiteralInteger } = null,
5440 _reserved_bit_24: bool = false,
5441 _reserved_bit_25: bool = false,
3427 NoFusionINTEL: bool = false,
3428 LoopCountINTEL: ?struct { literal_integer: LiteralInteger } = null,
3429 MaxReinvocationDelayINTEL: ?struct { literal_integer: LiteralInteger } = null,
54423430 _reserved_bit_26: bool = false,
54433431 _reserved_bit_27: bool = false,
54443432 _reserved_bit_28: bool = false,
......@@ -5536,8 +3524,8 @@ pub const MemoryAccess = packed struct {
55363524 _reserved_bit_13: bool = false,
55373525 _reserved_bit_14: bool = false,
55383526 _reserved_bit_15: bool = false,
5539 _reserved_bit_16: bool = false,
5540 _reserved_bit_17: bool = false,
3527 AliasScopeINTELMask: bool = false,
3528 NoAliasINTELMask: bool = false,
55413529 _reserved_bit_18: bool = false,
55423530 _reserved_bit_19: bool = false,
55433531 _reserved_bit_20: bool = false,
......@@ -5574,8 +3562,8 @@ pub const MemoryAccess = packed struct {
55743562 _reserved_bit_13: bool = false,
55753563 _reserved_bit_14: bool = false,
55763564 _reserved_bit_15: bool = false,
5577 _reserved_bit_16: bool = false,
5578 _reserved_bit_17: bool = false,
3565 AliasScopeINTELMask: ?struct { id_ref: IdRef } = null,
3566 NoAliasINTELMask: ?struct { id_ref: IdRef } = null,
55793567 _reserved_bit_18: bool = false,
55803568 _reserved_bit_19: bool = false,
55813569 _reserved_bit_20: bool = false,
......@@ -5637,7 +3625,7 @@ pub const RayFlags = packed struct {
56373625 CullNoOpaqueKHR: bool = false,
56383626 SkipTrianglesKHR: bool = false,
56393627 SkipAABBsKHR: bool = false,
5640 _reserved_bit_10: bool = false,
3628 ForceOpacityMicromap2StateEXT: bool = false,
56413629 _reserved_bit_11: bool = false,
56423630 _reserved_bit_12: bool = false,
56433631 _reserved_bit_13: bool = false,
......@@ -5694,6 +3682,40 @@ pub const FragmentShadingRate = packed struct {
56943682 _reserved_bit_30: bool = false,
56953683 _reserved_bit_31: bool = false,
56963684};
3685pub const RawAccessChainOperands = packed struct {
3686 RobustnessPerComponentNV: bool = false,
3687 RobustnessPerElementNV: bool = false,
3688 _reserved_bit_2: bool = false,
3689 _reserved_bit_3: bool = false,
3690 _reserved_bit_4: bool = false,
3691 _reserved_bit_5: bool = false,
3692 _reserved_bit_6: bool = false,
3693 _reserved_bit_7: bool = false,
3694 _reserved_bit_8: bool = false,
3695 _reserved_bit_9: bool = false,
3696 _reserved_bit_10: bool = false,
3697 _reserved_bit_11: bool = false,
3698 _reserved_bit_12: bool = false,
3699 _reserved_bit_13: bool = false,
3700 _reserved_bit_14: bool = false,
3701 _reserved_bit_15: bool = false,
3702 _reserved_bit_16: bool = false,
3703 _reserved_bit_17: bool = false,
3704 _reserved_bit_18: bool = false,
3705 _reserved_bit_19: bool = false,
3706 _reserved_bit_20: bool = false,
3707 _reserved_bit_21: bool = false,
3708 _reserved_bit_22: bool = false,
3709 _reserved_bit_23: bool = false,
3710 _reserved_bit_24: bool = false,
3711 _reserved_bit_25: bool = false,
3712 _reserved_bit_26: bool = false,
3713 _reserved_bit_27: bool = false,
3714 _reserved_bit_28: bool = false,
3715 _reserved_bit_29: bool = false,
3716 _reserved_bit_30: bool = false,
3717 _reserved_bit_31: bool = false,
3718};
56973719pub const SourceLanguage = enum(u32) {
56983720 Unknown = 0,
56993721 ESSL = 1,
......@@ -5702,6 +3724,12 @@ pub const SourceLanguage = enum(u32) {
57023724 OpenCL_CPP = 4,
57033725 HLSL = 5,
57043726 CPP_for_OpenCL = 6,
3727 SYCL = 7,
3728 HERO_C = 8,
3729 NZSL = 9,
3730 WGSL = 10,
3731 Slang = 11,
3732 Zig = 12,
57053733};
57063734pub const ExecutionModel = enum(u32) {
57073735 Vertex = 0,
......@@ -5719,6 +3747,8 @@ pub const ExecutionModel = enum(u32) {
57193747 ClosestHitKHR = 5316,
57203748 MissKHR = 5317,
57213749 CallableKHR = 5318,
3750 TaskEXT = 5364,
3751 MeshEXT = 5365,
57223752
57233753 pub const RayGenerationNV = ExecutionModel.RayGenerationKHR;
57243754 pub const IntersectionNV = ExecutionModel.IntersectionKHR;
......@@ -5782,6 +3812,9 @@ pub const ExecutionMode = enum(u32) {
57823812 SubgroupsPerWorkgroupId = 37,
57833813 LocalSizeId = 38,
57843814 LocalSizeHintId = 39,
3815 NonCoherentColorAttachmentReadEXT = 4169,
3816 NonCoherentDepthAttachmentReadEXT = 4170,
3817 NonCoherentStencilAttachmentReadEXT = 4171,
57853818 SubgroupUniformControlFlowKHR = 4421,
57863819 PostDepthCoverage = 4446,
57873820 DenormPreserve = 4459,
......@@ -5789,12 +3822,26 @@ pub const ExecutionMode = enum(u32) {
57893822 SignedZeroInfNanPreserve = 4461,
57903823 RoundingModeRTE = 4462,
57913824 RoundingModeRTZ = 4463,
3825 EarlyAndLateFragmentTestsAMD = 5017,
57923826 StencilRefReplacingEXT = 5027,
5793 OutputLinesNV = 5269,
5794 OutputPrimitivesNV = 5270,
3827 CoalescingAMDX = 5069,
3828 MaxNodeRecursionAMDX = 5071,
3829 StaticNumWorkgroupsAMDX = 5072,
3830 ShaderIndexAMDX = 5073,
3831 MaxNumWorkgroupsAMDX = 5077,
3832 StencilRefUnchangedFrontAMD = 5079,
3833 StencilRefGreaterFrontAMD = 5080,
3834 StencilRefLessFrontAMD = 5081,
3835 StencilRefUnchangedBackAMD = 5082,
3836 StencilRefGreaterBackAMD = 5083,
3837 StencilRefLessBackAMD = 5084,
3838 QuadDerivativesKHR = 5088,
3839 RequireFullQuadsKHR = 5089,
3840 OutputLinesEXT = 5269,
3841 OutputPrimitivesEXT = 5270,
57953842 DerivativeGroupQuadsNV = 5289,
57963843 DerivativeGroupLinearNV = 5290,
5797 OutputTrianglesNV = 5298,
3844 OutputTrianglesEXT = 5298,
57983845 PixelInterlockOrderedEXT = 5366,
57993846 PixelInterlockUnorderedEXT = 5367,
58003847 SampleInterlockOrderedEXT = 5368,
......@@ -5811,6 +3858,18 @@ pub const ExecutionMode = enum(u32) {
58113858 NoGlobalOffsetINTEL = 5895,
58123859 NumSIMDWorkitemsINTEL = 5896,
58133860 SchedulerTargetFmaxMhzINTEL = 5903,
3861 MaximallyReconvergesKHR = 6023,
3862 FPFastMathDefault = 6028,
3863 StreamingInterfaceINTEL = 6154,
3864 RegisterMapInterfaceINTEL = 6160,
3865 NamedBarrierCountINTEL = 6417,
3866 MaximumRegistersINTEL = 6461,
3867 MaximumRegistersIdINTEL = 6462,
3868 NamedMaximumRegistersINTEL = 6463,
3869
3870 pub const OutputLinesNV = ExecutionMode.OutputLinesEXT;
3871 pub const OutputPrimitivesNV = ExecutionMode.OutputPrimitivesEXT;
3872 pub const OutputTrianglesNV = ExecutionMode.OutputTrianglesEXT;
58143873
58153874 pub const Extended = union(ExecutionMode) {
58163875 Invocations: struct { literal_integer: LiteralInteger },
......@@ -5851,6 +3910,9 @@ pub const ExecutionMode = enum(u32) {
58513910 SubgroupsPerWorkgroupId: struct { subgroups_per_workgroup: IdRef },
58523911 LocalSizeId: struct { x_size: IdRef, y_size: IdRef, z_size: IdRef },
58533912 LocalSizeHintId: struct { x_size_hint: IdRef, y_size_hint: IdRef, z_size_hint: IdRef },
3913 NonCoherentColorAttachmentReadEXT,
3914 NonCoherentDepthAttachmentReadEXT,
3915 NonCoherentStencilAttachmentReadEXT,
58543916 SubgroupUniformControlFlowKHR,
58553917 PostDepthCoverage,
58563918 DenormPreserve: struct { target_width: LiteralInteger },
......@@ -5858,12 +3920,26 @@ pub const ExecutionMode = enum(u32) {
58583920 SignedZeroInfNanPreserve: struct { target_width: LiteralInteger },
58593921 RoundingModeRTE: struct { target_width: LiteralInteger },
58603922 RoundingModeRTZ: struct { target_width: LiteralInteger },
3923 EarlyAndLateFragmentTestsAMD,
58613924 StencilRefReplacingEXT,
5862 OutputLinesNV,
5863 OutputPrimitivesNV: struct { primitive_count: LiteralInteger },
3925 CoalescingAMDX,
3926 MaxNodeRecursionAMDX: struct { number_of_recursions: IdRef },
3927 StaticNumWorkgroupsAMDX: struct { x_size: IdRef, y_size: IdRef, z_size: IdRef },
3928 ShaderIndexAMDX: struct { shader_index: IdRef },
3929 MaxNumWorkgroupsAMDX: struct { x_size: IdRef, y_size: IdRef, z_size: IdRef },
3930 StencilRefUnchangedFrontAMD,
3931 StencilRefGreaterFrontAMD,
3932 StencilRefLessFrontAMD,
3933 StencilRefUnchangedBackAMD,
3934 StencilRefGreaterBackAMD,
3935 StencilRefLessBackAMD,
3936 QuadDerivativesKHR,
3937 RequireFullQuadsKHR,
3938 OutputLinesEXT,
3939 OutputPrimitivesEXT: struct { primitive_count: LiteralInteger },
58643940 DerivativeGroupQuadsNV,
58653941 DerivativeGroupLinearNV,
5866 OutputTrianglesNV,
3942 OutputTrianglesEXT,
58673943 PixelInterlockOrderedEXT,
58683944 PixelInterlockUnorderedEXT,
58693945 SampleInterlockOrderedEXT,
......@@ -5880,6 +3956,14 @@ pub const ExecutionMode = enum(u32) {
58803956 NoGlobalOffsetINTEL,
58813957 NumSIMDWorkitemsINTEL: struct { literal_integer: LiteralInteger },
58823958 SchedulerTargetFmaxMhzINTEL: struct { literal_integer: LiteralInteger },
3959 MaximallyReconvergesKHR,
3960 FPFastMathDefault: struct { target_type: IdRef, id_ref_1: IdRef },
3961 StreamingInterfaceINTEL: struct { stallfreereturn: LiteralInteger },
3962 RegisterMapInterfaceINTEL: struct { waitfordonewrite: LiteralInteger },
3963 NamedBarrierCountINTEL: struct { barrier_count: LiteralInteger },
3964 MaximumRegistersINTEL: struct { number_of_registers: LiteralInteger },
3965 MaximumRegistersIdINTEL: struct { number_of_registers: IdRef },
3966 NamedMaximumRegistersINTEL: struct { named_maximum_number_of_registers: NamedMaximumNumberOfRegisters },
58833967 };
58843968};
58853969pub const StorageClass = enum(u32) {
......@@ -5896,6 +3980,9 @@ pub const StorageClass = enum(u32) {
58963980 AtomicCounter = 10,
58973981 Image = 11,
58983982 StorageBuffer = 12,
3983 TileImageEXT = 4172,
3984 NodePayloadAMDX = 5068,
3985 NodeOutputPayloadAMDX = 5076,
58993986 CallableDataKHR = 5328,
59003987 IncomingCallableDataKHR = 5329,
59013988 RayPayloadKHR = 5338,
......@@ -5903,6 +3990,8 @@ pub const StorageClass = enum(u32) {
59033990 IncomingRayPayloadKHR = 5342,
59043991 ShaderRecordBufferKHR = 5343,
59053992 PhysicalStorageBuffer = 5349,
3993 HitObjectAttributeNV = 5385,
3994 TaskPayloadWorkgroupEXT = 5402,
59063995 CodeSectionINTEL = 5605,
59073996 DeviceOnlyINTEL = 5936,
59083997 HostOnlyINTEL = 5937,
......@@ -5923,6 +4012,7 @@ pub const Dim = enum(u32) {
59234012 Rect = 4,
59244013 Buffer = 5,
59254014 SubpassData = 6,
4015 TileImageDataEXT = 4173,
59264016};
59274017pub const SamplerAddressingMode = enum(u32) {
59284018 None = 0,
......@@ -6019,6 +4109,8 @@ pub const ImageChannelDataType = enum(u32) {
60194109 Float = 14,
60204110 UnormInt24 = 15,
60214111 UnormInt101010_2 = 16,
4112 UnsignedIntRaw10EXT = 19,
4113 UnsignedIntRaw12EXT = 20,
60224114};
60234115pub const FPRoundingMode = enum(u32) {
60244116 RTE = 0,
......@@ -6060,6 +4152,12 @@ pub const AccessQualifier = enum(u32) {
60604152 WriteOnly = 1,
60614153 ReadWrite = 2,
60624154};
4155pub const HostAccessQualifier = enum(u32) {
4156 NoneINTEL = 0,
4157 ReadINTEL = 1,
4158 WriteINTEL = 2,
4159 ReadWriteINTEL = 3,
4160};
60634161pub const FunctionParameterAttribute = enum(u32) {
60644162 Zext = 0,
60654163 Sext = 1,
......@@ -6069,6 +4167,7 @@ pub const FunctionParameterAttribute = enum(u32) {
60694167 NoCapture = 5,
60704168 NoWrite = 6,
60714169 NoReadWrite = 7,
4170 RuntimeAlignedINTEL = 5940,
60724171};
60734172pub const Decoration = enum(u32) {
60744173 RelaxedPrecision = 0,
......@@ -6120,18 +4219,26 @@ pub const Decoration = enum(u32) {
61204219 MaxByteOffsetId = 47,
61214220 NoSignedWrap = 4469,
61224221 NoUnsignedWrap = 4470,
4222 WeightTextureQCOM = 4487,
4223 BlockMatchTextureQCOM = 4488,
4224 BlockMatchSamplerQCOM = 4499,
61234225 ExplicitInterpAMD = 4999,
4226 NodeSharesPayloadLimitsWithAMDX = 5019,
4227 NodeMaxPayloadsAMDX = 5020,
4228 TrackFinishWritingAMDX = 5078,
4229 PayloadNodeNameAMDX = 5091,
61244230 OverrideCoverageNV = 5248,
61254231 PassthroughNV = 5250,
61264232 ViewportRelativeNV = 5252,
61274233 SecondaryViewportRelativeNV = 5256,
6128 PerPrimitiveNV = 5271,
4234 PerPrimitiveEXT = 5271,
61294235 PerViewNV = 5272,
61304236 PerTaskNV = 5273,
61314237 PerVertexKHR = 5285,
61324238 NonUniform = 5300,
61334239 RestrictPointer = 5355,
61344240 AliasedPointer = 5356,
4241 HitObjectShaderRecordBufferNV = 5386,
61354242 BindlessSamplerNV = 5398,
61364243 BindlessImageNV = 5399,
61374244 BoundSamplerNV = 5400,
......@@ -6162,19 +4269,47 @@ pub const Decoration = enum(u32) {
61624269 MergeINTEL = 5834,
61634270 BankBitsINTEL = 5835,
61644271 ForcePow2DepthINTEL = 5836,
4272 StridesizeINTEL = 5883,
4273 WordsizeINTEL = 5884,
4274 TrueDualPortINTEL = 5885,
61654275 BurstCoalesceINTEL = 5899,
61664276 CacheSizeINTEL = 5900,
61674277 DontStaticallyCoalesceINTEL = 5901,
61684278 PrefetchINTEL = 5902,
61694279 StallEnableINTEL = 5905,
61704280 FuseLoopsInFunctionINTEL = 5907,
4281 MathOpDSPModeINTEL = 5909,
4282 AliasScopeINTEL = 5914,
4283 NoAliasINTEL = 5915,
4284 InitiationIntervalINTEL = 5917,
4285 MaxConcurrencyINTEL = 5918,
4286 PipelineEnableINTEL = 5919,
61714287 BufferLocationINTEL = 5921,
61724288 IOPipeStorageINTEL = 5944,
61734289 FunctionFloatingPointModeINTEL = 6080,
61744290 SingleElementVectorINTEL = 6085,
61754291 VectorComputeCallableFunctionINTEL = 6087,
61764292 MediaBlockIOINTEL = 6140,
4293 StallFreeINTEL = 6151,
4294 FPMaxErrorDecorationINTEL = 6170,
4295 LatencyControlLabelINTEL = 6172,
4296 LatencyControlConstraintINTEL = 6173,
4297 ConduitKernelArgumentINTEL = 6175,
4298 RegisterMapKernelArgumentINTEL = 6176,
4299 MMHostInterfaceAddressWidthINTEL = 6177,
4300 MMHostInterfaceDataWidthINTEL = 6178,
4301 MMHostInterfaceLatencyINTEL = 6179,
4302 MMHostInterfaceReadWriteModeINTEL = 6180,
4303 MMHostInterfaceMaxBurstINTEL = 6181,
4304 MMHostInterfaceWaitRequestINTEL = 6182,
4305 StableKernelArgumentINTEL = 6183,
4306 HostAccessINTEL = 6188,
4307 InitModeINTEL = 6190,
4308 ImplementInRegisterMapINTEL = 6191,
4309 CacheControlLoadINTEL = 6442,
4310 CacheControlStoreINTEL = 6443,
61774311
4312 pub const PerPrimitiveNV = Decoration.PerPrimitiveEXT;
61784313 pub const PerVertexNV = Decoration.PerVertexKHR;
61794314 pub const NonUniformEXT = Decoration.NonUniform;
61804315 pub const RestrictPointerEXT = Decoration.RestrictPointer;
......@@ -6232,18 +4367,26 @@ pub const Decoration = enum(u32) {
62324367 MaxByteOffsetId: struct { max_byte_offset: IdRef },
62334368 NoSignedWrap,
62344369 NoUnsignedWrap,
4370 WeightTextureQCOM,
4371 BlockMatchTextureQCOM,
4372 BlockMatchSamplerQCOM,
62354373 ExplicitInterpAMD,
4374 NodeSharesPayloadLimitsWithAMDX: struct { payload_array: IdRef },
4375 NodeMaxPayloadsAMDX: struct { max_number_of_payloads: IdRef },
4376 TrackFinishWritingAMDX,
4377 PayloadNodeNameAMDX: struct { node_name: LiteralString },
62364378 OverrideCoverageNV,
62374379 PassthroughNV,
62384380 ViewportRelativeNV,
62394381 SecondaryViewportRelativeNV: struct { offset: LiteralInteger },
6240 PerPrimitiveNV,
4382 PerPrimitiveEXT,
62414383 PerViewNV,
62424384 PerTaskNV,
62434385 PerVertexKHR,
62444386 NonUniform,
62454387 RestrictPointer,
62464388 AliasedPointer,
4389 HitObjectShaderRecordBufferNV,
62474390 BindlessSamplerNV,
62484391 BindlessImageNV,
62494392 BoundSamplerNV,
......@@ -6274,18 +4417,45 @@ pub const Decoration = enum(u32) {
62744417 MergeINTEL: struct { merge_key: LiteralString, merge_type: LiteralString },
62754418 BankBitsINTEL: struct { bank_bits: []const LiteralInteger = &.{} },
62764419 ForcePow2DepthINTEL: struct { force_key: LiteralInteger },
4420 StridesizeINTEL: struct { stride_size: LiteralInteger },
4421 WordsizeINTEL: struct { word_size: LiteralInteger },
4422 TrueDualPortINTEL,
62774423 BurstCoalesceINTEL,
62784424 CacheSizeINTEL: struct { cache_size_in_bytes: LiteralInteger },
62794425 DontStaticallyCoalesceINTEL,
62804426 PrefetchINTEL: struct { prefetcher_size_in_bytes: LiteralInteger },
62814427 StallEnableINTEL,
62824428 FuseLoopsInFunctionINTEL,
4429 MathOpDSPModeINTEL: struct { mode: LiteralInteger, propagate: LiteralInteger },
4430 AliasScopeINTEL: struct { aliasing_scopes_list: IdRef },
4431 NoAliasINTEL: struct { aliasing_scopes_list: IdRef },
4432 InitiationIntervalINTEL: struct { cycles: LiteralInteger },
4433 MaxConcurrencyINTEL: struct { invocations: LiteralInteger },
4434 PipelineEnableINTEL: struct { enable: LiteralInteger },
62834435 BufferLocationINTEL: struct { buffer_location_id: LiteralInteger },
62844436 IOPipeStorageINTEL: struct { io_pipe_id: LiteralInteger },
62854437 FunctionFloatingPointModeINTEL: struct { target_width: LiteralInteger, fp_operation_mode: FPOperationMode },
62864438 SingleElementVectorINTEL,
62874439 VectorComputeCallableFunctionINTEL,
62884440 MediaBlockIOINTEL,
4441 StallFreeINTEL,
4442 FPMaxErrorDecorationINTEL: struct { max_error: LiteralFloat },
4443 LatencyControlLabelINTEL: struct { latency_label: LiteralInteger },
4444 LatencyControlConstraintINTEL: struct { relative_to: LiteralInteger, control_type: LiteralInteger, relative_cycle: LiteralInteger },
4445 ConduitKernelArgumentINTEL,
4446 RegisterMapKernelArgumentINTEL,
4447 MMHostInterfaceAddressWidthINTEL: struct { addresswidth: LiteralInteger },
4448 MMHostInterfaceDataWidthINTEL: struct { datawidth: LiteralInteger },
4449 MMHostInterfaceLatencyINTEL: struct { latency: LiteralInteger },
4450 MMHostInterfaceReadWriteModeINTEL: struct { readwritemode: AccessQualifier },
4451 MMHostInterfaceMaxBurstINTEL: struct { maxburstcount: LiteralInteger },
4452 MMHostInterfaceWaitRequestINTEL: struct { waitrequest: LiteralInteger },
4453 StableKernelArgumentINTEL,
4454 HostAccessINTEL: struct { access: HostAccessQualifier, name: LiteralString },
4455 InitModeINTEL: struct { trigger: InitializationModeQualifier },
4456 ImplementInRegisterMapINTEL: struct { value: LiteralInteger },
4457 CacheControlLoadINTEL: struct { cache_level: LiteralInteger, cache_control: LoadCacheControl },
4458 CacheControlStoreINTEL: struct { cache_level: LiteralInteger, cache_control: StoreCacheControl },
62894459 };
62904460};
62914461pub const BuiltIn = enum(u32) {
......@@ -6330,6 +4500,11 @@ pub const BuiltIn = enum(u32) {
63304500 SubgroupLocalInvocationId = 41,
63314501 VertexIndex = 42,
63324502 InstanceIndex = 43,
4503 CoreIDARM = 4160,
4504 CoreCountARM = 4161,
4505 CoreMaxIDARM = 4162,
4506 WarpIDARM = 4163,
4507 WarpMaxIDARM = 4164,
63334508 SubgroupEqMask = 4416,
63344509 SubgroupGeMask = 4417,
63354510 SubgroupGtMask = 4418,
......@@ -6350,6 +4525,8 @@ pub const BuiltIn = enum(u32) {
63504525 BaryCoordSmoothSampleAMD = 4997,
63514526 BaryCoordPullModelAMD = 4998,
63524527 FragStencilRefEXT = 5014,
4528 CoalescedInputCountAMDX = 5021,
4529 ShaderIndexAMDX = 5073,
63534530 ViewportMaskNV = 5253,
63544531 SecondaryPositionNV = 5257,
63554532 SecondaryViewportMaskNV = 5258,
......@@ -6368,6 +4545,10 @@ pub const BuiltIn = enum(u32) {
63684545 BaryCoordNoPerspKHR = 5287,
63694546 FragSizeEXT = 5292,
63704547 FragInvocationCountEXT = 5293,
4548 PrimitivePointIndicesEXT = 5294,
4549 PrimitiveLineIndicesEXT = 5295,
4550 PrimitiveTriangleIndicesEXT = 5296,
4551 CullPrimitiveEXT = 5299,
63714552 LaunchIdKHR = 5319,
63724553 LaunchSizeKHR = 5320,
63734554 WorldRayOriginKHR = 5321,
......@@ -6382,12 +4563,18 @@ pub const BuiltIn = enum(u32) {
63824563 HitTNV = 5332,
63834564 HitKindKHR = 5333,
63844565 CurrentRayTimeNV = 5334,
4566 HitTriangleVertexPositionsKHR = 5335,
4567 HitMicroTriangleVertexPositionsNV = 5337,
4568 HitMicroTriangleVertexBarycentricsNV = 5344,
63854569 IncomingRayFlagsKHR = 5351,
63864570 RayGeometryIndexKHR = 5352,
63874571 WarpsPerSMNV = 5374,
63884572 SMCountNV = 5375,
63894573 WarpIDNV = 5376,
63904574 SMIDNV = 5377,
4575 HitKindFrontFacingMicroTriangleNV = 5405,
4576 HitKindBackFacingMicroTriangleNV = 5406,
4577 CullMaskKHR = 6021,
63914578
63924579 pub const SubgroupEqMaskKHR = BuiltIn.SubgroupEqMask;
63934580 pub const SubgroupGeMaskKHR = BuiltIn.SubgroupGeMask;
......@@ -6508,6 +4695,10 @@ pub const Capability = enum(u32) {
65084695 ShaderLayer = 69,
65094696 ShaderViewportIndex = 70,
65104697 UniformDecoration = 71,
4698 CoreBuiltinsARM = 4165,
4699 TileImageColorReadAccessEXT = 4166,
4700 TileImageDepthReadAccessEXT = 4167,
4701 TileImageStencilReadAccessEXT = 4168,
65114702 FragmentShadingRateKHR = 4422,
65124703 SubgroupBallotKHR = 4423,
65134704 DrawParameters = 4427,
......@@ -6537,6 +4728,10 @@ pub const Capability = enum(u32) {
65374728 RayQueryKHR = 4472,
65384729 RayTraversalPrimitiveCullingKHR = 4478,
65394730 RayTracingKHR = 4479,
4731 TextureSampleWeightedQCOM = 4484,
4732 TextureBoxFilterQCOM = 4485,
4733 TextureBlockMatchQCOM = 4486,
4734 TextureBlockMatch2QCOM = 4498,
65404735 Float16ImageAMD = 5008,
65414736 ImageGatherBiasLodAMD = 5009,
65424737 FragmentMaskAMD = 5010,
......@@ -6544,6 +4739,8 @@ pub const Capability = enum(u32) {
65444739 ImageReadWriteLodAMD = 5015,
65454740 Int64ImageEXT = 5016,
65464741 ShaderClockKHR = 5055,
4742 ShaderEnqueueAMDX = 5067,
4743 QuadControlKHR = 5087,
65474744 SampleMaskOverrideCoverageNV = 5249,
65484745 GeometryShaderPassthroughNV = 5251,
65494746 ShaderViewportIndexLayerEXT = 5254,
......@@ -6553,6 +4750,7 @@ pub const Capability = enum(u32) {
65534750 FragmentFullyCoveredEXT = 5265,
65544751 MeshShadingNV = 5266,
65554752 ImageFootprintNV = 5282,
4753 MeshShadingEXT = 5283,
65564754 FragmentBarycentricKHR = 5284,
65574755 ComputeDerivativeGroupQuadsNV = 5288,
65584756 FragmentDensityEXT = 5291,
......@@ -6569,6 +4767,7 @@ pub const Capability = enum(u32) {
65694767 InputAttachmentArrayNonUniformIndexing = 5310,
65704768 UniformTexelBufferArrayNonUniformIndexing = 5311,
65714769 StorageTexelBufferArrayNonUniformIndexing = 5312,
4770 RayTracingPositionFetchKHR = 5336,
65724771 RayTracingNV = 5340,
65734772 RayTracingMotionBlurNV = 5341,
65744773 VulkanMemoryModel = 5345,
......@@ -6582,7 +4781,14 @@ pub const Capability = enum(u32) {
65824781 ShaderSMBuiltinsNV = 5373,
65834782 FragmentShaderPixelInterlockEXT = 5378,
65844783 DemoteToHelperInvocation = 5379,
4784 DisplacementMicromapNV = 5380,
4785 RayTracingOpacityMicromapEXT = 5381,
4786 ShaderInvocationReorderNV = 5383,
65854787 BindlessTextureNV = 5390,
4788 RayQueryPositionFetchKHR = 5391,
4789 AtomicFloat16VectorNV = 5404,
4790 RayTracingDisplacementMicromapNV = 5409,
4791 RawAccessChainsNV = 5414,
65864792 SubgroupShuffleINTEL = 5568,
65874793 SubgroupBufferBlockIOINTEL = 5569,
65884794 SubgroupImageBlockIOINTEL = 5570,
......@@ -6615,9 +4821,13 @@ pub const Capability = enum(u32) {
66154821 FPGAMemoryAccessesINTEL = 5898,
66164822 FPGAClusterAttributesINTEL = 5904,
66174823 LoopFuseINTEL = 5906,
4824 FPGADSPControlINTEL = 5908,
4825 MemoryAccessAliasingINTEL = 5910,
4826 FPGAInvocationPipeliningAttributesINTEL = 5916,
66184827 FPGABufferLocationINTEL = 5920,
66194828 ArbitraryPrecisionFixedPointINTEL = 5922,
66204829 USMStorageClassesINTEL = 5935,
4830 RuntimeAlignedAttributeINTEL = 5939,
66214831 IOPipesINTEL = 5943,
66224832 BlockingPipesINTEL = 5945,
66234833 FPGARegINTEL = 5948,
......@@ -6625,13 +4835,30 @@ pub const Capability = enum(u32) {
66254835 DotProductInput4x8Bit = 6017,
66264836 DotProductInput4x8BitPacked = 6018,
66274837 DotProduct = 6019,
4838 RayCullMaskKHR = 6020,
4839 CooperativeMatrixKHR = 6022,
66284840 BitInstructions = 6025,
4841 GroupNonUniformRotateKHR = 6026,
4842 FloatControls2 = 6029,
66294843 AtomicFloat32AddEXT = 6033,
66304844 AtomicFloat64AddEXT = 6034,
6631 LongConstantCompositeINTEL = 6089,
4845 LongCompositesINTEL = 6089,
66324846 OptNoneINTEL = 6094,
66334847 AtomicFloat16AddEXT = 6095,
66344848 DebugInfoModuleINTEL = 6114,
4849 BFloat16ConversionINTEL = 6115,
4850 SplitBarrierINTEL = 6141,
4851 FPGAClusterAttributesV2INTEL = 6150,
4852 FPGAKernelAttributesv2INTEL = 6161,
4853 FPMaxErrorINTEL = 6169,
4854 FPGALatencyControlINTEL = 6171,
4855 FPGAArgumentInterfacesINTEL = 6174,
4856 GlobalVariableHostAccessINTEL = 6187,
4857 GlobalVariableFPGADecorationsINTEL = 6189,
4858 GroupUniformArithmeticKHR = 6400,
4859 MaskedGatherScatterINTEL = 6427,
4860 CacheControlsINTEL = 6441,
4861 RegisterLimitsINTEL = 6460,
66354862
66364863 pub const StorageUniformBufferBlock16 = Capability.StorageBuffer16BitAccess;
66374864 pub const StorageUniform16 = Capability.UniformAndStorageBuffer16BitAccess;
......@@ -6677,3 +4904,11634 @@ pub const PackedVectorFormat = enum(u32) {
66774904
66784905 pub const PackedVectorFormat4x8BitKHR = PackedVectorFormat.PackedVectorFormat4x8Bit;
66794906};
4907pub const CooperativeMatrixOperands = packed struct {
4908 MatrixASignedComponentsKHR: bool = false,
4909 MatrixBSignedComponentsKHR: bool = false,
4910 MatrixCSignedComponentsKHR: bool = false,
4911 MatrixResultSignedComponentsKHR: bool = false,
4912 SaturatingAccumulationKHR: bool = false,
4913 _reserved_bit_5: bool = false,
4914 _reserved_bit_6: bool = false,
4915 _reserved_bit_7: bool = false,
4916 _reserved_bit_8: bool = false,
4917 _reserved_bit_9: bool = false,
4918 _reserved_bit_10: bool = false,
4919 _reserved_bit_11: bool = false,
4920 _reserved_bit_12: bool = false,
4921 _reserved_bit_13: bool = false,
4922 _reserved_bit_14: bool = false,
4923 _reserved_bit_15: bool = false,
4924 _reserved_bit_16: bool = false,
4925 _reserved_bit_17: bool = false,
4926 _reserved_bit_18: bool = false,
4927 _reserved_bit_19: bool = false,
4928 _reserved_bit_20: bool = false,
4929 _reserved_bit_21: bool = false,
4930 _reserved_bit_22: bool = false,
4931 _reserved_bit_23: bool = false,
4932 _reserved_bit_24: bool = false,
4933 _reserved_bit_25: bool = false,
4934 _reserved_bit_26: bool = false,
4935 _reserved_bit_27: bool = false,
4936 _reserved_bit_28: bool = false,
4937 _reserved_bit_29: bool = false,
4938 _reserved_bit_30: bool = false,
4939 _reserved_bit_31: bool = false,
4940};
4941pub const CooperativeMatrixLayout = enum(u32) {
4942 RowMajorKHR = 0,
4943 ColumnMajorKHR = 1,
4944};
4945pub const CooperativeMatrixUse = enum(u32) {
4946 MatrixAKHR = 0,
4947 MatrixBKHR = 1,
4948 MatrixAccumulatorKHR = 2,
4949};
4950pub const InitializationModeQualifier = enum(u32) {
4951 InitOnDeviceReprogramINTEL = 0,
4952 InitOnDeviceResetINTEL = 1,
4953};
4954pub const LoadCacheControl = enum(u32) {
4955 UncachedINTEL = 0,
4956 CachedINTEL = 1,
4957 StreamingINTEL = 2,
4958 InvalidateAfterReadINTEL = 3,
4959 ConstCachedINTEL = 4,
4960};
4961pub const StoreCacheControl = enum(u32) {
4962 UncachedINTEL = 0,
4963 WriteThroughINTEL = 1,
4964 WriteBackINTEL = 2,
4965 StreamingINTEL = 3,
4966};
4967pub const NamedMaximumNumberOfRegisters = enum(u32) {
4968 AutoINTEL = 0,
4969};
4970pub const @"OpenCL.DebugInfo.100.DebugInfoFlags" = packed struct {
4971 FlagIsProtected: bool = false,
4972 FlagIsPrivate: bool = false,
4973 FlagIsLocal: bool = false,
4974 FlagIsDefinition: bool = false,
4975 FlagFwdDecl: bool = false,
4976 FlagArtificial: bool = false,
4977 FlagExplicit: bool = false,
4978 FlagPrototyped: bool = false,
4979 FlagObjectPointer: bool = false,
4980 FlagStaticMember: bool = false,
4981 FlagIndirectVariable: bool = false,
4982 FlagLValueReference: bool = false,
4983 FlagRValueReference: bool = false,
4984 FlagIsOptimized: bool = false,
4985 FlagIsEnumClass: bool = false,
4986 FlagTypePassByValue: bool = false,
4987 FlagTypePassByReference: bool = false,
4988 _reserved_bit_17: bool = false,
4989 _reserved_bit_18: bool = false,
4990 _reserved_bit_19: bool = false,
4991 _reserved_bit_20: bool = false,
4992 _reserved_bit_21: bool = false,
4993 _reserved_bit_22: bool = false,
4994 _reserved_bit_23: bool = false,
4995 _reserved_bit_24: bool = false,
4996 _reserved_bit_25: bool = false,
4997 _reserved_bit_26: bool = false,
4998 _reserved_bit_27: bool = false,
4999 _reserved_bit_28: bool = false,
5000 _reserved_bit_29: bool = false,
5001 _reserved_bit_30: bool = false,
5002 _reserved_bit_31: bool = false,
5003};
5004pub const @"OpenCL.DebugInfo.100.DebugBaseTypeAttributeEncoding" = enum(u32) {
5005 Unspecified = 0,
5006 Address = 1,
5007 Boolean = 2,
5008 Float = 3,
5009 Signed = 4,
5010 SignedChar = 5,
5011 Unsigned = 6,
5012 UnsignedChar = 7,
5013};
5014pub const @"OpenCL.DebugInfo.100.DebugCompositeType" = enum(u32) {
5015 Class = 0,
5016 Structure = 1,
5017 Union = 2,
5018};
5019pub const @"OpenCL.DebugInfo.100.DebugTypeQualifier" = enum(u32) {
5020 ConstType = 0,
5021 VolatileType = 1,
5022 RestrictType = 2,
5023 AtomicType = 3,
5024};
5025pub const @"OpenCL.DebugInfo.100.DebugOperation" = enum(u32) {
5026 Deref = 0,
5027 Plus = 1,
5028 Minus = 2,
5029 PlusUconst = 3,
5030 BitPiece = 4,
5031 Swap = 5,
5032 Xderef = 6,
5033 StackValue = 7,
5034 Constu = 8,
5035 Fragment = 9,
5036
5037 pub const Extended = union(@"OpenCL.DebugInfo.100.DebugOperation") {
5038 Deref,
5039 Plus,
5040 Minus,
5041 PlusUconst: struct { literal_integer: LiteralInteger },
5042 BitPiece: struct { literal_integer_0: LiteralInteger, literal_integer_1: LiteralInteger },
5043 Swap,
5044 Xderef,
5045 StackValue,
5046 Constu: struct { literal_integer: LiteralInteger },
5047 Fragment: struct { literal_integer_0: LiteralInteger, literal_integer_1: LiteralInteger },
5048 };
5049};
5050pub const @"OpenCL.DebugInfo.100.DebugImportedEntity" = enum(u32) {
5051 ImportedModule = 0,
5052 ImportedDeclaration = 1,
5053};
5054pub const @"NonSemantic.Shader.DebugInfo.100.DebugInfoFlags" = packed struct {
5055 FlagIsProtected: bool = false,
5056 FlagIsPrivate: bool = false,
5057 FlagIsLocal: bool = false,
5058 FlagIsDefinition: bool = false,
5059 FlagFwdDecl: bool = false,
5060 FlagArtificial: bool = false,
5061 FlagExplicit: bool = false,
5062 FlagPrototyped: bool = false,
5063 FlagObjectPointer: bool = false,
5064 FlagStaticMember: bool = false,
5065 FlagIndirectVariable: bool = false,
5066 FlagLValueReference: bool = false,
5067 FlagRValueReference: bool = false,
5068 FlagIsOptimized: bool = false,
5069 FlagIsEnumClass: bool = false,
5070 FlagTypePassByValue: bool = false,
5071 FlagTypePassByReference: bool = false,
5072 FlagUnknownPhysicalLayout: bool = false,
5073 _reserved_bit_18: bool = false,
5074 _reserved_bit_19: bool = false,
5075 _reserved_bit_20: bool = false,
5076 _reserved_bit_21: bool = false,
5077 _reserved_bit_22: bool = false,
5078 _reserved_bit_23: bool = false,
5079 _reserved_bit_24: bool = false,
5080 _reserved_bit_25: bool = false,
5081 _reserved_bit_26: bool = false,
5082 _reserved_bit_27: bool = false,
5083 _reserved_bit_28: bool = false,
5084 _reserved_bit_29: bool = false,
5085 _reserved_bit_30: bool = false,
5086 _reserved_bit_31: bool = false,
5087};
5088pub const @"NonSemantic.Shader.DebugInfo.100.BuildIdentifierFlags" = packed struct {
5089 IdentifierPossibleDuplicates: bool = false,
5090 _reserved_bit_1: bool = false,
5091 _reserved_bit_2: bool = false,
5092 _reserved_bit_3: bool = false,
5093 _reserved_bit_4: bool = false,
5094 _reserved_bit_5: bool = false,
5095 _reserved_bit_6: bool = false,
5096 _reserved_bit_7: bool = false,
5097 _reserved_bit_8: bool = false,
5098 _reserved_bit_9: bool = false,
5099 _reserved_bit_10: bool = false,
5100 _reserved_bit_11: bool = false,
5101 _reserved_bit_12: bool = false,
5102 _reserved_bit_13: bool = false,
5103 _reserved_bit_14: bool = false,
5104 _reserved_bit_15: bool = false,
5105 _reserved_bit_16: bool = false,
5106 _reserved_bit_17: bool = false,
5107 _reserved_bit_18: bool = false,
5108 _reserved_bit_19: bool = false,
5109 _reserved_bit_20: bool = false,
5110 _reserved_bit_21: bool = false,
5111 _reserved_bit_22: bool = false,
5112 _reserved_bit_23: bool = false,
5113 _reserved_bit_24: bool = false,
5114 _reserved_bit_25: bool = false,
5115 _reserved_bit_26: bool = false,
5116 _reserved_bit_27: bool = false,
5117 _reserved_bit_28: bool = false,
5118 _reserved_bit_29: bool = false,
5119 _reserved_bit_30: bool = false,
5120 _reserved_bit_31: bool = false,
5121};
5122pub const @"NonSemantic.Shader.DebugInfo.100.DebugBaseTypeAttributeEncoding" = enum(u32) {
5123 Unspecified = 0,
5124 Address = 1,
5125 Boolean = 2,
5126 Float = 3,
5127 Signed = 4,
5128 SignedChar = 5,
5129 Unsigned = 6,
5130 UnsignedChar = 7,
5131};
5132pub const @"NonSemantic.Shader.DebugInfo.100.DebugCompositeType" = enum(u32) {
5133 Class = 0,
5134 Structure = 1,
5135 Union = 2,
5136};
5137pub const @"NonSemantic.Shader.DebugInfo.100.DebugTypeQualifier" = enum(u32) {
5138 ConstType = 0,
5139 VolatileType = 1,
5140 RestrictType = 2,
5141 AtomicType = 3,
5142};
5143pub const @"NonSemantic.Shader.DebugInfo.100.DebugOperation" = enum(u32) {
5144 Deref = 0,
5145 Plus = 1,
5146 Minus = 2,
5147 PlusUconst = 3,
5148 BitPiece = 4,
5149 Swap = 5,
5150 Xderef = 6,
5151 StackValue = 7,
5152 Constu = 8,
5153 Fragment = 9,
5154
5155 pub const Extended = union(@"NonSemantic.Shader.DebugInfo.100.DebugOperation") {
5156 Deref,
5157 Plus,
5158 Minus,
5159 PlusUconst: struct { id_ref: IdRef },
5160 BitPiece: struct { id_ref_0: IdRef, id_ref_1: IdRef },
5161 Swap,
5162 Xderef,
5163 StackValue,
5164 Constu: struct { id_ref: IdRef },
5165 Fragment: struct { id_ref_0: IdRef, id_ref_1: IdRef },
5166 };
5167};
5168pub const @"NonSemantic.Shader.DebugInfo.100.DebugImportedEntity" = enum(u32) {
5169 ImportedModule = 0,
5170 ImportedDeclaration = 1,
5171};
5172pub const @"NonSemantic.ClspvReflection.6.KernelPropertyFlags" = packed struct {
5173 MayUsePrintf: bool = false,
5174 _reserved_bit_1: bool = false,
5175 _reserved_bit_2: bool = false,
5176 _reserved_bit_3: bool = false,
5177 _reserved_bit_4: bool = false,
5178 _reserved_bit_5: bool = false,
5179 _reserved_bit_6: bool = false,
5180 _reserved_bit_7: bool = false,
5181 _reserved_bit_8: bool = false,
5182 _reserved_bit_9: bool = false,
5183 _reserved_bit_10: bool = false,
5184 _reserved_bit_11: bool = false,
5185 _reserved_bit_12: bool = false,
5186 _reserved_bit_13: bool = false,
5187 _reserved_bit_14: bool = false,
5188 _reserved_bit_15: bool = false,
5189 _reserved_bit_16: bool = false,
5190 _reserved_bit_17: bool = false,
5191 _reserved_bit_18: bool = false,
5192 _reserved_bit_19: bool = false,
5193 _reserved_bit_20: bool = false,
5194 _reserved_bit_21: bool = false,
5195 _reserved_bit_22: bool = false,
5196 _reserved_bit_23: bool = false,
5197 _reserved_bit_24: bool = false,
5198 _reserved_bit_25: bool = false,
5199 _reserved_bit_26: bool = false,
5200 _reserved_bit_27: bool = false,
5201 _reserved_bit_28: bool = false,
5202 _reserved_bit_29: bool = false,
5203 _reserved_bit_30: bool = false,
5204 _reserved_bit_31: bool = false,
5205};
5206pub const @"DebugInfo.DebugInfoFlags" = packed struct {
5207 FlagIsProtected: bool = false,
5208 FlagIsPrivate: bool = false,
5209 FlagIsLocal: bool = false,
5210 FlagIsDefinition: bool = false,
5211 FlagFwdDecl: bool = false,
5212 FlagArtificial: bool = false,
5213 FlagExplicit: bool = false,
5214 FlagPrototyped: bool = false,
5215 FlagObjectPointer: bool = false,
5216 FlagStaticMember: bool = false,
5217 FlagIndirectVariable: bool = false,
5218 FlagLValueReference: bool = false,
5219 FlagRValueReference: bool = false,
5220 FlagIsOptimized: bool = false,
5221 _reserved_bit_14: bool = false,
5222 _reserved_bit_15: bool = false,
5223 _reserved_bit_16: bool = false,
5224 _reserved_bit_17: bool = false,
5225 _reserved_bit_18: bool = false,
5226 _reserved_bit_19: bool = false,
5227 _reserved_bit_20: bool = false,
5228 _reserved_bit_21: bool = false,
5229 _reserved_bit_22: bool = false,
5230 _reserved_bit_23: bool = false,
5231 _reserved_bit_24: bool = false,
5232 _reserved_bit_25: bool = false,
5233 _reserved_bit_26: bool = false,
5234 _reserved_bit_27: bool = false,
5235 _reserved_bit_28: bool = false,
5236 _reserved_bit_29: bool = false,
5237 _reserved_bit_30: bool = false,
5238 _reserved_bit_31: bool = false,
5239};
5240pub const @"DebugInfo.DebugBaseTypeAttributeEncoding" = enum(u32) {
5241 Unspecified = 0,
5242 Address = 1,
5243 Boolean = 2,
5244 Float = 4,
5245 Signed = 5,
5246 SignedChar = 6,
5247 Unsigned = 7,
5248 UnsignedChar = 8,
5249};
5250pub const @"DebugInfo.DebugCompositeType" = enum(u32) {
5251 Class = 0,
5252 Structure = 1,
5253 Union = 2,
5254};
5255pub const @"DebugInfo.DebugTypeQualifier" = enum(u32) {
5256 ConstType = 0,
5257 VolatileType = 1,
5258 RestrictType = 2,
5259};
5260pub const @"DebugInfo.DebugOperation" = enum(u32) {
5261 Deref = 0,
5262 Plus = 1,
5263 Minus = 2,
5264 PlusUconst = 3,
5265 BitPiece = 4,
5266 Swap = 5,
5267 Xderef = 6,
5268 StackValue = 7,
5269 Constu = 8,
5270
5271 pub const Extended = union(@"DebugInfo.DebugOperation") {
5272 Deref,
5273 Plus,
5274 Minus,
5275 PlusUconst: struct { literal_integer: LiteralInteger },
5276 BitPiece: struct { literal_integer_0: LiteralInteger, literal_integer_1: LiteralInteger },
5277 Swap,
5278 Xderef,
5279 StackValue,
5280 Constu: struct { literal_integer: LiteralInteger },
5281 };
5282};
5283pub const InstructionSet = enum {
5284 core,
5285 @"OpenCL.std",
5286 @"GLSL.std.450",
5287 @"OpenCL.DebugInfo.100",
5288 SPV_AMD_shader_ballot,
5289 @"NonSemantic.Shader.DebugInfo.100",
5290 @"NonSemantic.VkspReflection",
5291 @"NonSemantic.ClspvReflection.6",
5292 SPV_AMD_gcn_shader,
5293 SPV_AMD_shader_trinary_minmax,
5294 DebugInfo,
5295 @"NonSemantic.DebugPrintf",
5296 SPV_AMD_shader_explicit_vertex_parameter,
5297 @"NonSemantic.DebugBreak",
5298 zig,
5299
5300 pub fn instructions(self: InstructionSet) []const Instruction {
5301 return switch (self) {
5302 .core => &[_]Instruction{
5303 .{
5304 .name = "OpNop",
5305 .opcode = 0,
5306 .operands = &[_]Operand{},
5307 },
5308 .{
5309 .name = "OpUndef",
5310 .opcode = 1,
5311 .operands = &[_]Operand{
5312 .{ .kind = .IdResultType, .quantifier = .required },
5313 .{ .kind = .IdResult, .quantifier = .required },
5314 },
5315 },
5316 .{
5317 .name = "OpSourceContinued",
5318 .opcode = 2,
5319 .operands = &[_]Operand{
5320 .{ .kind = .LiteralString, .quantifier = .required },
5321 },
5322 },
5323 .{
5324 .name = "OpSource",
5325 .opcode = 3,
5326 .operands = &[_]Operand{
5327 .{ .kind = .SourceLanguage, .quantifier = .required },
5328 .{ .kind = .LiteralInteger, .quantifier = .required },
5329 .{ .kind = .IdRef, .quantifier = .optional },
5330 .{ .kind = .LiteralString, .quantifier = .optional },
5331 },
5332 },
5333 .{
5334 .name = "OpSourceExtension",
5335 .opcode = 4,
5336 .operands = &[_]Operand{
5337 .{ .kind = .LiteralString, .quantifier = .required },
5338 },
5339 },
5340 .{
5341 .name = "OpName",
5342 .opcode = 5,
5343 .operands = &[_]Operand{
5344 .{ .kind = .IdRef, .quantifier = .required },
5345 .{ .kind = .LiteralString, .quantifier = .required },
5346 },
5347 },
5348 .{
5349 .name = "OpMemberName",
5350 .opcode = 6,
5351 .operands = &[_]Operand{
5352 .{ .kind = .IdRef, .quantifier = .required },
5353 .{ .kind = .LiteralInteger, .quantifier = .required },
5354 .{ .kind = .LiteralString, .quantifier = .required },
5355 },
5356 },
5357 .{
5358 .name = "OpString",
5359 .opcode = 7,
5360 .operands = &[_]Operand{
5361 .{ .kind = .IdResult, .quantifier = .required },
5362 .{ .kind = .LiteralString, .quantifier = .required },
5363 },
5364 },
5365 .{
5366 .name = "OpLine",
5367 .opcode = 8,
5368 .operands = &[_]Operand{
5369 .{ .kind = .IdRef, .quantifier = .required },
5370 .{ .kind = .LiteralInteger, .quantifier = .required },
5371 .{ .kind = .LiteralInteger, .quantifier = .required },
5372 },
5373 },
5374 .{
5375 .name = "OpExtension",
5376 .opcode = 10,
5377 .operands = &[_]Operand{
5378 .{ .kind = .LiteralString, .quantifier = .required },
5379 },
5380 },
5381 .{
5382 .name = "OpExtInstImport",
5383 .opcode = 11,
5384 .operands = &[_]Operand{
5385 .{ .kind = .IdResult, .quantifier = .required },
5386 .{ .kind = .LiteralString, .quantifier = .required },
5387 },
5388 },
5389 .{
5390 .name = "OpExtInst",
5391 .opcode = 12,
5392 .operands = &[_]Operand{
5393 .{ .kind = .IdResultType, .quantifier = .required },
5394 .{ .kind = .IdResult, .quantifier = .required },
5395 .{ .kind = .IdRef, .quantifier = .required },
5396 .{ .kind = .LiteralExtInstInteger, .quantifier = .required },
5397 .{ .kind = .IdRef, .quantifier = .variadic },
5398 },
5399 },
5400 .{
5401 .name = "OpMemoryModel",
5402 .opcode = 14,
5403 .operands = &[_]Operand{
5404 .{ .kind = .AddressingModel, .quantifier = .required },
5405 .{ .kind = .MemoryModel, .quantifier = .required },
5406 },
5407 },
5408 .{
5409 .name = "OpEntryPoint",
5410 .opcode = 15,
5411 .operands = &[_]Operand{
5412 .{ .kind = .ExecutionModel, .quantifier = .required },
5413 .{ .kind = .IdRef, .quantifier = .required },
5414 .{ .kind = .LiteralString, .quantifier = .required },
5415 .{ .kind = .IdRef, .quantifier = .variadic },
5416 },
5417 },
5418 .{
5419 .name = "OpExecutionMode",
5420 .opcode = 16,
5421 .operands = &[_]Operand{
5422 .{ .kind = .IdRef, .quantifier = .required },
5423 .{ .kind = .ExecutionMode, .quantifier = .required },
5424 },
5425 },
5426 .{
5427 .name = "OpCapability",
5428 .opcode = 17,
5429 .operands = &[_]Operand{
5430 .{ .kind = .Capability, .quantifier = .required },
5431 },
5432 },
5433 .{
5434 .name = "OpTypeVoid",
5435 .opcode = 19,
5436 .operands = &[_]Operand{
5437 .{ .kind = .IdResult, .quantifier = .required },
5438 },
5439 },
5440 .{
5441 .name = "OpTypeBool",
5442 .opcode = 20,
5443 .operands = &[_]Operand{
5444 .{ .kind = .IdResult, .quantifier = .required },
5445 },
5446 },
5447 .{
5448 .name = "OpTypeInt",
5449 .opcode = 21,
5450 .operands = &[_]Operand{
5451 .{ .kind = .IdResult, .quantifier = .required },
5452 .{ .kind = .LiteralInteger, .quantifier = .required },
5453 .{ .kind = .LiteralInteger, .quantifier = .required },
5454 },
5455 },
5456 .{
5457 .name = "OpTypeFloat",
5458 .opcode = 22,
5459 .operands = &[_]Operand{
5460 .{ .kind = .IdResult, .quantifier = .required },
5461 .{ .kind = .LiteralInteger, .quantifier = .required },
5462 },
5463 },
5464 .{
5465 .name = "OpTypeVector",
5466 .opcode = 23,
5467 .operands = &[_]Operand{
5468 .{ .kind = .IdResult, .quantifier = .required },
5469 .{ .kind = .IdRef, .quantifier = .required },
5470 .{ .kind = .LiteralInteger, .quantifier = .required },
5471 },
5472 },
5473 .{
5474 .name = "OpTypeMatrix",
5475 .opcode = 24,
5476 .operands = &[_]Operand{
5477 .{ .kind = .IdResult, .quantifier = .required },
5478 .{ .kind = .IdRef, .quantifier = .required },
5479 .{ .kind = .LiteralInteger, .quantifier = .required },
5480 },
5481 },
5482 .{
5483 .name = "OpTypeImage",
5484 .opcode = 25,
5485 .operands = &[_]Operand{
5486 .{ .kind = .IdResult, .quantifier = .required },
5487 .{ .kind = .IdRef, .quantifier = .required },
5488 .{ .kind = .Dim, .quantifier = .required },
5489 .{ .kind = .LiteralInteger, .quantifier = .required },
5490 .{ .kind = .LiteralInteger, .quantifier = .required },
5491 .{ .kind = .LiteralInteger, .quantifier = .required },
5492 .{ .kind = .LiteralInteger, .quantifier = .required },
5493 .{ .kind = .ImageFormat, .quantifier = .required },
5494 .{ .kind = .AccessQualifier, .quantifier = .optional },
5495 },
5496 },
5497 .{
5498 .name = "OpTypeSampler",
5499 .opcode = 26,
5500 .operands = &[_]Operand{
5501 .{ .kind = .IdResult, .quantifier = .required },
5502 },
5503 },
5504 .{
5505 .name = "OpTypeSampledImage",
5506 .opcode = 27,
5507 .operands = &[_]Operand{
5508 .{ .kind = .IdResult, .quantifier = .required },
5509 .{ .kind = .IdRef, .quantifier = .required },
5510 },
5511 },
5512 .{
5513 .name = "OpTypeArray",
5514 .opcode = 28,
5515 .operands = &[_]Operand{
5516 .{ .kind = .IdResult, .quantifier = .required },
5517 .{ .kind = .IdRef, .quantifier = .required },
5518 .{ .kind = .IdRef, .quantifier = .required },
5519 },
5520 },
5521 .{
5522 .name = "OpTypeRuntimeArray",
5523 .opcode = 29,
5524 .operands = &[_]Operand{
5525 .{ .kind = .IdResult, .quantifier = .required },
5526 .{ .kind = .IdRef, .quantifier = .required },
5527 },
5528 },
5529 .{
5530 .name = "OpTypeStruct",
5531 .opcode = 30,
5532 .operands = &[_]Operand{
5533 .{ .kind = .IdResult, .quantifier = .required },
5534 .{ .kind = .IdRef, .quantifier = .variadic },
5535 },
5536 },
5537 .{
5538 .name = "OpTypeOpaque",
5539 .opcode = 31,
5540 .operands = &[_]Operand{
5541 .{ .kind = .IdResult, .quantifier = .required },
5542 .{ .kind = .LiteralString, .quantifier = .required },
5543 },
5544 },
5545 .{
5546 .name = "OpTypePointer",
5547 .opcode = 32,
5548 .operands = &[_]Operand{
5549 .{ .kind = .IdResult, .quantifier = .required },
5550 .{ .kind = .StorageClass, .quantifier = .required },
5551 .{ .kind = .IdRef, .quantifier = .required },
5552 },
5553 },
5554 .{
5555 .name = "OpTypeFunction",
5556 .opcode = 33,
5557 .operands = &[_]Operand{
5558 .{ .kind = .IdResult, .quantifier = .required },
5559 .{ .kind = .IdRef, .quantifier = .required },
5560 .{ .kind = .IdRef, .quantifier = .variadic },
5561 },
5562 },
5563 .{
5564 .name = "OpTypeEvent",
5565 .opcode = 34,
5566 .operands = &[_]Operand{
5567 .{ .kind = .IdResult, .quantifier = .required },
5568 },
5569 },
5570 .{
5571 .name = "OpTypeDeviceEvent",
5572 .opcode = 35,
5573 .operands = &[_]Operand{
5574 .{ .kind = .IdResult, .quantifier = .required },
5575 },
5576 },
5577 .{
5578 .name = "OpTypeReserveId",
5579 .opcode = 36,
5580 .operands = &[_]Operand{
5581 .{ .kind = .IdResult, .quantifier = .required },
5582 },
5583 },
5584 .{
5585 .name = "OpTypeQueue",
5586 .opcode = 37,
5587 .operands = &[_]Operand{
5588 .{ .kind = .IdResult, .quantifier = .required },
5589 },
5590 },
5591 .{
5592 .name = "OpTypePipe",
5593 .opcode = 38,
5594 .operands = &[_]Operand{
5595 .{ .kind = .IdResult, .quantifier = .required },
5596 .{ .kind = .AccessQualifier, .quantifier = .required },
5597 },
5598 },
5599 .{
5600 .name = "OpTypeForwardPointer",
5601 .opcode = 39,
5602 .operands = &[_]Operand{
5603 .{ .kind = .IdRef, .quantifier = .required },
5604 .{ .kind = .StorageClass, .quantifier = .required },
5605 },
5606 },
5607 .{
5608 .name = "OpConstantTrue",
5609 .opcode = 41,
5610 .operands = &[_]Operand{
5611 .{ .kind = .IdResultType, .quantifier = .required },
5612 .{ .kind = .IdResult, .quantifier = .required },
5613 },
5614 },
5615 .{
5616 .name = "OpConstantFalse",
5617 .opcode = 42,
5618 .operands = &[_]Operand{
5619 .{ .kind = .IdResultType, .quantifier = .required },
5620 .{ .kind = .IdResult, .quantifier = .required },
5621 },
5622 },
5623 .{
5624 .name = "OpConstant",
5625 .opcode = 43,
5626 .operands = &[_]Operand{
5627 .{ .kind = .IdResultType, .quantifier = .required },
5628 .{ .kind = .IdResult, .quantifier = .required },
5629 .{ .kind = .LiteralContextDependentNumber, .quantifier = .required },
5630 },
5631 },
5632 .{
5633 .name = "OpConstantComposite",
5634 .opcode = 44,
5635 .operands = &[_]Operand{
5636 .{ .kind = .IdResultType, .quantifier = .required },
5637 .{ .kind = .IdResult, .quantifier = .required },
5638 .{ .kind = .IdRef, .quantifier = .variadic },
5639 },
5640 },
5641 .{
5642 .name = "OpConstantSampler",
5643 .opcode = 45,
5644 .operands = &[_]Operand{
5645 .{ .kind = .IdResultType, .quantifier = .required },
5646 .{ .kind = .IdResult, .quantifier = .required },
5647 .{ .kind = .SamplerAddressingMode, .quantifier = .required },
5648 .{ .kind = .LiteralInteger, .quantifier = .required },
5649 .{ .kind = .SamplerFilterMode, .quantifier = .required },
5650 },
5651 },
5652 .{
5653 .name = "OpConstantNull",
5654 .opcode = 46,
5655 .operands = &[_]Operand{
5656 .{ .kind = .IdResultType, .quantifier = .required },
5657 .{ .kind = .IdResult, .quantifier = .required },
5658 },
5659 },
5660 .{
5661 .name = "OpSpecConstantTrue",
5662 .opcode = 48,
5663 .operands = &[_]Operand{
5664 .{ .kind = .IdResultType, .quantifier = .required },
5665 .{ .kind = .IdResult, .quantifier = .required },
5666 },
5667 },
5668 .{
5669 .name = "OpSpecConstantFalse",
5670 .opcode = 49,
5671 .operands = &[_]Operand{
5672 .{ .kind = .IdResultType, .quantifier = .required },
5673 .{ .kind = .IdResult, .quantifier = .required },
5674 },
5675 },
5676 .{
5677 .name = "OpSpecConstant",
5678 .opcode = 50,
5679 .operands = &[_]Operand{
5680 .{ .kind = .IdResultType, .quantifier = .required },
5681 .{ .kind = .IdResult, .quantifier = .required },
5682 .{ .kind = .LiteralContextDependentNumber, .quantifier = .required },
5683 },
5684 },
5685 .{
5686 .name = "OpSpecConstantComposite",
5687 .opcode = 51,
5688 .operands = &[_]Operand{
5689 .{ .kind = .IdResultType, .quantifier = .required },
5690 .{ .kind = .IdResult, .quantifier = .required },
5691 .{ .kind = .IdRef, .quantifier = .variadic },
5692 },
5693 },
5694 .{
5695 .name = "OpSpecConstantOp",
5696 .opcode = 52,
5697 .operands = &[_]Operand{
5698 .{ .kind = .IdResultType, .quantifier = .required },
5699 .{ .kind = .IdResult, .quantifier = .required },
5700 .{ .kind = .LiteralSpecConstantOpInteger, .quantifier = .required },
5701 },
5702 },
5703 .{
5704 .name = "OpFunction",
5705 .opcode = 54,
5706 .operands = &[_]Operand{
5707 .{ .kind = .IdResultType, .quantifier = .required },
5708 .{ .kind = .IdResult, .quantifier = .required },
5709 .{ .kind = .FunctionControl, .quantifier = .required },
5710 .{ .kind = .IdRef, .quantifier = .required },
5711 },
5712 },
5713 .{
5714 .name = "OpFunctionParameter",
5715 .opcode = 55,
5716 .operands = &[_]Operand{
5717 .{ .kind = .IdResultType, .quantifier = .required },
5718 .{ .kind = .IdResult, .quantifier = .required },
5719 },
5720 },
5721 .{
5722 .name = "OpFunctionEnd",
5723 .opcode = 56,
5724 .operands = &[_]Operand{},
5725 },
5726 .{
5727 .name = "OpFunctionCall",
5728 .opcode = 57,
5729 .operands = &[_]Operand{
5730 .{ .kind = .IdResultType, .quantifier = .required },
5731 .{ .kind = .IdResult, .quantifier = .required },
5732 .{ .kind = .IdRef, .quantifier = .required },
5733 .{ .kind = .IdRef, .quantifier = .variadic },
5734 },
5735 },
5736 .{
5737 .name = "OpVariable",
5738 .opcode = 59,
5739 .operands = &[_]Operand{
5740 .{ .kind = .IdResultType, .quantifier = .required },
5741 .{ .kind = .IdResult, .quantifier = .required },
5742 .{ .kind = .StorageClass, .quantifier = .required },
5743 .{ .kind = .IdRef, .quantifier = .optional },
5744 },
5745 },
5746 .{
5747 .name = "OpImageTexelPointer",
5748 .opcode = 60,
5749 .operands = &[_]Operand{
5750 .{ .kind = .IdResultType, .quantifier = .required },
5751 .{ .kind = .IdResult, .quantifier = .required },
5752 .{ .kind = .IdRef, .quantifier = .required },
5753 .{ .kind = .IdRef, .quantifier = .required },
5754 .{ .kind = .IdRef, .quantifier = .required },
5755 },
5756 },
5757 .{
5758 .name = "OpLoad",
5759 .opcode = 61,
5760 .operands = &[_]Operand{
5761 .{ .kind = .IdResultType, .quantifier = .required },
5762 .{ .kind = .IdResult, .quantifier = .required },
5763 .{ .kind = .IdRef, .quantifier = .required },
5764 .{ .kind = .MemoryAccess, .quantifier = .optional },
5765 },
5766 },
5767 .{
5768 .name = "OpStore",
5769 .opcode = 62,
5770 .operands = &[_]Operand{
5771 .{ .kind = .IdRef, .quantifier = .required },
5772 .{ .kind = .IdRef, .quantifier = .required },
5773 .{ .kind = .MemoryAccess, .quantifier = .optional },
5774 },
5775 },
5776 .{
5777 .name = "OpCopyMemory",
5778 .opcode = 63,
5779 .operands = &[_]Operand{
5780 .{ .kind = .IdRef, .quantifier = .required },
5781 .{ .kind = .IdRef, .quantifier = .required },
5782 .{ .kind = .MemoryAccess, .quantifier = .optional },
5783 .{ .kind = .MemoryAccess, .quantifier = .optional },
5784 },
5785 },
5786 .{
5787 .name = "OpCopyMemorySized",
5788 .opcode = 64,
5789 .operands = &[_]Operand{
5790 .{ .kind = .IdRef, .quantifier = .required },
5791 .{ .kind = .IdRef, .quantifier = .required },
5792 .{ .kind = .IdRef, .quantifier = .required },
5793 .{ .kind = .MemoryAccess, .quantifier = .optional },
5794 .{ .kind = .MemoryAccess, .quantifier = .optional },
5795 },
5796 },
5797 .{
5798 .name = "OpAccessChain",
5799 .opcode = 65,
5800 .operands = &[_]Operand{
5801 .{ .kind = .IdResultType, .quantifier = .required },
5802 .{ .kind = .IdResult, .quantifier = .required },
5803 .{ .kind = .IdRef, .quantifier = .required },
5804 .{ .kind = .IdRef, .quantifier = .variadic },
5805 },
5806 },
5807 .{
5808 .name = "OpInBoundsAccessChain",
5809 .opcode = 66,
5810 .operands = &[_]Operand{
5811 .{ .kind = .IdResultType, .quantifier = .required },
5812 .{ .kind = .IdResult, .quantifier = .required },
5813 .{ .kind = .IdRef, .quantifier = .required },
5814 .{ .kind = .IdRef, .quantifier = .variadic },
5815 },
5816 },
5817 .{
5818 .name = "OpPtrAccessChain",
5819 .opcode = 67,
5820 .operands = &[_]Operand{
5821 .{ .kind = .IdResultType, .quantifier = .required },
5822 .{ .kind = .IdResult, .quantifier = .required },
5823 .{ .kind = .IdRef, .quantifier = .required },
5824 .{ .kind = .IdRef, .quantifier = .required },
5825 .{ .kind = .IdRef, .quantifier = .variadic },
5826 },
5827 },
5828 .{
5829 .name = "OpArrayLength",
5830 .opcode = 68,
5831 .operands = &[_]Operand{
5832 .{ .kind = .IdResultType, .quantifier = .required },
5833 .{ .kind = .IdResult, .quantifier = .required },
5834 .{ .kind = .IdRef, .quantifier = .required },
5835 .{ .kind = .LiteralInteger, .quantifier = .required },
5836 },
5837 },
5838 .{
5839 .name = "OpGenericPtrMemSemantics",
5840 .opcode = 69,
5841 .operands = &[_]Operand{
5842 .{ .kind = .IdResultType, .quantifier = .required },
5843 .{ .kind = .IdResult, .quantifier = .required },
5844 .{ .kind = .IdRef, .quantifier = .required },
5845 },
5846 },
5847 .{
5848 .name = "OpInBoundsPtrAccessChain",
5849 .opcode = 70,
5850 .operands = &[_]Operand{
5851 .{ .kind = .IdResultType, .quantifier = .required },
5852 .{ .kind = .IdResult, .quantifier = .required },
5853 .{ .kind = .IdRef, .quantifier = .required },
5854 .{ .kind = .IdRef, .quantifier = .required },
5855 .{ .kind = .IdRef, .quantifier = .variadic },
5856 },
5857 },
5858 .{
5859 .name = "OpDecorate",
5860 .opcode = 71,
5861 .operands = &[_]Operand{
5862 .{ .kind = .IdRef, .quantifier = .required },
5863 .{ .kind = .Decoration, .quantifier = .required },
5864 },
5865 },
5866 .{
5867 .name = "OpMemberDecorate",
5868 .opcode = 72,
5869 .operands = &[_]Operand{
5870 .{ .kind = .IdRef, .quantifier = .required },
5871 .{ .kind = .LiteralInteger, .quantifier = .required },
5872 .{ .kind = .Decoration, .quantifier = .required },
5873 },
5874 },
5875 .{
5876 .name = "OpDecorationGroup",
5877 .opcode = 73,
5878 .operands = &[_]Operand{
5879 .{ .kind = .IdResult, .quantifier = .required },
5880 },
5881 },
5882 .{
5883 .name = "OpGroupDecorate",
5884 .opcode = 74,
5885 .operands = &[_]Operand{
5886 .{ .kind = .IdRef, .quantifier = .required },
5887 .{ .kind = .IdRef, .quantifier = .variadic },
5888 },
5889 },
5890 .{
5891 .name = "OpGroupMemberDecorate",
5892 .opcode = 75,
5893 .operands = &[_]Operand{
5894 .{ .kind = .IdRef, .quantifier = .required },
5895 .{ .kind = .PairIdRefLiteralInteger, .quantifier = .variadic },
5896 },
5897 },
5898 .{
5899 .name = "OpVectorExtractDynamic",
5900 .opcode = 77,
5901 .operands = &[_]Operand{
5902 .{ .kind = .IdResultType, .quantifier = .required },
5903 .{ .kind = .IdResult, .quantifier = .required },
5904 .{ .kind = .IdRef, .quantifier = .required },
5905 .{ .kind = .IdRef, .quantifier = .required },
5906 },
5907 },
5908 .{
5909 .name = "OpVectorInsertDynamic",
5910 .opcode = 78,
5911 .operands = &[_]Operand{
5912 .{ .kind = .IdResultType, .quantifier = .required },
5913 .{ .kind = .IdResult, .quantifier = .required },
5914 .{ .kind = .IdRef, .quantifier = .required },
5915 .{ .kind = .IdRef, .quantifier = .required },
5916 .{ .kind = .IdRef, .quantifier = .required },
5917 },
5918 },
5919 .{
5920 .name = "OpVectorShuffle",
5921 .opcode = 79,
5922 .operands = &[_]Operand{
5923 .{ .kind = .IdResultType, .quantifier = .required },
5924 .{ .kind = .IdResult, .quantifier = .required },
5925 .{ .kind = .IdRef, .quantifier = .required },
5926 .{ .kind = .IdRef, .quantifier = .required },
5927 .{ .kind = .LiteralInteger, .quantifier = .variadic },
5928 },
5929 },
5930 .{
5931 .name = "OpCompositeConstruct",
5932 .opcode = 80,
5933 .operands = &[_]Operand{
5934 .{ .kind = .IdResultType, .quantifier = .required },
5935 .{ .kind = .IdResult, .quantifier = .required },
5936 .{ .kind = .IdRef, .quantifier = .variadic },
5937 },
5938 },
5939 .{
5940 .name = "OpCompositeExtract",
5941 .opcode = 81,
5942 .operands = &[_]Operand{
5943 .{ .kind = .IdResultType, .quantifier = .required },
5944 .{ .kind = .IdResult, .quantifier = .required },
5945 .{ .kind = .IdRef, .quantifier = .required },
5946 .{ .kind = .LiteralInteger, .quantifier = .variadic },
5947 },
5948 },
5949 .{
5950 .name = "OpCompositeInsert",
5951 .opcode = 82,
5952 .operands = &[_]Operand{
5953 .{ .kind = .IdResultType, .quantifier = .required },
5954 .{ .kind = .IdResult, .quantifier = .required },
5955 .{ .kind = .IdRef, .quantifier = .required },
5956 .{ .kind = .IdRef, .quantifier = .required },
5957 .{ .kind = .LiteralInteger, .quantifier = .variadic },
5958 },
5959 },
5960 .{
5961 .name = "OpCopyObject",
5962 .opcode = 83,
5963 .operands = &[_]Operand{
5964 .{ .kind = .IdResultType, .quantifier = .required },
5965 .{ .kind = .IdResult, .quantifier = .required },
5966 .{ .kind = .IdRef, .quantifier = .required },
5967 },
5968 },
5969 .{
5970 .name = "OpTranspose",
5971 .opcode = 84,
5972 .operands = &[_]Operand{
5973 .{ .kind = .IdResultType, .quantifier = .required },
5974 .{ .kind = .IdResult, .quantifier = .required },
5975 .{ .kind = .IdRef, .quantifier = .required },
5976 },
5977 },
5978 .{
5979 .name = "OpSampledImage",
5980 .opcode = 86,
5981 .operands = &[_]Operand{
5982 .{ .kind = .IdResultType, .quantifier = .required },
5983 .{ .kind = .IdResult, .quantifier = .required },
5984 .{ .kind = .IdRef, .quantifier = .required },
5985 .{ .kind = .IdRef, .quantifier = .required },
5986 },
5987 },
5988 .{
5989 .name = "OpImageSampleImplicitLod",
5990 .opcode = 87,
5991 .operands = &[_]Operand{
5992 .{ .kind = .IdResultType, .quantifier = .required },
5993 .{ .kind = .IdResult, .quantifier = .required },
5994 .{ .kind = .IdRef, .quantifier = .required },
5995 .{ .kind = .IdRef, .quantifier = .required },
5996 .{ .kind = .ImageOperands, .quantifier = .optional },
5997 },
5998 },
5999 .{
6000 .name = "OpImageSampleExplicitLod",
6001 .opcode = 88,
6002 .operands = &[_]Operand{
6003 .{ .kind = .IdResultType, .quantifier = .required },
6004 .{ .kind = .IdResult, .quantifier = .required },
6005 .{ .kind = .IdRef, .quantifier = .required },
6006 .{ .kind = .IdRef, .quantifier = .required },
6007 .{ .kind = .ImageOperands, .quantifier = .required },
6008 },
6009 },
6010 .{
6011 .name = "OpImageSampleDrefImplicitLod",
6012 .opcode = 89,
6013 .operands = &[_]Operand{
6014 .{ .kind = .IdResultType, .quantifier = .required },
6015 .{ .kind = .IdResult, .quantifier = .required },
6016 .{ .kind = .IdRef, .quantifier = .required },
6017 .{ .kind = .IdRef, .quantifier = .required },
6018 .{ .kind = .IdRef, .quantifier = .required },
6019 .{ .kind = .ImageOperands, .quantifier = .optional },
6020 },
6021 },
6022 .{
6023 .name = "OpImageSampleDrefExplicitLod",
6024 .opcode = 90,
6025 .operands = &[_]Operand{
6026 .{ .kind = .IdResultType, .quantifier = .required },
6027 .{ .kind = .IdResult, .quantifier = .required },
6028 .{ .kind = .IdRef, .quantifier = .required },
6029 .{ .kind = .IdRef, .quantifier = .required },
6030 .{ .kind = .IdRef, .quantifier = .required },
6031 .{ .kind = .ImageOperands, .quantifier = .required },
6032 },
6033 },
6034 .{
6035 .name = "OpImageSampleProjImplicitLod",
6036 .opcode = 91,
6037 .operands = &[_]Operand{
6038 .{ .kind = .IdResultType, .quantifier = .required },
6039 .{ .kind = .IdResult, .quantifier = .required },
6040 .{ .kind = .IdRef, .quantifier = .required },
6041 .{ .kind = .IdRef, .quantifier = .required },
6042 .{ .kind = .ImageOperands, .quantifier = .optional },
6043 },
6044 },
6045 .{
6046 .name = "OpImageSampleProjExplicitLod",
6047 .opcode = 92,
6048 .operands = &[_]Operand{
6049 .{ .kind = .IdResultType, .quantifier = .required },
6050 .{ .kind = .IdResult, .quantifier = .required },
6051 .{ .kind = .IdRef, .quantifier = .required },
6052 .{ .kind = .IdRef, .quantifier = .required },
6053 .{ .kind = .ImageOperands, .quantifier = .required },
6054 },
6055 },
6056 .{
6057 .name = "OpImageSampleProjDrefImplicitLod",
6058 .opcode = 93,
6059 .operands = &[_]Operand{
6060 .{ .kind = .IdResultType, .quantifier = .required },
6061 .{ .kind = .IdResult, .quantifier = .required },
6062 .{ .kind = .IdRef, .quantifier = .required },
6063 .{ .kind = .IdRef, .quantifier = .required },
6064 .{ .kind = .IdRef, .quantifier = .required },
6065 .{ .kind = .ImageOperands, .quantifier = .optional },
6066 },
6067 },
6068 .{
6069 .name = "OpImageSampleProjDrefExplicitLod",
6070 .opcode = 94,
6071 .operands = &[_]Operand{
6072 .{ .kind = .IdResultType, .quantifier = .required },
6073 .{ .kind = .IdResult, .quantifier = .required },
6074 .{ .kind = .IdRef, .quantifier = .required },
6075 .{ .kind = .IdRef, .quantifier = .required },
6076 .{ .kind = .IdRef, .quantifier = .required },
6077 .{ .kind = .ImageOperands, .quantifier = .required },
6078 },
6079 },
6080 .{
6081 .name = "OpImageFetch",
6082 .opcode = 95,
6083 .operands = &[_]Operand{
6084 .{ .kind = .IdResultType, .quantifier = .required },
6085 .{ .kind = .IdResult, .quantifier = .required },
6086 .{ .kind = .IdRef, .quantifier = .required },
6087 .{ .kind = .IdRef, .quantifier = .required },
6088 .{ .kind = .ImageOperands, .quantifier = .optional },
6089 },
6090 },
6091 .{
6092 .name = "OpImageGather",
6093 .opcode = 96,
6094 .operands = &[_]Operand{
6095 .{ .kind = .IdResultType, .quantifier = .required },
6096 .{ .kind = .IdResult, .quantifier = .required },
6097 .{ .kind = .IdRef, .quantifier = .required },
6098 .{ .kind = .IdRef, .quantifier = .required },
6099 .{ .kind = .IdRef, .quantifier = .required },
6100 .{ .kind = .ImageOperands, .quantifier = .optional },
6101 },
6102 },
6103 .{
6104 .name = "OpImageDrefGather",
6105 .opcode = 97,
6106 .operands = &[_]Operand{
6107 .{ .kind = .IdResultType, .quantifier = .required },
6108 .{ .kind = .IdResult, .quantifier = .required },
6109 .{ .kind = .IdRef, .quantifier = .required },
6110 .{ .kind = .IdRef, .quantifier = .required },
6111 .{ .kind = .IdRef, .quantifier = .required },
6112 .{ .kind = .ImageOperands, .quantifier = .optional },
6113 },
6114 },
6115 .{
6116 .name = "OpImageRead",
6117 .opcode = 98,
6118 .operands = &[_]Operand{
6119 .{ .kind = .IdResultType, .quantifier = .required },
6120 .{ .kind = .IdResult, .quantifier = .required },
6121 .{ .kind = .IdRef, .quantifier = .required },
6122 .{ .kind = .IdRef, .quantifier = .required },
6123 .{ .kind = .ImageOperands, .quantifier = .optional },
6124 },
6125 },
6126 .{
6127 .name = "OpImageWrite",
6128 .opcode = 99,
6129 .operands = &[_]Operand{
6130 .{ .kind = .IdRef, .quantifier = .required },
6131 .{ .kind = .IdRef, .quantifier = .required },
6132 .{ .kind = .IdRef, .quantifier = .required },
6133 .{ .kind = .ImageOperands, .quantifier = .optional },
6134 },
6135 },
6136 .{
6137 .name = "OpImage",
6138 .opcode = 100,
6139 .operands = &[_]Operand{
6140 .{ .kind = .IdResultType, .quantifier = .required },
6141 .{ .kind = .IdResult, .quantifier = .required },
6142 .{ .kind = .IdRef, .quantifier = .required },
6143 },
6144 },
6145 .{
6146 .name = "OpImageQueryFormat",
6147 .opcode = 101,
6148 .operands = &[_]Operand{
6149 .{ .kind = .IdResultType, .quantifier = .required },
6150 .{ .kind = .IdResult, .quantifier = .required },
6151 .{ .kind = .IdRef, .quantifier = .required },
6152 },
6153 },
6154 .{
6155 .name = "OpImageQueryOrder",
6156 .opcode = 102,
6157 .operands = &[_]Operand{
6158 .{ .kind = .IdResultType, .quantifier = .required },
6159 .{ .kind = .IdResult, .quantifier = .required },
6160 .{ .kind = .IdRef, .quantifier = .required },
6161 },
6162 },
6163 .{
6164 .name = "OpImageQuerySizeLod",
6165 .opcode = 103,
6166 .operands = &[_]Operand{
6167 .{ .kind = .IdResultType, .quantifier = .required },
6168 .{ .kind = .IdResult, .quantifier = .required },
6169 .{ .kind = .IdRef, .quantifier = .required },
6170 .{ .kind = .IdRef, .quantifier = .required },
6171 },
6172 },
6173 .{
6174 .name = "OpImageQuerySize",
6175 .opcode = 104,
6176 .operands = &[_]Operand{
6177 .{ .kind = .IdResultType, .quantifier = .required },
6178 .{ .kind = .IdResult, .quantifier = .required },
6179 .{ .kind = .IdRef, .quantifier = .required },
6180 },
6181 },
6182 .{
6183 .name = "OpImageQueryLod",
6184 .opcode = 105,
6185 .operands = &[_]Operand{
6186 .{ .kind = .IdResultType, .quantifier = .required },
6187 .{ .kind = .IdResult, .quantifier = .required },
6188 .{ .kind = .IdRef, .quantifier = .required },
6189 .{ .kind = .IdRef, .quantifier = .required },
6190 },
6191 },
6192 .{
6193 .name = "OpImageQueryLevels",
6194 .opcode = 106,
6195 .operands = &[_]Operand{
6196 .{ .kind = .IdResultType, .quantifier = .required },
6197 .{ .kind = .IdResult, .quantifier = .required },
6198 .{ .kind = .IdRef, .quantifier = .required },
6199 },
6200 },
6201 .{
6202 .name = "OpImageQuerySamples",
6203 .opcode = 107,
6204 .operands = &[_]Operand{
6205 .{ .kind = .IdResultType, .quantifier = .required },
6206 .{ .kind = .IdResult, .quantifier = .required },
6207 .{ .kind = .IdRef, .quantifier = .required },
6208 },
6209 },
6210 .{
6211 .name = "OpConvertFToU",
6212 .opcode = 109,
6213 .operands = &[_]Operand{
6214 .{ .kind = .IdResultType, .quantifier = .required },
6215 .{ .kind = .IdResult, .quantifier = .required },
6216 .{ .kind = .IdRef, .quantifier = .required },
6217 },
6218 },
6219 .{
6220 .name = "OpConvertFToS",
6221 .opcode = 110,
6222 .operands = &[_]Operand{
6223 .{ .kind = .IdResultType, .quantifier = .required },
6224 .{ .kind = .IdResult, .quantifier = .required },
6225 .{ .kind = .IdRef, .quantifier = .required },
6226 },
6227 },
6228 .{
6229 .name = "OpConvertSToF",
6230 .opcode = 111,
6231 .operands = &[_]Operand{
6232 .{ .kind = .IdResultType, .quantifier = .required },
6233 .{ .kind = .IdResult, .quantifier = .required },
6234 .{ .kind = .IdRef, .quantifier = .required },
6235 },
6236 },
6237 .{
6238 .name = "OpConvertUToF",
6239 .opcode = 112,
6240 .operands = &[_]Operand{
6241 .{ .kind = .IdResultType, .quantifier = .required },
6242 .{ .kind = .IdResult, .quantifier = .required },
6243 .{ .kind = .IdRef, .quantifier = .required },
6244 },
6245 },
6246 .{
6247 .name = "OpUConvert",
6248 .opcode = 113,
6249 .operands = &[_]Operand{
6250 .{ .kind = .IdResultType, .quantifier = .required },
6251 .{ .kind = .IdResult, .quantifier = .required },
6252 .{ .kind = .IdRef, .quantifier = .required },
6253 },
6254 },
6255 .{
6256 .name = "OpSConvert",
6257 .opcode = 114,
6258 .operands = &[_]Operand{
6259 .{ .kind = .IdResultType, .quantifier = .required },
6260 .{ .kind = .IdResult, .quantifier = .required },
6261 .{ .kind = .IdRef, .quantifier = .required },
6262 },
6263 },
6264 .{
6265 .name = "OpFConvert",
6266 .opcode = 115,
6267 .operands = &[_]Operand{
6268 .{ .kind = .IdResultType, .quantifier = .required },
6269 .{ .kind = .IdResult, .quantifier = .required },
6270 .{ .kind = .IdRef, .quantifier = .required },
6271 },
6272 },
6273 .{
6274 .name = "OpQuantizeToF16",
6275 .opcode = 116,
6276 .operands = &[_]Operand{
6277 .{ .kind = .IdResultType, .quantifier = .required },
6278 .{ .kind = .IdResult, .quantifier = .required },
6279 .{ .kind = .IdRef, .quantifier = .required },
6280 },
6281 },
6282 .{
6283 .name = "OpConvertPtrToU",
6284 .opcode = 117,
6285 .operands = &[_]Operand{
6286 .{ .kind = .IdResultType, .quantifier = .required },
6287 .{ .kind = .IdResult, .quantifier = .required },
6288 .{ .kind = .IdRef, .quantifier = .required },
6289 },
6290 },
6291 .{
6292 .name = "OpSatConvertSToU",
6293 .opcode = 118,
6294 .operands = &[_]Operand{
6295 .{ .kind = .IdResultType, .quantifier = .required },
6296 .{ .kind = .IdResult, .quantifier = .required },
6297 .{ .kind = .IdRef, .quantifier = .required },
6298 },
6299 },
6300 .{
6301 .name = "OpSatConvertUToS",
6302 .opcode = 119,
6303 .operands = &[_]Operand{
6304 .{ .kind = .IdResultType, .quantifier = .required },
6305 .{ .kind = .IdResult, .quantifier = .required },
6306 .{ .kind = .IdRef, .quantifier = .required },
6307 },
6308 },
6309 .{
6310 .name = "OpConvertUToPtr",
6311 .opcode = 120,
6312 .operands = &[_]Operand{
6313 .{ .kind = .IdResultType, .quantifier = .required },
6314 .{ .kind = .IdResult, .quantifier = .required },
6315 .{ .kind = .IdRef, .quantifier = .required },
6316 },
6317 },
6318 .{
6319 .name = "OpPtrCastToGeneric",
6320 .opcode = 121,
6321 .operands = &[_]Operand{
6322 .{ .kind = .IdResultType, .quantifier = .required },
6323 .{ .kind = .IdResult, .quantifier = .required },
6324 .{ .kind = .IdRef, .quantifier = .required },
6325 },
6326 },
6327 .{
6328 .name = "OpGenericCastToPtr",
6329 .opcode = 122,
6330 .operands = &[_]Operand{
6331 .{ .kind = .IdResultType, .quantifier = .required },
6332 .{ .kind = .IdResult, .quantifier = .required },
6333 .{ .kind = .IdRef, .quantifier = .required },
6334 },
6335 },
6336 .{
6337 .name = "OpGenericCastToPtrExplicit",
6338 .opcode = 123,
6339 .operands = &[_]Operand{
6340 .{ .kind = .IdResultType, .quantifier = .required },
6341 .{ .kind = .IdResult, .quantifier = .required },
6342 .{ .kind = .IdRef, .quantifier = .required },
6343 .{ .kind = .StorageClass, .quantifier = .required },
6344 },
6345 },
6346 .{
6347 .name = "OpBitcast",
6348 .opcode = 124,
6349 .operands = &[_]Operand{
6350 .{ .kind = .IdResultType, .quantifier = .required },
6351 .{ .kind = .IdResult, .quantifier = .required },
6352 .{ .kind = .IdRef, .quantifier = .required },
6353 },
6354 },
6355 .{
6356 .name = "OpSNegate",
6357 .opcode = 126,
6358 .operands = &[_]Operand{
6359 .{ .kind = .IdResultType, .quantifier = .required },
6360 .{ .kind = .IdResult, .quantifier = .required },
6361 .{ .kind = .IdRef, .quantifier = .required },
6362 },
6363 },
6364 .{
6365 .name = "OpFNegate",
6366 .opcode = 127,
6367 .operands = &[_]Operand{
6368 .{ .kind = .IdResultType, .quantifier = .required },
6369 .{ .kind = .IdResult, .quantifier = .required },
6370 .{ .kind = .IdRef, .quantifier = .required },
6371 },
6372 },
6373 .{
6374 .name = "OpIAdd",
6375 .opcode = 128,
6376 .operands = &[_]Operand{
6377 .{ .kind = .IdResultType, .quantifier = .required },
6378 .{ .kind = .IdResult, .quantifier = .required },
6379 .{ .kind = .IdRef, .quantifier = .required },
6380 .{ .kind = .IdRef, .quantifier = .required },
6381 },
6382 },
6383 .{
6384 .name = "OpFAdd",
6385 .opcode = 129,
6386 .operands = &[_]Operand{
6387 .{ .kind = .IdResultType, .quantifier = .required },
6388 .{ .kind = .IdResult, .quantifier = .required },
6389 .{ .kind = .IdRef, .quantifier = .required },
6390 .{ .kind = .IdRef, .quantifier = .required },
6391 },
6392 },
6393 .{
6394 .name = "OpISub",
6395 .opcode = 130,
6396 .operands = &[_]Operand{
6397 .{ .kind = .IdResultType, .quantifier = .required },
6398 .{ .kind = .IdResult, .quantifier = .required },
6399 .{ .kind = .IdRef, .quantifier = .required },
6400 .{ .kind = .IdRef, .quantifier = .required },
6401 },
6402 },
6403 .{
6404 .name = "OpFSub",
6405 .opcode = 131,
6406 .operands = &[_]Operand{
6407 .{ .kind = .IdResultType, .quantifier = .required },
6408 .{ .kind = .IdResult, .quantifier = .required },
6409 .{ .kind = .IdRef, .quantifier = .required },
6410 .{ .kind = .IdRef, .quantifier = .required },
6411 },
6412 },
6413 .{
6414 .name = "OpIMul",
6415 .opcode = 132,
6416 .operands = &[_]Operand{
6417 .{ .kind = .IdResultType, .quantifier = .required },
6418 .{ .kind = .IdResult, .quantifier = .required },
6419 .{ .kind = .IdRef, .quantifier = .required },
6420 .{ .kind = .IdRef, .quantifier = .required },
6421 },
6422 },
6423 .{
6424 .name = "OpFMul",
6425 .opcode = 133,
6426 .operands = &[_]Operand{
6427 .{ .kind = .IdResultType, .quantifier = .required },
6428 .{ .kind = .IdResult, .quantifier = .required },
6429 .{ .kind = .IdRef, .quantifier = .required },
6430 .{ .kind = .IdRef, .quantifier = .required },
6431 },
6432 },
6433 .{
6434 .name = "OpUDiv",
6435 .opcode = 134,
6436 .operands = &[_]Operand{
6437 .{ .kind = .IdResultType, .quantifier = .required },
6438 .{ .kind = .IdResult, .quantifier = .required },
6439 .{ .kind = .IdRef, .quantifier = .required },
6440 .{ .kind = .IdRef, .quantifier = .required },
6441 },
6442 },
6443 .{
6444 .name = "OpSDiv",
6445 .opcode = 135,
6446 .operands = &[_]Operand{
6447 .{ .kind = .IdResultType, .quantifier = .required },
6448 .{ .kind = .IdResult, .quantifier = .required },
6449 .{ .kind = .IdRef, .quantifier = .required },
6450 .{ .kind = .IdRef, .quantifier = .required },
6451 },
6452 },
6453 .{
6454 .name = "OpFDiv",
6455 .opcode = 136,
6456 .operands = &[_]Operand{
6457 .{ .kind = .IdResultType, .quantifier = .required },
6458 .{ .kind = .IdResult, .quantifier = .required },
6459 .{ .kind = .IdRef, .quantifier = .required },
6460 .{ .kind = .IdRef, .quantifier = .required },
6461 },
6462 },
6463 .{
6464 .name = "OpUMod",
6465 .opcode = 137,
6466 .operands = &[_]Operand{
6467 .{ .kind = .IdResultType, .quantifier = .required },
6468 .{ .kind = .IdResult, .quantifier = .required },
6469 .{ .kind = .IdRef, .quantifier = .required },
6470 .{ .kind = .IdRef, .quantifier = .required },
6471 },
6472 },
6473 .{
6474 .name = "OpSRem",
6475 .opcode = 138,
6476 .operands = &[_]Operand{
6477 .{ .kind = .IdResultType, .quantifier = .required },
6478 .{ .kind = .IdResult, .quantifier = .required },
6479 .{ .kind = .IdRef, .quantifier = .required },
6480 .{ .kind = .IdRef, .quantifier = .required },
6481 },
6482 },
6483 .{
6484 .name = "OpSMod",
6485 .opcode = 139,
6486 .operands = &[_]Operand{
6487 .{ .kind = .IdResultType, .quantifier = .required },
6488 .{ .kind = .IdResult, .quantifier = .required },
6489 .{ .kind = .IdRef, .quantifier = .required },
6490 .{ .kind = .IdRef, .quantifier = .required },
6491 },
6492 },
6493 .{
6494 .name = "OpFRem",
6495 .opcode = 140,
6496 .operands = &[_]Operand{
6497 .{ .kind = .IdResultType, .quantifier = .required },
6498 .{ .kind = .IdResult, .quantifier = .required },
6499 .{ .kind = .IdRef, .quantifier = .required },
6500 .{ .kind = .IdRef, .quantifier = .required },
6501 },
6502 },
6503 .{
6504 .name = "OpFMod",
6505 .opcode = 141,
6506 .operands = &[_]Operand{
6507 .{ .kind = .IdResultType, .quantifier = .required },
6508 .{ .kind = .IdResult, .quantifier = .required },
6509 .{ .kind = .IdRef, .quantifier = .required },
6510 .{ .kind = .IdRef, .quantifier = .required },
6511 },
6512 },
6513 .{
6514 .name = "OpVectorTimesScalar",
6515 .opcode = 142,
6516 .operands = &[_]Operand{
6517 .{ .kind = .IdResultType, .quantifier = .required },
6518 .{ .kind = .IdResult, .quantifier = .required },
6519 .{ .kind = .IdRef, .quantifier = .required },
6520 .{ .kind = .IdRef, .quantifier = .required },
6521 },
6522 },
6523 .{
6524 .name = "OpMatrixTimesScalar",
6525 .opcode = 143,
6526 .operands = &[_]Operand{
6527 .{ .kind = .IdResultType, .quantifier = .required },
6528 .{ .kind = .IdResult, .quantifier = .required },
6529 .{ .kind = .IdRef, .quantifier = .required },
6530 .{ .kind = .IdRef, .quantifier = .required },
6531 },
6532 },
6533 .{
6534 .name = "OpVectorTimesMatrix",
6535 .opcode = 144,
6536 .operands = &[_]Operand{
6537 .{ .kind = .IdResultType, .quantifier = .required },
6538 .{ .kind = .IdResult, .quantifier = .required },
6539 .{ .kind = .IdRef, .quantifier = .required },
6540 .{ .kind = .IdRef, .quantifier = .required },
6541 },
6542 },
6543 .{
6544 .name = "OpMatrixTimesVector",
6545 .opcode = 145,
6546 .operands = &[_]Operand{
6547 .{ .kind = .IdResultType, .quantifier = .required },
6548 .{ .kind = .IdResult, .quantifier = .required },
6549 .{ .kind = .IdRef, .quantifier = .required },
6550 .{ .kind = .IdRef, .quantifier = .required },
6551 },
6552 },
6553 .{
6554 .name = "OpMatrixTimesMatrix",
6555 .opcode = 146,
6556 .operands = &[_]Operand{
6557 .{ .kind = .IdResultType, .quantifier = .required },
6558 .{ .kind = .IdResult, .quantifier = .required },
6559 .{ .kind = .IdRef, .quantifier = .required },
6560 .{ .kind = .IdRef, .quantifier = .required },
6561 },
6562 },
6563 .{
6564 .name = "OpOuterProduct",
6565 .opcode = 147,
6566 .operands = &[_]Operand{
6567 .{ .kind = .IdResultType, .quantifier = .required },
6568 .{ .kind = .IdResult, .quantifier = .required },
6569 .{ .kind = .IdRef, .quantifier = .required },
6570 .{ .kind = .IdRef, .quantifier = .required },
6571 },
6572 },
6573 .{
6574 .name = "OpDot",
6575 .opcode = 148,
6576 .operands = &[_]Operand{
6577 .{ .kind = .IdResultType, .quantifier = .required },
6578 .{ .kind = .IdResult, .quantifier = .required },
6579 .{ .kind = .IdRef, .quantifier = .required },
6580 .{ .kind = .IdRef, .quantifier = .required },
6581 },
6582 },
6583 .{
6584 .name = "OpIAddCarry",
6585 .opcode = 149,
6586 .operands = &[_]Operand{
6587 .{ .kind = .IdResultType, .quantifier = .required },
6588 .{ .kind = .IdResult, .quantifier = .required },
6589 .{ .kind = .IdRef, .quantifier = .required },
6590 .{ .kind = .IdRef, .quantifier = .required },
6591 },
6592 },
6593 .{
6594 .name = "OpISubBorrow",
6595 .opcode = 150,
6596 .operands = &[_]Operand{
6597 .{ .kind = .IdResultType, .quantifier = .required },
6598 .{ .kind = .IdResult, .quantifier = .required },
6599 .{ .kind = .IdRef, .quantifier = .required },
6600 .{ .kind = .IdRef, .quantifier = .required },
6601 },
6602 },
6603 .{
6604 .name = "OpUMulExtended",
6605 .opcode = 151,
6606 .operands = &[_]Operand{
6607 .{ .kind = .IdResultType, .quantifier = .required },
6608 .{ .kind = .IdResult, .quantifier = .required },
6609 .{ .kind = .IdRef, .quantifier = .required },
6610 .{ .kind = .IdRef, .quantifier = .required },
6611 },
6612 },
6613 .{
6614 .name = "OpSMulExtended",
6615 .opcode = 152,
6616 .operands = &[_]Operand{
6617 .{ .kind = .IdResultType, .quantifier = .required },
6618 .{ .kind = .IdResult, .quantifier = .required },
6619 .{ .kind = .IdRef, .quantifier = .required },
6620 .{ .kind = .IdRef, .quantifier = .required },
6621 },
6622 },
6623 .{
6624 .name = "OpAny",
6625 .opcode = 154,
6626 .operands = &[_]Operand{
6627 .{ .kind = .IdResultType, .quantifier = .required },
6628 .{ .kind = .IdResult, .quantifier = .required },
6629 .{ .kind = .IdRef, .quantifier = .required },
6630 },
6631 },
6632 .{
6633 .name = "OpAll",
6634 .opcode = 155,
6635 .operands = &[_]Operand{
6636 .{ .kind = .IdResultType, .quantifier = .required },
6637 .{ .kind = .IdResult, .quantifier = .required },
6638 .{ .kind = .IdRef, .quantifier = .required },
6639 },
6640 },
6641 .{
6642 .name = "OpIsNan",
6643 .opcode = 156,
6644 .operands = &[_]Operand{
6645 .{ .kind = .IdResultType, .quantifier = .required },
6646 .{ .kind = .IdResult, .quantifier = .required },
6647 .{ .kind = .IdRef, .quantifier = .required },
6648 },
6649 },
6650 .{
6651 .name = "OpIsInf",
6652 .opcode = 157,
6653 .operands = &[_]Operand{
6654 .{ .kind = .IdResultType, .quantifier = .required },
6655 .{ .kind = .IdResult, .quantifier = .required },
6656 .{ .kind = .IdRef, .quantifier = .required },
6657 },
6658 },
6659 .{
6660 .name = "OpIsFinite",
6661 .opcode = 158,
6662 .operands = &[_]Operand{
6663 .{ .kind = .IdResultType, .quantifier = .required },
6664 .{ .kind = .IdResult, .quantifier = .required },
6665 .{ .kind = .IdRef, .quantifier = .required },
6666 },
6667 },
6668 .{
6669 .name = "OpIsNormal",
6670 .opcode = 159,
6671 .operands = &[_]Operand{
6672 .{ .kind = .IdResultType, .quantifier = .required },
6673 .{ .kind = .IdResult, .quantifier = .required },
6674 .{ .kind = .IdRef, .quantifier = .required },
6675 },
6676 },
6677 .{
6678 .name = "OpSignBitSet",
6679 .opcode = 160,
6680 .operands = &[_]Operand{
6681 .{ .kind = .IdResultType, .quantifier = .required },
6682 .{ .kind = .IdResult, .quantifier = .required },
6683 .{ .kind = .IdRef, .quantifier = .required },
6684 },
6685 },
6686 .{
6687 .name = "OpLessOrGreater",
6688 .opcode = 161,
6689 .operands = &[_]Operand{
6690 .{ .kind = .IdResultType, .quantifier = .required },
6691 .{ .kind = .IdResult, .quantifier = .required },
6692 .{ .kind = .IdRef, .quantifier = .required },
6693 .{ .kind = .IdRef, .quantifier = .required },
6694 },
6695 },
6696 .{
6697 .name = "OpOrdered",
6698 .opcode = 162,
6699 .operands = &[_]Operand{
6700 .{ .kind = .IdResultType, .quantifier = .required },
6701 .{ .kind = .IdResult, .quantifier = .required },
6702 .{ .kind = .IdRef, .quantifier = .required },
6703 .{ .kind = .IdRef, .quantifier = .required },
6704 },
6705 },
6706 .{
6707 .name = "OpUnordered",
6708 .opcode = 163,
6709 .operands = &[_]Operand{
6710 .{ .kind = .IdResultType, .quantifier = .required },
6711 .{ .kind = .IdResult, .quantifier = .required },
6712 .{ .kind = .IdRef, .quantifier = .required },
6713 .{ .kind = .IdRef, .quantifier = .required },
6714 },
6715 },
6716 .{
6717 .name = "OpLogicalEqual",
6718 .opcode = 164,
6719 .operands = &[_]Operand{
6720 .{ .kind = .IdResultType, .quantifier = .required },
6721 .{ .kind = .IdResult, .quantifier = .required },
6722 .{ .kind = .IdRef, .quantifier = .required },
6723 .{ .kind = .IdRef, .quantifier = .required },
6724 },
6725 },
6726 .{
6727 .name = "OpLogicalNotEqual",
6728 .opcode = 165,
6729 .operands = &[_]Operand{
6730 .{ .kind = .IdResultType, .quantifier = .required },
6731 .{ .kind = .IdResult, .quantifier = .required },
6732 .{ .kind = .IdRef, .quantifier = .required },
6733 .{ .kind = .IdRef, .quantifier = .required },
6734 },
6735 },
6736 .{
6737 .name = "OpLogicalOr",
6738 .opcode = 166,
6739 .operands = &[_]Operand{
6740 .{ .kind = .IdResultType, .quantifier = .required },
6741 .{ .kind = .IdResult, .quantifier = .required },
6742 .{ .kind = .IdRef, .quantifier = .required },
6743 .{ .kind = .IdRef, .quantifier = .required },
6744 },
6745 },
6746 .{
6747 .name = "OpLogicalAnd",
6748 .opcode = 167,
6749 .operands = &[_]Operand{
6750 .{ .kind = .IdResultType, .quantifier = .required },
6751 .{ .kind = .IdResult, .quantifier = .required },
6752 .{ .kind = .IdRef, .quantifier = .required },
6753 .{ .kind = .IdRef, .quantifier = .required },
6754 },
6755 },
6756 .{
6757 .name = "OpLogicalNot",
6758 .opcode = 168,
6759 .operands = &[_]Operand{
6760 .{ .kind = .IdResultType, .quantifier = .required },
6761 .{ .kind = .IdResult, .quantifier = .required },
6762 .{ .kind = .IdRef, .quantifier = .required },
6763 },
6764 },
6765 .{
6766 .name = "OpSelect",
6767 .opcode = 169,
6768 .operands = &[_]Operand{
6769 .{ .kind = .IdResultType, .quantifier = .required },
6770 .{ .kind = .IdResult, .quantifier = .required },
6771 .{ .kind = .IdRef, .quantifier = .required },
6772 .{ .kind = .IdRef, .quantifier = .required },
6773 .{ .kind = .IdRef, .quantifier = .required },
6774 },
6775 },
6776 .{
6777 .name = "OpIEqual",
6778 .opcode = 170,
6779 .operands = &[_]Operand{
6780 .{ .kind = .IdResultType, .quantifier = .required },
6781 .{ .kind = .IdResult, .quantifier = .required },
6782 .{ .kind = .IdRef, .quantifier = .required },
6783 .{ .kind = .IdRef, .quantifier = .required },
6784 },
6785 },
6786 .{
6787 .name = "OpINotEqual",
6788 .opcode = 171,
6789 .operands = &[_]Operand{
6790 .{ .kind = .IdResultType, .quantifier = .required },
6791 .{ .kind = .IdResult, .quantifier = .required },
6792 .{ .kind = .IdRef, .quantifier = .required },
6793 .{ .kind = .IdRef, .quantifier = .required },
6794 },
6795 },
6796 .{
6797 .name = "OpUGreaterThan",
6798 .opcode = 172,
6799 .operands = &[_]Operand{
6800 .{ .kind = .IdResultType, .quantifier = .required },
6801 .{ .kind = .IdResult, .quantifier = .required },
6802 .{ .kind = .IdRef, .quantifier = .required },
6803 .{ .kind = .IdRef, .quantifier = .required },
6804 },
6805 },
6806 .{
6807 .name = "OpSGreaterThan",
6808 .opcode = 173,
6809 .operands = &[_]Operand{
6810 .{ .kind = .IdResultType, .quantifier = .required },
6811 .{ .kind = .IdResult, .quantifier = .required },
6812 .{ .kind = .IdRef, .quantifier = .required },
6813 .{ .kind = .IdRef, .quantifier = .required },
6814 },
6815 },
6816 .{
6817 .name = "OpUGreaterThanEqual",
6818 .opcode = 174,
6819 .operands = &[_]Operand{
6820 .{ .kind = .IdResultType, .quantifier = .required },
6821 .{ .kind = .IdResult, .quantifier = .required },
6822 .{ .kind = .IdRef, .quantifier = .required },
6823 .{ .kind = .IdRef, .quantifier = .required },
6824 },
6825 },
6826 .{
6827 .name = "OpSGreaterThanEqual",
6828 .opcode = 175,
6829 .operands = &[_]Operand{
6830 .{ .kind = .IdResultType, .quantifier = .required },
6831 .{ .kind = .IdResult, .quantifier = .required },
6832 .{ .kind = .IdRef, .quantifier = .required },
6833 .{ .kind = .IdRef, .quantifier = .required },
6834 },
6835 },
6836 .{
6837 .name = "OpULessThan",
6838 .opcode = 176,
6839 .operands = &[_]Operand{
6840 .{ .kind = .IdResultType, .quantifier = .required },
6841 .{ .kind = .IdResult, .quantifier = .required },
6842 .{ .kind = .IdRef, .quantifier = .required },
6843 .{ .kind = .IdRef, .quantifier = .required },
6844 },
6845 },
6846 .{
6847 .name = "OpSLessThan",
6848 .opcode = 177,
6849 .operands = &[_]Operand{
6850 .{ .kind = .IdResultType, .quantifier = .required },
6851 .{ .kind = .IdResult, .quantifier = .required },
6852 .{ .kind = .IdRef, .quantifier = .required },
6853 .{ .kind = .IdRef, .quantifier = .required },
6854 },
6855 },
6856 .{
6857 .name = "OpULessThanEqual",
6858 .opcode = 178,
6859 .operands = &[_]Operand{
6860 .{ .kind = .IdResultType, .quantifier = .required },
6861 .{ .kind = .IdResult, .quantifier = .required },
6862 .{ .kind = .IdRef, .quantifier = .required },
6863 .{ .kind = .IdRef, .quantifier = .required },
6864 },
6865 },
6866 .{
6867 .name = "OpSLessThanEqual",
6868 .opcode = 179,
6869 .operands = &[_]Operand{
6870 .{ .kind = .IdResultType, .quantifier = .required },
6871 .{ .kind = .IdResult, .quantifier = .required },
6872 .{ .kind = .IdRef, .quantifier = .required },
6873 .{ .kind = .IdRef, .quantifier = .required },
6874 },
6875 },
6876 .{
6877 .name = "OpFOrdEqual",
6878 .opcode = 180,
6879 .operands = &[_]Operand{
6880 .{ .kind = .IdResultType, .quantifier = .required },
6881 .{ .kind = .IdResult, .quantifier = .required },
6882 .{ .kind = .IdRef, .quantifier = .required },
6883 .{ .kind = .IdRef, .quantifier = .required },
6884 },
6885 },
6886 .{
6887 .name = "OpFUnordEqual",
6888 .opcode = 181,
6889 .operands = &[_]Operand{
6890 .{ .kind = .IdResultType, .quantifier = .required },
6891 .{ .kind = .IdResult, .quantifier = .required },
6892 .{ .kind = .IdRef, .quantifier = .required },
6893 .{ .kind = .IdRef, .quantifier = .required },
6894 },
6895 },
6896 .{
6897 .name = "OpFOrdNotEqual",
6898 .opcode = 182,
6899 .operands = &[_]Operand{
6900 .{ .kind = .IdResultType, .quantifier = .required },
6901 .{ .kind = .IdResult, .quantifier = .required },
6902 .{ .kind = .IdRef, .quantifier = .required },
6903 .{ .kind = .IdRef, .quantifier = .required },
6904 },
6905 },
6906 .{
6907 .name = "OpFUnordNotEqual",
6908 .opcode = 183,
6909 .operands = &[_]Operand{
6910 .{ .kind = .IdResultType, .quantifier = .required },
6911 .{ .kind = .IdResult, .quantifier = .required },
6912 .{ .kind = .IdRef, .quantifier = .required },
6913 .{ .kind = .IdRef, .quantifier = .required },
6914 },
6915 },
6916 .{
6917 .name = "OpFOrdLessThan",
6918 .opcode = 184,
6919 .operands = &[_]Operand{
6920 .{ .kind = .IdResultType, .quantifier = .required },
6921 .{ .kind = .IdResult, .quantifier = .required },
6922 .{ .kind = .IdRef, .quantifier = .required },
6923 .{ .kind = .IdRef, .quantifier = .required },
6924 },
6925 },
6926 .{
6927 .name = "OpFUnordLessThan",
6928 .opcode = 185,
6929 .operands = &[_]Operand{
6930 .{ .kind = .IdResultType, .quantifier = .required },
6931 .{ .kind = .IdResult, .quantifier = .required },
6932 .{ .kind = .IdRef, .quantifier = .required },
6933 .{ .kind = .IdRef, .quantifier = .required },
6934 },
6935 },
6936 .{
6937 .name = "OpFOrdGreaterThan",
6938 .opcode = 186,
6939 .operands = &[_]Operand{
6940 .{ .kind = .IdResultType, .quantifier = .required },
6941 .{ .kind = .IdResult, .quantifier = .required },
6942 .{ .kind = .IdRef, .quantifier = .required },
6943 .{ .kind = .IdRef, .quantifier = .required },
6944 },
6945 },
6946 .{
6947 .name = "OpFUnordGreaterThan",
6948 .opcode = 187,
6949 .operands = &[_]Operand{
6950 .{ .kind = .IdResultType, .quantifier = .required },
6951 .{ .kind = .IdResult, .quantifier = .required },
6952 .{ .kind = .IdRef, .quantifier = .required },
6953 .{ .kind = .IdRef, .quantifier = .required },
6954 },
6955 },
6956 .{
6957 .name = "OpFOrdLessThanEqual",
6958 .opcode = 188,
6959 .operands = &[_]Operand{
6960 .{ .kind = .IdResultType, .quantifier = .required },
6961 .{ .kind = .IdResult, .quantifier = .required },
6962 .{ .kind = .IdRef, .quantifier = .required },
6963 .{ .kind = .IdRef, .quantifier = .required },
6964 },
6965 },
6966 .{
6967 .name = "OpFUnordLessThanEqual",
6968 .opcode = 189,
6969 .operands = &[_]Operand{
6970 .{ .kind = .IdResultType, .quantifier = .required },
6971 .{ .kind = .IdResult, .quantifier = .required },
6972 .{ .kind = .IdRef, .quantifier = .required },
6973 .{ .kind = .IdRef, .quantifier = .required },
6974 },
6975 },
6976 .{
6977 .name = "OpFOrdGreaterThanEqual",
6978 .opcode = 190,
6979 .operands = &[_]Operand{
6980 .{ .kind = .IdResultType, .quantifier = .required },
6981 .{ .kind = .IdResult, .quantifier = .required },
6982 .{ .kind = .IdRef, .quantifier = .required },
6983 .{ .kind = .IdRef, .quantifier = .required },
6984 },
6985 },
6986 .{
6987 .name = "OpFUnordGreaterThanEqual",
6988 .opcode = 191,
6989 .operands = &[_]Operand{
6990 .{ .kind = .IdResultType, .quantifier = .required },
6991 .{ .kind = .IdResult, .quantifier = .required },
6992 .{ .kind = .IdRef, .quantifier = .required },
6993 .{ .kind = .IdRef, .quantifier = .required },
6994 },
6995 },
6996 .{
6997 .name = "OpShiftRightLogical",
6998 .opcode = 194,
6999 .operands = &[_]Operand{
7000 .{ .kind = .IdResultType, .quantifier = .required },
7001 .{ .kind = .IdResult, .quantifier = .required },
7002 .{ .kind = .IdRef, .quantifier = .required },
7003 .{ .kind = .IdRef, .quantifier = .required },
7004 },
7005 },
7006 .{
7007 .name = "OpShiftRightArithmetic",
7008 .opcode = 195,
7009 .operands = &[_]Operand{
7010 .{ .kind = .IdResultType, .quantifier = .required },
7011 .{ .kind = .IdResult, .quantifier = .required },
7012 .{ .kind = .IdRef, .quantifier = .required },
7013 .{ .kind = .IdRef, .quantifier = .required },
7014 },
7015 },
7016 .{
7017 .name = "OpShiftLeftLogical",
7018 .opcode = 196,
7019 .operands = &[_]Operand{
7020 .{ .kind = .IdResultType, .quantifier = .required },
7021 .{ .kind = .IdResult, .quantifier = .required },
7022 .{ .kind = .IdRef, .quantifier = .required },
7023 .{ .kind = .IdRef, .quantifier = .required },
7024 },
7025 },
7026 .{
7027 .name = "OpBitwiseOr",
7028 .opcode = 197,
7029 .operands = &[_]Operand{
7030 .{ .kind = .IdResultType, .quantifier = .required },
7031 .{ .kind = .IdResult, .quantifier = .required },
7032 .{ .kind = .IdRef, .quantifier = .required },
7033 .{ .kind = .IdRef, .quantifier = .required },
7034 },
7035 },
7036 .{
7037 .name = "OpBitwiseXor",
7038 .opcode = 198,
7039 .operands = &[_]Operand{
7040 .{ .kind = .IdResultType, .quantifier = .required },
7041 .{ .kind = .IdResult, .quantifier = .required },
7042 .{ .kind = .IdRef, .quantifier = .required },
7043 .{ .kind = .IdRef, .quantifier = .required },
7044 },
7045 },
7046 .{
7047 .name = "OpBitwiseAnd",
7048 .opcode = 199,
7049 .operands = &[_]Operand{
7050 .{ .kind = .IdResultType, .quantifier = .required },
7051 .{ .kind = .IdResult, .quantifier = .required },
7052 .{ .kind = .IdRef, .quantifier = .required },
7053 .{ .kind = .IdRef, .quantifier = .required },
7054 },
7055 },
7056 .{
7057 .name = "OpNot",
7058 .opcode = 200,
7059 .operands = &[_]Operand{
7060 .{ .kind = .IdResultType, .quantifier = .required },
7061 .{ .kind = .IdResult, .quantifier = .required },
7062 .{ .kind = .IdRef, .quantifier = .required },
7063 },
7064 },
7065 .{
7066 .name = "OpBitFieldInsert",
7067 .opcode = 201,
7068 .operands = &[_]Operand{
7069 .{ .kind = .IdResultType, .quantifier = .required },
7070 .{ .kind = .IdResult, .quantifier = .required },
7071 .{ .kind = .IdRef, .quantifier = .required },
7072 .{ .kind = .IdRef, .quantifier = .required },
7073 .{ .kind = .IdRef, .quantifier = .required },
7074 .{ .kind = .IdRef, .quantifier = .required },
7075 },
7076 },
7077 .{
7078 .name = "OpBitFieldSExtract",
7079 .opcode = 202,
7080 .operands = &[_]Operand{
7081 .{ .kind = .IdResultType, .quantifier = .required },
7082 .{ .kind = .IdResult, .quantifier = .required },
7083 .{ .kind = .IdRef, .quantifier = .required },
7084 .{ .kind = .IdRef, .quantifier = .required },
7085 .{ .kind = .IdRef, .quantifier = .required },
7086 },
7087 },
7088 .{
7089 .name = "OpBitFieldUExtract",
7090 .opcode = 203,
7091 .operands = &[_]Operand{
7092 .{ .kind = .IdResultType, .quantifier = .required },
7093 .{ .kind = .IdResult, .quantifier = .required },
7094 .{ .kind = .IdRef, .quantifier = .required },
7095 .{ .kind = .IdRef, .quantifier = .required },
7096 .{ .kind = .IdRef, .quantifier = .required },
7097 },
7098 },
7099 .{
7100 .name = "OpBitReverse",
7101 .opcode = 204,
7102 .operands = &[_]Operand{
7103 .{ .kind = .IdResultType, .quantifier = .required },
7104 .{ .kind = .IdResult, .quantifier = .required },
7105 .{ .kind = .IdRef, .quantifier = .required },
7106 },
7107 },
7108 .{
7109 .name = "OpBitCount",
7110 .opcode = 205,
7111 .operands = &[_]Operand{
7112 .{ .kind = .IdResultType, .quantifier = .required },
7113 .{ .kind = .IdResult, .quantifier = .required },
7114 .{ .kind = .IdRef, .quantifier = .required },
7115 },
7116 },
7117 .{
7118 .name = "OpDPdx",
7119 .opcode = 207,
7120 .operands = &[_]Operand{
7121 .{ .kind = .IdResultType, .quantifier = .required },
7122 .{ .kind = .IdResult, .quantifier = .required },
7123 .{ .kind = .IdRef, .quantifier = .required },
7124 },
7125 },
7126 .{
7127 .name = "OpDPdy",
7128 .opcode = 208,
7129 .operands = &[_]Operand{
7130 .{ .kind = .IdResultType, .quantifier = .required },
7131 .{ .kind = .IdResult, .quantifier = .required },
7132 .{ .kind = .IdRef, .quantifier = .required },
7133 },
7134 },
7135 .{
7136 .name = "OpFwidth",
7137 .opcode = 209,
7138 .operands = &[_]Operand{
7139 .{ .kind = .IdResultType, .quantifier = .required },
7140 .{ .kind = .IdResult, .quantifier = .required },
7141 .{ .kind = .IdRef, .quantifier = .required },
7142 },
7143 },
7144 .{
7145 .name = "OpDPdxFine",
7146 .opcode = 210,
7147 .operands = &[_]Operand{
7148 .{ .kind = .IdResultType, .quantifier = .required },
7149 .{ .kind = .IdResult, .quantifier = .required },
7150 .{ .kind = .IdRef, .quantifier = .required },
7151 },
7152 },
7153 .{
7154 .name = "OpDPdyFine",
7155 .opcode = 211,
7156 .operands = &[_]Operand{
7157 .{ .kind = .IdResultType, .quantifier = .required },
7158 .{ .kind = .IdResult, .quantifier = .required },
7159 .{ .kind = .IdRef, .quantifier = .required },
7160 },
7161 },
7162 .{
7163 .name = "OpFwidthFine",
7164 .opcode = 212,
7165 .operands = &[_]Operand{
7166 .{ .kind = .IdResultType, .quantifier = .required },
7167 .{ .kind = .IdResult, .quantifier = .required },
7168 .{ .kind = .IdRef, .quantifier = .required },
7169 },
7170 },
7171 .{
7172 .name = "OpDPdxCoarse",
7173 .opcode = 213,
7174 .operands = &[_]Operand{
7175 .{ .kind = .IdResultType, .quantifier = .required },
7176 .{ .kind = .IdResult, .quantifier = .required },
7177 .{ .kind = .IdRef, .quantifier = .required },
7178 },
7179 },
7180 .{
7181 .name = "OpDPdyCoarse",
7182 .opcode = 214,
7183 .operands = &[_]Operand{
7184 .{ .kind = .IdResultType, .quantifier = .required },
7185 .{ .kind = .IdResult, .quantifier = .required },
7186 .{ .kind = .IdRef, .quantifier = .required },
7187 },
7188 },
7189 .{
7190 .name = "OpFwidthCoarse",
7191 .opcode = 215,
7192 .operands = &[_]Operand{
7193 .{ .kind = .IdResultType, .quantifier = .required },
7194 .{ .kind = .IdResult, .quantifier = .required },
7195 .{ .kind = .IdRef, .quantifier = .required },
7196 },
7197 },
7198 .{
7199 .name = "OpEmitVertex",
7200 .opcode = 218,
7201 .operands = &[_]Operand{},
7202 },
7203 .{
7204 .name = "OpEndPrimitive",
7205 .opcode = 219,
7206 .operands = &[_]Operand{},
7207 },
7208 .{
7209 .name = "OpEmitStreamVertex",
7210 .opcode = 220,
7211 .operands = &[_]Operand{
7212 .{ .kind = .IdRef, .quantifier = .required },
7213 },
7214 },
7215 .{
7216 .name = "OpEndStreamPrimitive",
7217 .opcode = 221,
7218 .operands = &[_]Operand{
7219 .{ .kind = .IdRef, .quantifier = .required },
7220 },
7221 },
7222 .{
7223 .name = "OpControlBarrier",
7224 .opcode = 224,
7225 .operands = &[_]Operand{
7226 .{ .kind = .IdScope, .quantifier = .required },
7227 .{ .kind = .IdScope, .quantifier = .required },
7228 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7229 },
7230 },
7231 .{
7232 .name = "OpMemoryBarrier",
7233 .opcode = 225,
7234 .operands = &[_]Operand{
7235 .{ .kind = .IdScope, .quantifier = .required },
7236 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7237 },
7238 },
7239 .{
7240 .name = "OpAtomicLoad",
7241 .opcode = 227,
7242 .operands = &[_]Operand{
7243 .{ .kind = .IdResultType, .quantifier = .required },
7244 .{ .kind = .IdResult, .quantifier = .required },
7245 .{ .kind = .IdRef, .quantifier = .required },
7246 .{ .kind = .IdScope, .quantifier = .required },
7247 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7248 },
7249 },
7250 .{
7251 .name = "OpAtomicStore",
7252 .opcode = 228,
7253 .operands = &[_]Operand{
7254 .{ .kind = .IdRef, .quantifier = .required },
7255 .{ .kind = .IdScope, .quantifier = .required },
7256 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7257 .{ .kind = .IdRef, .quantifier = .required },
7258 },
7259 },
7260 .{
7261 .name = "OpAtomicExchange",
7262 .opcode = 229,
7263 .operands = &[_]Operand{
7264 .{ .kind = .IdResultType, .quantifier = .required },
7265 .{ .kind = .IdResult, .quantifier = .required },
7266 .{ .kind = .IdRef, .quantifier = .required },
7267 .{ .kind = .IdScope, .quantifier = .required },
7268 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7269 .{ .kind = .IdRef, .quantifier = .required },
7270 },
7271 },
7272 .{
7273 .name = "OpAtomicCompareExchange",
7274 .opcode = 230,
7275 .operands = &[_]Operand{
7276 .{ .kind = .IdResultType, .quantifier = .required },
7277 .{ .kind = .IdResult, .quantifier = .required },
7278 .{ .kind = .IdRef, .quantifier = .required },
7279 .{ .kind = .IdScope, .quantifier = .required },
7280 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7281 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7282 .{ .kind = .IdRef, .quantifier = .required },
7283 .{ .kind = .IdRef, .quantifier = .required },
7284 },
7285 },
7286 .{
7287 .name = "OpAtomicCompareExchangeWeak",
7288 .opcode = 231,
7289 .operands = &[_]Operand{
7290 .{ .kind = .IdResultType, .quantifier = .required },
7291 .{ .kind = .IdResult, .quantifier = .required },
7292 .{ .kind = .IdRef, .quantifier = .required },
7293 .{ .kind = .IdScope, .quantifier = .required },
7294 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7295 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7296 .{ .kind = .IdRef, .quantifier = .required },
7297 .{ .kind = .IdRef, .quantifier = .required },
7298 },
7299 },
7300 .{
7301 .name = "OpAtomicIIncrement",
7302 .opcode = 232,
7303 .operands = &[_]Operand{
7304 .{ .kind = .IdResultType, .quantifier = .required },
7305 .{ .kind = .IdResult, .quantifier = .required },
7306 .{ .kind = .IdRef, .quantifier = .required },
7307 .{ .kind = .IdScope, .quantifier = .required },
7308 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7309 },
7310 },
7311 .{
7312 .name = "OpAtomicIDecrement",
7313 .opcode = 233,
7314 .operands = &[_]Operand{
7315 .{ .kind = .IdResultType, .quantifier = .required },
7316 .{ .kind = .IdResult, .quantifier = .required },
7317 .{ .kind = .IdRef, .quantifier = .required },
7318 .{ .kind = .IdScope, .quantifier = .required },
7319 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7320 },
7321 },
7322 .{
7323 .name = "OpAtomicIAdd",
7324 .opcode = 234,
7325 .operands = &[_]Operand{
7326 .{ .kind = .IdResultType, .quantifier = .required },
7327 .{ .kind = .IdResult, .quantifier = .required },
7328 .{ .kind = .IdRef, .quantifier = .required },
7329 .{ .kind = .IdScope, .quantifier = .required },
7330 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7331 .{ .kind = .IdRef, .quantifier = .required },
7332 },
7333 },
7334 .{
7335 .name = "OpAtomicISub",
7336 .opcode = 235,
7337 .operands = &[_]Operand{
7338 .{ .kind = .IdResultType, .quantifier = .required },
7339 .{ .kind = .IdResult, .quantifier = .required },
7340 .{ .kind = .IdRef, .quantifier = .required },
7341 .{ .kind = .IdScope, .quantifier = .required },
7342 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7343 .{ .kind = .IdRef, .quantifier = .required },
7344 },
7345 },
7346 .{
7347 .name = "OpAtomicSMin",
7348 .opcode = 236,
7349 .operands = &[_]Operand{
7350 .{ .kind = .IdResultType, .quantifier = .required },
7351 .{ .kind = .IdResult, .quantifier = .required },
7352 .{ .kind = .IdRef, .quantifier = .required },
7353 .{ .kind = .IdScope, .quantifier = .required },
7354 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7355 .{ .kind = .IdRef, .quantifier = .required },
7356 },
7357 },
7358 .{
7359 .name = "OpAtomicUMin",
7360 .opcode = 237,
7361 .operands = &[_]Operand{
7362 .{ .kind = .IdResultType, .quantifier = .required },
7363 .{ .kind = .IdResult, .quantifier = .required },
7364 .{ .kind = .IdRef, .quantifier = .required },
7365 .{ .kind = .IdScope, .quantifier = .required },
7366 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7367 .{ .kind = .IdRef, .quantifier = .required },
7368 },
7369 },
7370 .{
7371 .name = "OpAtomicSMax",
7372 .opcode = 238,
7373 .operands = &[_]Operand{
7374 .{ .kind = .IdResultType, .quantifier = .required },
7375 .{ .kind = .IdResult, .quantifier = .required },
7376 .{ .kind = .IdRef, .quantifier = .required },
7377 .{ .kind = .IdScope, .quantifier = .required },
7378 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7379 .{ .kind = .IdRef, .quantifier = .required },
7380 },
7381 },
7382 .{
7383 .name = "OpAtomicUMax",
7384 .opcode = 239,
7385 .operands = &[_]Operand{
7386 .{ .kind = .IdResultType, .quantifier = .required },
7387 .{ .kind = .IdResult, .quantifier = .required },
7388 .{ .kind = .IdRef, .quantifier = .required },
7389 .{ .kind = .IdScope, .quantifier = .required },
7390 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7391 .{ .kind = .IdRef, .quantifier = .required },
7392 },
7393 },
7394 .{
7395 .name = "OpAtomicAnd",
7396 .opcode = 240,
7397 .operands = &[_]Operand{
7398 .{ .kind = .IdResultType, .quantifier = .required },
7399 .{ .kind = .IdResult, .quantifier = .required },
7400 .{ .kind = .IdRef, .quantifier = .required },
7401 .{ .kind = .IdScope, .quantifier = .required },
7402 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7403 .{ .kind = .IdRef, .quantifier = .required },
7404 },
7405 },
7406 .{
7407 .name = "OpAtomicOr",
7408 .opcode = 241,
7409 .operands = &[_]Operand{
7410 .{ .kind = .IdResultType, .quantifier = .required },
7411 .{ .kind = .IdResult, .quantifier = .required },
7412 .{ .kind = .IdRef, .quantifier = .required },
7413 .{ .kind = .IdScope, .quantifier = .required },
7414 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7415 .{ .kind = .IdRef, .quantifier = .required },
7416 },
7417 },
7418 .{
7419 .name = "OpAtomicXor",
7420 .opcode = 242,
7421 .operands = &[_]Operand{
7422 .{ .kind = .IdResultType, .quantifier = .required },
7423 .{ .kind = .IdResult, .quantifier = .required },
7424 .{ .kind = .IdRef, .quantifier = .required },
7425 .{ .kind = .IdScope, .quantifier = .required },
7426 .{ .kind = .IdMemorySemantics, .quantifier = .required },
7427 .{ .kind = .IdRef, .quantifier = .required },
7428 },
7429 },
7430 .{
7431 .name = "OpPhi",
7432 .opcode = 245,
7433 .operands = &[_]Operand{
7434 .{ .kind = .IdResultType, .quantifier = .required },
7435 .{ .kind = .IdResult, .quantifier = .required },
7436 .{ .kind = .PairIdRefIdRef, .quantifier = .variadic },
7437 },
7438 },
7439 .{
7440 .name = "OpLoopMerge",
7441 .opcode = 246,
7442 .operands = &[_]Operand{
7443 .{ .kind = .IdRef, .quantifier = .required },
7444 .{ .kind = .IdRef, .quantifier = .required },
7445 .{ .kind = .LoopControl, .quantifier = .required },
7446 },
7447 },
7448 .{
7449 .name = "OpSelectionMerge",
7450 .opcode = 247,
7451 .operands = &[_]Operand{
7452 .{ .kind = .IdRef, .quantifier = .required },
7453 .{ .kind = .SelectionControl, .quantifier = .required },
7454 },
7455 },
7456 .{
7457 .name = "OpLabel",
7458 .opcode = 248,
7459 .operands = &[_]Operand{
7460 .{ .kind = .IdResult, .quantifier = .required },
7461 },
7462 },
7463 .{
7464 .name = "OpBranch",
7465 .opcode = 249,
7466 .operands = &[_]Operand{
7467 .{ .kind = .IdRef, .quantifier = .required },
7468 },
7469 },
7470 .{
7471 .name = "OpBranchConditional",
7472 .opcode = 250,
7473 .operands = &[_]Operand{
7474 .{ .kind = .IdRef, .quantifier = .required },
7475 .{ .kind = .IdRef, .quantifier = .required },
7476 .{ .kind = .IdRef, .quantifier = .required },
7477 .{ .kind = .LiteralInteger, .quantifier = .variadic },
7478 },
7479 },
7480 .{
7481 .name = "OpSwitch",
7482 .opcode = 251,
7483 .operands = &[_]Operand{
7484 .{ .kind = .IdRef, .quantifier = .required },
7485 .{ .kind = .IdRef, .quantifier = .required },
7486 .{ .kind = .PairLiteralIntegerIdRef, .quantifier = .variadic },
7487 },
7488 },
7489 .{
7490 .name = "OpKill",
7491 .opcode = 252,
7492 .operands = &[_]Operand{},
7493 },
7494 .{
7495 .name = "OpReturn",
7496 .opcode = 253,
7497 .operands = &[_]Operand{},
7498 },
7499 .{
7500 .name = "OpReturnValue",
7501 .opcode = 254,
7502 .operands = &[_]Operand{
7503 .{ .kind = .IdRef, .quantifier = .required },
7504 },
7505 },
7506 .{
7507 .name = "OpUnreachable",
7508 .opcode = 255,
7509 .operands = &[_]Operand{},
7510 },
7511 .{
7512 .name = "OpLifetimeStart",
7513 .opcode = 256,
7514 .operands = &[_]Operand{
7515 .{ .kind = .IdRef, .quantifier = .required },
7516 .{ .kind = .LiteralInteger, .quantifier = .required },
7517 },
7518 },
7519 .{
7520 .name = "OpLifetimeStop",
7521 .opcode = 257,
7522 .operands = &[_]Operand{
7523 .{ .kind = .IdRef, .quantifier = .required },
7524 .{ .kind = .LiteralInteger, .quantifier = .required },
7525 },
7526 },
7527 .{
7528 .name = "OpGroupAsyncCopy",
7529 .opcode = 259,
7530 .operands = &[_]Operand{
7531 .{ .kind = .IdResultType, .quantifier = .required },
7532 .{ .kind = .IdResult, .quantifier = .required },
7533 .{ .kind = .IdScope, .quantifier = .required },
7534 .{ .kind = .IdRef, .quantifier = .required },
7535 .{ .kind = .IdRef, .quantifier = .required },
7536 .{ .kind = .IdRef, .quantifier = .required },
7537 .{ .kind = .IdRef, .quantifier = .required },
7538 .{ .kind = .IdRef, .quantifier = .required },
7539 },
7540 },
7541 .{
7542 .name = "OpGroupWaitEvents",
7543 .opcode = 260,
7544 .operands = &[_]Operand{
7545 .{ .kind = .IdScope, .quantifier = .required },
7546 .{ .kind = .IdRef, .quantifier = .required },
7547 .{ .kind = .IdRef, .quantifier = .required },
7548 },
7549 },
7550 .{
7551 .name = "OpGroupAll",
7552 .opcode = 261,
7553 .operands = &[_]Operand{
7554 .{ .kind = .IdResultType, .quantifier = .required },
7555 .{ .kind = .IdResult, .quantifier = .required },
7556 .{ .kind = .IdScope, .quantifier = .required },
7557 .{ .kind = .IdRef, .quantifier = .required },
7558 },
7559 },
7560 .{
7561 .name = "OpGroupAny",
7562 .opcode = 262,
7563 .operands = &[_]Operand{
7564 .{ .kind = .IdResultType, .quantifier = .required },
7565 .{ .kind = .IdResult, .quantifier = .required },
7566 .{ .kind = .IdScope, .quantifier = .required },
7567 .{ .kind = .IdRef, .quantifier = .required },
7568 },
7569 },
7570 .{
7571 .name = "OpGroupBroadcast",
7572 .opcode = 263,
7573 .operands = &[_]Operand{
7574 .{ .kind = .IdResultType, .quantifier = .required },
7575 .{ .kind = .IdResult, .quantifier = .required },
7576 .{ .kind = .IdScope, .quantifier = .required },
7577 .{ .kind = .IdRef, .quantifier = .required },
7578 .{ .kind = .IdRef, .quantifier = .required },
7579 },
7580 },
7581 .{
7582 .name = "OpGroupIAdd",
7583 .opcode = 264,
7584 .operands = &[_]Operand{
7585 .{ .kind = .IdResultType, .quantifier = .required },
7586 .{ .kind = .IdResult, .quantifier = .required },
7587 .{ .kind = .IdScope, .quantifier = .required },
7588 .{ .kind = .GroupOperation, .quantifier = .required },
7589 .{ .kind = .IdRef, .quantifier = .required },
7590 },
7591 },
7592 .{
7593 .name = "OpGroupFAdd",
7594 .opcode = 265,
7595 .operands = &[_]Operand{
7596 .{ .kind = .IdResultType, .quantifier = .required },
7597 .{ .kind = .IdResult, .quantifier = .required },
7598 .{ .kind = .IdScope, .quantifier = .required },
7599 .{ .kind = .GroupOperation, .quantifier = .required },
7600 .{ .kind = .IdRef, .quantifier = .required },
7601 },
7602 },
7603 .{
7604 .name = "OpGroupFMin",
7605 .opcode = 266,
7606 .operands = &[_]Operand{
7607 .{ .kind = .IdResultType, .quantifier = .required },
7608 .{ .kind = .IdResult, .quantifier = .required },
7609 .{ .kind = .IdScope, .quantifier = .required },
7610 .{ .kind = .GroupOperation, .quantifier = .required },
7611 .{ .kind = .IdRef, .quantifier = .required },
7612 },
7613 },
7614 .{
7615 .name = "OpGroupUMin",
7616 .opcode = 267,
7617 .operands = &[_]Operand{
7618 .{ .kind = .IdResultType, .quantifier = .required },
7619 .{ .kind = .IdResult, .quantifier = .required },
7620 .{ .kind = .IdScope, .quantifier = .required },
7621 .{ .kind = .GroupOperation, .quantifier = .required },
7622 .{ .kind = .IdRef, .quantifier = .required },
7623 },
7624 },
7625 .{
7626 .name = "OpGroupSMin",
7627 .opcode = 268,
7628 .operands = &[_]Operand{
7629 .{ .kind = .IdResultType, .quantifier = .required },
7630 .{ .kind = .IdResult, .quantifier = .required },
7631 .{ .kind = .IdScope, .quantifier = .required },
7632 .{ .kind = .GroupOperation, .quantifier = .required },
7633 .{ .kind = .IdRef, .quantifier = .required },
7634 },
7635 },
7636 .{
7637 .name = "OpGroupFMax",
7638 .opcode = 269,
7639 .operands = &[_]Operand{
7640 .{ .kind = .IdResultType, .quantifier = .required },
7641 .{ .kind = .IdResult, .quantifier = .required },
7642 .{ .kind = .IdScope, .quantifier = .required },
7643 .{ .kind = .GroupOperation, .quantifier = .required },
7644 .{ .kind = .IdRef, .quantifier = .required },
7645 },
7646 },
7647 .{
7648 .name = "OpGroupUMax",
7649 .opcode = 270,
7650 .operands = &[_]Operand{
7651 .{ .kind = .IdResultType, .quantifier = .required },
7652 .{ .kind = .IdResult, .quantifier = .required },
7653 .{ .kind = .IdScope, .quantifier = .required },
7654 .{ .kind = .GroupOperation, .quantifier = .required },
7655 .{ .kind = .IdRef, .quantifier = .required },
7656 },
7657 },
7658 .{
7659 .name = "OpGroupSMax",
7660 .opcode = 271,
7661 .operands = &[_]Operand{
7662 .{ .kind = .IdResultType, .quantifier = .required },
7663 .{ .kind = .IdResult, .quantifier = .required },
7664 .{ .kind = .IdScope, .quantifier = .required },
7665 .{ .kind = .GroupOperation, .quantifier = .required },
7666 .{ .kind = .IdRef, .quantifier = .required },
7667 },
7668 },
7669 .{
7670 .name = "OpReadPipe",
7671 .opcode = 274,
7672 .operands = &[_]Operand{
7673 .{ .kind = .IdResultType, .quantifier = .required },
7674 .{ .kind = .IdResult, .quantifier = .required },
7675 .{ .kind = .IdRef, .quantifier = .required },
7676 .{ .kind = .IdRef, .quantifier = .required },
7677 .{ .kind = .IdRef, .quantifier = .required },
7678 .{ .kind = .IdRef, .quantifier = .required },
7679 },
7680 },
7681 .{
7682 .name = "OpWritePipe",
7683 .opcode = 275,
7684 .operands = &[_]Operand{
7685 .{ .kind = .IdResultType, .quantifier = .required },
7686 .{ .kind = .IdResult, .quantifier = .required },
7687 .{ .kind = .IdRef, .quantifier = .required },
7688 .{ .kind = .IdRef, .quantifier = .required },
7689 .{ .kind = .IdRef, .quantifier = .required },
7690 .{ .kind = .IdRef, .quantifier = .required },
7691 },
7692 },
7693 .{
7694 .name = "OpReservedReadPipe",
7695 .opcode = 276,
7696 .operands = &[_]Operand{
7697 .{ .kind = .IdResultType, .quantifier = .required },
7698 .{ .kind = .IdResult, .quantifier = .required },
7699 .{ .kind = .IdRef, .quantifier = .required },
7700 .{ .kind = .IdRef, .quantifier = .required },
7701 .{ .kind = .IdRef, .quantifier = .required },
7702 .{ .kind = .IdRef, .quantifier = .required },
7703 .{ .kind = .IdRef, .quantifier = .required },
7704 .{ .kind = .IdRef, .quantifier = .required },
7705 },
7706 },
7707 .{
7708 .name = "OpReservedWritePipe",
7709 .opcode = 277,
7710 .operands = &[_]Operand{
7711 .{ .kind = .IdResultType, .quantifier = .required },
7712 .{ .kind = .IdResult, .quantifier = .required },
7713 .{ .kind = .IdRef, .quantifier = .required },
7714 .{ .kind = .IdRef, .quantifier = .required },
7715 .{ .kind = .IdRef, .quantifier = .required },
7716 .{ .kind = .IdRef, .quantifier = .required },
7717 .{ .kind = .IdRef, .quantifier = .required },
7718 .{ .kind = .IdRef, .quantifier = .required },
7719 },
7720 },
7721 .{
7722 .name = "OpReserveReadPipePackets",
7723 .opcode = 278,
7724 .operands = &[_]Operand{
7725 .{ .kind = .IdResultType, .quantifier = .required },
7726 .{ .kind = .IdResult, .quantifier = .required },
7727 .{ .kind = .IdRef, .quantifier = .required },
7728 .{ .kind = .IdRef, .quantifier = .required },
7729 .{ .kind = .IdRef, .quantifier = .required },
7730 .{ .kind = .IdRef, .quantifier = .required },
7731 },
7732 },
7733 .{
7734 .name = "OpReserveWritePipePackets",
7735 .opcode = 279,
7736 .operands = &[_]Operand{
7737 .{ .kind = .IdResultType, .quantifier = .required },
7738 .{ .kind = .IdResult, .quantifier = .required },
7739 .{ .kind = .IdRef, .quantifier = .required },
7740 .{ .kind = .IdRef, .quantifier = .required },
7741 .{ .kind = .IdRef, .quantifier = .required },
7742 .{ .kind = .IdRef, .quantifier = .required },
7743 },
7744 },
7745 .{
7746 .name = "OpCommitReadPipe",
7747 .opcode = 280,
7748 .operands = &[_]Operand{
7749 .{ .kind = .IdRef, .quantifier = .required },
7750 .{ .kind = .IdRef, .quantifier = .required },
7751 .{ .kind = .IdRef, .quantifier = .required },
7752 .{ .kind = .IdRef, .quantifier = .required },
7753 },
7754 },
7755 .{
7756 .name = "OpCommitWritePipe",
7757 .opcode = 281,
7758 .operands = &[_]Operand{
7759 .{ .kind = .IdRef, .quantifier = .required },
7760 .{ .kind = .IdRef, .quantifier = .required },
7761 .{ .kind = .IdRef, .quantifier = .required },
7762 .{ .kind = .IdRef, .quantifier = .required },
7763 },
7764 },
7765 .{
7766 .name = "OpIsValidReserveId",
7767 .opcode = 282,
7768 .operands = &[_]Operand{
7769 .{ .kind = .IdResultType, .quantifier = .required },
7770 .{ .kind = .IdResult, .quantifier = .required },
7771 .{ .kind = .IdRef, .quantifier = .required },
7772 },
7773 },
7774 .{
7775 .name = "OpGetNumPipePackets",
7776 .opcode = 283,
7777 .operands = &[_]Operand{
7778 .{ .kind = .IdResultType, .quantifier = .required },
7779 .{ .kind = .IdResult, .quantifier = .required },
7780 .{ .kind = .IdRef, .quantifier = .required },
7781 .{ .kind = .IdRef, .quantifier = .required },
7782 .{ .kind = .IdRef, .quantifier = .required },
7783 },
7784 },
7785 .{
7786 .name = "OpGetMaxPipePackets",
7787 .opcode = 284,
7788 .operands = &[_]Operand{
7789 .{ .kind = .IdResultType, .quantifier = .required },
7790 .{ .kind = .IdResult, .quantifier = .required },
7791 .{ .kind = .IdRef, .quantifier = .required },
7792 .{ .kind = .IdRef, .quantifier = .required },
7793 .{ .kind = .IdRef, .quantifier = .required },
7794 },
7795 },
7796 .{
7797 .name = "OpGroupReserveReadPipePackets",
7798 .opcode = 285,
7799 .operands = &[_]Operand{
7800 .{ .kind = .IdResultType, .quantifier = .required },
7801 .{ .kind = .IdResult, .quantifier = .required },
7802 .{ .kind = .IdScope, .quantifier = .required },
7803 .{ .kind = .IdRef, .quantifier = .required },
7804 .{ .kind = .IdRef, .quantifier = .required },
7805 .{ .kind = .IdRef, .quantifier = .required },
7806 .{ .kind = .IdRef, .quantifier = .required },
7807 },
7808 },
7809 .{
7810 .name = "OpGroupReserveWritePipePackets",
7811 .opcode = 286,
7812 .operands = &[_]Operand{
7813 .{ .kind = .IdResultType, .quantifier = .required },
7814 .{ .kind = .IdResult, .quantifier = .required },
7815 .{ .kind = .IdScope, .quantifier = .required },
7816 .{ .kind = .IdRef, .quantifier = .required },
7817 .{ .kind = .IdRef, .quantifier = .required },
7818 .{ .kind = .IdRef, .quantifier = .required },
7819 .{ .kind = .IdRef, .quantifier = .required },
7820 },
7821 },
7822 .{
7823 .name = "OpGroupCommitReadPipe",
7824 .opcode = 287,
7825 .operands = &[_]Operand{
7826 .{ .kind = .IdScope, .quantifier = .required },
7827 .{ .kind = .IdRef, .quantifier = .required },
7828 .{ .kind = .IdRef, .quantifier = .required },
7829 .{ .kind = .IdRef, .quantifier = .required },
7830 .{ .kind = .IdRef, .quantifier = .required },
7831 },
7832 },
7833 .{
7834 .name = "OpGroupCommitWritePipe",
7835 .opcode = 288,
7836 .operands = &[_]Operand{
7837 .{ .kind = .IdScope, .quantifier = .required },
7838 .{ .kind = .IdRef, .quantifier = .required },
7839 .{ .kind = .IdRef, .quantifier = .required },
7840 .{ .kind = .IdRef, .quantifier = .required },
7841 .{ .kind = .IdRef, .quantifier = .required },
7842 },
7843 },
7844 .{
7845 .name = "OpEnqueueMarker",
7846 .opcode = 291,
7847 .operands = &[_]Operand{
7848 .{ .kind = .IdResultType, .quantifier = .required },
7849 .{ .kind = .IdResult, .quantifier = .required },
7850 .{ .kind = .IdRef, .quantifier = .required },
7851 .{ .kind = .IdRef, .quantifier = .required },
7852 .{ .kind = .IdRef, .quantifier = .required },
7853 .{ .kind = .IdRef, .quantifier = .required },
7854 },
7855 },
7856 .{
7857 .name = "OpEnqueueKernel",
7858 .opcode = 292,
7859 .operands = &[_]Operand{
7860 .{ .kind = .IdResultType, .quantifier = .required },
7861 .{ .kind = .IdResult, .quantifier = .required },
7862 .{ .kind = .IdRef, .quantifier = .required },
7863 .{ .kind = .IdRef, .quantifier = .required },
7864 .{ .kind = .IdRef, .quantifier = .required },
7865 .{ .kind = .IdRef, .quantifier = .required },
7866 .{ .kind = .IdRef, .quantifier = .required },
7867 .{ .kind = .IdRef, .quantifier = .required },
7868 .{ .kind = .IdRef, .quantifier = .required },
7869 .{ .kind = .IdRef, .quantifier = .required },
7870 .{ .kind = .IdRef, .quantifier = .required },
7871 .{ .kind = .IdRef, .quantifier = .required },
7872 .{ .kind = .IdRef, .quantifier = .variadic },
7873 },
7874 },
7875 .{
7876 .name = "OpGetKernelNDrangeSubGroupCount",
7877 .opcode = 293,
7878 .operands = &[_]Operand{
7879 .{ .kind = .IdResultType, .quantifier = .required },
7880 .{ .kind = .IdResult, .quantifier = .required },
7881 .{ .kind = .IdRef, .quantifier = .required },
7882 .{ .kind = .IdRef, .quantifier = .required },
7883 .{ .kind = .IdRef, .quantifier = .required },
7884 .{ .kind = .IdRef, .quantifier = .required },
7885 .{ .kind = .IdRef, .quantifier = .required },
7886 },
7887 },
7888 .{
7889 .name = "OpGetKernelNDrangeMaxSubGroupSize",
7890 .opcode = 294,
7891 .operands = &[_]Operand{
7892 .{ .kind = .IdResultType, .quantifier = .required },
7893 .{ .kind = .IdResult, .quantifier = .required },
7894 .{ .kind = .IdRef, .quantifier = .required },
7895 .{ .kind = .IdRef, .quantifier = .required },
7896 .{ .kind = .IdRef, .quantifier = .required },
7897 .{ .kind = .IdRef, .quantifier = .required },
7898 .{ .kind = .IdRef, .quantifier = .required },
7899 },
7900 },
7901 .{
7902 .name = "OpGetKernelWorkGroupSize",
7903 .opcode = 295,
7904 .operands = &[_]Operand{
7905 .{ .kind = .IdResultType, .quantifier = .required },
7906 .{ .kind = .IdResult, .quantifier = .required },
7907 .{ .kind = .IdRef, .quantifier = .required },
7908 .{ .kind = .IdRef, .quantifier = .required },
7909 .{ .kind = .IdRef, .quantifier = .required },
7910 .{ .kind = .IdRef, .quantifier = .required },
7911 },
7912 },
7913 .{
7914 .name = "OpGetKernelPreferredWorkGroupSizeMultiple",
7915 .opcode = 296,
7916 .operands = &[_]Operand{
7917 .{ .kind = .IdResultType, .quantifier = .required },
7918 .{ .kind = .IdResult, .quantifier = .required },
7919 .{ .kind = .IdRef, .quantifier = .required },
7920 .{ .kind = .IdRef, .quantifier = .required },
7921 .{ .kind = .IdRef, .quantifier = .required },
7922 .{ .kind = .IdRef, .quantifier = .required },
7923 },
7924 },
7925 .{
7926 .name = "OpRetainEvent",
7927 .opcode = 297,
7928 .operands = &[_]Operand{
7929 .{ .kind = .IdRef, .quantifier = .required },
7930 },
7931 },
7932 .{
7933 .name = "OpReleaseEvent",
7934 .opcode = 298,
7935 .operands = &[_]Operand{
7936 .{ .kind = .IdRef, .quantifier = .required },
7937 },
7938 },
7939 .{
7940 .name = "OpCreateUserEvent",
7941 .opcode = 299,
7942 .operands = &[_]Operand{
7943 .{ .kind = .IdResultType, .quantifier = .required },
7944 .{ .kind = .IdResult, .quantifier = .required },
7945 },
7946 },
7947 .{
7948 .name = "OpIsValidEvent",
7949 .opcode = 300,
7950 .operands = &[_]Operand{
7951 .{ .kind = .IdResultType, .quantifier = .required },
7952 .{ .kind = .IdResult, .quantifier = .required },
7953 .{ .kind = .IdRef, .quantifier = .required },
7954 },
7955 },
7956 .{
7957 .name = "OpSetUserEventStatus",
7958 .opcode = 301,
7959 .operands = &[_]Operand{
7960 .{ .kind = .IdRef, .quantifier = .required },
7961 .{ .kind = .IdRef, .quantifier = .required },
7962 },
7963 },
7964 .{
7965 .name = "OpCaptureEventProfilingInfo",
7966 .opcode = 302,
7967 .operands = &[_]Operand{
7968 .{ .kind = .IdRef, .quantifier = .required },
7969 .{ .kind = .IdRef, .quantifier = .required },
7970 .{ .kind = .IdRef, .quantifier = .required },
7971 },
7972 },
7973 .{
7974 .name = "OpGetDefaultQueue",
7975 .opcode = 303,
7976 .operands = &[_]Operand{
7977 .{ .kind = .IdResultType, .quantifier = .required },
7978 .{ .kind = .IdResult, .quantifier = .required },
7979 },
7980 },
7981 .{
7982 .name = "OpBuildNDRange",
7983 .opcode = 304,
7984 .operands = &[_]Operand{
7985 .{ .kind = .IdResultType, .quantifier = .required },
7986 .{ .kind = .IdResult, .quantifier = .required },
7987 .{ .kind = .IdRef, .quantifier = .required },
7988 .{ .kind = .IdRef, .quantifier = .required },
7989 .{ .kind = .IdRef, .quantifier = .required },
7990 },
7991 },
7992 .{
7993 .name = "OpImageSparseSampleImplicitLod",
7994 .opcode = 305,
7995 .operands = &[_]Operand{
7996 .{ .kind = .IdResultType, .quantifier = .required },
7997 .{ .kind = .IdResult, .quantifier = .required },
7998 .{ .kind = .IdRef, .quantifier = .required },
7999 .{ .kind = .IdRef, .quantifier = .required },
8000 .{ .kind = .ImageOperands, .quantifier = .optional },
8001 },
8002 },
8003 .{
8004 .name = "OpImageSparseSampleExplicitLod",
8005 .opcode = 306,
8006 .operands = &[_]Operand{
8007 .{ .kind = .IdResultType, .quantifier = .required },
8008 .{ .kind = .IdResult, .quantifier = .required },
8009 .{ .kind = .IdRef, .quantifier = .required },
8010 .{ .kind = .IdRef, .quantifier = .required },
8011 .{ .kind = .ImageOperands, .quantifier = .required },
8012 },
8013 },
8014 .{
8015 .name = "OpImageSparseSampleDrefImplicitLod",
8016 .opcode = 307,
8017 .operands = &[_]Operand{
8018 .{ .kind = .IdResultType, .quantifier = .required },
8019 .{ .kind = .IdResult, .quantifier = .required },
8020 .{ .kind = .IdRef, .quantifier = .required },
8021 .{ .kind = .IdRef, .quantifier = .required },
8022 .{ .kind = .IdRef, .quantifier = .required },
8023 .{ .kind = .ImageOperands, .quantifier = .optional },
8024 },
8025 },
8026 .{
8027 .name = "OpImageSparseSampleDrefExplicitLod",
8028 .opcode = 308,
8029 .operands = &[_]Operand{
8030 .{ .kind = .IdResultType, .quantifier = .required },
8031 .{ .kind = .IdResult, .quantifier = .required },
8032 .{ .kind = .IdRef, .quantifier = .required },
8033 .{ .kind = .IdRef, .quantifier = .required },
8034 .{ .kind = .IdRef, .quantifier = .required },
8035 .{ .kind = .ImageOperands, .quantifier = .required },
8036 },
8037 },
8038 .{
8039 .name = "OpImageSparseSampleProjImplicitLod",
8040 .opcode = 309,
8041 .operands = &[_]Operand{
8042 .{ .kind = .IdResultType, .quantifier = .required },
8043 .{ .kind = .IdResult, .quantifier = .required },
8044 .{ .kind = .IdRef, .quantifier = .required },
8045 .{ .kind = .IdRef, .quantifier = .required },
8046 .{ .kind = .ImageOperands, .quantifier = .optional },
8047 },
8048 },
8049 .{
8050 .name = "OpImageSparseSampleProjExplicitLod",
8051 .opcode = 310,
8052 .operands = &[_]Operand{
8053 .{ .kind = .IdResultType, .quantifier = .required },
8054 .{ .kind = .IdResult, .quantifier = .required },
8055 .{ .kind = .IdRef, .quantifier = .required },
8056 .{ .kind = .IdRef, .quantifier = .required },
8057 .{ .kind = .ImageOperands, .quantifier = .required },
8058 },
8059 },
8060 .{
8061 .name = "OpImageSparseSampleProjDrefImplicitLod",
8062 .opcode = 311,
8063 .operands = &[_]Operand{
8064 .{ .kind = .IdResultType, .quantifier = .required },
8065 .{ .kind = .IdResult, .quantifier = .required },
8066 .{ .kind = .IdRef, .quantifier = .required },
8067 .{ .kind = .IdRef, .quantifier = .required },
8068 .{ .kind = .IdRef, .quantifier = .required },
8069 .{ .kind = .ImageOperands, .quantifier = .optional },
8070 },
8071 },
8072 .{
8073 .name = "OpImageSparseSampleProjDrefExplicitLod",
8074 .opcode = 312,
8075 .operands = &[_]Operand{
8076 .{ .kind = .IdResultType, .quantifier = .required },
8077 .{ .kind = .IdResult, .quantifier = .required },
8078 .{ .kind = .IdRef, .quantifier = .required },
8079 .{ .kind = .IdRef, .quantifier = .required },
8080 .{ .kind = .IdRef, .quantifier = .required },
8081 .{ .kind = .ImageOperands, .quantifier = .required },
8082 },
8083 },
8084 .{
8085 .name = "OpImageSparseFetch",
8086 .opcode = 313,
8087 .operands = &[_]Operand{
8088 .{ .kind = .IdResultType, .quantifier = .required },
8089 .{ .kind = .IdResult, .quantifier = .required },
8090 .{ .kind = .IdRef, .quantifier = .required },
8091 .{ .kind = .IdRef, .quantifier = .required },
8092 .{ .kind = .ImageOperands, .quantifier = .optional },
8093 },
8094 },
8095 .{
8096 .name = "OpImageSparseGather",
8097 .opcode = 314,
8098 .operands = &[_]Operand{
8099 .{ .kind = .IdResultType, .quantifier = .required },
8100 .{ .kind = .IdResult, .quantifier = .required },
8101 .{ .kind = .IdRef, .quantifier = .required },
8102 .{ .kind = .IdRef, .quantifier = .required },
8103 .{ .kind = .IdRef, .quantifier = .required },
8104 .{ .kind = .ImageOperands, .quantifier = .optional },
8105 },
8106 },
8107 .{
8108 .name = "OpImageSparseDrefGather",
8109 .opcode = 315,
8110 .operands = &[_]Operand{
8111 .{ .kind = .IdResultType, .quantifier = .required },
8112 .{ .kind = .IdResult, .quantifier = .required },
8113 .{ .kind = .IdRef, .quantifier = .required },
8114 .{ .kind = .IdRef, .quantifier = .required },
8115 .{ .kind = .IdRef, .quantifier = .required },
8116 .{ .kind = .ImageOperands, .quantifier = .optional },
8117 },
8118 },
8119 .{
8120 .name = "OpImageSparseTexelsResident",
8121 .opcode = 316,
8122 .operands = &[_]Operand{
8123 .{ .kind = .IdResultType, .quantifier = .required },
8124 .{ .kind = .IdResult, .quantifier = .required },
8125 .{ .kind = .IdRef, .quantifier = .required },
8126 },
8127 },
8128 .{
8129 .name = "OpNoLine",
8130 .opcode = 317,
8131 .operands = &[_]Operand{},
8132 },
8133 .{
8134 .name = "OpAtomicFlagTestAndSet",
8135 .opcode = 318,
8136 .operands = &[_]Operand{
8137 .{ .kind = .IdResultType, .quantifier = .required },
8138 .{ .kind = .IdResult, .quantifier = .required },
8139 .{ .kind = .IdRef, .quantifier = .required },
8140 .{ .kind = .IdScope, .quantifier = .required },
8141 .{ .kind = .IdMemorySemantics, .quantifier = .required },
8142 },
8143 },
8144 .{
8145 .name = "OpAtomicFlagClear",
8146 .opcode = 319,
8147 .operands = &[_]Operand{
8148 .{ .kind = .IdRef, .quantifier = .required },
8149 .{ .kind = .IdScope, .quantifier = .required },
8150 .{ .kind = .IdMemorySemantics, .quantifier = .required },
8151 },
8152 },
8153 .{
8154 .name = "OpImageSparseRead",
8155 .opcode = 320,
8156 .operands = &[_]Operand{
8157 .{ .kind = .IdResultType, .quantifier = .required },
8158 .{ .kind = .IdResult, .quantifier = .required },
8159 .{ .kind = .IdRef, .quantifier = .required },
8160 .{ .kind = .IdRef, .quantifier = .required },
8161 .{ .kind = .ImageOperands, .quantifier = .optional },
8162 },
8163 },
8164 .{
8165 .name = "OpSizeOf",
8166 .opcode = 321,
8167 .operands = &[_]Operand{
8168 .{ .kind = .IdResultType, .quantifier = .required },
8169 .{ .kind = .IdResult, .quantifier = .required },
8170 .{ .kind = .IdRef, .quantifier = .required },
8171 },
8172 },
8173 .{
8174 .name = "OpTypePipeStorage",
8175 .opcode = 322,
8176 .operands = &[_]Operand{
8177 .{ .kind = .IdResult, .quantifier = .required },
8178 },
8179 },
8180 .{
8181 .name = "OpConstantPipeStorage",
8182 .opcode = 323,
8183 .operands = &[_]Operand{
8184 .{ .kind = .IdResultType, .quantifier = .required },
8185 .{ .kind = .IdResult, .quantifier = .required },
8186 .{ .kind = .LiteralInteger, .quantifier = .required },
8187 .{ .kind = .LiteralInteger, .quantifier = .required },
8188 .{ .kind = .LiteralInteger, .quantifier = .required },
8189 },
8190 },
8191 .{
8192 .name = "OpCreatePipeFromPipeStorage",
8193 .opcode = 324,
8194 .operands = &[_]Operand{
8195 .{ .kind = .IdResultType, .quantifier = .required },
8196 .{ .kind = .IdResult, .quantifier = .required },
8197 .{ .kind = .IdRef, .quantifier = .required },
8198 },
8199 },
8200 .{
8201 .name = "OpGetKernelLocalSizeForSubgroupCount",
8202 .opcode = 325,
8203 .operands = &[_]Operand{
8204 .{ .kind = .IdResultType, .quantifier = .required },
8205 .{ .kind = .IdResult, .quantifier = .required },
8206 .{ .kind = .IdRef, .quantifier = .required },
8207 .{ .kind = .IdRef, .quantifier = .required },
8208 .{ .kind = .IdRef, .quantifier = .required },
8209 .{ .kind = .IdRef, .quantifier = .required },
8210 .{ .kind = .IdRef, .quantifier = .required },
8211 },
8212 },
8213 .{
8214 .name = "OpGetKernelMaxNumSubgroups",
8215 .opcode = 326,
8216 .operands = &[_]Operand{
8217 .{ .kind = .IdResultType, .quantifier = .required },
8218 .{ .kind = .IdResult, .quantifier = .required },
8219 .{ .kind = .IdRef, .quantifier = .required },
8220 .{ .kind = .IdRef, .quantifier = .required },
8221 .{ .kind = .IdRef, .quantifier = .required },
8222 .{ .kind = .IdRef, .quantifier = .required },
8223 },
8224 },
8225 .{
8226 .name = "OpTypeNamedBarrier",
8227 .opcode = 327,
8228 .operands = &[_]Operand{
8229 .{ .kind = .IdResult, .quantifier = .required },
8230 },
8231 },
8232 .{
8233 .name = "OpNamedBarrierInitialize",
8234 .opcode = 328,
8235 .operands = &[_]Operand{
8236 .{ .kind = .IdResultType, .quantifier = .required },
8237 .{ .kind = .IdResult, .quantifier = .required },
8238 .{ .kind = .IdRef, .quantifier = .required },
8239 },
8240 },
8241 .{
8242 .name = "OpMemoryNamedBarrier",
8243 .opcode = 329,
8244 .operands = &[_]Operand{
8245 .{ .kind = .IdRef, .quantifier = .required },
8246 .{ .kind = .IdScope, .quantifier = .required },
8247 .{ .kind = .IdMemorySemantics, .quantifier = .required },
8248 },
8249 },
8250 .{
8251 .name = "OpModuleProcessed",
8252 .opcode = 330,
8253 .operands = &[_]Operand{
8254 .{ .kind = .LiteralString, .quantifier = .required },
8255 },
8256 },
8257 .{
8258 .name = "OpExecutionModeId",
8259 .opcode = 331,
8260 .operands = &[_]Operand{
8261 .{ .kind = .IdRef, .quantifier = .required },
8262 .{ .kind = .ExecutionMode, .quantifier = .required },
8263 },
8264 },
8265 .{
8266 .name = "OpDecorateId",
8267 .opcode = 332,
8268 .operands = &[_]Operand{
8269 .{ .kind = .IdRef, .quantifier = .required },
8270 .{ .kind = .Decoration, .quantifier = .required },
8271 },
8272 },
8273 .{
8274 .name = "OpGroupNonUniformElect",
8275 .opcode = 333,
8276 .operands = &[_]Operand{
8277 .{ .kind = .IdResultType, .quantifier = .required },
8278 .{ .kind = .IdResult, .quantifier = .required },
8279 .{ .kind = .IdScope, .quantifier = .required },
8280 },
8281 },
8282 .{
8283 .name = "OpGroupNonUniformAll",
8284 .opcode = 334,
8285 .operands = &[_]Operand{
8286 .{ .kind = .IdResultType, .quantifier = .required },
8287 .{ .kind = .IdResult, .quantifier = .required },
8288 .{ .kind = .IdScope, .quantifier = .required },
8289 .{ .kind = .IdRef, .quantifier = .required },
8290 },
8291 },
8292 .{
8293 .name = "OpGroupNonUniformAny",
8294 .opcode = 335,
8295 .operands = &[_]Operand{
8296 .{ .kind = .IdResultType, .quantifier = .required },
8297 .{ .kind = .IdResult, .quantifier = .required },
8298 .{ .kind = .IdScope, .quantifier = .required },
8299 .{ .kind = .IdRef, .quantifier = .required },
8300 },
8301 },
8302 .{
8303 .name = "OpGroupNonUniformAllEqual",
8304 .opcode = 336,
8305 .operands = &[_]Operand{
8306 .{ .kind = .IdResultType, .quantifier = .required },
8307 .{ .kind = .IdResult, .quantifier = .required },
8308 .{ .kind = .IdScope, .quantifier = .required },
8309 .{ .kind = .IdRef, .quantifier = .required },
8310 },
8311 },
8312 .{
8313 .name = "OpGroupNonUniformBroadcast",
8314 .opcode = 337,
8315 .operands = &[_]Operand{
8316 .{ .kind = .IdResultType, .quantifier = .required },
8317 .{ .kind = .IdResult, .quantifier = .required },
8318 .{ .kind = .IdScope, .quantifier = .required },
8319 .{ .kind = .IdRef, .quantifier = .required },
8320 .{ .kind = .IdRef, .quantifier = .required },
8321 },
8322 },
8323 .{
8324 .name = "OpGroupNonUniformBroadcastFirst",
8325 .opcode = 338,
8326 .operands = &[_]Operand{
8327 .{ .kind = .IdResultType, .quantifier = .required },
8328 .{ .kind = .IdResult, .quantifier = .required },
8329 .{ .kind = .IdScope, .quantifier = .required },
8330 .{ .kind = .IdRef, .quantifier = .required },
8331 },
8332 },
8333 .{
8334 .name = "OpGroupNonUniformBallot",
8335 .opcode = 339,
8336 .operands = &[_]Operand{
8337 .{ .kind = .IdResultType, .quantifier = .required },
8338 .{ .kind = .IdResult, .quantifier = .required },
8339 .{ .kind = .IdScope, .quantifier = .required },
8340 .{ .kind = .IdRef, .quantifier = .required },
8341 },
8342 },
8343 .{
8344 .name = "OpGroupNonUniformInverseBallot",
8345 .opcode = 340,
8346 .operands = &[_]Operand{
8347 .{ .kind = .IdResultType, .quantifier = .required },
8348 .{ .kind = .IdResult, .quantifier = .required },
8349 .{ .kind = .IdScope, .quantifier = .required },
8350 .{ .kind = .IdRef, .quantifier = .required },
8351 },
8352 },
8353 .{
8354 .name = "OpGroupNonUniformBallotBitExtract",
8355 .opcode = 341,
8356 .operands = &[_]Operand{
8357 .{ .kind = .IdResultType, .quantifier = .required },
8358 .{ .kind = .IdResult, .quantifier = .required },
8359 .{ .kind = .IdScope, .quantifier = .required },
8360 .{ .kind = .IdRef, .quantifier = .required },
8361 .{ .kind = .IdRef, .quantifier = .required },
8362 },
8363 },
8364 .{
8365 .name = "OpGroupNonUniformBallotBitCount",
8366 .opcode = 342,
8367 .operands = &[_]Operand{
8368 .{ .kind = .IdResultType, .quantifier = .required },
8369 .{ .kind = .IdResult, .quantifier = .required },
8370 .{ .kind = .IdScope, .quantifier = .required },
8371 .{ .kind = .GroupOperation, .quantifier = .required },
8372 .{ .kind = .IdRef, .quantifier = .required },
8373 },
8374 },
8375 .{
8376 .name = "OpGroupNonUniformBallotFindLSB",
8377 .opcode = 343,
8378 .operands = &[_]Operand{
8379 .{ .kind = .IdResultType, .quantifier = .required },
8380 .{ .kind = .IdResult, .quantifier = .required },
8381 .{ .kind = .IdScope, .quantifier = .required },
8382 .{ .kind = .IdRef, .quantifier = .required },
8383 },
8384 },
8385 .{
8386 .name = "OpGroupNonUniformBallotFindMSB",
8387 .opcode = 344,
8388 .operands = &[_]Operand{
8389 .{ .kind = .IdResultType, .quantifier = .required },
8390 .{ .kind = .IdResult, .quantifier = .required },
8391 .{ .kind = .IdScope, .quantifier = .required },
8392 .{ .kind = .IdRef, .quantifier = .required },
8393 },
8394 },
8395 .{
8396 .name = "OpGroupNonUniformShuffle",
8397 .opcode = 345,
8398 .operands = &[_]Operand{
8399 .{ .kind = .IdResultType, .quantifier = .required },
8400 .{ .kind = .IdResult, .quantifier = .required },
8401 .{ .kind = .IdScope, .quantifier = .required },
8402 .{ .kind = .IdRef, .quantifier = .required },
8403 .{ .kind = .IdRef, .quantifier = .required },
8404 },
8405 },
8406 .{
8407 .name = "OpGroupNonUniformShuffleXor",
8408 .opcode = 346,
8409 .operands = &[_]Operand{
8410 .{ .kind = .IdResultType, .quantifier = .required },
8411 .{ .kind = .IdResult, .quantifier = .required },
8412 .{ .kind = .IdScope, .quantifier = .required },
8413 .{ .kind = .IdRef, .quantifier = .required },
8414 .{ .kind = .IdRef, .quantifier = .required },
8415 },
8416 },
8417 .{
8418 .name = "OpGroupNonUniformShuffleUp",
8419 .opcode = 347,
8420 .operands = &[_]Operand{
8421 .{ .kind = .IdResultType, .quantifier = .required },
8422 .{ .kind = .IdResult, .quantifier = .required },
8423 .{ .kind = .IdScope, .quantifier = .required },
8424 .{ .kind = .IdRef, .quantifier = .required },
8425 .{ .kind = .IdRef, .quantifier = .required },
8426 },
8427 },
8428 .{
8429 .name = "OpGroupNonUniformShuffleDown",
8430 .opcode = 348,
8431 .operands = &[_]Operand{
8432 .{ .kind = .IdResultType, .quantifier = .required },
8433 .{ .kind = .IdResult, .quantifier = .required },
8434 .{ .kind = .IdScope, .quantifier = .required },
8435 .{ .kind = .IdRef, .quantifier = .required },
8436 .{ .kind = .IdRef, .quantifier = .required },
8437 },
8438 },
8439 .{
8440 .name = "OpGroupNonUniformIAdd",
8441 .opcode = 349,
8442 .operands = &[_]Operand{
8443 .{ .kind = .IdResultType, .quantifier = .required },
8444 .{ .kind = .IdResult, .quantifier = .required },
8445 .{ .kind = .IdScope, .quantifier = .required },
8446 .{ .kind = .GroupOperation, .quantifier = .required },
8447 .{ .kind = .IdRef, .quantifier = .required },
8448 .{ .kind = .IdRef, .quantifier = .optional },
8449 },
8450 },
8451 .{
8452 .name = "OpGroupNonUniformFAdd",
8453 .opcode = 350,
8454 .operands = &[_]Operand{
8455 .{ .kind = .IdResultType, .quantifier = .required },
8456 .{ .kind = .IdResult, .quantifier = .required },
8457 .{ .kind = .IdScope, .quantifier = .required },
8458 .{ .kind = .GroupOperation, .quantifier = .required },
8459 .{ .kind = .IdRef, .quantifier = .required },
8460 .{ .kind = .IdRef, .quantifier = .optional },
8461 },
8462 },
8463 .{
8464 .name = "OpGroupNonUniformIMul",
8465 .opcode = 351,
8466 .operands = &[_]Operand{
8467 .{ .kind = .IdResultType, .quantifier = .required },
8468 .{ .kind = .IdResult, .quantifier = .required },
8469 .{ .kind = .IdScope, .quantifier = .required },
8470 .{ .kind = .GroupOperation, .quantifier = .required },
8471 .{ .kind = .IdRef, .quantifier = .required },
8472 .{ .kind = .IdRef, .quantifier = .optional },
8473 },
8474 },
8475 .{
8476 .name = "OpGroupNonUniformFMul",
8477 .opcode = 352,
8478 .operands = &[_]Operand{
8479 .{ .kind = .IdResultType, .quantifier = .required },
8480 .{ .kind = .IdResult, .quantifier = .required },
8481 .{ .kind = .IdScope, .quantifier = .required },
8482 .{ .kind = .GroupOperation, .quantifier = .required },
8483 .{ .kind = .IdRef, .quantifier = .required },
8484 .{ .kind = .IdRef, .quantifier = .optional },
8485 },
8486 },
8487 .{
8488 .name = "OpGroupNonUniformSMin",
8489 .opcode = 353,
8490 .operands = &[_]Operand{
8491 .{ .kind = .IdResultType, .quantifier = .required },
8492 .{ .kind = .IdResult, .quantifier = .required },
8493 .{ .kind = .IdScope, .quantifier = .required },
8494 .{ .kind = .GroupOperation, .quantifier = .required },
8495 .{ .kind = .IdRef, .quantifier = .required },
8496 .{ .kind = .IdRef, .quantifier = .optional },
8497 },
8498 },
8499 .{
8500 .name = "OpGroupNonUniformUMin",
8501 .opcode = 354,
8502 .operands = &[_]Operand{
8503 .{ .kind = .IdResultType, .quantifier = .required },
8504 .{ .kind = .IdResult, .quantifier = .required },
8505 .{ .kind = .IdScope, .quantifier = .required },
8506 .{ .kind = .GroupOperation, .quantifier = .required },
8507 .{ .kind = .IdRef, .quantifier = .required },
8508 .{ .kind = .IdRef, .quantifier = .optional },
8509 },
8510 },
8511 .{
8512 .name = "OpGroupNonUniformFMin",
8513 .opcode = 355,
8514 .operands = &[_]Operand{
8515 .{ .kind = .IdResultType, .quantifier = .required },
8516 .{ .kind = .IdResult, .quantifier = .required },
8517 .{ .kind = .IdScope, .quantifier = .required },
8518 .{ .kind = .GroupOperation, .quantifier = .required },
8519 .{ .kind = .IdRef, .quantifier = .required },
8520 .{ .kind = .IdRef, .quantifier = .optional },
8521 },
8522 },
8523 .{
8524 .name = "OpGroupNonUniformSMax",
8525 .opcode = 356,
8526 .operands = &[_]Operand{
8527 .{ .kind = .IdResultType, .quantifier = .required },
8528 .{ .kind = .IdResult, .quantifier = .required },
8529 .{ .kind = .IdScope, .quantifier = .required },
8530 .{ .kind = .GroupOperation, .quantifier = .required },
8531 .{ .kind = .IdRef, .quantifier = .required },
8532 .{ .kind = .IdRef, .quantifier = .optional },
8533 },
8534 },
8535 .{
8536 .name = "OpGroupNonUniformUMax",
8537 .opcode = 357,
8538 .operands = &[_]Operand{
8539 .{ .kind = .IdResultType, .quantifier = .required },
8540 .{ .kind = .IdResult, .quantifier = .required },
8541 .{ .kind = .IdScope, .quantifier = .required },
8542 .{ .kind = .GroupOperation, .quantifier = .required },
8543 .{ .kind = .IdRef, .quantifier = .required },
8544 .{ .kind = .IdRef, .quantifier = .optional },
8545 },
8546 },
8547 .{
8548 .name = "OpGroupNonUniformFMax",
8549 .opcode = 358,
8550 .operands = &[_]Operand{
8551 .{ .kind = .IdResultType, .quantifier = .required },
8552 .{ .kind = .IdResult, .quantifier = .required },
8553 .{ .kind = .IdScope, .quantifier = .required },
8554 .{ .kind = .GroupOperation, .quantifier = .required },
8555 .{ .kind = .IdRef, .quantifier = .required },
8556 .{ .kind = .IdRef, .quantifier = .optional },
8557 },
8558 },
8559 .{
8560 .name = "OpGroupNonUniformBitwiseAnd",
8561 .opcode = 359,
8562 .operands = &[_]Operand{
8563 .{ .kind = .IdResultType, .quantifier = .required },
8564 .{ .kind = .IdResult, .quantifier = .required },
8565 .{ .kind = .IdScope, .quantifier = .required },
8566 .{ .kind = .GroupOperation, .quantifier = .required },
8567 .{ .kind = .IdRef, .quantifier = .required },
8568 .{ .kind = .IdRef, .quantifier = .optional },
8569 },
8570 },
8571 .{
8572 .name = "OpGroupNonUniformBitwiseOr",
8573 .opcode = 360,
8574 .operands = &[_]Operand{
8575 .{ .kind = .IdResultType, .quantifier = .required },
8576 .{ .kind = .IdResult, .quantifier = .required },
8577 .{ .kind = .IdScope, .quantifier = .required },
8578 .{ .kind = .GroupOperation, .quantifier = .required },
8579 .{ .kind = .IdRef, .quantifier = .required },
8580 .{ .kind = .IdRef, .quantifier = .optional },
8581 },
8582 },
8583 .{
8584 .name = "OpGroupNonUniformBitwiseXor",
8585 .opcode = 361,
8586 .operands = &[_]Operand{
8587 .{ .kind = .IdResultType, .quantifier = .required },
8588 .{ .kind = .IdResult, .quantifier = .required },
8589 .{ .kind = .IdScope, .quantifier = .required },
8590 .{ .kind = .GroupOperation, .quantifier = .required },
8591 .{ .kind = .IdRef, .quantifier = .required },
8592 .{ .kind = .IdRef, .quantifier = .optional },
8593 },
8594 },
8595 .{
8596 .name = "OpGroupNonUniformLogicalAnd",
8597 .opcode = 362,
8598 .operands = &[_]Operand{
8599 .{ .kind = .IdResultType, .quantifier = .required },
8600 .{ .kind = .IdResult, .quantifier = .required },
8601 .{ .kind = .IdScope, .quantifier = .required },
8602 .{ .kind = .GroupOperation, .quantifier = .required },
8603 .{ .kind = .IdRef, .quantifier = .required },
8604 .{ .kind = .IdRef, .quantifier = .optional },
8605 },
8606 },
8607 .{
8608 .name = "OpGroupNonUniformLogicalOr",
8609 .opcode = 363,
8610 .operands = &[_]Operand{
8611 .{ .kind = .IdResultType, .quantifier = .required },
8612 .{ .kind = .IdResult, .quantifier = .required },
8613 .{ .kind = .IdScope, .quantifier = .required },
8614 .{ .kind = .GroupOperation, .quantifier = .required },
8615 .{ .kind = .IdRef, .quantifier = .required },
8616 .{ .kind = .IdRef, .quantifier = .optional },
8617 },
8618 },
8619 .{
8620 .name = "OpGroupNonUniformLogicalXor",
8621 .opcode = 364,
8622 .operands = &[_]Operand{
8623 .{ .kind = .IdResultType, .quantifier = .required },
8624 .{ .kind = .IdResult, .quantifier = .required },
8625 .{ .kind = .IdScope, .quantifier = .required },
8626 .{ .kind = .GroupOperation, .quantifier = .required },
8627 .{ .kind = .IdRef, .quantifier = .required },
8628 .{ .kind = .IdRef, .quantifier = .optional },
8629 },
8630 },
8631 .{
8632 .name = "OpGroupNonUniformQuadBroadcast",
8633 .opcode = 365,
8634 .operands = &[_]Operand{
8635 .{ .kind = .IdResultType, .quantifier = .required },
8636 .{ .kind = .IdResult, .quantifier = .required },
8637 .{ .kind = .IdScope, .quantifier = .required },
8638 .{ .kind = .IdRef, .quantifier = .required },
8639 .{ .kind = .IdRef, .quantifier = .required },
8640 },
8641 },
8642 .{
8643 .name = "OpGroupNonUniformQuadSwap",
8644 .opcode = 366,
8645 .operands = &[_]Operand{
8646 .{ .kind = .IdResultType, .quantifier = .required },
8647 .{ .kind = .IdResult, .quantifier = .required },
8648 .{ .kind = .IdScope, .quantifier = .required },
8649 .{ .kind = .IdRef, .quantifier = .required },
8650 .{ .kind = .IdRef, .quantifier = .required },
8651 },
8652 },
8653 .{
8654 .name = "OpCopyLogical",
8655 .opcode = 400,
8656 .operands = &[_]Operand{
8657 .{ .kind = .IdResultType, .quantifier = .required },
8658 .{ .kind = .IdResult, .quantifier = .required },
8659 .{ .kind = .IdRef, .quantifier = .required },
8660 },
8661 },
8662 .{
8663 .name = "OpPtrEqual",
8664 .opcode = 401,
8665 .operands = &[_]Operand{
8666 .{ .kind = .IdResultType, .quantifier = .required },
8667 .{ .kind = .IdResult, .quantifier = .required },
8668 .{ .kind = .IdRef, .quantifier = .required },
8669 .{ .kind = .IdRef, .quantifier = .required },
8670 },
8671 },
8672 .{
8673 .name = "OpPtrNotEqual",
8674 .opcode = 402,
8675 .operands = &[_]Operand{
8676 .{ .kind = .IdResultType, .quantifier = .required },
8677 .{ .kind = .IdResult, .quantifier = .required },
8678 .{ .kind = .IdRef, .quantifier = .required },
8679 .{ .kind = .IdRef, .quantifier = .required },
8680 },
8681 },
8682 .{
8683 .name = "OpPtrDiff",
8684 .opcode = 403,
8685 .operands = &[_]Operand{
8686 .{ .kind = .IdResultType, .quantifier = .required },
8687 .{ .kind = .IdResult, .quantifier = .required },
8688 .{ .kind = .IdRef, .quantifier = .required },
8689 .{ .kind = .IdRef, .quantifier = .required },
8690 },
8691 },
8692 .{
8693 .name = "OpColorAttachmentReadEXT",
8694 .opcode = 4160,
8695 .operands = &[_]Operand{
8696 .{ .kind = .IdResultType, .quantifier = .required },
8697 .{ .kind = .IdResult, .quantifier = .required },
8698 .{ .kind = .IdRef, .quantifier = .required },
8699 .{ .kind = .IdRef, .quantifier = .optional },
8700 },
8701 },
8702 .{
8703 .name = "OpDepthAttachmentReadEXT",
8704 .opcode = 4161,
8705 .operands = &[_]Operand{
8706 .{ .kind = .IdResultType, .quantifier = .required },
8707 .{ .kind = .IdResult, .quantifier = .required },
8708 .{ .kind = .IdRef, .quantifier = .optional },
8709 },
8710 },
8711 .{
8712 .name = "OpStencilAttachmentReadEXT",
8713 .opcode = 4162,
8714 .operands = &[_]Operand{
8715 .{ .kind = .IdResultType, .quantifier = .required },
8716 .{ .kind = .IdResult, .quantifier = .required },
8717 .{ .kind = .IdRef, .quantifier = .optional },
8718 },
8719 },
8720 .{
8721 .name = "OpTerminateInvocation",
8722 .opcode = 4416,
8723 .operands = &[_]Operand{},
8724 },
8725 .{
8726 .name = "OpSubgroupBallotKHR",
8727 .opcode = 4421,
8728 .operands = &[_]Operand{
8729 .{ .kind = .IdResultType, .quantifier = .required },
8730 .{ .kind = .IdResult, .quantifier = .required },
8731 .{ .kind = .IdRef, .quantifier = .required },
8732 },
8733 },
8734 .{
8735 .name = "OpSubgroupFirstInvocationKHR",
8736 .opcode = 4422,
8737 .operands = &[_]Operand{
8738 .{ .kind = .IdResultType, .quantifier = .required },
8739 .{ .kind = .IdResult, .quantifier = .required },
8740 .{ .kind = .IdRef, .quantifier = .required },
8741 },
8742 },
8743 .{
8744 .name = "OpSubgroupAllKHR",
8745 .opcode = 4428,
8746 .operands = &[_]Operand{
8747 .{ .kind = .IdResultType, .quantifier = .required },
8748 .{ .kind = .IdResult, .quantifier = .required },
8749 .{ .kind = .IdRef, .quantifier = .required },
8750 },
8751 },
8752 .{
8753 .name = "OpSubgroupAnyKHR",
8754 .opcode = 4429,
8755 .operands = &[_]Operand{
8756 .{ .kind = .IdResultType, .quantifier = .required },
8757 .{ .kind = .IdResult, .quantifier = .required },
8758 .{ .kind = .IdRef, .quantifier = .required },
8759 },
8760 },
8761 .{
8762 .name = "OpSubgroupAllEqualKHR",
8763 .opcode = 4430,
8764 .operands = &[_]Operand{
8765 .{ .kind = .IdResultType, .quantifier = .required },
8766 .{ .kind = .IdResult, .quantifier = .required },
8767 .{ .kind = .IdRef, .quantifier = .required },
8768 },
8769 },
8770 .{
8771 .name = "OpGroupNonUniformRotateKHR",
8772 .opcode = 4431,
8773 .operands = &[_]Operand{
8774 .{ .kind = .IdResultType, .quantifier = .required },
8775 .{ .kind = .IdResult, .quantifier = .required },
8776 .{ .kind = .IdScope, .quantifier = .required },
8777 .{ .kind = .IdRef, .quantifier = .required },
8778 .{ .kind = .IdRef, .quantifier = .required },
8779 .{ .kind = .IdRef, .quantifier = .optional },
8780 },
8781 },
8782 .{
8783 .name = "OpSubgroupReadInvocationKHR",
8784 .opcode = 4432,
8785 .operands = &[_]Operand{
8786 .{ .kind = .IdResultType, .quantifier = .required },
8787 .{ .kind = .IdResult, .quantifier = .required },
8788 .{ .kind = .IdRef, .quantifier = .required },
8789 .{ .kind = .IdRef, .quantifier = .required },
8790 },
8791 },
8792 .{
8793 .name = "OpTraceRayKHR",
8794 .opcode = 4445,
8795 .operands = &[_]Operand{
8796 .{ .kind = .IdRef, .quantifier = .required },
8797 .{ .kind = .IdRef, .quantifier = .required },
8798 .{ .kind = .IdRef, .quantifier = .required },
8799 .{ .kind = .IdRef, .quantifier = .required },
8800 .{ .kind = .IdRef, .quantifier = .required },
8801 .{ .kind = .IdRef, .quantifier = .required },
8802 .{ .kind = .IdRef, .quantifier = .required },
8803 .{ .kind = .IdRef, .quantifier = .required },
8804 .{ .kind = .IdRef, .quantifier = .required },
8805 .{ .kind = .IdRef, .quantifier = .required },
8806 .{ .kind = .IdRef, .quantifier = .required },
8807 },
8808 },
8809 .{
8810 .name = "OpExecuteCallableKHR",
8811 .opcode = 4446,
8812 .operands = &[_]Operand{
8813 .{ .kind = .IdRef, .quantifier = .required },
8814 .{ .kind = .IdRef, .quantifier = .required },
8815 },
8816 },
8817 .{
8818 .name = "OpConvertUToAccelerationStructureKHR",
8819 .opcode = 4447,
8820 .operands = &[_]Operand{
8821 .{ .kind = .IdResultType, .quantifier = .required },
8822 .{ .kind = .IdResult, .quantifier = .required },
8823 .{ .kind = .IdRef, .quantifier = .required },
8824 },
8825 },
8826 .{
8827 .name = "OpIgnoreIntersectionKHR",
8828 .opcode = 4448,
8829 .operands = &[_]Operand{},
8830 },
8831 .{
8832 .name = "OpTerminateRayKHR",
8833 .opcode = 4449,
8834 .operands = &[_]Operand{},
8835 },
8836 .{
8837 .name = "OpSDot",
8838 .opcode = 4450,
8839 .operands = &[_]Operand{
8840 .{ .kind = .IdResultType, .quantifier = .required },
8841 .{ .kind = .IdResult, .quantifier = .required },
8842 .{ .kind = .IdRef, .quantifier = .required },
8843 .{ .kind = .IdRef, .quantifier = .required },
8844 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8845 },
8846 },
8847 .{
8848 .name = "OpSDotKHR",
8849 .opcode = 4450,
8850 .operands = &[_]Operand{
8851 .{ .kind = .IdResultType, .quantifier = .required },
8852 .{ .kind = .IdResult, .quantifier = .required },
8853 .{ .kind = .IdRef, .quantifier = .required },
8854 .{ .kind = .IdRef, .quantifier = .required },
8855 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8856 },
8857 },
8858 .{
8859 .name = "OpUDot",
8860 .opcode = 4451,
8861 .operands = &[_]Operand{
8862 .{ .kind = .IdResultType, .quantifier = .required },
8863 .{ .kind = .IdResult, .quantifier = .required },
8864 .{ .kind = .IdRef, .quantifier = .required },
8865 .{ .kind = .IdRef, .quantifier = .required },
8866 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8867 },
8868 },
8869 .{
8870 .name = "OpUDotKHR",
8871 .opcode = 4451,
8872 .operands = &[_]Operand{
8873 .{ .kind = .IdResultType, .quantifier = .required },
8874 .{ .kind = .IdResult, .quantifier = .required },
8875 .{ .kind = .IdRef, .quantifier = .required },
8876 .{ .kind = .IdRef, .quantifier = .required },
8877 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8878 },
8879 },
8880 .{
8881 .name = "OpSUDot",
8882 .opcode = 4452,
8883 .operands = &[_]Operand{
8884 .{ .kind = .IdResultType, .quantifier = .required },
8885 .{ .kind = .IdResult, .quantifier = .required },
8886 .{ .kind = .IdRef, .quantifier = .required },
8887 .{ .kind = .IdRef, .quantifier = .required },
8888 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8889 },
8890 },
8891 .{
8892 .name = "OpSUDotKHR",
8893 .opcode = 4452,
8894 .operands = &[_]Operand{
8895 .{ .kind = .IdResultType, .quantifier = .required },
8896 .{ .kind = .IdResult, .quantifier = .required },
8897 .{ .kind = .IdRef, .quantifier = .required },
8898 .{ .kind = .IdRef, .quantifier = .required },
8899 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8900 },
8901 },
8902 .{
8903 .name = "OpSDotAccSat",
8904 .opcode = 4453,
8905 .operands = &[_]Operand{
8906 .{ .kind = .IdResultType, .quantifier = .required },
8907 .{ .kind = .IdResult, .quantifier = .required },
8908 .{ .kind = .IdRef, .quantifier = .required },
8909 .{ .kind = .IdRef, .quantifier = .required },
8910 .{ .kind = .IdRef, .quantifier = .required },
8911 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8912 },
8913 },
8914 .{
8915 .name = "OpSDotAccSatKHR",
8916 .opcode = 4453,
8917 .operands = &[_]Operand{
8918 .{ .kind = .IdResultType, .quantifier = .required },
8919 .{ .kind = .IdResult, .quantifier = .required },
8920 .{ .kind = .IdRef, .quantifier = .required },
8921 .{ .kind = .IdRef, .quantifier = .required },
8922 .{ .kind = .IdRef, .quantifier = .required },
8923 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8924 },
8925 },
8926 .{
8927 .name = "OpUDotAccSat",
8928 .opcode = 4454,
8929 .operands = &[_]Operand{
8930 .{ .kind = .IdResultType, .quantifier = .required },
8931 .{ .kind = .IdResult, .quantifier = .required },
8932 .{ .kind = .IdRef, .quantifier = .required },
8933 .{ .kind = .IdRef, .quantifier = .required },
8934 .{ .kind = .IdRef, .quantifier = .required },
8935 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8936 },
8937 },
8938 .{
8939 .name = "OpUDotAccSatKHR",
8940 .opcode = 4454,
8941 .operands = &[_]Operand{
8942 .{ .kind = .IdResultType, .quantifier = .required },
8943 .{ .kind = .IdResult, .quantifier = .required },
8944 .{ .kind = .IdRef, .quantifier = .required },
8945 .{ .kind = .IdRef, .quantifier = .required },
8946 .{ .kind = .IdRef, .quantifier = .required },
8947 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8948 },
8949 },
8950 .{
8951 .name = "OpSUDotAccSat",
8952 .opcode = 4455,
8953 .operands = &[_]Operand{
8954 .{ .kind = .IdResultType, .quantifier = .required },
8955 .{ .kind = .IdResult, .quantifier = .required },
8956 .{ .kind = .IdRef, .quantifier = .required },
8957 .{ .kind = .IdRef, .quantifier = .required },
8958 .{ .kind = .IdRef, .quantifier = .required },
8959 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8960 },
8961 },
8962 .{
8963 .name = "OpSUDotAccSatKHR",
8964 .opcode = 4455,
8965 .operands = &[_]Operand{
8966 .{ .kind = .IdResultType, .quantifier = .required },
8967 .{ .kind = .IdResult, .quantifier = .required },
8968 .{ .kind = .IdRef, .quantifier = .required },
8969 .{ .kind = .IdRef, .quantifier = .required },
8970 .{ .kind = .IdRef, .quantifier = .required },
8971 .{ .kind = .PackedVectorFormat, .quantifier = .optional },
8972 },
8973 },
8974 .{
8975 .name = "OpTypeCooperativeMatrixKHR",
8976 .opcode = 4456,
8977 .operands = &[_]Operand{
8978 .{ .kind = .IdResult, .quantifier = .required },
8979 .{ .kind = .IdRef, .quantifier = .required },
8980 .{ .kind = .IdScope, .quantifier = .required },
8981 .{ .kind = .IdRef, .quantifier = .required },
8982 .{ .kind = .IdRef, .quantifier = .required },
8983 .{ .kind = .IdRef, .quantifier = .required },
8984 },
8985 },
8986 .{
8987 .name = "OpCooperativeMatrixLoadKHR",
8988 .opcode = 4457,
8989 .operands = &[_]Operand{
8990 .{ .kind = .IdResultType, .quantifier = .required },
8991 .{ .kind = .IdResult, .quantifier = .required },
8992 .{ .kind = .IdRef, .quantifier = .required },
8993 .{ .kind = .IdRef, .quantifier = .required },
8994 .{ .kind = .IdRef, .quantifier = .optional },
8995 .{ .kind = .MemoryAccess, .quantifier = .optional },
8996 },
8997 },
8998 .{
8999 .name = "OpCooperativeMatrixStoreKHR",
9000 .opcode = 4458,
9001 .operands = &[_]Operand{
9002 .{ .kind = .IdRef, .quantifier = .required },
9003 .{ .kind = .IdRef, .quantifier = .required },
9004 .{ .kind = .IdRef, .quantifier = .required },
9005 .{ .kind = .IdRef, .quantifier = .optional },
9006 .{ .kind = .MemoryAccess, .quantifier = .optional },
9007 },
9008 },
9009 .{
9010 .name = "OpCooperativeMatrixMulAddKHR",
9011 .opcode = 4459,
9012 .operands = &[_]Operand{
9013 .{ .kind = .IdResultType, .quantifier = .required },
9014 .{ .kind = .IdResult, .quantifier = .required },
9015 .{ .kind = .IdRef, .quantifier = .required },
9016 .{ .kind = .IdRef, .quantifier = .required },
9017 .{ .kind = .IdRef, .quantifier = .required },
9018 .{ .kind = .CooperativeMatrixOperands, .quantifier = .optional },
9019 },
9020 },
9021 .{
9022 .name = "OpCooperativeMatrixLengthKHR",
9023 .opcode = 4460,
9024 .operands = &[_]Operand{
9025 .{ .kind = .IdResultType, .quantifier = .required },
9026 .{ .kind = .IdResult, .quantifier = .required },
9027 .{ .kind = .IdRef, .quantifier = .required },
9028 },
9029 },
9030 .{
9031 .name = "OpTypeRayQueryKHR",
9032 .opcode = 4472,
9033 .operands = &[_]Operand{
9034 .{ .kind = .IdResult, .quantifier = .required },
9035 },
9036 },
9037 .{
9038 .name = "OpRayQueryInitializeKHR",
9039 .opcode = 4473,
9040 .operands = &[_]Operand{
9041 .{ .kind = .IdRef, .quantifier = .required },
9042 .{ .kind = .IdRef, .quantifier = .required },
9043 .{ .kind = .IdRef, .quantifier = .required },
9044 .{ .kind = .IdRef, .quantifier = .required },
9045 .{ .kind = .IdRef, .quantifier = .required },
9046 .{ .kind = .IdRef, .quantifier = .required },
9047 .{ .kind = .IdRef, .quantifier = .required },
9048 .{ .kind = .IdRef, .quantifier = .required },
9049 },
9050 },
9051 .{
9052 .name = "OpRayQueryTerminateKHR",
9053 .opcode = 4474,
9054 .operands = &[_]Operand{
9055 .{ .kind = .IdRef, .quantifier = .required },
9056 },
9057 },
9058 .{
9059 .name = "OpRayQueryGenerateIntersectionKHR",
9060 .opcode = 4475,
9061 .operands = &[_]Operand{
9062 .{ .kind = .IdRef, .quantifier = .required },
9063 .{ .kind = .IdRef, .quantifier = .required },
9064 },
9065 },
9066 .{
9067 .name = "OpRayQueryConfirmIntersectionKHR",
9068 .opcode = 4476,
9069 .operands = &[_]Operand{
9070 .{ .kind = .IdRef, .quantifier = .required },
9071 },
9072 },
9073 .{
9074 .name = "OpRayQueryProceedKHR",
9075 .opcode = 4477,
9076 .operands = &[_]Operand{
9077 .{ .kind = .IdResultType, .quantifier = .required },
9078 .{ .kind = .IdResult, .quantifier = .required },
9079 .{ .kind = .IdRef, .quantifier = .required },
9080 },
9081 },
9082 .{
9083 .name = "OpRayQueryGetIntersectionTypeKHR",
9084 .opcode = 4479,
9085 .operands = &[_]Operand{
9086 .{ .kind = .IdResultType, .quantifier = .required },
9087 .{ .kind = .IdResult, .quantifier = .required },
9088 .{ .kind = .IdRef, .quantifier = .required },
9089 .{ .kind = .IdRef, .quantifier = .required },
9090 },
9091 },
9092 .{
9093 .name = "OpImageSampleWeightedQCOM",
9094 .opcode = 4480,
9095 .operands = &[_]Operand{
9096 .{ .kind = .IdResultType, .quantifier = .required },
9097 .{ .kind = .IdResult, .quantifier = .required },
9098 .{ .kind = .IdRef, .quantifier = .required },
9099 .{ .kind = .IdRef, .quantifier = .required },
9100 .{ .kind = .IdRef, .quantifier = .required },
9101 },
9102 },
9103 .{
9104 .name = "OpImageBoxFilterQCOM",
9105 .opcode = 4481,
9106 .operands = &[_]Operand{
9107 .{ .kind = .IdResultType, .quantifier = .required },
9108 .{ .kind = .IdResult, .quantifier = .required },
9109 .{ .kind = .IdRef, .quantifier = .required },
9110 .{ .kind = .IdRef, .quantifier = .required },
9111 .{ .kind = .IdRef, .quantifier = .required },
9112 },
9113 },
9114 .{
9115 .name = "OpImageBlockMatchSSDQCOM",
9116 .opcode = 4482,
9117 .operands = &[_]Operand{
9118 .{ .kind = .IdResultType, .quantifier = .required },
9119 .{ .kind = .IdResult, .quantifier = .required },
9120 .{ .kind = .IdRef, .quantifier = .required },
9121 .{ .kind = .IdRef, .quantifier = .required },
9122 .{ .kind = .IdRef, .quantifier = .required },
9123 .{ .kind = .IdRef, .quantifier = .required },
9124 .{ .kind = .IdRef, .quantifier = .required },
9125 },
9126 },
9127 .{
9128 .name = "OpImageBlockMatchSADQCOM",
9129 .opcode = 4483,
9130 .operands = &[_]Operand{
9131 .{ .kind = .IdResultType, .quantifier = .required },
9132 .{ .kind = .IdResult, .quantifier = .required },
9133 .{ .kind = .IdRef, .quantifier = .required },
9134 .{ .kind = .IdRef, .quantifier = .required },
9135 .{ .kind = .IdRef, .quantifier = .required },
9136 .{ .kind = .IdRef, .quantifier = .required },
9137 .{ .kind = .IdRef, .quantifier = .required },
9138 },
9139 },
9140 .{
9141 .name = "OpImageBlockMatchWindowSSDQCOM",
9142 .opcode = 4500,
9143 .operands = &[_]Operand{
9144 .{ .kind = .IdResultType, .quantifier = .required },
9145 .{ .kind = .IdResult, .quantifier = .required },
9146 .{ .kind = .IdRef, .quantifier = .required },
9147 .{ .kind = .IdRef, .quantifier = .required },
9148 .{ .kind = .IdRef, .quantifier = .required },
9149 .{ .kind = .IdRef, .quantifier = .required },
9150 .{ .kind = .IdRef, .quantifier = .required },
9151 },
9152 },
9153 .{
9154 .name = "OpImageBlockMatchWindowSADQCOM",
9155 .opcode = 4501,
9156 .operands = &[_]Operand{
9157 .{ .kind = .IdResultType, .quantifier = .required },
9158 .{ .kind = .IdResult, .quantifier = .required },
9159 .{ .kind = .IdRef, .quantifier = .required },
9160 .{ .kind = .IdRef, .quantifier = .required },
9161 .{ .kind = .IdRef, .quantifier = .required },
9162 .{ .kind = .IdRef, .quantifier = .required },
9163 .{ .kind = .IdRef, .quantifier = .required },
9164 },
9165 },
9166 .{
9167 .name = "OpImageBlockMatchGatherSSDQCOM",
9168 .opcode = 4502,
9169 .operands = &[_]Operand{
9170 .{ .kind = .IdResultType, .quantifier = .required },
9171 .{ .kind = .IdResult, .quantifier = .required },
9172 .{ .kind = .IdRef, .quantifier = .required },
9173 .{ .kind = .IdRef, .quantifier = .required },
9174 .{ .kind = .IdRef, .quantifier = .required },
9175 .{ .kind = .IdRef, .quantifier = .required },
9176 .{ .kind = .IdRef, .quantifier = .required },
9177 },
9178 },
9179 .{
9180 .name = "OpImageBlockMatchGatherSADQCOM",
9181 .opcode = 4503,
9182 .operands = &[_]Operand{
9183 .{ .kind = .IdResultType, .quantifier = .required },
9184 .{ .kind = .IdResult, .quantifier = .required },
9185 .{ .kind = .IdRef, .quantifier = .required },
9186 .{ .kind = .IdRef, .quantifier = .required },
9187 .{ .kind = .IdRef, .quantifier = .required },
9188 .{ .kind = .IdRef, .quantifier = .required },
9189 .{ .kind = .IdRef, .quantifier = .required },
9190 },
9191 },
9192 .{
9193 .name = "OpGroupIAddNonUniformAMD",
9194 .opcode = 5000,
9195 .operands = &[_]Operand{
9196 .{ .kind = .IdResultType, .quantifier = .required },
9197 .{ .kind = .IdResult, .quantifier = .required },
9198 .{ .kind = .IdScope, .quantifier = .required },
9199 .{ .kind = .GroupOperation, .quantifier = .required },
9200 .{ .kind = .IdRef, .quantifier = .required },
9201 },
9202 },
9203 .{
9204 .name = "OpGroupFAddNonUniformAMD",
9205 .opcode = 5001,
9206 .operands = &[_]Operand{
9207 .{ .kind = .IdResultType, .quantifier = .required },
9208 .{ .kind = .IdResult, .quantifier = .required },
9209 .{ .kind = .IdScope, .quantifier = .required },
9210 .{ .kind = .GroupOperation, .quantifier = .required },
9211 .{ .kind = .IdRef, .quantifier = .required },
9212 },
9213 },
9214 .{
9215 .name = "OpGroupFMinNonUniformAMD",
9216 .opcode = 5002,
9217 .operands = &[_]Operand{
9218 .{ .kind = .IdResultType, .quantifier = .required },
9219 .{ .kind = .IdResult, .quantifier = .required },
9220 .{ .kind = .IdScope, .quantifier = .required },
9221 .{ .kind = .GroupOperation, .quantifier = .required },
9222 .{ .kind = .IdRef, .quantifier = .required },
9223 },
9224 },
9225 .{
9226 .name = "OpGroupUMinNonUniformAMD",
9227 .opcode = 5003,
9228 .operands = &[_]Operand{
9229 .{ .kind = .IdResultType, .quantifier = .required },
9230 .{ .kind = .IdResult, .quantifier = .required },
9231 .{ .kind = .IdScope, .quantifier = .required },
9232 .{ .kind = .GroupOperation, .quantifier = .required },
9233 .{ .kind = .IdRef, .quantifier = .required },
9234 },
9235 },
9236 .{
9237 .name = "OpGroupSMinNonUniformAMD",
9238 .opcode = 5004,
9239 .operands = &[_]Operand{
9240 .{ .kind = .IdResultType, .quantifier = .required },
9241 .{ .kind = .IdResult, .quantifier = .required },
9242 .{ .kind = .IdScope, .quantifier = .required },
9243 .{ .kind = .GroupOperation, .quantifier = .required },
9244 .{ .kind = .IdRef, .quantifier = .required },
9245 },
9246 },
9247 .{
9248 .name = "OpGroupFMaxNonUniformAMD",
9249 .opcode = 5005,
9250 .operands = &[_]Operand{
9251 .{ .kind = .IdResultType, .quantifier = .required },
9252 .{ .kind = .IdResult, .quantifier = .required },
9253 .{ .kind = .IdScope, .quantifier = .required },
9254 .{ .kind = .GroupOperation, .quantifier = .required },
9255 .{ .kind = .IdRef, .quantifier = .required },
9256 },
9257 },
9258 .{
9259 .name = "OpGroupUMaxNonUniformAMD",
9260 .opcode = 5006,
9261 .operands = &[_]Operand{
9262 .{ .kind = .IdResultType, .quantifier = .required },
9263 .{ .kind = .IdResult, .quantifier = .required },
9264 .{ .kind = .IdScope, .quantifier = .required },
9265 .{ .kind = .GroupOperation, .quantifier = .required },
9266 .{ .kind = .IdRef, .quantifier = .required },
9267 },
9268 },
9269 .{
9270 .name = "OpGroupSMaxNonUniformAMD",
9271 .opcode = 5007,
9272 .operands = &[_]Operand{
9273 .{ .kind = .IdResultType, .quantifier = .required },
9274 .{ .kind = .IdResult, .quantifier = .required },
9275 .{ .kind = .IdScope, .quantifier = .required },
9276 .{ .kind = .GroupOperation, .quantifier = .required },
9277 .{ .kind = .IdRef, .quantifier = .required },
9278 },
9279 },
9280 .{
9281 .name = "OpFragmentMaskFetchAMD",
9282 .opcode = 5011,
9283 .operands = &[_]Operand{
9284 .{ .kind = .IdResultType, .quantifier = .required },
9285 .{ .kind = .IdResult, .quantifier = .required },
9286 .{ .kind = .IdRef, .quantifier = .required },
9287 .{ .kind = .IdRef, .quantifier = .required },
9288 },
9289 },
9290 .{
9291 .name = "OpFragmentFetchAMD",
9292 .opcode = 5012,
9293 .operands = &[_]Operand{
9294 .{ .kind = .IdResultType, .quantifier = .required },
9295 .{ .kind = .IdResult, .quantifier = .required },
9296 .{ .kind = .IdRef, .quantifier = .required },
9297 .{ .kind = .IdRef, .quantifier = .required },
9298 .{ .kind = .IdRef, .quantifier = .required },
9299 },
9300 },
9301 .{
9302 .name = "OpReadClockKHR",
9303 .opcode = 5056,
9304 .operands = &[_]Operand{
9305 .{ .kind = .IdResultType, .quantifier = .required },
9306 .{ .kind = .IdResult, .quantifier = .required },
9307 .{ .kind = .IdScope, .quantifier = .required },
9308 },
9309 },
9310 .{
9311 .name = "OpFinalizeNodePayloadsAMDX",
9312 .opcode = 5075,
9313 .operands = &[_]Operand{
9314 .{ .kind = .IdRef, .quantifier = .required },
9315 },
9316 },
9317 .{
9318 .name = "OpFinishWritingNodePayloadAMDX",
9319 .opcode = 5078,
9320 .operands = &[_]Operand{
9321 .{ .kind = .IdResultType, .quantifier = .required },
9322 .{ .kind = .IdResult, .quantifier = .required },
9323 .{ .kind = .IdRef, .quantifier = .required },
9324 },
9325 },
9326 .{
9327 .name = "OpInitializeNodePayloadsAMDX",
9328 .opcode = 5090,
9329 .operands = &[_]Operand{
9330 .{ .kind = .IdRef, .quantifier = .required },
9331 .{ .kind = .IdScope, .quantifier = .required },
9332 .{ .kind = .IdRef, .quantifier = .required },
9333 .{ .kind = .IdRef, .quantifier = .required },
9334 },
9335 },
9336 .{
9337 .name = "OpGroupNonUniformQuadAllKHR",
9338 .opcode = 5110,
9339 .operands = &[_]Operand{
9340 .{ .kind = .IdResultType, .quantifier = .required },
9341 .{ .kind = .IdResult, .quantifier = .required },
9342 .{ .kind = .IdRef, .quantifier = .required },
9343 },
9344 },
9345 .{
9346 .name = "OpGroupNonUniformQuadAnyKHR",
9347 .opcode = 5111,
9348 .operands = &[_]Operand{
9349 .{ .kind = .IdResultType, .quantifier = .required },
9350 .{ .kind = .IdResult, .quantifier = .required },
9351 .{ .kind = .IdRef, .quantifier = .required },
9352 },
9353 },
9354 .{
9355 .name = "OpHitObjectRecordHitMotionNV",
9356 .opcode = 5249,
9357 .operands = &[_]Operand{
9358 .{ .kind = .IdRef, .quantifier = .required },
9359 .{ .kind = .IdRef, .quantifier = .required },
9360 .{ .kind = .IdRef, .quantifier = .required },
9361 .{ .kind = .IdRef, .quantifier = .required },
9362 .{ .kind = .IdRef, .quantifier = .required },
9363 .{ .kind = .IdRef, .quantifier = .required },
9364 .{ .kind = .IdRef, .quantifier = .required },
9365 .{ .kind = .IdRef, .quantifier = .required },
9366 .{ .kind = .IdRef, .quantifier = .required },
9367 .{ .kind = .IdRef, .quantifier = .required },
9368 .{ .kind = .IdRef, .quantifier = .required },
9369 .{ .kind = .IdRef, .quantifier = .required },
9370 .{ .kind = .IdRef, .quantifier = .required },
9371 .{ .kind = .IdRef, .quantifier = .required },
9372 },
9373 },
9374 .{
9375 .name = "OpHitObjectRecordHitWithIndexMotionNV",
9376 .opcode = 5250,
9377 .operands = &[_]Operand{
9378 .{ .kind = .IdRef, .quantifier = .required },
9379 .{ .kind = .IdRef, .quantifier = .required },
9380 .{ .kind = .IdRef, .quantifier = .required },
9381 .{ .kind = .IdRef, .quantifier = .required },
9382 .{ .kind = .IdRef, .quantifier = .required },
9383 .{ .kind = .IdRef, .quantifier = .required },
9384 .{ .kind = .IdRef, .quantifier = .required },
9385 .{ .kind = .IdRef, .quantifier = .required },
9386 .{ .kind = .IdRef, .quantifier = .required },
9387 .{ .kind = .IdRef, .quantifier = .required },
9388 .{ .kind = .IdRef, .quantifier = .required },
9389 .{ .kind = .IdRef, .quantifier = .required },
9390 .{ .kind = .IdRef, .quantifier = .required },
9391 },
9392 },
9393 .{
9394 .name = "OpHitObjectRecordMissMotionNV",
9395 .opcode = 5251,
9396 .operands = &[_]Operand{
9397 .{ .kind = .IdRef, .quantifier = .required },
9398 .{ .kind = .IdRef, .quantifier = .required },
9399 .{ .kind = .IdRef, .quantifier = .required },
9400 .{ .kind = .IdRef, .quantifier = .required },
9401 .{ .kind = .IdRef, .quantifier = .required },
9402 .{ .kind = .IdRef, .quantifier = .required },
9403 .{ .kind = .IdRef, .quantifier = .required },
9404 },
9405 },
9406 .{
9407 .name = "OpHitObjectGetWorldToObjectNV",
9408 .opcode = 5252,
9409 .operands = &[_]Operand{
9410 .{ .kind = .IdResultType, .quantifier = .required },
9411 .{ .kind = .IdResult, .quantifier = .required },
9412 .{ .kind = .IdRef, .quantifier = .required },
9413 },
9414 },
9415 .{
9416 .name = "OpHitObjectGetObjectToWorldNV",
9417 .opcode = 5253,
9418 .operands = &[_]Operand{
9419 .{ .kind = .IdResultType, .quantifier = .required },
9420 .{ .kind = .IdResult, .quantifier = .required },
9421 .{ .kind = .IdRef, .quantifier = .required },
9422 },
9423 },
9424 .{
9425 .name = "OpHitObjectGetObjectRayDirectionNV",
9426 .opcode = 5254,
9427 .operands = &[_]Operand{
9428 .{ .kind = .IdResultType, .quantifier = .required },
9429 .{ .kind = .IdResult, .quantifier = .required },
9430 .{ .kind = .IdRef, .quantifier = .required },
9431 },
9432 },
9433 .{
9434 .name = "OpHitObjectGetObjectRayOriginNV",
9435 .opcode = 5255,
9436 .operands = &[_]Operand{
9437 .{ .kind = .IdResultType, .quantifier = .required },
9438 .{ .kind = .IdResult, .quantifier = .required },
9439 .{ .kind = .IdRef, .quantifier = .required },
9440 },
9441 },
9442 .{
9443 .name = "OpHitObjectTraceRayMotionNV",
9444 .opcode = 5256,
9445 .operands = &[_]Operand{
9446 .{ .kind = .IdRef, .quantifier = .required },
9447 .{ .kind = .IdRef, .quantifier = .required },
9448 .{ .kind = .IdRef, .quantifier = .required },
9449 .{ .kind = .IdRef, .quantifier = .required },
9450 .{ .kind = .IdRef, .quantifier = .required },
9451 .{ .kind = .IdRef, .quantifier = .required },
9452 .{ .kind = .IdRef, .quantifier = .required },
9453 .{ .kind = .IdRef, .quantifier = .required },
9454 .{ .kind = .IdRef, .quantifier = .required },
9455 .{ .kind = .IdRef, .quantifier = .required },
9456 .{ .kind = .IdRef, .quantifier = .required },
9457 .{ .kind = .IdRef, .quantifier = .required },
9458 .{ .kind = .IdRef, .quantifier = .required },
9459 },
9460 },
9461 .{
9462 .name = "OpHitObjectGetShaderRecordBufferHandleNV",
9463 .opcode = 5257,
9464 .operands = &[_]Operand{
9465 .{ .kind = .IdResultType, .quantifier = .required },
9466 .{ .kind = .IdResult, .quantifier = .required },
9467 .{ .kind = .IdRef, .quantifier = .required },
9468 },
9469 },
9470 .{
9471 .name = "OpHitObjectGetShaderBindingTableRecordIndexNV",
9472 .opcode = 5258,
9473 .operands = &[_]Operand{
9474 .{ .kind = .IdResultType, .quantifier = .required },
9475 .{ .kind = .IdResult, .quantifier = .required },
9476 .{ .kind = .IdRef, .quantifier = .required },
9477 },
9478 },
9479 .{
9480 .name = "OpHitObjectRecordEmptyNV",
9481 .opcode = 5259,
9482 .operands = &[_]Operand{
9483 .{ .kind = .IdRef, .quantifier = .required },
9484 },
9485 },
9486 .{
9487 .name = "OpHitObjectTraceRayNV",
9488 .opcode = 5260,
9489 .operands = &[_]Operand{
9490 .{ .kind = .IdRef, .quantifier = .required },
9491 .{ .kind = .IdRef, .quantifier = .required },
9492 .{ .kind = .IdRef, .quantifier = .required },
9493 .{ .kind = .IdRef, .quantifier = .required },
9494 .{ .kind = .IdRef, .quantifier = .required },
9495 .{ .kind = .IdRef, .quantifier = .required },
9496 .{ .kind = .IdRef, .quantifier = .required },
9497 .{ .kind = .IdRef, .quantifier = .required },
9498 .{ .kind = .IdRef, .quantifier = .required },
9499 .{ .kind = .IdRef, .quantifier = .required },
9500 .{ .kind = .IdRef, .quantifier = .required },
9501 .{ .kind = .IdRef, .quantifier = .required },
9502 },
9503 },
9504 .{
9505 .name = "OpHitObjectRecordHitNV",
9506 .opcode = 5261,
9507 .operands = &[_]Operand{
9508 .{ .kind = .IdRef, .quantifier = .required },
9509 .{ .kind = .IdRef, .quantifier = .required },
9510 .{ .kind = .IdRef, .quantifier = .required },
9511 .{ .kind = .IdRef, .quantifier = .required },
9512 .{ .kind = .IdRef, .quantifier = .required },
9513 .{ .kind = .IdRef, .quantifier = .required },
9514 .{ .kind = .IdRef, .quantifier = .required },
9515 .{ .kind = .IdRef, .quantifier = .required },
9516 .{ .kind = .IdRef, .quantifier = .required },
9517 .{ .kind = .IdRef, .quantifier = .required },
9518 .{ .kind = .IdRef, .quantifier = .required },
9519 .{ .kind = .IdRef, .quantifier = .required },
9520 .{ .kind = .IdRef, .quantifier = .required },
9521 },
9522 },
9523 .{
9524 .name = "OpHitObjectRecordHitWithIndexNV",
9525 .opcode = 5262,
9526 .operands = &[_]Operand{
9527 .{ .kind = .IdRef, .quantifier = .required },
9528 .{ .kind = .IdRef, .quantifier = .required },
9529 .{ .kind = .IdRef, .quantifier = .required },
9530 .{ .kind = .IdRef, .quantifier = .required },
9531 .{ .kind = .IdRef, .quantifier = .required },
9532 .{ .kind = .IdRef, .quantifier = .required },
9533 .{ .kind = .IdRef, .quantifier = .required },
9534 .{ .kind = .IdRef, .quantifier = .required },
9535 .{ .kind = .IdRef, .quantifier = .required },
9536 .{ .kind = .IdRef, .quantifier = .required },
9537 .{ .kind = .IdRef, .quantifier = .required },
9538 .{ .kind = .IdRef, .quantifier = .required },
9539 },
9540 },
9541 .{
9542 .name = "OpHitObjectRecordMissNV",
9543 .opcode = 5263,
9544 .operands = &[_]Operand{
9545 .{ .kind = .IdRef, .quantifier = .required },
9546 .{ .kind = .IdRef, .quantifier = .required },
9547 .{ .kind = .IdRef, .quantifier = .required },
9548 .{ .kind = .IdRef, .quantifier = .required },
9549 .{ .kind = .IdRef, .quantifier = .required },
9550 .{ .kind = .IdRef, .quantifier = .required },
9551 },
9552 },
9553 .{
9554 .name = "OpHitObjectExecuteShaderNV",
9555 .opcode = 5264,
9556 .operands = &[_]Operand{
9557 .{ .kind = .IdRef, .quantifier = .required },
9558 .{ .kind = .IdRef, .quantifier = .required },
9559 },
9560 },
9561 .{
9562 .name = "OpHitObjectGetCurrentTimeNV",
9563 .opcode = 5265,
9564 .operands = &[_]Operand{
9565 .{ .kind = .IdResultType, .quantifier = .required },
9566 .{ .kind = .IdResult, .quantifier = .required },
9567 .{ .kind = .IdRef, .quantifier = .required },
9568 },
9569 },
9570 .{
9571 .name = "OpHitObjectGetAttributesNV",
9572 .opcode = 5266,
9573 .operands = &[_]Operand{
9574 .{ .kind = .IdRef, .quantifier = .required },
9575 .{ .kind = .IdRef, .quantifier = .required },
9576 },
9577 },
9578 .{
9579 .name = "OpHitObjectGetHitKindNV",
9580 .opcode = 5267,
9581 .operands = &[_]Operand{
9582 .{ .kind = .IdResultType, .quantifier = .required },
9583 .{ .kind = .IdResult, .quantifier = .required },
9584 .{ .kind = .IdRef, .quantifier = .required },
9585 },
9586 },
9587 .{
9588 .name = "OpHitObjectGetPrimitiveIndexNV",
9589 .opcode = 5268,
9590 .operands = &[_]Operand{
9591 .{ .kind = .IdResultType, .quantifier = .required },
9592 .{ .kind = .IdResult, .quantifier = .required },
9593 .{ .kind = .IdRef, .quantifier = .required },
9594 },
9595 },
9596 .{
9597 .name = "OpHitObjectGetGeometryIndexNV",
9598 .opcode = 5269,
9599 .operands = &[_]Operand{
9600 .{ .kind = .IdResultType, .quantifier = .required },
9601 .{ .kind = .IdResult, .quantifier = .required },
9602 .{ .kind = .IdRef, .quantifier = .required },
9603 },
9604 },
9605 .{
9606 .name = "OpHitObjectGetInstanceIdNV",
9607 .opcode = 5270,
9608 .operands = &[_]Operand{
9609 .{ .kind = .IdResultType, .quantifier = .required },
9610 .{ .kind = .IdResult, .quantifier = .required },
9611 .{ .kind = .IdRef, .quantifier = .required },
9612 },
9613 },
9614 .{
9615 .name = "OpHitObjectGetInstanceCustomIndexNV",
9616 .opcode = 5271,
9617 .operands = &[_]Operand{
9618 .{ .kind = .IdResultType, .quantifier = .required },
9619 .{ .kind = .IdResult, .quantifier = .required },
9620 .{ .kind = .IdRef, .quantifier = .required },
9621 },
9622 },
9623 .{
9624 .name = "OpHitObjectGetWorldRayDirectionNV",
9625 .opcode = 5272,
9626 .operands = &[_]Operand{
9627 .{ .kind = .IdResultType, .quantifier = .required },
9628 .{ .kind = .IdResult, .quantifier = .required },
9629 .{ .kind = .IdRef, .quantifier = .required },
9630 },
9631 },
9632 .{
9633 .name = "OpHitObjectGetWorldRayOriginNV",
9634 .opcode = 5273,
9635 .operands = &[_]Operand{
9636 .{ .kind = .IdResultType, .quantifier = .required },
9637 .{ .kind = .IdResult, .quantifier = .required },
9638 .{ .kind = .IdRef, .quantifier = .required },
9639 },
9640 },
9641 .{
9642 .name = "OpHitObjectGetRayTMaxNV",
9643 .opcode = 5274,
9644 .operands = &[_]Operand{
9645 .{ .kind = .IdResultType, .quantifier = .required },
9646 .{ .kind = .IdResult, .quantifier = .required },
9647 .{ .kind = .IdRef, .quantifier = .required },
9648 },
9649 },
9650 .{
9651 .name = "OpHitObjectGetRayTMinNV",
9652 .opcode = 5275,
9653 .operands = &[_]Operand{
9654 .{ .kind = .IdResultType, .quantifier = .required },
9655 .{ .kind = .IdResult, .quantifier = .required },
9656 .{ .kind = .IdRef, .quantifier = .required },
9657 },
9658 },
9659 .{
9660 .name = "OpHitObjectIsEmptyNV",
9661 .opcode = 5276,
9662 .operands = &[_]Operand{
9663 .{ .kind = .IdResultType, .quantifier = .required },
9664 .{ .kind = .IdResult, .quantifier = .required },
9665 .{ .kind = .IdRef, .quantifier = .required },
9666 },
9667 },
9668 .{
9669 .name = "OpHitObjectIsHitNV",
9670 .opcode = 5277,
9671 .operands = &[_]Operand{
9672 .{ .kind = .IdResultType, .quantifier = .required },
9673 .{ .kind = .IdResult, .quantifier = .required },
9674 .{ .kind = .IdRef, .quantifier = .required },
9675 },
9676 },
9677 .{
9678 .name = "OpHitObjectIsMissNV",
9679 .opcode = 5278,
9680 .operands = &[_]Operand{
9681 .{ .kind = .IdResultType, .quantifier = .required },
9682 .{ .kind = .IdResult, .quantifier = .required },
9683 .{ .kind = .IdRef, .quantifier = .required },
9684 },
9685 },
9686 .{
9687 .name = "OpReorderThreadWithHitObjectNV",
9688 .opcode = 5279,
9689 .operands = &[_]Operand{
9690 .{ .kind = .IdRef, .quantifier = .required },
9691 .{ .kind = .IdRef, .quantifier = .optional },
9692 .{ .kind = .IdRef, .quantifier = .optional },
9693 },
9694 },
9695 .{
9696 .name = "OpReorderThreadWithHintNV",
9697 .opcode = 5280,
9698 .operands = &[_]Operand{
9699 .{ .kind = .IdRef, .quantifier = .required },
9700 .{ .kind = .IdRef, .quantifier = .required },
9701 },
9702 },
9703 .{
9704 .name = "OpTypeHitObjectNV",
9705 .opcode = 5281,
9706 .operands = &[_]Operand{
9707 .{ .kind = .IdResult, .quantifier = .required },
9708 },
9709 },
9710 .{
9711 .name = "OpImageSampleFootprintNV",
9712 .opcode = 5283,
9713 .operands = &[_]Operand{
9714 .{ .kind = .IdResultType, .quantifier = .required },
9715 .{ .kind = .IdResult, .quantifier = .required },
9716 .{ .kind = .IdRef, .quantifier = .required },
9717 .{ .kind = .IdRef, .quantifier = .required },
9718 .{ .kind = .IdRef, .quantifier = .required },
9719 .{ .kind = .IdRef, .quantifier = .required },
9720 .{ .kind = .ImageOperands, .quantifier = .optional },
9721 },
9722 },
9723 .{
9724 .name = "OpEmitMeshTasksEXT",
9725 .opcode = 5294,
9726 .operands = &[_]Operand{
9727 .{ .kind = .IdRef, .quantifier = .required },
9728 .{ .kind = .IdRef, .quantifier = .required },
9729 .{ .kind = .IdRef, .quantifier = .required },
9730 .{ .kind = .IdRef, .quantifier = .optional },
9731 },
9732 },
9733 .{
9734 .name = "OpSetMeshOutputsEXT",
9735 .opcode = 5295,
9736 .operands = &[_]Operand{
9737 .{ .kind = .IdRef, .quantifier = .required },
9738 .{ .kind = .IdRef, .quantifier = .required },
9739 },
9740 },
9741 .{
9742 .name = "OpGroupNonUniformPartitionNV",
9743 .opcode = 5296,
9744 .operands = &[_]Operand{
9745 .{ .kind = .IdResultType, .quantifier = .required },
9746 .{ .kind = .IdResult, .quantifier = .required },
9747 .{ .kind = .IdRef, .quantifier = .required },
9748 },
9749 },
9750 .{
9751 .name = "OpWritePackedPrimitiveIndices4x8NV",
9752 .opcode = 5299,
9753 .operands = &[_]Operand{
9754 .{ .kind = .IdRef, .quantifier = .required },
9755 .{ .kind = .IdRef, .quantifier = .required },
9756 },
9757 },
9758 .{
9759 .name = "OpFetchMicroTriangleVertexPositionNV",
9760 .opcode = 5300,
9761 .operands = &[_]Operand{
9762 .{ .kind = .IdResultType, .quantifier = .required },
9763 .{ .kind = .IdResult, .quantifier = .required },
9764 .{ .kind = .IdRef, .quantifier = .required },
9765 .{ .kind = .IdRef, .quantifier = .required },
9766 .{ .kind = .IdRef, .quantifier = .required },
9767 .{ .kind = .IdRef, .quantifier = .required },
9768 .{ .kind = .IdRef, .quantifier = .required },
9769 },
9770 },
9771 .{
9772 .name = "OpFetchMicroTriangleVertexBarycentricNV",
9773 .opcode = 5301,
9774 .operands = &[_]Operand{
9775 .{ .kind = .IdResultType, .quantifier = .required },
9776 .{ .kind = .IdResult, .quantifier = .required },
9777 .{ .kind = .IdRef, .quantifier = .required },
9778 .{ .kind = .IdRef, .quantifier = .required },
9779 .{ .kind = .IdRef, .quantifier = .required },
9780 .{ .kind = .IdRef, .quantifier = .required },
9781 .{ .kind = .IdRef, .quantifier = .required },
9782 },
9783 },
9784 .{
9785 .name = "OpReportIntersectionNV",
9786 .opcode = 5334,
9787 .operands = &[_]Operand{
9788 .{ .kind = .IdResultType, .quantifier = .required },
9789 .{ .kind = .IdResult, .quantifier = .required },
9790 .{ .kind = .IdRef, .quantifier = .required },
9791 .{ .kind = .IdRef, .quantifier = .required },
9792 },
9793 },
9794 .{
9795 .name = "OpReportIntersectionKHR",
9796 .opcode = 5334,
9797 .operands = &[_]Operand{
9798 .{ .kind = .IdResultType, .quantifier = .required },
9799 .{ .kind = .IdResult, .quantifier = .required },
9800 .{ .kind = .IdRef, .quantifier = .required },
9801 .{ .kind = .IdRef, .quantifier = .required },
9802 },
9803 },
9804 .{
9805 .name = "OpIgnoreIntersectionNV",
9806 .opcode = 5335,
9807 .operands = &[_]Operand{},
9808 },
9809 .{
9810 .name = "OpTerminateRayNV",
9811 .opcode = 5336,
9812 .operands = &[_]Operand{},
9813 },
9814 .{
9815 .name = "OpTraceNV",
9816 .opcode = 5337,
9817 .operands = &[_]Operand{
9818 .{ .kind = .IdRef, .quantifier = .required },
9819 .{ .kind = .IdRef, .quantifier = .required },
9820 .{ .kind = .IdRef, .quantifier = .required },
9821 .{ .kind = .IdRef, .quantifier = .required },
9822 .{ .kind = .IdRef, .quantifier = .required },
9823 .{ .kind = .IdRef, .quantifier = .required },
9824 .{ .kind = .IdRef, .quantifier = .required },
9825 .{ .kind = .IdRef, .quantifier = .required },
9826 .{ .kind = .IdRef, .quantifier = .required },
9827 .{ .kind = .IdRef, .quantifier = .required },
9828 .{ .kind = .IdRef, .quantifier = .required },
9829 },
9830 },
9831 .{
9832 .name = "OpTraceMotionNV",
9833 .opcode = 5338,
9834 .operands = &[_]Operand{
9835 .{ .kind = .IdRef, .quantifier = .required },
9836 .{ .kind = .IdRef, .quantifier = .required },
9837 .{ .kind = .IdRef, .quantifier = .required },
9838 .{ .kind = .IdRef, .quantifier = .required },
9839 .{ .kind = .IdRef, .quantifier = .required },
9840 .{ .kind = .IdRef, .quantifier = .required },
9841 .{ .kind = .IdRef, .quantifier = .required },
9842 .{ .kind = .IdRef, .quantifier = .required },
9843 .{ .kind = .IdRef, .quantifier = .required },
9844 .{ .kind = .IdRef, .quantifier = .required },
9845 .{ .kind = .IdRef, .quantifier = .required },
9846 .{ .kind = .IdRef, .quantifier = .required },
9847 },
9848 },
9849 .{
9850 .name = "OpTraceRayMotionNV",
9851 .opcode = 5339,
9852 .operands = &[_]Operand{
9853 .{ .kind = .IdRef, .quantifier = .required },
9854 .{ .kind = .IdRef, .quantifier = .required },
9855 .{ .kind = .IdRef, .quantifier = .required },
9856 .{ .kind = .IdRef, .quantifier = .required },
9857 .{ .kind = .IdRef, .quantifier = .required },
9858 .{ .kind = .IdRef, .quantifier = .required },
9859 .{ .kind = .IdRef, .quantifier = .required },
9860 .{ .kind = .IdRef, .quantifier = .required },
9861 .{ .kind = .IdRef, .quantifier = .required },
9862 .{ .kind = .IdRef, .quantifier = .required },
9863 .{ .kind = .IdRef, .quantifier = .required },
9864 .{ .kind = .IdRef, .quantifier = .required },
9865 },
9866 },
9867 .{
9868 .name = "OpRayQueryGetIntersectionTriangleVertexPositionsKHR",
9869 .opcode = 5340,
9870 .operands = &[_]Operand{
9871 .{ .kind = .IdResultType, .quantifier = .required },
9872 .{ .kind = .IdResult, .quantifier = .required },
9873 .{ .kind = .IdRef, .quantifier = .required },
9874 .{ .kind = .IdRef, .quantifier = .required },
9875 },
9876 },
9877 .{
9878 .name = "OpTypeAccelerationStructureNV",
9879 .opcode = 5341,
9880 .operands = &[_]Operand{
9881 .{ .kind = .IdResult, .quantifier = .required },
9882 },
9883 },
9884 .{
9885 .name = "OpTypeAccelerationStructureKHR",
9886 .opcode = 5341,
9887 .operands = &[_]Operand{
9888 .{ .kind = .IdResult, .quantifier = .required },
9889 },
9890 },
9891 .{
9892 .name = "OpExecuteCallableNV",
9893 .opcode = 5344,
9894 .operands = &[_]Operand{
9895 .{ .kind = .IdRef, .quantifier = .required },
9896 .{ .kind = .IdRef, .quantifier = .required },
9897 },
9898 },
9899 .{
9900 .name = "OpTypeCooperativeMatrixNV",
9901 .opcode = 5358,
9902 .operands = &[_]Operand{
9903 .{ .kind = .IdResult, .quantifier = .required },
9904 .{ .kind = .IdRef, .quantifier = .required },
9905 .{ .kind = .IdScope, .quantifier = .required },
9906 .{ .kind = .IdRef, .quantifier = .required },
9907 .{ .kind = .IdRef, .quantifier = .required },
9908 },
9909 },
9910 .{
9911 .name = "OpCooperativeMatrixLoadNV",
9912 .opcode = 5359,
9913 .operands = &[_]Operand{
9914 .{ .kind = .IdResultType, .quantifier = .required },
9915 .{ .kind = .IdResult, .quantifier = .required },
9916 .{ .kind = .IdRef, .quantifier = .required },
9917 .{ .kind = .IdRef, .quantifier = .required },
9918 .{ .kind = .IdRef, .quantifier = .required },
9919 .{ .kind = .MemoryAccess, .quantifier = .optional },
9920 },
9921 },
9922 .{
9923 .name = "OpCooperativeMatrixStoreNV",
9924 .opcode = 5360,
9925 .operands = &[_]Operand{
9926 .{ .kind = .IdRef, .quantifier = .required },
9927 .{ .kind = .IdRef, .quantifier = .required },
9928 .{ .kind = .IdRef, .quantifier = .required },
9929 .{ .kind = .IdRef, .quantifier = .required },
9930 .{ .kind = .MemoryAccess, .quantifier = .optional },
9931 },
9932 },
9933 .{
9934 .name = "OpCooperativeMatrixMulAddNV",
9935 .opcode = 5361,
9936 .operands = &[_]Operand{
9937 .{ .kind = .IdResultType, .quantifier = .required },
9938 .{ .kind = .IdResult, .quantifier = .required },
9939 .{ .kind = .IdRef, .quantifier = .required },
9940 .{ .kind = .IdRef, .quantifier = .required },
9941 .{ .kind = .IdRef, .quantifier = .required },
9942 },
9943 },
9944 .{
9945 .name = "OpCooperativeMatrixLengthNV",
9946 .opcode = 5362,
9947 .operands = &[_]Operand{
9948 .{ .kind = .IdResultType, .quantifier = .required },
9949 .{ .kind = .IdResult, .quantifier = .required },
9950 .{ .kind = .IdRef, .quantifier = .required },
9951 },
9952 },
9953 .{
9954 .name = "OpBeginInvocationInterlockEXT",
9955 .opcode = 5364,
9956 .operands = &[_]Operand{},
9957 },
9958 .{
9959 .name = "OpEndInvocationInterlockEXT",
9960 .opcode = 5365,
9961 .operands = &[_]Operand{},
9962 },
9963 .{
9964 .name = "OpDemoteToHelperInvocation",
9965 .opcode = 5380,
9966 .operands = &[_]Operand{},
9967 },
9968 .{
9969 .name = "OpDemoteToHelperInvocationEXT",
9970 .opcode = 5380,
9971 .operands = &[_]Operand{},
9972 },
9973 .{
9974 .name = "OpIsHelperInvocationEXT",
9975 .opcode = 5381,
9976 .operands = &[_]Operand{
9977 .{ .kind = .IdResultType, .quantifier = .required },
9978 .{ .kind = .IdResult, .quantifier = .required },
9979 },
9980 },
9981 .{
9982 .name = "OpConvertUToImageNV",
9983 .opcode = 5391,
9984 .operands = &[_]Operand{
9985 .{ .kind = .IdResultType, .quantifier = .required },
9986 .{ .kind = .IdResult, .quantifier = .required },
9987 .{ .kind = .IdRef, .quantifier = .required },
9988 },
9989 },
9990 .{
9991 .name = "OpConvertUToSamplerNV",
9992 .opcode = 5392,
9993 .operands = &[_]Operand{
9994 .{ .kind = .IdResultType, .quantifier = .required },
9995 .{ .kind = .IdResult, .quantifier = .required },
9996 .{ .kind = .IdRef, .quantifier = .required },
9997 },
9998 },
9999 .{
10000 .name = "OpConvertImageToUNV",
10001 .opcode = 5393,
10002 .operands = &[_]Operand{
10003 .{ .kind = .IdResultType, .quantifier = .required },
10004 .{ .kind = .IdResult, .quantifier = .required },
10005 .{ .kind = .IdRef, .quantifier = .required },
10006 },
10007 },
10008 .{
10009 .name = "OpConvertSamplerToUNV",
10010 .opcode = 5394,
10011 .operands = &[_]Operand{
10012 .{ .kind = .IdResultType, .quantifier = .required },
10013 .{ .kind = .IdResult, .quantifier = .required },
10014 .{ .kind = .IdRef, .quantifier = .required },
10015 },
10016 },
10017 .{
10018 .name = "OpConvertUToSampledImageNV",
10019 .opcode = 5395,
10020 .operands = &[_]Operand{
10021 .{ .kind = .IdResultType, .quantifier = .required },
10022 .{ .kind = .IdResult, .quantifier = .required },
10023 .{ .kind = .IdRef, .quantifier = .required },
10024 },
10025 },
10026 .{
10027 .name = "OpConvertSampledImageToUNV",
10028 .opcode = 5396,
10029 .operands = &[_]Operand{
10030 .{ .kind = .IdResultType, .quantifier = .required },
10031 .{ .kind = .IdResult, .quantifier = .required },
10032 .{ .kind = .IdRef, .quantifier = .required },
10033 },
10034 },
10035 .{
10036 .name = "OpSamplerImageAddressingModeNV",
10037 .opcode = 5397,
10038 .operands = &[_]Operand{
10039 .{ .kind = .LiteralInteger, .quantifier = .required },
10040 },
10041 },
10042 .{
10043 .name = "OpRawAccessChainNV",
10044 .opcode = 5398,
10045 .operands = &[_]Operand{
10046 .{ .kind = .IdResultType, .quantifier = .required },
10047 .{ .kind = .IdResult, .quantifier = .required },
10048 .{ .kind = .IdRef, .quantifier = .required },
10049 .{ .kind = .IdRef, .quantifier = .required },
10050 .{ .kind = .IdRef, .quantifier = .required },
10051 .{ .kind = .IdRef, .quantifier = .required },
10052 .{ .kind = .RawAccessChainOperands, .quantifier = .optional },
10053 },
10054 },
10055 .{
10056 .name = "OpSubgroupShuffleINTEL",
10057 .opcode = 5571,
10058 .operands = &[_]Operand{
10059 .{ .kind = .IdResultType, .quantifier = .required },
10060 .{ .kind = .IdResult, .quantifier = .required },
10061 .{ .kind = .IdRef, .quantifier = .required },
10062 .{ .kind = .IdRef, .quantifier = .required },
10063 },
10064 },
10065 .{
10066 .name = "OpSubgroupShuffleDownINTEL",
10067 .opcode = 5572,
10068 .operands = &[_]Operand{
10069 .{ .kind = .IdResultType, .quantifier = .required },
10070 .{ .kind = .IdResult, .quantifier = .required },
10071 .{ .kind = .IdRef, .quantifier = .required },
10072 .{ .kind = .IdRef, .quantifier = .required },
10073 .{ .kind = .IdRef, .quantifier = .required },
10074 },
10075 },
10076 .{
10077 .name = "OpSubgroupShuffleUpINTEL",
10078 .opcode = 5573,
10079 .operands = &[_]Operand{
10080 .{ .kind = .IdResultType, .quantifier = .required },
10081 .{ .kind = .IdResult, .quantifier = .required },
10082 .{ .kind = .IdRef, .quantifier = .required },
10083 .{ .kind = .IdRef, .quantifier = .required },
10084 .{ .kind = .IdRef, .quantifier = .required },
10085 },
10086 },
10087 .{
10088 .name = "OpSubgroupShuffleXorINTEL",
10089 .opcode = 5574,
10090 .operands = &[_]Operand{
10091 .{ .kind = .IdResultType, .quantifier = .required },
10092 .{ .kind = .IdResult, .quantifier = .required },
10093 .{ .kind = .IdRef, .quantifier = .required },
10094 .{ .kind = .IdRef, .quantifier = .required },
10095 },
10096 },
10097 .{
10098 .name = "OpSubgroupBlockReadINTEL",
10099 .opcode = 5575,
10100 .operands = &[_]Operand{
10101 .{ .kind = .IdResultType, .quantifier = .required },
10102 .{ .kind = .IdResult, .quantifier = .required },
10103 .{ .kind = .IdRef, .quantifier = .required },
10104 },
10105 },
10106 .{
10107 .name = "OpSubgroupBlockWriteINTEL",
10108 .opcode = 5576,
10109 .operands = &[_]Operand{
10110 .{ .kind = .IdRef, .quantifier = .required },
10111 .{ .kind = .IdRef, .quantifier = .required },
10112 },
10113 },
10114 .{
10115 .name = "OpSubgroupImageBlockReadINTEL",
10116 .opcode = 5577,
10117 .operands = &[_]Operand{
10118 .{ .kind = .IdResultType, .quantifier = .required },
10119 .{ .kind = .IdResult, .quantifier = .required },
10120 .{ .kind = .IdRef, .quantifier = .required },
10121 .{ .kind = .IdRef, .quantifier = .required },
10122 },
10123 },
10124 .{
10125 .name = "OpSubgroupImageBlockWriteINTEL",
10126 .opcode = 5578,
10127 .operands = &[_]Operand{
10128 .{ .kind = .IdRef, .quantifier = .required },
10129 .{ .kind = .IdRef, .quantifier = .required },
10130 .{ .kind = .IdRef, .quantifier = .required },
10131 },
10132 },
10133 .{
10134 .name = "OpSubgroupImageMediaBlockReadINTEL",
10135 .opcode = 5580,
10136 .operands = &[_]Operand{
10137 .{ .kind = .IdResultType, .quantifier = .required },
10138 .{ .kind = .IdResult, .quantifier = .required },
10139 .{ .kind = .IdRef, .quantifier = .required },
10140 .{ .kind = .IdRef, .quantifier = .required },
10141 .{ .kind = .IdRef, .quantifier = .required },
10142 .{ .kind = .IdRef, .quantifier = .required },
10143 },
10144 },
10145 .{
10146 .name = "OpSubgroupImageMediaBlockWriteINTEL",
10147 .opcode = 5581,
10148 .operands = &[_]Operand{
10149 .{ .kind = .IdRef, .quantifier = .required },
10150 .{ .kind = .IdRef, .quantifier = .required },
10151 .{ .kind = .IdRef, .quantifier = .required },
10152 .{ .kind = .IdRef, .quantifier = .required },
10153 .{ .kind = .IdRef, .quantifier = .required },
10154 },
10155 },
10156 .{
10157 .name = "OpUCountLeadingZerosINTEL",
10158 .opcode = 5585,
10159 .operands = &[_]Operand{
10160 .{ .kind = .IdResultType, .quantifier = .required },
10161 .{ .kind = .IdResult, .quantifier = .required },
10162 .{ .kind = .IdRef, .quantifier = .required },
10163 },
10164 },
10165 .{
10166 .name = "OpUCountTrailingZerosINTEL",
10167 .opcode = 5586,
10168 .operands = &[_]Operand{
10169 .{ .kind = .IdResultType, .quantifier = .required },
10170 .{ .kind = .IdResult, .quantifier = .required },
10171 .{ .kind = .IdRef, .quantifier = .required },
10172 },
10173 },
10174 .{
10175 .name = "OpAbsISubINTEL",
10176 .opcode = 5587,
10177 .operands = &[_]Operand{
10178 .{ .kind = .IdResultType, .quantifier = .required },
10179 .{ .kind = .IdResult, .quantifier = .required },
10180 .{ .kind = .IdRef, .quantifier = .required },
10181 .{ .kind = .IdRef, .quantifier = .required },
10182 },
10183 },
10184 .{
10185 .name = "OpAbsUSubINTEL",
10186 .opcode = 5588,
10187 .operands = &[_]Operand{
10188 .{ .kind = .IdResultType, .quantifier = .required },
10189 .{ .kind = .IdResult, .quantifier = .required },
10190 .{ .kind = .IdRef, .quantifier = .required },
10191 .{ .kind = .IdRef, .quantifier = .required },
10192 },
10193 },
10194 .{
10195 .name = "OpIAddSatINTEL",
10196 .opcode = 5589,
10197 .operands = &[_]Operand{
10198 .{ .kind = .IdResultType, .quantifier = .required },
10199 .{ .kind = .IdResult, .quantifier = .required },
10200 .{ .kind = .IdRef, .quantifier = .required },
10201 .{ .kind = .IdRef, .quantifier = .required },
10202 },
10203 },
10204 .{
10205 .name = "OpUAddSatINTEL",
10206 .opcode = 5590,
10207 .operands = &[_]Operand{
10208 .{ .kind = .IdResultType, .quantifier = .required },
10209 .{ .kind = .IdResult, .quantifier = .required },
10210 .{ .kind = .IdRef, .quantifier = .required },
10211 .{ .kind = .IdRef, .quantifier = .required },
10212 },
10213 },
10214 .{
10215 .name = "OpIAverageINTEL",
10216 .opcode = 5591,
10217 .operands = &[_]Operand{
10218 .{ .kind = .IdResultType, .quantifier = .required },
10219 .{ .kind = .IdResult, .quantifier = .required },
10220 .{ .kind = .IdRef, .quantifier = .required },
10221 .{ .kind = .IdRef, .quantifier = .required },
10222 },
10223 },
10224 .{
10225 .name = "OpUAverageINTEL",
10226 .opcode = 5592,
10227 .operands = &[_]Operand{
10228 .{ .kind = .IdResultType, .quantifier = .required },
10229 .{ .kind = .IdResult, .quantifier = .required },
10230 .{ .kind = .IdRef, .quantifier = .required },
10231 .{ .kind = .IdRef, .quantifier = .required },
10232 },
10233 },
10234 .{
10235 .name = "OpIAverageRoundedINTEL",
10236 .opcode = 5593,
10237 .operands = &[_]Operand{
10238 .{ .kind = .IdResultType, .quantifier = .required },
10239 .{ .kind = .IdResult, .quantifier = .required },
10240 .{ .kind = .IdRef, .quantifier = .required },
10241 .{ .kind = .IdRef, .quantifier = .required },
10242 },
10243 },
10244 .{
10245 .name = "OpUAverageRoundedINTEL",
10246 .opcode = 5594,
10247 .operands = &[_]Operand{
10248 .{ .kind = .IdResultType, .quantifier = .required },
10249 .{ .kind = .IdResult, .quantifier = .required },
10250 .{ .kind = .IdRef, .quantifier = .required },
10251 .{ .kind = .IdRef, .quantifier = .required },
10252 },
10253 },
10254 .{
10255 .name = "OpISubSatINTEL",
10256 .opcode = 5595,
10257 .operands = &[_]Operand{
10258 .{ .kind = .IdResultType, .quantifier = .required },
10259 .{ .kind = .IdResult, .quantifier = .required },
10260 .{ .kind = .IdRef, .quantifier = .required },
10261 .{ .kind = .IdRef, .quantifier = .required },
10262 },
10263 },
10264 .{
10265 .name = "OpUSubSatINTEL",
10266 .opcode = 5596,
10267 .operands = &[_]Operand{
10268 .{ .kind = .IdResultType, .quantifier = .required },
10269 .{ .kind = .IdResult, .quantifier = .required },
10270 .{ .kind = .IdRef, .quantifier = .required },
10271 .{ .kind = .IdRef, .quantifier = .required },
10272 },
10273 },
10274 .{
10275 .name = "OpIMul32x16INTEL",
10276 .opcode = 5597,
10277 .operands = &[_]Operand{
10278 .{ .kind = .IdResultType, .quantifier = .required },
10279 .{ .kind = .IdResult, .quantifier = .required },
10280 .{ .kind = .IdRef, .quantifier = .required },
10281 .{ .kind = .IdRef, .quantifier = .required },
10282 },
10283 },
10284 .{
10285 .name = "OpUMul32x16INTEL",
10286 .opcode = 5598,
10287 .operands = &[_]Operand{
10288 .{ .kind = .IdResultType, .quantifier = .required },
10289 .{ .kind = .IdResult, .quantifier = .required },
10290 .{ .kind = .IdRef, .quantifier = .required },
10291 .{ .kind = .IdRef, .quantifier = .required },
10292 },
10293 },
10294 .{
10295 .name = "OpConstantFunctionPointerINTEL",
10296 .opcode = 5600,
10297 .operands = &[_]Operand{
10298 .{ .kind = .IdResultType, .quantifier = .required },
10299 .{ .kind = .IdResult, .quantifier = .required },
10300 .{ .kind = .IdRef, .quantifier = .required },
10301 },
10302 },
10303 .{
10304 .name = "OpFunctionPointerCallINTEL",
10305 .opcode = 5601,
10306 .operands = &[_]Operand{
10307 .{ .kind = .IdResultType, .quantifier = .required },
10308 .{ .kind = .IdResult, .quantifier = .required },
10309 .{ .kind = .IdRef, .quantifier = .variadic },
10310 },
10311 },
10312 .{
10313 .name = "OpAsmTargetINTEL",
10314 .opcode = 5609,
10315 .operands = &[_]Operand{
10316 .{ .kind = .IdResultType, .quantifier = .required },
10317 .{ .kind = .IdResult, .quantifier = .required },
10318 .{ .kind = .LiteralString, .quantifier = .required },
10319 },
10320 },
10321 .{
10322 .name = "OpAsmINTEL",
10323 .opcode = 5610,
10324 .operands = &[_]Operand{
10325 .{ .kind = .IdResultType, .quantifier = .required },
10326 .{ .kind = .IdResult, .quantifier = .required },
10327 .{ .kind = .IdRef, .quantifier = .required },
10328 .{ .kind = .IdRef, .quantifier = .required },
10329 .{ .kind = .LiteralString, .quantifier = .required },
10330 .{ .kind = .LiteralString, .quantifier = .required },
10331 },
10332 },
10333 .{
10334 .name = "OpAsmCallINTEL",
10335 .opcode = 5611,
10336 .operands = &[_]Operand{
10337 .{ .kind = .IdResultType, .quantifier = .required },
10338 .{ .kind = .IdResult, .quantifier = .required },
10339 .{ .kind = .IdRef, .quantifier = .required },
10340 .{ .kind = .IdRef, .quantifier = .variadic },
10341 },
10342 },
10343 .{
10344 .name = "OpAtomicFMinEXT",
10345 .opcode = 5614,
10346 .operands = &[_]Operand{
10347 .{ .kind = .IdResultType, .quantifier = .required },
10348 .{ .kind = .IdResult, .quantifier = .required },
10349 .{ .kind = .IdRef, .quantifier = .required },
10350 .{ .kind = .IdScope, .quantifier = .required },
10351 .{ .kind = .IdMemorySemantics, .quantifier = .required },
10352 .{ .kind = .IdRef, .quantifier = .required },
10353 },
10354 },
10355 .{
10356 .name = "OpAtomicFMaxEXT",
10357 .opcode = 5615,
10358 .operands = &[_]Operand{
10359 .{ .kind = .IdResultType, .quantifier = .required },
10360 .{ .kind = .IdResult, .quantifier = .required },
10361 .{ .kind = .IdRef, .quantifier = .required },
10362 .{ .kind = .IdScope, .quantifier = .required },
10363 .{ .kind = .IdMemorySemantics, .quantifier = .required },
10364 .{ .kind = .IdRef, .quantifier = .required },
10365 },
10366 },
10367 .{
10368 .name = "OpAssumeTrueKHR",
10369 .opcode = 5630,
10370 .operands = &[_]Operand{
10371 .{ .kind = .IdRef, .quantifier = .required },
10372 },
10373 },
10374 .{
10375 .name = "OpExpectKHR",
10376 .opcode = 5631,
10377 .operands = &[_]Operand{
10378 .{ .kind = .IdResultType, .quantifier = .required },
10379 .{ .kind = .IdResult, .quantifier = .required },
10380 .{ .kind = .IdRef, .quantifier = .required },
10381 .{ .kind = .IdRef, .quantifier = .required },
10382 },
10383 },
10384 .{
10385 .name = "OpDecorateString",
10386 .opcode = 5632,
10387 .operands = &[_]Operand{
10388 .{ .kind = .IdRef, .quantifier = .required },
10389 .{ .kind = .Decoration, .quantifier = .required },
10390 },
10391 },
10392 .{
10393 .name = "OpDecorateStringGOOGLE",
10394 .opcode = 5632,
10395 .operands = &[_]Operand{
10396 .{ .kind = .IdRef, .quantifier = .required },
10397 .{ .kind = .Decoration, .quantifier = .required },
10398 },
10399 },
10400 .{
10401 .name = "OpMemberDecorateString",
10402 .opcode = 5633,
10403 .operands = &[_]Operand{
10404 .{ .kind = .IdRef, .quantifier = .required },
10405 .{ .kind = .LiteralInteger, .quantifier = .required },
10406 .{ .kind = .Decoration, .quantifier = .required },
10407 },
10408 },
10409 .{
10410 .name = "OpMemberDecorateStringGOOGLE",
10411 .opcode = 5633,
10412 .operands = &[_]Operand{
10413 .{ .kind = .IdRef, .quantifier = .required },
10414 .{ .kind = .LiteralInteger, .quantifier = .required },
10415 .{ .kind = .Decoration, .quantifier = .required },
10416 },
10417 },
10418 .{
10419 .name = "OpVmeImageINTEL",
10420 .opcode = 5699,
10421 .operands = &[_]Operand{
10422 .{ .kind = .IdResultType, .quantifier = .required },
10423 .{ .kind = .IdResult, .quantifier = .required },
10424 .{ .kind = .IdRef, .quantifier = .required },
10425 .{ .kind = .IdRef, .quantifier = .required },
10426 },
10427 },
10428 .{
10429 .name = "OpTypeVmeImageINTEL",
10430 .opcode = 5700,
10431 .operands = &[_]Operand{
10432 .{ .kind = .IdResult, .quantifier = .required },
10433 .{ .kind = .IdRef, .quantifier = .required },
10434 },
10435 },
10436 .{
10437 .name = "OpTypeAvcImePayloadINTEL",
10438 .opcode = 5701,
10439 .operands = &[_]Operand{
10440 .{ .kind = .IdResult, .quantifier = .required },
10441 },
10442 },
10443 .{
10444 .name = "OpTypeAvcRefPayloadINTEL",
10445 .opcode = 5702,
10446 .operands = &[_]Operand{
10447 .{ .kind = .IdResult, .quantifier = .required },
10448 },
10449 },
10450 .{
10451 .name = "OpTypeAvcSicPayloadINTEL",
10452 .opcode = 5703,
10453 .operands = &[_]Operand{
10454 .{ .kind = .IdResult, .quantifier = .required },
10455 },
10456 },
10457 .{
10458 .name = "OpTypeAvcMcePayloadINTEL",
10459 .opcode = 5704,
10460 .operands = &[_]Operand{
10461 .{ .kind = .IdResult, .quantifier = .required },
10462 },
10463 },
10464 .{
10465 .name = "OpTypeAvcMceResultINTEL",
10466 .opcode = 5705,
10467 .operands = &[_]Operand{
10468 .{ .kind = .IdResult, .quantifier = .required },
10469 },
10470 },
10471 .{
10472 .name = "OpTypeAvcImeResultINTEL",
10473 .opcode = 5706,
10474 .operands = &[_]Operand{
10475 .{ .kind = .IdResult, .quantifier = .required },
10476 },
10477 },
10478 .{
10479 .name = "OpTypeAvcImeResultSingleReferenceStreamoutINTEL",
10480 .opcode = 5707,
10481 .operands = &[_]Operand{
10482 .{ .kind = .IdResult, .quantifier = .required },
10483 },
10484 },
10485 .{
10486 .name = "OpTypeAvcImeResultDualReferenceStreamoutINTEL",
10487 .opcode = 5708,
10488 .operands = &[_]Operand{
10489 .{ .kind = .IdResult, .quantifier = .required },
10490 },
10491 },
10492 .{
10493 .name = "OpTypeAvcImeSingleReferenceStreaminINTEL",
10494 .opcode = 5709,
10495 .operands = &[_]Operand{
10496 .{ .kind = .IdResult, .quantifier = .required },
10497 },
10498 },
10499 .{
10500 .name = "OpTypeAvcImeDualReferenceStreaminINTEL",
10501 .opcode = 5710,
10502 .operands = &[_]Operand{
10503 .{ .kind = .IdResult, .quantifier = .required },
10504 },
10505 },
10506 .{
10507 .name = "OpTypeAvcRefResultINTEL",
10508 .opcode = 5711,
10509 .operands = &[_]Operand{
10510 .{ .kind = .IdResult, .quantifier = .required },
10511 },
10512 },
10513 .{
10514 .name = "OpTypeAvcSicResultINTEL",
10515 .opcode = 5712,
10516 .operands = &[_]Operand{
10517 .{ .kind = .IdResult, .quantifier = .required },
10518 },
10519 },
10520 .{
10521 .name = "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL",
10522 .opcode = 5713,
10523 .operands = &[_]Operand{
10524 .{ .kind = .IdResultType, .quantifier = .required },
10525 .{ .kind = .IdResult, .quantifier = .required },
10526 .{ .kind = .IdRef, .quantifier = .required },
10527 .{ .kind = .IdRef, .quantifier = .required },
10528 },
10529 },
10530 .{
10531 .name = "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL",
10532 .opcode = 5714,
10533 .operands = &[_]Operand{
10534 .{ .kind = .IdResultType, .quantifier = .required },
10535 .{ .kind = .IdResult, .quantifier = .required },
10536 .{ .kind = .IdRef, .quantifier = .required },
10537 .{ .kind = .IdRef, .quantifier = .required },
10538 },
10539 },
10540 .{
10541 .name = "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL",
10542 .opcode = 5715,
10543 .operands = &[_]Operand{
10544 .{ .kind = .IdResultType, .quantifier = .required },
10545 .{ .kind = .IdResult, .quantifier = .required },
10546 .{ .kind = .IdRef, .quantifier = .required },
10547 .{ .kind = .IdRef, .quantifier = .required },
10548 },
10549 },
10550 .{
10551 .name = "OpSubgroupAvcMceSetInterShapePenaltyINTEL",
10552 .opcode = 5716,
10553 .operands = &[_]Operand{
10554 .{ .kind = .IdResultType, .quantifier = .required },
10555 .{ .kind = .IdResult, .quantifier = .required },
10556 .{ .kind = .IdRef, .quantifier = .required },
10557 .{ .kind = .IdRef, .quantifier = .required },
10558 },
10559 },
10560 .{
10561 .name = "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL",
10562 .opcode = 5717,
10563 .operands = &[_]Operand{
10564 .{ .kind = .IdResultType, .quantifier = .required },
10565 .{ .kind = .IdResult, .quantifier = .required },
10566 .{ .kind = .IdRef, .quantifier = .required },
10567 .{ .kind = .IdRef, .quantifier = .required },
10568 },
10569 },
10570 .{
10571 .name = "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL",
10572 .opcode = 5718,
10573 .operands = &[_]Operand{
10574 .{ .kind = .IdResultType, .quantifier = .required },
10575 .{ .kind = .IdResult, .quantifier = .required },
10576 .{ .kind = .IdRef, .quantifier = .required },
10577 .{ .kind = .IdRef, .quantifier = .required },
10578 },
10579 },
10580 .{
10581 .name = "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL",
10582 .opcode = 5719,
10583 .operands = &[_]Operand{
10584 .{ .kind = .IdResultType, .quantifier = .required },
10585 .{ .kind = .IdResult, .quantifier = .required },
10586 .{ .kind = .IdRef, .quantifier = .required },
10587 .{ .kind = .IdRef, .quantifier = .required },
10588 },
10589 },
10590 .{
10591 .name = "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL",
10592 .opcode = 5720,
10593 .operands = &[_]Operand{
10594 .{ .kind = .IdResultType, .quantifier = .required },
10595 .{ .kind = .IdResult, .quantifier = .required },
10596 .{ .kind = .IdRef, .quantifier = .required },
10597 .{ .kind = .IdRef, .quantifier = .required },
10598 },
10599 },
10600 .{
10601 .name = "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL",
10602 .opcode = 5721,
10603 .operands = &[_]Operand{
10604 .{ .kind = .IdResultType, .quantifier = .required },
10605 .{ .kind = .IdResult, .quantifier = .required },
10606 },
10607 },
10608 .{
10609 .name = "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL",
10610 .opcode = 5722,
10611 .operands = &[_]Operand{
10612 .{ .kind = .IdResultType, .quantifier = .required },
10613 .{ .kind = .IdResult, .quantifier = .required },
10614 },
10615 },
10616 .{
10617 .name = "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL",
10618 .opcode = 5723,
10619 .operands = &[_]Operand{
10620 .{ .kind = .IdResultType, .quantifier = .required },
10621 .{ .kind = .IdResult, .quantifier = .required },
10622 },
10623 },
10624 .{
10625 .name = "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL",
10626 .opcode = 5724,
10627 .operands = &[_]Operand{
10628 .{ .kind = .IdResultType, .quantifier = .required },
10629 .{ .kind = .IdResult, .quantifier = .required },
10630 .{ .kind = .IdRef, .quantifier = .required },
10631 .{ .kind = .IdRef, .quantifier = .required },
10632 .{ .kind = .IdRef, .quantifier = .required },
10633 .{ .kind = .IdRef, .quantifier = .required },
10634 },
10635 },
10636 .{
10637 .name = "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL",
10638 .opcode = 5725,
10639 .operands = &[_]Operand{
10640 .{ .kind = .IdResultType, .quantifier = .required },
10641 .{ .kind = .IdResult, .quantifier = .required },
10642 .{ .kind = .IdRef, .quantifier = .required },
10643 .{ .kind = .IdRef, .quantifier = .required },
10644 },
10645 },
10646 .{
10647 .name = "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL",
10648 .opcode = 5726,
10649 .operands = &[_]Operand{
10650 .{ .kind = .IdResultType, .quantifier = .required },
10651 .{ .kind = .IdResult, .quantifier = .required },
10652 },
10653 },
10654 .{
10655 .name = "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL",
10656 .opcode = 5727,
10657 .operands = &[_]Operand{
10658 .{ .kind = .IdResultType, .quantifier = .required },
10659 .{ .kind = .IdResult, .quantifier = .required },
10660 },
10661 },
10662 .{
10663 .name = "OpSubgroupAvcMceSetAcOnlyHaarINTEL",
10664 .opcode = 5728,
10665 .operands = &[_]Operand{
10666 .{ .kind = .IdResultType, .quantifier = .required },
10667 .{ .kind = .IdResult, .quantifier = .required },
10668 .{ .kind = .IdRef, .quantifier = .required },
10669 },
10670 },
10671 .{
10672 .name = "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL",
10673 .opcode = 5729,
10674 .operands = &[_]Operand{
10675 .{ .kind = .IdResultType, .quantifier = .required },
10676 .{ .kind = .IdResult, .quantifier = .required },
10677 .{ .kind = .IdRef, .quantifier = .required },
10678 .{ .kind = .IdRef, .quantifier = .required },
10679 },
10680 },
10681 .{
10682 .name = "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL",
10683 .opcode = 5730,
10684 .operands = &[_]Operand{
10685 .{ .kind = .IdResultType, .quantifier = .required },
10686 .{ .kind = .IdResult, .quantifier = .required },
10687 .{ .kind = .IdRef, .quantifier = .required },
10688 .{ .kind = .IdRef, .quantifier = .required },
10689 },
10690 },
10691 .{
10692 .name = "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL",
10693 .opcode = 5731,
10694 .operands = &[_]Operand{
10695 .{ .kind = .IdResultType, .quantifier = .required },
10696 .{ .kind = .IdResult, .quantifier = .required },
10697 .{ .kind = .IdRef, .quantifier = .required },
10698 .{ .kind = .IdRef, .quantifier = .required },
10699 .{ .kind = .IdRef, .quantifier = .required },
10700 },
10701 },
10702 .{
10703 .name = "OpSubgroupAvcMceConvertToImePayloadINTEL",
10704 .opcode = 5732,
10705 .operands = &[_]Operand{
10706 .{ .kind = .IdResultType, .quantifier = .required },
10707 .{ .kind = .IdResult, .quantifier = .required },
10708 .{ .kind = .IdRef, .quantifier = .required },
10709 },
10710 },
10711 .{
10712 .name = "OpSubgroupAvcMceConvertToImeResultINTEL",
10713 .opcode = 5733,
10714 .operands = &[_]Operand{
10715 .{ .kind = .IdResultType, .quantifier = .required },
10716 .{ .kind = .IdResult, .quantifier = .required },
10717 .{ .kind = .IdRef, .quantifier = .required },
10718 },
10719 },
10720 .{
10721 .name = "OpSubgroupAvcMceConvertToRefPayloadINTEL",
10722 .opcode = 5734,
10723 .operands = &[_]Operand{
10724 .{ .kind = .IdResultType, .quantifier = .required },
10725 .{ .kind = .IdResult, .quantifier = .required },
10726 .{ .kind = .IdRef, .quantifier = .required },
10727 },
10728 },
10729 .{
10730 .name = "OpSubgroupAvcMceConvertToRefResultINTEL",
10731 .opcode = 5735,
10732 .operands = &[_]Operand{
10733 .{ .kind = .IdResultType, .quantifier = .required },
10734 .{ .kind = .IdResult, .quantifier = .required },
10735 .{ .kind = .IdRef, .quantifier = .required },
10736 },
10737 },
10738 .{
10739 .name = "OpSubgroupAvcMceConvertToSicPayloadINTEL",
10740 .opcode = 5736,
10741 .operands = &[_]Operand{
10742 .{ .kind = .IdResultType, .quantifier = .required },
10743 .{ .kind = .IdResult, .quantifier = .required },
10744 .{ .kind = .IdRef, .quantifier = .required },
10745 },
10746 },
10747 .{
10748 .name = "OpSubgroupAvcMceConvertToSicResultINTEL",
10749 .opcode = 5737,
10750 .operands = &[_]Operand{
10751 .{ .kind = .IdResultType, .quantifier = .required },
10752 .{ .kind = .IdResult, .quantifier = .required },
10753 .{ .kind = .IdRef, .quantifier = .required },
10754 },
10755 },
10756 .{
10757 .name = "OpSubgroupAvcMceGetMotionVectorsINTEL",
10758 .opcode = 5738,
10759 .operands = &[_]Operand{
10760 .{ .kind = .IdResultType, .quantifier = .required },
10761 .{ .kind = .IdResult, .quantifier = .required },
10762 .{ .kind = .IdRef, .quantifier = .required },
10763 },
10764 },
10765 .{
10766 .name = "OpSubgroupAvcMceGetInterDistortionsINTEL",
10767 .opcode = 5739,
10768 .operands = &[_]Operand{
10769 .{ .kind = .IdResultType, .quantifier = .required },
10770 .{ .kind = .IdResult, .quantifier = .required },
10771 .{ .kind = .IdRef, .quantifier = .required },
10772 },
10773 },
10774 .{
10775 .name = "OpSubgroupAvcMceGetBestInterDistortionsINTEL",
10776 .opcode = 5740,
10777 .operands = &[_]Operand{
10778 .{ .kind = .IdResultType, .quantifier = .required },
10779 .{ .kind = .IdResult, .quantifier = .required },
10780 .{ .kind = .IdRef, .quantifier = .required },
10781 },
10782 },
10783 .{
10784 .name = "OpSubgroupAvcMceGetInterMajorShapeINTEL",
10785 .opcode = 5741,
10786 .operands = &[_]Operand{
10787 .{ .kind = .IdResultType, .quantifier = .required },
10788 .{ .kind = .IdResult, .quantifier = .required },
10789 .{ .kind = .IdRef, .quantifier = .required },
10790 },
10791 },
10792 .{
10793 .name = "OpSubgroupAvcMceGetInterMinorShapeINTEL",
10794 .opcode = 5742,
10795 .operands = &[_]Operand{
10796 .{ .kind = .IdResultType, .quantifier = .required },
10797 .{ .kind = .IdResult, .quantifier = .required },
10798 .{ .kind = .IdRef, .quantifier = .required },
10799 },
10800 },
10801 .{
10802 .name = "OpSubgroupAvcMceGetInterDirectionsINTEL",
10803 .opcode = 5743,
10804 .operands = &[_]Operand{
10805 .{ .kind = .IdResultType, .quantifier = .required },
10806 .{ .kind = .IdResult, .quantifier = .required },
10807 .{ .kind = .IdRef, .quantifier = .required },
10808 },
10809 },
10810 .{
10811 .name = "OpSubgroupAvcMceGetInterMotionVectorCountINTEL",
10812 .opcode = 5744,
10813 .operands = &[_]Operand{
10814 .{ .kind = .IdResultType, .quantifier = .required },
10815 .{ .kind = .IdResult, .quantifier = .required },
10816 .{ .kind = .IdRef, .quantifier = .required },
10817 },
10818 },
10819 .{
10820 .name = "OpSubgroupAvcMceGetInterReferenceIdsINTEL",
10821 .opcode = 5745,
10822 .operands = &[_]Operand{
10823 .{ .kind = .IdResultType, .quantifier = .required },
10824 .{ .kind = .IdResult, .quantifier = .required },
10825 .{ .kind = .IdRef, .quantifier = .required },
10826 },
10827 },
10828 .{
10829 .name = "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL",
10830 .opcode = 5746,
10831 .operands = &[_]Operand{
10832 .{ .kind = .IdResultType, .quantifier = .required },
10833 .{ .kind = .IdResult, .quantifier = .required },
10834 .{ .kind = .IdRef, .quantifier = .required },
10835 .{ .kind = .IdRef, .quantifier = .required },
10836 .{ .kind = .IdRef, .quantifier = .required },
10837 },
10838 },
10839 .{
10840 .name = "OpSubgroupAvcImeInitializeINTEL",
10841 .opcode = 5747,
10842 .operands = &[_]Operand{
10843 .{ .kind = .IdResultType, .quantifier = .required },
10844 .{ .kind = .IdResult, .quantifier = .required },
10845 .{ .kind = .IdRef, .quantifier = .required },
10846 .{ .kind = .IdRef, .quantifier = .required },
10847 .{ .kind = .IdRef, .quantifier = .required },
10848 },
10849 },
10850 .{
10851 .name = "OpSubgroupAvcImeSetSingleReferenceINTEL",
10852 .opcode = 5748,
10853 .operands = &[_]Operand{
10854 .{ .kind = .IdResultType, .quantifier = .required },
10855 .{ .kind = .IdResult, .quantifier = .required },
10856 .{ .kind = .IdRef, .quantifier = .required },
10857 .{ .kind = .IdRef, .quantifier = .required },
10858 .{ .kind = .IdRef, .quantifier = .required },
10859 },
10860 },
10861 .{
10862 .name = "OpSubgroupAvcImeSetDualReferenceINTEL",
10863 .opcode = 5749,
10864 .operands = &[_]Operand{
10865 .{ .kind = .IdResultType, .quantifier = .required },
10866 .{ .kind = .IdResult, .quantifier = .required },
10867 .{ .kind = .IdRef, .quantifier = .required },
10868 .{ .kind = .IdRef, .quantifier = .required },
10869 .{ .kind = .IdRef, .quantifier = .required },
10870 .{ .kind = .IdRef, .quantifier = .required },
10871 },
10872 },
10873 .{
10874 .name = "OpSubgroupAvcImeRefWindowSizeINTEL",
10875 .opcode = 5750,
10876 .operands = &[_]Operand{
10877 .{ .kind = .IdResultType, .quantifier = .required },
10878 .{ .kind = .IdResult, .quantifier = .required },
10879 .{ .kind = .IdRef, .quantifier = .required },
10880 .{ .kind = .IdRef, .quantifier = .required },
10881 },
10882 },
10883 .{
10884 .name = "OpSubgroupAvcImeAdjustRefOffsetINTEL",
10885 .opcode = 5751,
10886 .operands = &[_]Operand{
10887 .{ .kind = .IdResultType, .quantifier = .required },
10888 .{ .kind = .IdResult, .quantifier = .required },
10889 .{ .kind = .IdRef, .quantifier = .required },
10890 .{ .kind = .IdRef, .quantifier = .required },
10891 .{ .kind = .IdRef, .quantifier = .required },
10892 .{ .kind = .IdRef, .quantifier = .required },
10893 },
10894 },
10895 .{
10896 .name = "OpSubgroupAvcImeConvertToMcePayloadINTEL",
10897 .opcode = 5752,
10898 .operands = &[_]Operand{
10899 .{ .kind = .IdResultType, .quantifier = .required },
10900 .{ .kind = .IdResult, .quantifier = .required },
10901 .{ .kind = .IdRef, .quantifier = .required },
10902 },
10903 },
10904 .{
10905 .name = "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL",
10906 .opcode = 5753,
10907 .operands = &[_]Operand{
10908 .{ .kind = .IdResultType, .quantifier = .required },
10909 .{ .kind = .IdResult, .quantifier = .required },
10910 .{ .kind = .IdRef, .quantifier = .required },
10911 .{ .kind = .IdRef, .quantifier = .required },
10912 },
10913 },
10914 .{
10915 .name = "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL",
10916 .opcode = 5754,
10917 .operands = &[_]Operand{
10918 .{ .kind = .IdResultType, .quantifier = .required },
10919 .{ .kind = .IdResult, .quantifier = .required },
10920 .{ .kind = .IdRef, .quantifier = .required },
10921 },
10922 },
10923 .{
10924 .name = "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL",
10925 .opcode = 5755,
10926 .operands = &[_]Operand{
10927 .{ .kind = .IdResultType, .quantifier = .required },
10928 .{ .kind = .IdResult, .quantifier = .required },
10929 .{ .kind = .IdRef, .quantifier = .required },
10930 .{ .kind = .IdRef, .quantifier = .required },
10931 },
10932 },
10933 .{
10934 .name = "OpSubgroupAvcImeSetWeightedSadINTEL",
10935 .opcode = 5756,
10936 .operands = &[_]Operand{
10937 .{ .kind = .IdResultType, .quantifier = .required },
10938 .{ .kind = .IdResult, .quantifier = .required },
10939 .{ .kind = .IdRef, .quantifier = .required },
10940 .{ .kind = .IdRef, .quantifier = .required },
10941 },
10942 },
10943 .{
10944 .name = "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL",
10945 .opcode = 5757,
10946 .operands = &[_]Operand{
10947 .{ .kind = .IdResultType, .quantifier = .required },
10948 .{ .kind = .IdResult, .quantifier = .required },
10949 .{ .kind = .IdRef, .quantifier = .required },
10950 .{ .kind = .IdRef, .quantifier = .required },
10951 .{ .kind = .IdRef, .quantifier = .required },
10952 },
10953 },
10954 .{
10955 .name = "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL",
10956 .opcode = 5758,
10957 .operands = &[_]Operand{
10958 .{ .kind = .IdResultType, .quantifier = .required },
10959 .{ .kind = .IdResult, .quantifier = .required },
10960 .{ .kind = .IdRef, .quantifier = .required },
10961 .{ .kind = .IdRef, .quantifier = .required },
10962 .{ .kind = .IdRef, .quantifier = .required },
10963 .{ .kind = .IdRef, .quantifier = .required },
10964 },
10965 },
10966 .{
10967 .name = "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL",
10968 .opcode = 5759,
10969 .operands = &[_]Operand{
10970 .{ .kind = .IdResultType, .quantifier = .required },
10971 .{ .kind = .IdResult, .quantifier = .required },
10972 .{ .kind = .IdRef, .quantifier = .required },
10973 .{ .kind = .IdRef, .quantifier = .required },
10974 .{ .kind = .IdRef, .quantifier = .required },
10975 .{ .kind = .IdRef, .quantifier = .required },
10976 },
10977 },
10978 .{
10979 .name = "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL",
10980 .opcode = 5760,
10981 .operands = &[_]Operand{
10982 .{ .kind = .IdResultType, .quantifier = .required },
10983 .{ .kind = .IdResult, .quantifier = .required },
10984 .{ .kind = .IdRef, .quantifier = .required },
10985 .{ .kind = .IdRef, .quantifier = .required },
10986 .{ .kind = .IdRef, .quantifier = .required },
10987 .{ .kind = .IdRef, .quantifier = .required },
10988 .{ .kind = .IdRef, .quantifier = .required },
10989 },
10990 },
10991 .{
10992 .name = "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL",
10993 .opcode = 5761,
10994 .operands = &[_]Operand{
10995 .{ .kind = .IdResultType, .quantifier = .required },
10996 .{ .kind = .IdResult, .quantifier = .required },
10997 .{ .kind = .IdRef, .quantifier = .required },
10998 .{ .kind = .IdRef, .quantifier = .required },
10999 .{ .kind = .IdRef, .quantifier = .required },
11000 },
11001 },
11002 .{
11003 .name = "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL",
11004 .opcode = 5762,
11005 .operands = &[_]Operand{
11006 .{ .kind = .IdResultType, .quantifier = .required },
11007 .{ .kind = .IdResult, .quantifier = .required },
11008 .{ .kind = .IdRef, .quantifier = .required },
11009 .{ .kind = .IdRef, .quantifier = .required },
11010 .{ .kind = .IdRef, .quantifier = .required },
11011 .{ .kind = .IdRef, .quantifier = .required },
11012 },
11013 },
11014 .{
11015 .name = "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL",
11016 .opcode = 5763,
11017 .operands = &[_]Operand{
11018 .{ .kind = .IdResultType, .quantifier = .required },
11019 .{ .kind = .IdResult, .quantifier = .required },
11020 .{ .kind = .IdRef, .quantifier = .required },
11021 .{ .kind = .IdRef, .quantifier = .required },
11022 .{ .kind = .IdRef, .quantifier = .required },
11023 .{ .kind = .IdRef, .quantifier = .required },
11024 },
11025 },
11026 .{
11027 .name = "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL",
11028 .opcode = 5764,
11029 .operands = &[_]Operand{
11030 .{ .kind = .IdResultType, .quantifier = .required },
11031 .{ .kind = .IdResult, .quantifier = .required },
11032 .{ .kind = .IdRef, .quantifier = .required },
11033 .{ .kind = .IdRef, .quantifier = .required },
11034 .{ .kind = .IdRef, .quantifier = .required },
11035 .{ .kind = .IdRef, .quantifier = .required },
11036 .{ .kind = .IdRef, .quantifier = .required },
11037 },
11038 },
11039 .{
11040 .name = "OpSubgroupAvcImeConvertToMceResultINTEL",
11041 .opcode = 5765,
11042 .operands = &[_]Operand{
11043 .{ .kind = .IdResultType, .quantifier = .required },
11044 .{ .kind = .IdResult, .quantifier = .required },
11045 .{ .kind = .IdRef, .quantifier = .required },
11046 },
11047 },
11048 .{
11049 .name = "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL",
11050 .opcode = 5766,
11051 .operands = &[_]Operand{
11052 .{ .kind = .IdResultType, .quantifier = .required },
11053 .{ .kind = .IdResult, .quantifier = .required },
11054 .{ .kind = .IdRef, .quantifier = .required },
11055 },
11056 },
11057 .{
11058 .name = "OpSubgroupAvcImeGetDualReferenceStreaminINTEL",
11059 .opcode = 5767,
11060 .operands = &[_]Operand{
11061 .{ .kind = .IdResultType, .quantifier = .required },
11062 .{ .kind = .IdResult, .quantifier = .required },
11063 .{ .kind = .IdRef, .quantifier = .required },
11064 },
11065 },
11066 .{
11067 .name = "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL",
11068 .opcode = 5768,
11069 .operands = &[_]Operand{
11070 .{ .kind = .IdResultType, .quantifier = .required },
11071 .{ .kind = .IdResult, .quantifier = .required },
11072 .{ .kind = .IdRef, .quantifier = .required },
11073 },
11074 },
11075 .{
11076 .name = "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL",
11077 .opcode = 5769,
11078 .operands = &[_]Operand{
11079 .{ .kind = .IdResultType, .quantifier = .required },
11080 .{ .kind = .IdResult, .quantifier = .required },
11081 .{ .kind = .IdRef, .quantifier = .required },
11082 },
11083 },
11084 .{
11085 .name = "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL",
11086 .opcode = 5770,
11087 .operands = &[_]Operand{
11088 .{ .kind = .IdResultType, .quantifier = .required },
11089 .{ .kind = .IdResult, .quantifier = .required },
11090 .{ .kind = .IdRef, .quantifier = .required },
11091 .{ .kind = .IdRef, .quantifier = .required },
11092 },
11093 },
11094 .{
11095 .name = "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL",
11096 .opcode = 5771,
11097 .operands = &[_]Operand{
11098 .{ .kind = .IdResultType, .quantifier = .required },
11099 .{ .kind = .IdResult, .quantifier = .required },
11100 .{ .kind = .IdRef, .quantifier = .required },
11101 .{ .kind = .IdRef, .quantifier = .required },
11102 },
11103 },
11104 .{
11105 .name = "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL",
11106 .opcode = 5772,
11107 .operands = &[_]Operand{
11108 .{ .kind = .IdResultType, .quantifier = .required },
11109 .{ .kind = .IdResult, .quantifier = .required },
11110 .{ .kind = .IdRef, .quantifier = .required },
11111 .{ .kind = .IdRef, .quantifier = .required },
11112 },
11113 },
11114 .{
11115 .name = "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL",
11116 .opcode = 5773,
11117 .operands = &[_]Operand{
11118 .{ .kind = .IdResultType, .quantifier = .required },
11119 .{ .kind = .IdResult, .quantifier = .required },
11120 .{ .kind = .IdRef, .quantifier = .required },
11121 .{ .kind = .IdRef, .quantifier = .required },
11122 .{ .kind = .IdRef, .quantifier = .required },
11123 },
11124 },
11125 .{
11126 .name = "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL",
11127 .opcode = 5774,
11128 .operands = &[_]Operand{
11129 .{ .kind = .IdResultType, .quantifier = .required },
11130 .{ .kind = .IdResult, .quantifier = .required },
11131 .{ .kind = .IdRef, .quantifier = .required },
11132 .{ .kind = .IdRef, .quantifier = .required },
11133 .{ .kind = .IdRef, .quantifier = .required },
11134 },
11135 },
11136 .{
11137 .name = "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL",
11138 .opcode = 5775,
11139 .operands = &[_]Operand{
11140 .{ .kind = .IdResultType, .quantifier = .required },
11141 .{ .kind = .IdResult, .quantifier = .required },
11142 .{ .kind = .IdRef, .quantifier = .required },
11143 .{ .kind = .IdRef, .quantifier = .required },
11144 .{ .kind = .IdRef, .quantifier = .required },
11145 },
11146 },
11147 .{
11148 .name = "OpSubgroupAvcImeGetBorderReachedINTEL",
11149 .opcode = 5776,
11150 .operands = &[_]Operand{
11151 .{ .kind = .IdResultType, .quantifier = .required },
11152 .{ .kind = .IdResult, .quantifier = .required },
11153 .{ .kind = .IdRef, .quantifier = .required },
11154 .{ .kind = .IdRef, .quantifier = .required },
11155 },
11156 },
11157 .{
11158 .name = "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL",
11159 .opcode = 5777,
11160 .operands = &[_]Operand{
11161 .{ .kind = .IdResultType, .quantifier = .required },
11162 .{ .kind = .IdResult, .quantifier = .required },
11163 .{ .kind = .IdRef, .quantifier = .required },
11164 },
11165 },
11166 .{
11167 .name = "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL",
11168 .opcode = 5778,
11169 .operands = &[_]Operand{
11170 .{ .kind = .IdResultType, .quantifier = .required },
11171 .{ .kind = .IdResult, .quantifier = .required },
11172 .{ .kind = .IdRef, .quantifier = .required },
11173 },
11174 },
11175 .{
11176 .name = "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL",
11177 .opcode = 5779,
11178 .operands = &[_]Operand{
11179 .{ .kind = .IdResultType, .quantifier = .required },
11180 .{ .kind = .IdResult, .quantifier = .required },
11181 .{ .kind = .IdRef, .quantifier = .required },
11182 },
11183 },
11184 .{
11185 .name = "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL",
11186 .opcode = 5780,
11187 .operands = &[_]Operand{
11188 .{ .kind = .IdResultType, .quantifier = .required },
11189 .{ .kind = .IdResult, .quantifier = .required },
11190 .{ .kind = .IdRef, .quantifier = .required },
11191 },
11192 },
11193 .{
11194 .name = "OpSubgroupAvcFmeInitializeINTEL",
11195 .opcode = 5781,
11196 .operands = &[_]Operand{
11197 .{ .kind = .IdResultType, .quantifier = .required },
11198 .{ .kind = .IdResult, .quantifier = .required },
11199 .{ .kind = .IdRef, .quantifier = .required },
11200 .{ .kind = .IdRef, .quantifier = .required },
11201 .{ .kind = .IdRef, .quantifier = .required },
11202 .{ .kind = .IdRef, .quantifier = .required },
11203 .{ .kind = .IdRef, .quantifier = .required },
11204 .{ .kind = .IdRef, .quantifier = .required },
11205 .{ .kind = .IdRef, .quantifier = .required },
11206 },
11207 },
11208 .{
11209 .name = "OpSubgroupAvcBmeInitializeINTEL",
11210 .opcode = 5782,
11211 .operands = &[_]Operand{
11212 .{ .kind = .IdResultType, .quantifier = .required },
11213 .{ .kind = .IdResult, .quantifier = .required },
11214 .{ .kind = .IdRef, .quantifier = .required },
11215 .{ .kind = .IdRef, .quantifier = .required },
11216 .{ .kind = .IdRef, .quantifier = .required },
11217 .{ .kind = .IdRef, .quantifier = .required },
11218 .{ .kind = .IdRef, .quantifier = .required },
11219 .{ .kind = .IdRef, .quantifier = .required },
11220 .{ .kind = .IdRef, .quantifier = .required },
11221 .{ .kind = .IdRef, .quantifier = .required },
11222 },
11223 },
11224 .{
11225 .name = "OpSubgroupAvcRefConvertToMcePayloadINTEL",
11226 .opcode = 5783,
11227 .operands = &[_]Operand{
11228 .{ .kind = .IdResultType, .quantifier = .required },
11229 .{ .kind = .IdResult, .quantifier = .required },
11230 .{ .kind = .IdRef, .quantifier = .required },
11231 },
11232 },
11233 .{
11234 .name = "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL",
11235 .opcode = 5784,
11236 .operands = &[_]Operand{
11237 .{ .kind = .IdResultType, .quantifier = .required },
11238 .{ .kind = .IdResult, .quantifier = .required },
11239 .{ .kind = .IdRef, .quantifier = .required },
11240 },
11241 },
11242 .{
11243 .name = "OpSubgroupAvcRefSetBilinearFilterEnableINTEL",
11244 .opcode = 5785,
11245 .operands = &[_]Operand{
11246 .{ .kind = .IdResultType, .quantifier = .required },
11247 .{ .kind = .IdResult, .quantifier = .required },
11248 .{ .kind = .IdRef, .quantifier = .required },
11249 },
11250 },
11251 .{
11252 .name = "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL",
11253 .opcode = 5786,
11254 .operands = &[_]Operand{
11255 .{ .kind = .IdResultType, .quantifier = .required },
11256 .{ .kind = .IdResult, .quantifier = .required },
11257 .{ .kind = .IdRef, .quantifier = .required },
11258 .{ .kind = .IdRef, .quantifier = .required },
11259 .{ .kind = .IdRef, .quantifier = .required },
11260 },
11261 },
11262 .{
11263 .name = "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL",
11264 .opcode = 5787,
11265 .operands = &[_]Operand{
11266 .{ .kind = .IdResultType, .quantifier = .required },
11267 .{ .kind = .IdResult, .quantifier = .required },
11268 .{ .kind = .IdRef, .quantifier = .required },
11269 .{ .kind = .IdRef, .quantifier = .required },
11270 .{ .kind = .IdRef, .quantifier = .required },
11271 .{ .kind = .IdRef, .quantifier = .required },
11272 },
11273 },
11274 .{
11275 .name = "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL",
11276 .opcode = 5788,
11277 .operands = &[_]Operand{
11278 .{ .kind = .IdResultType, .quantifier = .required },
11279 .{ .kind = .IdResult, .quantifier = .required },
11280 .{ .kind = .IdRef, .quantifier = .required },
11281 .{ .kind = .IdRef, .quantifier = .required },
11282 .{ .kind = .IdRef, .quantifier = .required },
11283 },
11284 },
11285 .{
11286 .name = "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL",
11287 .opcode = 5789,
11288 .operands = &[_]Operand{
11289 .{ .kind = .IdResultType, .quantifier = .required },
11290 .{ .kind = .IdResult, .quantifier = .required },
11291 .{ .kind = .IdRef, .quantifier = .required },
11292 .{ .kind = .IdRef, .quantifier = .required },
11293 .{ .kind = .IdRef, .quantifier = .required },
11294 .{ .kind = .IdRef, .quantifier = .required },
11295 },
11296 },
11297 .{
11298 .name = "OpSubgroupAvcRefConvertToMceResultINTEL",
11299 .opcode = 5790,
11300 .operands = &[_]Operand{
11301 .{ .kind = .IdResultType, .quantifier = .required },
11302 .{ .kind = .IdResult, .quantifier = .required },
11303 .{ .kind = .IdRef, .quantifier = .required },
11304 },
11305 },
11306 .{
11307 .name = "OpSubgroupAvcSicInitializeINTEL",
11308 .opcode = 5791,
11309 .operands = &[_]Operand{
11310 .{ .kind = .IdResultType, .quantifier = .required },
11311 .{ .kind = .IdResult, .quantifier = .required },
11312 .{ .kind = .IdRef, .quantifier = .required },
11313 },
11314 },
11315 .{
11316 .name = "OpSubgroupAvcSicConfigureSkcINTEL",
11317 .opcode = 5792,
11318 .operands = &[_]Operand{
11319 .{ .kind = .IdResultType, .quantifier = .required },
11320 .{ .kind = .IdResult, .quantifier = .required },
11321 .{ .kind = .IdRef, .quantifier = .required },
11322 .{ .kind = .IdRef, .quantifier = .required },
11323 .{ .kind = .IdRef, .quantifier = .required },
11324 .{ .kind = .IdRef, .quantifier = .required },
11325 .{ .kind = .IdRef, .quantifier = .required },
11326 .{ .kind = .IdRef, .quantifier = .required },
11327 },
11328 },
11329 .{
11330 .name = "OpSubgroupAvcSicConfigureIpeLumaINTEL",
11331 .opcode = 5793,
11332 .operands = &[_]Operand{
11333 .{ .kind = .IdResultType, .quantifier = .required },
11334 .{ .kind = .IdResult, .quantifier = .required },
11335 .{ .kind = .IdRef, .quantifier = .required },
11336 .{ .kind = .IdRef, .quantifier = .required },
11337 .{ .kind = .IdRef, .quantifier = .required },
11338 .{ .kind = .IdRef, .quantifier = .required },
11339 .{ .kind = .IdRef, .quantifier = .required },
11340 .{ .kind = .IdRef, .quantifier = .required },
11341 .{ .kind = .IdRef, .quantifier = .required },
11342 .{ .kind = .IdRef, .quantifier = .required },
11343 },
11344 },
11345 .{
11346 .name = "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL",
11347 .opcode = 5794,
11348 .operands = &[_]Operand{
11349 .{ .kind = .IdResultType, .quantifier = .required },
11350 .{ .kind = .IdResult, .quantifier = .required },
11351 .{ .kind = .IdRef, .quantifier = .required },
11352 .{ .kind = .IdRef, .quantifier = .required },
11353 .{ .kind = .IdRef, .quantifier = .required },
11354 .{ .kind = .IdRef, .quantifier = .required },
11355 .{ .kind = .IdRef, .quantifier = .required },
11356 .{ .kind = .IdRef, .quantifier = .required },
11357 .{ .kind = .IdRef, .quantifier = .required },
11358 .{ .kind = .IdRef, .quantifier = .required },
11359 .{ .kind = .IdRef, .quantifier = .required },
11360 .{ .kind = .IdRef, .quantifier = .required },
11361 .{ .kind = .IdRef, .quantifier = .required },
11362 },
11363 },
11364 .{
11365 .name = "OpSubgroupAvcSicGetMotionVectorMaskINTEL",
11366 .opcode = 5795,
11367 .operands = &[_]Operand{
11368 .{ .kind = .IdResultType, .quantifier = .required },
11369 .{ .kind = .IdResult, .quantifier = .required },
11370 .{ .kind = .IdRef, .quantifier = .required },
11371 .{ .kind = .IdRef, .quantifier = .required },
11372 },
11373 },
11374 .{
11375 .name = "OpSubgroupAvcSicConvertToMcePayloadINTEL",
11376 .opcode = 5796,
11377 .operands = &[_]Operand{
11378 .{ .kind = .IdResultType, .quantifier = .required },
11379 .{ .kind = .IdResult, .quantifier = .required },
11380 .{ .kind = .IdRef, .quantifier = .required },
11381 },
11382 },
11383 .{
11384 .name = "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL",
11385 .opcode = 5797,
11386 .operands = &[_]Operand{
11387 .{ .kind = .IdResultType, .quantifier = .required },
11388 .{ .kind = .IdResult, .quantifier = .required },
11389 .{ .kind = .IdRef, .quantifier = .required },
11390 .{ .kind = .IdRef, .quantifier = .required },
11391 },
11392 },
11393 .{
11394 .name = "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL",
11395 .opcode = 5798,
11396 .operands = &[_]Operand{
11397 .{ .kind = .IdResultType, .quantifier = .required },
11398 .{ .kind = .IdResult, .quantifier = .required },
11399 .{ .kind = .IdRef, .quantifier = .required },
11400 .{ .kind = .IdRef, .quantifier = .required },
11401 .{ .kind = .IdRef, .quantifier = .required },
11402 .{ .kind = .IdRef, .quantifier = .required },
11403 },
11404 },
11405 .{
11406 .name = "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL",
11407 .opcode = 5799,
11408 .operands = &[_]Operand{
11409 .{ .kind = .IdResultType, .quantifier = .required },
11410 .{ .kind = .IdResult, .quantifier = .required },
11411 .{ .kind = .IdRef, .quantifier = .required },
11412 .{ .kind = .IdRef, .quantifier = .required },
11413 },
11414 },
11415 .{
11416 .name = "OpSubgroupAvcSicSetBilinearFilterEnableINTEL",
11417 .opcode = 5800,
11418 .operands = &[_]Operand{
11419 .{ .kind = .IdResultType, .quantifier = .required },
11420 .{ .kind = .IdResult, .quantifier = .required },
11421 .{ .kind = .IdRef, .quantifier = .required },
11422 },
11423 },
11424 .{
11425 .name = "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL",
11426 .opcode = 5801,
11427 .operands = &[_]Operand{
11428 .{ .kind = .IdResultType, .quantifier = .required },
11429 .{ .kind = .IdResult, .quantifier = .required },
11430 .{ .kind = .IdRef, .quantifier = .required },
11431 .{ .kind = .IdRef, .quantifier = .required },
11432 },
11433 },
11434 .{
11435 .name = "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL",
11436 .opcode = 5802,
11437 .operands = &[_]Operand{
11438 .{ .kind = .IdResultType, .quantifier = .required },
11439 .{ .kind = .IdResult, .quantifier = .required },
11440 .{ .kind = .IdRef, .quantifier = .required },
11441 .{ .kind = .IdRef, .quantifier = .required },
11442 },
11443 },
11444 .{
11445 .name = "OpSubgroupAvcSicEvaluateIpeINTEL",
11446 .opcode = 5803,
11447 .operands = &[_]Operand{
11448 .{ .kind = .IdResultType, .quantifier = .required },
11449 .{ .kind = .IdResult, .quantifier = .required },
11450 .{ .kind = .IdRef, .quantifier = .required },
11451 .{ .kind = .IdRef, .quantifier = .required },
11452 },
11453 },
11454 .{
11455 .name = "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL",
11456 .opcode = 5804,
11457 .operands = &[_]Operand{
11458 .{ .kind = .IdResultType, .quantifier = .required },
11459 .{ .kind = .IdResult, .quantifier = .required },
11460 .{ .kind = .IdRef, .quantifier = .required },
11461 .{ .kind = .IdRef, .quantifier = .required },
11462 .{ .kind = .IdRef, .quantifier = .required },
11463 },
11464 },
11465 .{
11466 .name = "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL",
11467 .opcode = 5805,
11468 .operands = &[_]Operand{
11469 .{ .kind = .IdResultType, .quantifier = .required },
11470 .{ .kind = .IdResult, .quantifier = .required },
11471 .{ .kind = .IdRef, .quantifier = .required },
11472 .{ .kind = .IdRef, .quantifier = .required },
11473 .{ .kind = .IdRef, .quantifier = .required },
11474 .{ .kind = .IdRef, .quantifier = .required },
11475 },
11476 },
11477 .{
11478 .name = "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL",
11479 .opcode = 5806,
11480 .operands = &[_]Operand{
11481 .{ .kind = .IdResultType, .quantifier = .required },
11482 .{ .kind = .IdResult, .quantifier = .required },
11483 .{ .kind = .IdRef, .quantifier = .required },
11484 .{ .kind = .IdRef, .quantifier = .required },
11485 .{ .kind = .IdRef, .quantifier = .required },
11486 },
11487 },
11488 .{
11489 .name = "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL",
11490 .opcode = 5807,
11491 .operands = &[_]Operand{
11492 .{ .kind = .IdResultType, .quantifier = .required },
11493 .{ .kind = .IdResult, .quantifier = .required },
11494 .{ .kind = .IdRef, .quantifier = .required },
11495 .{ .kind = .IdRef, .quantifier = .required },
11496 .{ .kind = .IdRef, .quantifier = .required },
11497 .{ .kind = .IdRef, .quantifier = .required },
11498 },
11499 },
11500 .{
11501 .name = "OpSubgroupAvcSicConvertToMceResultINTEL",
11502 .opcode = 5808,
11503 .operands = &[_]Operand{
11504 .{ .kind = .IdResultType, .quantifier = .required },
11505 .{ .kind = .IdResult, .quantifier = .required },
11506 .{ .kind = .IdRef, .quantifier = .required },
11507 },
11508 },
11509 .{
11510 .name = "OpSubgroupAvcSicGetIpeLumaShapeINTEL",
11511 .opcode = 5809,
11512 .operands = &[_]Operand{
11513 .{ .kind = .IdResultType, .quantifier = .required },
11514 .{ .kind = .IdResult, .quantifier = .required },
11515 .{ .kind = .IdRef, .quantifier = .required },
11516 },
11517 },
11518 .{
11519 .name = "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL",
11520 .opcode = 5810,
11521 .operands = &[_]Operand{
11522 .{ .kind = .IdResultType, .quantifier = .required },
11523 .{ .kind = .IdResult, .quantifier = .required },
11524 .{ .kind = .IdRef, .quantifier = .required },
11525 },
11526 },
11527 .{
11528 .name = "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL",
11529 .opcode = 5811,
11530 .operands = &[_]Operand{
11531 .{ .kind = .IdResultType, .quantifier = .required },
11532 .{ .kind = .IdResult, .quantifier = .required },
11533 .{ .kind = .IdRef, .quantifier = .required },
11534 },
11535 },
11536 .{
11537 .name = "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL",
11538 .opcode = 5812,
11539 .operands = &[_]Operand{
11540 .{ .kind = .IdResultType, .quantifier = .required },
11541 .{ .kind = .IdResult, .quantifier = .required },
11542 .{ .kind = .IdRef, .quantifier = .required },
11543 },
11544 },
11545 .{
11546 .name = "OpSubgroupAvcSicGetIpeChromaModeINTEL",
11547 .opcode = 5813,
11548 .operands = &[_]Operand{
11549 .{ .kind = .IdResultType, .quantifier = .required },
11550 .{ .kind = .IdResult, .quantifier = .required },
11551 .{ .kind = .IdRef, .quantifier = .required },
11552 },
11553 },
11554 .{
11555 .name = "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL",
11556 .opcode = 5814,
11557 .operands = &[_]Operand{
11558 .{ .kind = .IdResultType, .quantifier = .required },
11559 .{ .kind = .IdResult, .quantifier = .required },
11560 .{ .kind = .IdRef, .quantifier = .required },
11561 },
11562 },
11563 .{
11564 .name = "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL",
11565 .opcode = 5815,
11566 .operands = &[_]Operand{
11567 .{ .kind = .IdResultType, .quantifier = .required },
11568 .{ .kind = .IdResult, .quantifier = .required },
11569 .{ .kind = .IdRef, .quantifier = .required },
11570 },
11571 },
11572 .{
11573 .name = "OpSubgroupAvcSicGetInterRawSadsINTEL",
11574 .opcode = 5816,
11575 .operands = &[_]Operand{
11576 .{ .kind = .IdResultType, .quantifier = .required },
11577 .{ .kind = .IdResult, .quantifier = .required },
11578 .{ .kind = .IdRef, .quantifier = .required },
11579 },
11580 },
11581 .{
11582 .name = "OpVariableLengthArrayINTEL",
11583 .opcode = 5818,
11584 .operands = &[_]Operand{
11585 .{ .kind = .IdResultType, .quantifier = .required },
11586 .{ .kind = .IdResult, .quantifier = .required },
11587 .{ .kind = .IdRef, .quantifier = .required },
11588 },
11589 },
11590 .{
11591 .name = "OpSaveMemoryINTEL",
11592 .opcode = 5819,
11593 .operands = &[_]Operand{
11594 .{ .kind = .IdResultType, .quantifier = .required },
11595 .{ .kind = .IdResult, .quantifier = .required },
11596 },
11597 },
11598 .{
11599 .name = "OpRestoreMemoryINTEL",
11600 .opcode = 5820,
11601 .operands = &[_]Operand{
11602 .{ .kind = .IdRef, .quantifier = .required },
11603 },
11604 },
11605 .{
11606 .name = "OpArbitraryFloatSinCosPiINTEL",
11607 .opcode = 5840,
11608 .operands = &[_]Operand{
11609 .{ .kind = .IdResultType, .quantifier = .required },
11610 .{ .kind = .IdResult, .quantifier = .required },
11611 .{ .kind = .IdRef, .quantifier = .required },
11612 .{ .kind = .LiteralInteger, .quantifier = .required },
11613 .{ .kind = .LiteralInteger, .quantifier = .required },
11614 .{ .kind = .LiteralInteger, .quantifier = .required },
11615 .{ .kind = .LiteralInteger, .quantifier = .required },
11616 .{ .kind = .LiteralInteger, .quantifier = .required },
11617 .{ .kind = .LiteralInteger, .quantifier = .required },
11618 },
11619 },
11620 .{
11621 .name = "OpArbitraryFloatCastINTEL",
11622 .opcode = 5841,
11623 .operands = &[_]Operand{
11624 .{ .kind = .IdResultType, .quantifier = .required },
11625 .{ .kind = .IdResult, .quantifier = .required },
11626 .{ .kind = .IdRef, .quantifier = .required },
11627 .{ .kind = .LiteralInteger, .quantifier = .required },
11628 .{ .kind = .LiteralInteger, .quantifier = .required },
11629 .{ .kind = .LiteralInteger, .quantifier = .required },
11630 .{ .kind = .LiteralInteger, .quantifier = .required },
11631 .{ .kind = .LiteralInteger, .quantifier = .required },
11632 },
11633 },
11634 .{
11635 .name = "OpArbitraryFloatCastFromIntINTEL",
11636 .opcode = 5842,
11637 .operands = &[_]Operand{
11638 .{ .kind = .IdResultType, .quantifier = .required },
11639 .{ .kind = .IdResult, .quantifier = .required },
11640 .{ .kind = .IdRef, .quantifier = .required },
11641 .{ .kind = .LiteralInteger, .quantifier = .required },
11642 .{ .kind = .LiteralInteger, .quantifier = .required },
11643 .{ .kind = .LiteralInteger, .quantifier = .required },
11644 .{ .kind = .LiteralInteger, .quantifier = .required },
11645 .{ .kind = .LiteralInteger, .quantifier = .required },
11646 },
11647 },
11648 .{
11649 .name = "OpArbitraryFloatCastToIntINTEL",
11650 .opcode = 5843,
11651 .operands = &[_]Operand{
11652 .{ .kind = .IdResultType, .quantifier = .required },
11653 .{ .kind = .IdResult, .quantifier = .required },
11654 .{ .kind = .IdRef, .quantifier = .required },
11655 .{ .kind = .LiteralInteger, .quantifier = .required },
11656 .{ .kind = .LiteralInteger, .quantifier = .required },
11657 .{ .kind = .LiteralInteger, .quantifier = .required },
11658 .{ .kind = .LiteralInteger, .quantifier = .required },
11659 },
11660 },
11661 .{
11662 .name = "OpArbitraryFloatAddINTEL",
11663 .opcode = 5846,
11664 .operands = &[_]Operand{
11665 .{ .kind = .IdResultType, .quantifier = .required },
11666 .{ .kind = .IdResult, .quantifier = .required },
11667 .{ .kind = .IdRef, .quantifier = .required },
11668 .{ .kind = .LiteralInteger, .quantifier = .required },
11669 .{ .kind = .IdRef, .quantifier = .required },
11670 .{ .kind = .LiteralInteger, .quantifier = .required },
11671 .{ .kind = .LiteralInteger, .quantifier = .required },
11672 .{ .kind = .LiteralInteger, .quantifier = .required },
11673 .{ .kind = .LiteralInteger, .quantifier = .required },
11674 .{ .kind = .LiteralInteger, .quantifier = .required },
11675 },
11676 },
11677 .{
11678 .name = "OpArbitraryFloatSubINTEL",
11679 .opcode = 5847,
11680 .operands = &[_]Operand{
11681 .{ .kind = .IdResultType, .quantifier = .required },
11682 .{ .kind = .IdResult, .quantifier = .required },
11683 .{ .kind = .IdRef, .quantifier = .required },
11684 .{ .kind = .LiteralInteger, .quantifier = .required },
11685 .{ .kind = .IdRef, .quantifier = .required },
11686 .{ .kind = .LiteralInteger, .quantifier = .required },
11687 .{ .kind = .LiteralInteger, .quantifier = .required },
11688 .{ .kind = .LiteralInteger, .quantifier = .required },
11689 .{ .kind = .LiteralInteger, .quantifier = .required },
11690 .{ .kind = .LiteralInteger, .quantifier = .required },
11691 },
11692 },
11693 .{
11694 .name = "OpArbitraryFloatMulINTEL",
11695 .opcode = 5848,
11696 .operands = &[_]Operand{
11697 .{ .kind = .IdResultType, .quantifier = .required },
11698 .{ .kind = .IdResult, .quantifier = .required },
11699 .{ .kind = .IdRef, .quantifier = .required },
11700 .{ .kind = .LiteralInteger, .quantifier = .required },
11701 .{ .kind = .IdRef, .quantifier = .required },
11702 .{ .kind = .LiteralInteger, .quantifier = .required },
11703 .{ .kind = .LiteralInteger, .quantifier = .required },
11704 .{ .kind = .LiteralInteger, .quantifier = .required },
11705 .{ .kind = .LiteralInteger, .quantifier = .required },
11706 .{ .kind = .LiteralInteger, .quantifier = .required },
11707 },
11708 },
11709 .{
11710 .name = "OpArbitraryFloatDivINTEL",
11711 .opcode = 5849,
11712 .operands = &[_]Operand{
11713 .{ .kind = .IdResultType, .quantifier = .required },
11714 .{ .kind = .IdResult, .quantifier = .required },
11715 .{ .kind = .IdRef, .quantifier = .required },
11716 .{ .kind = .LiteralInteger, .quantifier = .required },
11717 .{ .kind = .IdRef, .quantifier = .required },
11718 .{ .kind = .LiteralInteger, .quantifier = .required },
11719 .{ .kind = .LiteralInteger, .quantifier = .required },
11720 .{ .kind = .LiteralInteger, .quantifier = .required },
11721 .{ .kind = .LiteralInteger, .quantifier = .required },
11722 .{ .kind = .LiteralInteger, .quantifier = .required },
11723 },
11724 },
11725 .{
11726 .name = "OpArbitraryFloatGTINTEL",
11727 .opcode = 5850,
11728 .operands = &[_]Operand{
11729 .{ .kind = .IdResultType, .quantifier = .required },
11730 .{ .kind = .IdResult, .quantifier = .required },
11731 .{ .kind = .IdRef, .quantifier = .required },
11732 .{ .kind = .LiteralInteger, .quantifier = .required },
11733 .{ .kind = .IdRef, .quantifier = .required },
11734 .{ .kind = .LiteralInteger, .quantifier = .required },
11735 },
11736 },
11737 .{
11738 .name = "OpArbitraryFloatGEINTEL",
11739 .opcode = 5851,
11740 .operands = &[_]Operand{
11741 .{ .kind = .IdResultType, .quantifier = .required },
11742 .{ .kind = .IdResult, .quantifier = .required },
11743 .{ .kind = .IdRef, .quantifier = .required },
11744 .{ .kind = .LiteralInteger, .quantifier = .required },
11745 .{ .kind = .IdRef, .quantifier = .required },
11746 .{ .kind = .LiteralInteger, .quantifier = .required },
11747 },
11748 },
11749 .{
11750 .name = "OpArbitraryFloatLTINTEL",
11751 .opcode = 5852,
11752 .operands = &[_]Operand{
11753 .{ .kind = .IdResultType, .quantifier = .required },
11754 .{ .kind = .IdResult, .quantifier = .required },
11755 .{ .kind = .IdRef, .quantifier = .required },
11756 .{ .kind = .LiteralInteger, .quantifier = .required },
11757 .{ .kind = .IdRef, .quantifier = .required },
11758 .{ .kind = .LiteralInteger, .quantifier = .required },
11759 },
11760 },
11761 .{
11762 .name = "OpArbitraryFloatLEINTEL",
11763 .opcode = 5853,
11764 .operands = &[_]Operand{
11765 .{ .kind = .IdResultType, .quantifier = .required },
11766 .{ .kind = .IdResult, .quantifier = .required },
11767 .{ .kind = .IdRef, .quantifier = .required },
11768 .{ .kind = .LiteralInteger, .quantifier = .required },
11769 .{ .kind = .IdRef, .quantifier = .required },
11770 .{ .kind = .LiteralInteger, .quantifier = .required },
11771 },
11772 },
11773 .{
11774 .name = "OpArbitraryFloatEQINTEL",
11775 .opcode = 5854,
11776 .operands = &[_]Operand{
11777 .{ .kind = .IdResultType, .quantifier = .required },
11778 .{ .kind = .IdResult, .quantifier = .required },
11779 .{ .kind = .IdRef, .quantifier = .required },
11780 .{ .kind = .LiteralInteger, .quantifier = .required },
11781 .{ .kind = .IdRef, .quantifier = .required },
11782 .{ .kind = .LiteralInteger, .quantifier = .required },
11783 },
11784 },
11785 .{
11786 .name = "OpArbitraryFloatRecipINTEL",
11787 .opcode = 5855,
11788 .operands = &[_]Operand{
11789 .{ .kind = .IdResultType, .quantifier = .required },
11790 .{ .kind = .IdResult, .quantifier = .required },
11791 .{ .kind = .IdRef, .quantifier = .required },
11792 .{ .kind = .LiteralInteger, .quantifier = .required },
11793 .{ .kind = .LiteralInteger, .quantifier = .required },
11794 .{ .kind = .LiteralInteger, .quantifier = .required },
11795 .{ .kind = .LiteralInteger, .quantifier = .required },
11796 .{ .kind = .LiteralInteger, .quantifier = .required },
11797 },
11798 },
11799 .{
11800 .name = "OpArbitraryFloatRSqrtINTEL",
11801 .opcode = 5856,
11802 .operands = &[_]Operand{
11803 .{ .kind = .IdResultType, .quantifier = .required },
11804 .{ .kind = .IdResult, .quantifier = .required },
11805 .{ .kind = .IdRef, .quantifier = .required },
11806 .{ .kind = .LiteralInteger, .quantifier = .required },
11807 .{ .kind = .LiteralInteger, .quantifier = .required },
11808 .{ .kind = .LiteralInteger, .quantifier = .required },
11809 .{ .kind = .LiteralInteger, .quantifier = .required },
11810 .{ .kind = .LiteralInteger, .quantifier = .required },
11811 },
11812 },
11813 .{
11814 .name = "OpArbitraryFloatCbrtINTEL",
11815 .opcode = 5857,
11816 .operands = &[_]Operand{
11817 .{ .kind = .IdResultType, .quantifier = .required },
11818 .{ .kind = .IdResult, .quantifier = .required },
11819 .{ .kind = .IdRef, .quantifier = .required },
11820 .{ .kind = .LiteralInteger, .quantifier = .required },
11821 .{ .kind = .LiteralInteger, .quantifier = .required },
11822 .{ .kind = .LiteralInteger, .quantifier = .required },
11823 .{ .kind = .LiteralInteger, .quantifier = .required },
11824 .{ .kind = .LiteralInteger, .quantifier = .required },
11825 },
11826 },
11827 .{
11828 .name = "OpArbitraryFloatHypotINTEL",
11829 .opcode = 5858,
11830 .operands = &[_]Operand{
11831 .{ .kind = .IdResultType, .quantifier = .required },
11832 .{ .kind = .IdResult, .quantifier = .required },
11833 .{ .kind = .IdRef, .quantifier = .required },
11834 .{ .kind = .LiteralInteger, .quantifier = .required },
11835 .{ .kind = .IdRef, .quantifier = .required },
11836 .{ .kind = .LiteralInteger, .quantifier = .required },
11837 .{ .kind = .LiteralInteger, .quantifier = .required },
11838 .{ .kind = .LiteralInteger, .quantifier = .required },
11839 .{ .kind = .LiteralInteger, .quantifier = .required },
11840 .{ .kind = .LiteralInteger, .quantifier = .required },
11841 },
11842 },
11843 .{
11844 .name = "OpArbitraryFloatSqrtINTEL",
11845 .opcode = 5859,
11846 .operands = &[_]Operand{
11847 .{ .kind = .IdResultType, .quantifier = .required },
11848 .{ .kind = .IdResult, .quantifier = .required },
11849 .{ .kind = .IdRef, .quantifier = .required },
11850 .{ .kind = .LiteralInteger, .quantifier = .required },
11851 .{ .kind = .LiteralInteger, .quantifier = .required },
11852 .{ .kind = .LiteralInteger, .quantifier = .required },
11853 .{ .kind = .LiteralInteger, .quantifier = .required },
11854 .{ .kind = .LiteralInteger, .quantifier = .required },
11855 },
11856 },
11857 .{
11858 .name = "OpArbitraryFloatLogINTEL",
11859 .opcode = 5860,
11860 .operands = &[_]Operand{
11861 .{ .kind = .IdResultType, .quantifier = .required },
11862 .{ .kind = .IdResult, .quantifier = .required },
11863 .{ .kind = .IdRef, .quantifier = .required },
11864 .{ .kind = .LiteralInteger, .quantifier = .required },
11865 .{ .kind = .LiteralInteger, .quantifier = .required },
11866 .{ .kind = .LiteralInteger, .quantifier = .required },
11867 .{ .kind = .LiteralInteger, .quantifier = .required },
11868 .{ .kind = .LiteralInteger, .quantifier = .required },
11869 },
11870 },
11871 .{
11872 .name = "OpArbitraryFloatLog2INTEL",
11873 .opcode = 5861,
11874 .operands = &[_]Operand{
11875 .{ .kind = .IdResultType, .quantifier = .required },
11876 .{ .kind = .IdResult, .quantifier = .required },
11877 .{ .kind = .IdRef, .quantifier = .required },
11878 .{ .kind = .LiteralInteger, .quantifier = .required },
11879 .{ .kind = .LiteralInteger, .quantifier = .required },
11880 .{ .kind = .LiteralInteger, .quantifier = .required },
11881 .{ .kind = .LiteralInteger, .quantifier = .required },
11882 .{ .kind = .LiteralInteger, .quantifier = .required },
11883 },
11884 },
11885 .{
11886 .name = "OpArbitraryFloatLog10INTEL",
11887 .opcode = 5862,
11888 .operands = &[_]Operand{
11889 .{ .kind = .IdResultType, .quantifier = .required },
11890 .{ .kind = .IdResult, .quantifier = .required },
11891 .{ .kind = .IdRef, .quantifier = .required },
11892 .{ .kind = .LiteralInteger, .quantifier = .required },
11893 .{ .kind = .LiteralInteger, .quantifier = .required },
11894 .{ .kind = .LiteralInteger, .quantifier = .required },
11895 .{ .kind = .LiteralInteger, .quantifier = .required },
11896 .{ .kind = .LiteralInteger, .quantifier = .required },
11897 },
11898 },
11899 .{
11900 .name = "OpArbitraryFloatLog1pINTEL",
11901 .opcode = 5863,
11902 .operands = &[_]Operand{
11903 .{ .kind = .IdResultType, .quantifier = .required },
11904 .{ .kind = .IdResult, .quantifier = .required },
11905 .{ .kind = .IdRef, .quantifier = .required },
11906 .{ .kind = .LiteralInteger, .quantifier = .required },
11907 .{ .kind = .LiteralInteger, .quantifier = .required },
11908 .{ .kind = .LiteralInteger, .quantifier = .required },
11909 .{ .kind = .LiteralInteger, .quantifier = .required },
11910 .{ .kind = .LiteralInteger, .quantifier = .required },
11911 },
11912 },
11913 .{
11914 .name = "OpArbitraryFloatExpINTEL",
11915 .opcode = 5864,
11916 .operands = &[_]Operand{
11917 .{ .kind = .IdResultType, .quantifier = .required },
11918 .{ .kind = .IdResult, .quantifier = .required },
11919 .{ .kind = .IdRef, .quantifier = .required },
11920 .{ .kind = .LiteralInteger, .quantifier = .required },
11921 .{ .kind = .LiteralInteger, .quantifier = .required },
11922 .{ .kind = .LiteralInteger, .quantifier = .required },
11923 .{ .kind = .LiteralInteger, .quantifier = .required },
11924 .{ .kind = .LiteralInteger, .quantifier = .required },
11925 },
11926 },
11927 .{
11928 .name = "OpArbitraryFloatExp2INTEL",
11929 .opcode = 5865,
11930 .operands = &[_]Operand{
11931 .{ .kind = .IdResultType, .quantifier = .required },
11932 .{ .kind = .IdResult, .quantifier = .required },
11933 .{ .kind = .IdRef, .quantifier = .required },
11934 .{ .kind = .LiteralInteger, .quantifier = .required },
11935 .{ .kind = .LiteralInteger, .quantifier = .required },
11936 .{ .kind = .LiteralInteger, .quantifier = .required },
11937 .{ .kind = .LiteralInteger, .quantifier = .required },
11938 .{ .kind = .LiteralInteger, .quantifier = .required },
11939 },
11940 },
11941 .{
11942 .name = "OpArbitraryFloatExp10INTEL",
11943 .opcode = 5866,
11944 .operands = &[_]Operand{
11945 .{ .kind = .IdResultType, .quantifier = .required },
11946 .{ .kind = .IdResult, .quantifier = .required },
11947 .{ .kind = .IdRef, .quantifier = .required },
11948 .{ .kind = .LiteralInteger, .quantifier = .required },
11949 .{ .kind = .LiteralInteger, .quantifier = .required },
11950 .{ .kind = .LiteralInteger, .quantifier = .required },
11951 .{ .kind = .LiteralInteger, .quantifier = .required },
11952 .{ .kind = .LiteralInteger, .quantifier = .required },
11953 },
11954 },
11955 .{
11956 .name = "OpArbitraryFloatExpm1INTEL",
11957 .opcode = 5867,
11958 .operands = &[_]Operand{
11959 .{ .kind = .IdResultType, .quantifier = .required },
11960 .{ .kind = .IdResult, .quantifier = .required },
11961 .{ .kind = .IdRef, .quantifier = .required },
11962 .{ .kind = .LiteralInteger, .quantifier = .required },
11963 .{ .kind = .LiteralInteger, .quantifier = .required },
11964 .{ .kind = .LiteralInteger, .quantifier = .required },
11965 .{ .kind = .LiteralInteger, .quantifier = .required },
11966 .{ .kind = .LiteralInteger, .quantifier = .required },
11967 },
11968 },
11969 .{
11970 .name = "OpArbitraryFloatSinINTEL",
11971 .opcode = 5868,
11972 .operands = &[_]Operand{
11973 .{ .kind = .IdResultType, .quantifier = .required },
11974 .{ .kind = .IdResult, .quantifier = .required },
11975 .{ .kind = .IdRef, .quantifier = .required },
11976 .{ .kind = .LiteralInteger, .quantifier = .required },
11977 .{ .kind = .LiteralInteger, .quantifier = .required },
11978 .{ .kind = .LiteralInteger, .quantifier = .required },
11979 .{ .kind = .LiteralInteger, .quantifier = .required },
11980 .{ .kind = .LiteralInteger, .quantifier = .required },
11981 },
11982 },
11983 .{
11984 .name = "OpArbitraryFloatCosINTEL",
11985 .opcode = 5869,
11986 .operands = &[_]Operand{
11987 .{ .kind = .IdResultType, .quantifier = .required },
11988 .{ .kind = .IdResult, .quantifier = .required },
11989 .{ .kind = .IdRef, .quantifier = .required },
11990 .{ .kind = .LiteralInteger, .quantifier = .required },
11991 .{ .kind = .LiteralInteger, .quantifier = .required },
11992 .{ .kind = .LiteralInteger, .quantifier = .required },
11993 .{ .kind = .LiteralInteger, .quantifier = .required },
11994 .{ .kind = .LiteralInteger, .quantifier = .required },
11995 },
11996 },
11997 .{
11998 .name = "OpArbitraryFloatSinCosINTEL",
11999 .opcode = 5870,
12000 .operands = &[_]Operand{
12001 .{ .kind = .IdResultType, .quantifier = .required },
12002 .{ .kind = .IdResult, .quantifier = .required },
12003 .{ .kind = .IdRef, .quantifier = .required },
12004 .{ .kind = .LiteralInteger, .quantifier = .required },
12005 .{ .kind = .LiteralInteger, .quantifier = .required },
12006 .{ .kind = .LiteralInteger, .quantifier = .required },
12007 .{ .kind = .LiteralInteger, .quantifier = .required },
12008 .{ .kind = .LiteralInteger, .quantifier = .required },
12009 },
12010 },
12011 .{
12012 .name = "OpArbitraryFloatSinPiINTEL",
12013 .opcode = 5871,
12014 .operands = &[_]Operand{
12015 .{ .kind = .IdResultType, .quantifier = .required },
12016 .{ .kind = .IdResult, .quantifier = .required },
12017 .{ .kind = .IdRef, .quantifier = .required },
12018 .{ .kind = .LiteralInteger, .quantifier = .required },
12019 .{ .kind = .LiteralInteger, .quantifier = .required },
12020 .{ .kind = .LiteralInteger, .quantifier = .required },
12021 .{ .kind = .LiteralInteger, .quantifier = .required },
12022 .{ .kind = .LiteralInteger, .quantifier = .required },
12023 },
12024 },
12025 .{
12026 .name = "OpArbitraryFloatCosPiINTEL",
12027 .opcode = 5872,
12028 .operands = &[_]Operand{
12029 .{ .kind = .IdResultType, .quantifier = .required },
12030 .{ .kind = .IdResult, .quantifier = .required },
12031 .{ .kind = .IdRef, .quantifier = .required },
12032 .{ .kind = .LiteralInteger, .quantifier = .required },
12033 .{ .kind = .LiteralInteger, .quantifier = .required },
12034 .{ .kind = .LiteralInteger, .quantifier = .required },
12035 .{ .kind = .LiteralInteger, .quantifier = .required },
12036 .{ .kind = .LiteralInteger, .quantifier = .required },
12037 },
12038 },
12039 .{
12040 .name = "OpArbitraryFloatASinINTEL",
12041 .opcode = 5873,
12042 .operands = &[_]Operand{
12043 .{ .kind = .IdResultType, .quantifier = .required },
12044 .{ .kind = .IdResult, .quantifier = .required },
12045 .{ .kind = .IdRef, .quantifier = .required },
12046 .{ .kind = .LiteralInteger, .quantifier = .required },
12047 .{ .kind = .LiteralInteger, .quantifier = .required },
12048 .{ .kind = .LiteralInteger, .quantifier = .required },
12049 .{ .kind = .LiteralInteger, .quantifier = .required },
12050 .{ .kind = .LiteralInteger, .quantifier = .required },
12051 },
12052 },
12053 .{
12054 .name = "OpArbitraryFloatASinPiINTEL",
12055 .opcode = 5874,
12056 .operands = &[_]Operand{
12057 .{ .kind = .IdResultType, .quantifier = .required },
12058 .{ .kind = .IdResult, .quantifier = .required },
12059 .{ .kind = .IdRef, .quantifier = .required },
12060 .{ .kind = .LiteralInteger, .quantifier = .required },
12061 .{ .kind = .LiteralInteger, .quantifier = .required },
12062 .{ .kind = .LiteralInteger, .quantifier = .required },
12063 .{ .kind = .LiteralInteger, .quantifier = .required },
12064 .{ .kind = .LiteralInteger, .quantifier = .required },
12065 },
12066 },
12067 .{
12068 .name = "OpArbitraryFloatACosINTEL",
12069 .opcode = 5875,
12070 .operands = &[_]Operand{
12071 .{ .kind = .IdResultType, .quantifier = .required },
12072 .{ .kind = .IdResult, .quantifier = .required },
12073 .{ .kind = .IdRef, .quantifier = .required },
12074 .{ .kind = .LiteralInteger, .quantifier = .required },
12075 .{ .kind = .LiteralInteger, .quantifier = .required },
12076 .{ .kind = .LiteralInteger, .quantifier = .required },
12077 .{ .kind = .LiteralInteger, .quantifier = .required },
12078 .{ .kind = .LiteralInteger, .quantifier = .required },
12079 },
12080 },
12081 .{
12082 .name = "OpArbitraryFloatACosPiINTEL",
12083 .opcode = 5876,
12084 .operands = &[_]Operand{
12085 .{ .kind = .IdResultType, .quantifier = .required },
12086 .{ .kind = .IdResult, .quantifier = .required },
12087 .{ .kind = .IdRef, .quantifier = .required },
12088 .{ .kind = .LiteralInteger, .quantifier = .required },
12089 .{ .kind = .LiteralInteger, .quantifier = .required },
12090 .{ .kind = .LiteralInteger, .quantifier = .required },
12091 .{ .kind = .LiteralInteger, .quantifier = .required },
12092 .{ .kind = .LiteralInteger, .quantifier = .required },
12093 },
12094 },
12095 .{
12096 .name = "OpArbitraryFloatATanINTEL",
12097 .opcode = 5877,
12098 .operands = &[_]Operand{
12099 .{ .kind = .IdResultType, .quantifier = .required },
12100 .{ .kind = .IdResult, .quantifier = .required },
12101 .{ .kind = .IdRef, .quantifier = .required },
12102 .{ .kind = .LiteralInteger, .quantifier = .required },
12103 .{ .kind = .LiteralInteger, .quantifier = .required },
12104 .{ .kind = .LiteralInteger, .quantifier = .required },
12105 .{ .kind = .LiteralInteger, .quantifier = .required },
12106 .{ .kind = .LiteralInteger, .quantifier = .required },
12107 },
12108 },
12109 .{
12110 .name = "OpArbitraryFloatATanPiINTEL",
12111 .opcode = 5878,
12112 .operands = &[_]Operand{
12113 .{ .kind = .IdResultType, .quantifier = .required },
12114 .{ .kind = .IdResult, .quantifier = .required },
12115 .{ .kind = .IdRef, .quantifier = .required },
12116 .{ .kind = .LiteralInteger, .quantifier = .required },
12117 .{ .kind = .LiteralInteger, .quantifier = .required },
12118 .{ .kind = .LiteralInteger, .quantifier = .required },
12119 .{ .kind = .LiteralInteger, .quantifier = .required },
12120 .{ .kind = .LiteralInteger, .quantifier = .required },
12121 },
12122 },
12123 .{
12124 .name = "OpArbitraryFloatATan2INTEL",
12125 .opcode = 5879,
12126 .operands = &[_]Operand{
12127 .{ .kind = .IdResultType, .quantifier = .required },
12128 .{ .kind = .IdResult, .quantifier = .required },
12129 .{ .kind = .IdRef, .quantifier = .required },
12130 .{ .kind = .LiteralInteger, .quantifier = .required },
12131 .{ .kind = .IdRef, .quantifier = .required },
12132 .{ .kind = .LiteralInteger, .quantifier = .required },
12133 .{ .kind = .LiteralInteger, .quantifier = .required },
12134 .{ .kind = .LiteralInteger, .quantifier = .required },
12135 .{ .kind = .LiteralInteger, .quantifier = .required },
12136 .{ .kind = .LiteralInteger, .quantifier = .required },
12137 },
12138 },
12139 .{
12140 .name = "OpArbitraryFloatPowINTEL",
12141 .opcode = 5880,
12142 .operands = &[_]Operand{
12143 .{ .kind = .IdResultType, .quantifier = .required },
12144 .{ .kind = .IdResult, .quantifier = .required },
12145 .{ .kind = .IdRef, .quantifier = .required },
12146 .{ .kind = .LiteralInteger, .quantifier = .required },
12147 .{ .kind = .IdRef, .quantifier = .required },
12148 .{ .kind = .LiteralInteger, .quantifier = .required },
12149 .{ .kind = .LiteralInteger, .quantifier = .required },
12150 .{ .kind = .LiteralInteger, .quantifier = .required },
12151 .{ .kind = .LiteralInteger, .quantifier = .required },
12152 .{ .kind = .LiteralInteger, .quantifier = .required },
12153 },
12154 },
12155 .{
12156 .name = "OpArbitraryFloatPowRINTEL",
12157 .opcode = 5881,
12158 .operands = &[_]Operand{
12159 .{ .kind = .IdResultType, .quantifier = .required },
12160 .{ .kind = .IdResult, .quantifier = .required },
12161 .{ .kind = .IdRef, .quantifier = .required },
12162 .{ .kind = .LiteralInteger, .quantifier = .required },
12163 .{ .kind = .IdRef, .quantifier = .required },
12164 .{ .kind = .LiteralInteger, .quantifier = .required },
12165 .{ .kind = .LiteralInteger, .quantifier = .required },
12166 .{ .kind = .LiteralInteger, .quantifier = .required },
12167 .{ .kind = .LiteralInteger, .quantifier = .required },
12168 .{ .kind = .LiteralInteger, .quantifier = .required },
12169 },
12170 },
12171 .{
12172 .name = "OpArbitraryFloatPowNINTEL",
12173 .opcode = 5882,
12174 .operands = &[_]Operand{
12175 .{ .kind = .IdResultType, .quantifier = .required },
12176 .{ .kind = .IdResult, .quantifier = .required },
12177 .{ .kind = .IdRef, .quantifier = .required },
12178 .{ .kind = .LiteralInteger, .quantifier = .required },
12179 .{ .kind = .IdRef, .quantifier = .required },
12180 .{ .kind = .LiteralInteger, .quantifier = .required },
12181 .{ .kind = .LiteralInteger, .quantifier = .required },
12182 .{ .kind = .LiteralInteger, .quantifier = .required },
12183 .{ .kind = .LiteralInteger, .quantifier = .required },
12184 },
12185 },
12186 .{
12187 .name = "OpLoopControlINTEL",
12188 .opcode = 5887,
12189 .operands = &[_]Operand{
12190 .{ .kind = .LiteralInteger, .quantifier = .variadic },
12191 },
12192 },
12193 .{
12194 .name = "OpAliasDomainDeclINTEL",
12195 .opcode = 5911,
12196 .operands = &[_]Operand{
12197 .{ .kind = .IdResult, .quantifier = .required },
12198 .{ .kind = .IdRef, .quantifier = .optional },
12199 },
12200 },
12201 .{
12202 .name = "OpAliasScopeDeclINTEL",
12203 .opcode = 5912,
12204 .operands = &[_]Operand{
12205 .{ .kind = .IdResult, .quantifier = .required },
12206 .{ .kind = .IdRef, .quantifier = .required },
12207 .{ .kind = .IdRef, .quantifier = .optional },
12208 },
12209 },
12210 .{
12211 .name = "OpAliasScopeListDeclINTEL",
12212 .opcode = 5913,
12213 .operands = &[_]Operand{
12214 .{ .kind = .IdResult, .quantifier = .required },
12215 .{ .kind = .IdRef, .quantifier = .variadic },
12216 },
12217 },
12218 .{
12219 .name = "OpFixedSqrtINTEL",
12220 .opcode = 5923,
12221 .operands = &[_]Operand{
12222 .{ .kind = .IdResultType, .quantifier = .required },
12223 .{ .kind = .IdResult, .quantifier = .required },
12224 .{ .kind = .IdRef, .quantifier = .required },
12225 .{ .kind = .IdRef, .quantifier = .required },
12226 .{ .kind = .LiteralInteger, .quantifier = .required },
12227 .{ .kind = .LiteralInteger, .quantifier = .required },
12228 .{ .kind = .LiteralInteger, .quantifier = .required },
12229 .{ .kind = .LiteralInteger, .quantifier = .required },
12230 .{ .kind = .LiteralInteger, .quantifier = .required },
12231 },
12232 },
12233 .{
12234 .name = "OpFixedRecipINTEL",
12235 .opcode = 5924,
12236 .operands = &[_]Operand{
12237 .{ .kind = .IdResultType, .quantifier = .required },
12238 .{ .kind = .IdResult, .quantifier = .required },
12239 .{ .kind = .IdRef, .quantifier = .required },
12240 .{ .kind = .IdRef, .quantifier = .required },
12241 .{ .kind = .LiteralInteger, .quantifier = .required },
12242 .{ .kind = .LiteralInteger, .quantifier = .required },
12243 .{ .kind = .LiteralInteger, .quantifier = .required },
12244 .{ .kind = .LiteralInteger, .quantifier = .required },
12245 .{ .kind = .LiteralInteger, .quantifier = .required },
12246 },
12247 },
12248 .{
12249 .name = "OpFixedRsqrtINTEL",
12250 .opcode = 5925,
12251 .operands = &[_]Operand{
12252 .{ .kind = .IdResultType, .quantifier = .required },
12253 .{ .kind = .IdResult, .quantifier = .required },
12254 .{ .kind = .IdRef, .quantifier = .required },
12255 .{ .kind = .IdRef, .quantifier = .required },
12256 .{ .kind = .LiteralInteger, .quantifier = .required },
12257 .{ .kind = .LiteralInteger, .quantifier = .required },
12258 .{ .kind = .LiteralInteger, .quantifier = .required },
12259 .{ .kind = .LiteralInteger, .quantifier = .required },
12260 .{ .kind = .LiteralInteger, .quantifier = .required },
12261 },
12262 },
12263 .{
12264 .name = "OpFixedSinINTEL",
12265 .opcode = 5926,
12266 .operands = &[_]Operand{
12267 .{ .kind = .IdResultType, .quantifier = .required },
12268 .{ .kind = .IdResult, .quantifier = .required },
12269 .{ .kind = .IdRef, .quantifier = .required },
12270 .{ .kind = .IdRef, .quantifier = .required },
12271 .{ .kind = .LiteralInteger, .quantifier = .required },
12272 .{ .kind = .LiteralInteger, .quantifier = .required },
12273 .{ .kind = .LiteralInteger, .quantifier = .required },
12274 .{ .kind = .LiteralInteger, .quantifier = .required },
12275 .{ .kind = .LiteralInteger, .quantifier = .required },
12276 },
12277 },
12278 .{
12279 .name = "OpFixedCosINTEL",
12280 .opcode = 5927,
12281 .operands = &[_]Operand{
12282 .{ .kind = .IdResultType, .quantifier = .required },
12283 .{ .kind = .IdResult, .quantifier = .required },
12284 .{ .kind = .IdRef, .quantifier = .required },
12285 .{ .kind = .IdRef, .quantifier = .required },
12286 .{ .kind = .LiteralInteger, .quantifier = .required },
12287 .{ .kind = .LiteralInteger, .quantifier = .required },
12288 .{ .kind = .LiteralInteger, .quantifier = .required },
12289 .{ .kind = .LiteralInteger, .quantifier = .required },
12290 .{ .kind = .LiteralInteger, .quantifier = .required },
12291 },
12292 },
12293 .{
12294 .name = "OpFixedSinCosINTEL",
12295 .opcode = 5928,
12296 .operands = &[_]Operand{
12297 .{ .kind = .IdResultType, .quantifier = .required },
12298 .{ .kind = .IdResult, .quantifier = .required },
12299 .{ .kind = .IdRef, .quantifier = .required },
12300 .{ .kind = .IdRef, .quantifier = .required },
12301 .{ .kind = .LiteralInteger, .quantifier = .required },
12302 .{ .kind = .LiteralInteger, .quantifier = .required },
12303 .{ .kind = .LiteralInteger, .quantifier = .required },
12304 .{ .kind = .LiteralInteger, .quantifier = .required },
12305 .{ .kind = .LiteralInteger, .quantifier = .required },
12306 },
12307 },
12308 .{
12309 .name = "OpFixedSinPiINTEL",
12310 .opcode = 5929,
12311 .operands = &[_]Operand{
12312 .{ .kind = .IdResultType, .quantifier = .required },
12313 .{ .kind = .IdResult, .quantifier = .required },
12314 .{ .kind = .IdRef, .quantifier = .required },
12315 .{ .kind = .IdRef, .quantifier = .required },
12316 .{ .kind = .LiteralInteger, .quantifier = .required },
12317 .{ .kind = .LiteralInteger, .quantifier = .required },
12318 .{ .kind = .LiteralInteger, .quantifier = .required },
12319 .{ .kind = .LiteralInteger, .quantifier = .required },
12320 .{ .kind = .LiteralInteger, .quantifier = .required },
12321 },
12322 },
12323 .{
12324 .name = "OpFixedCosPiINTEL",
12325 .opcode = 5930,
12326 .operands = &[_]Operand{
12327 .{ .kind = .IdResultType, .quantifier = .required },
12328 .{ .kind = .IdResult, .quantifier = .required },
12329 .{ .kind = .IdRef, .quantifier = .required },
12330 .{ .kind = .IdRef, .quantifier = .required },
12331 .{ .kind = .LiteralInteger, .quantifier = .required },
12332 .{ .kind = .LiteralInteger, .quantifier = .required },
12333 .{ .kind = .LiteralInteger, .quantifier = .required },
12334 .{ .kind = .LiteralInteger, .quantifier = .required },
12335 .{ .kind = .LiteralInteger, .quantifier = .required },
12336 },
12337 },
12338 .{
12339 .name = "OpFixedSinCosPiINTEL",
12340 .opcode = 5931,
12341 .operands = &[_]Operand{
12342 .{ .kind = .IdResultType, .quantifier = .required },
12343 .{ .kind = .IdResult, .quantifier = .required },
12344 .{ .kind = .IdRef, .quantifier = .required },
12345 .{ .kind = .IdRef, .quantifier = .required },
12346 .{ .kind = .LiteralInteger, .quantifier = .required },
12347 .{ .kind = .LiteralInteger, .quantifier = .required },
12348 .{ .kind = .LiteralInteger, .quantifier = .required },
12349 .{ .kind = .LiteralInteger, .quantifier = .required },
12350 .{ .kind = .LiteralInteger, .quantifier = .required },
12351 },
12352 },
12353 .{
12354 .name = "OpFixedLogINTEL",
12355 .opcode = 5932,
12356 .operands = &[_]Operand{
12357 .{ .kind = .IdResultType, .quantifier = .required },
12358 .{ .kind = .IdResult, .quantifier = .required },
12359 .{ .kind = .IdRef, .quantifier = .required },
12360 .{ .kind = .IdRef, .quantifier = .required },
12361 .{ .kind = .LiteralInteger, .quantifier = .required },
12362 .{ .kind = .LiteralInteger, .quantifier = .required },
12363 .{ .kind = .LiteralInteger, .quantifier = .required },
12364 .{ .kind = .LiteralInteger, .quantifier = .required },
12365 .{ .kind = .LiteralInteger, .quantifier = .required },
12366 },
12367 },
12368 .{
12369 .name = "OpFixedExpINTEL",
12370 .opcode = 5933,
12371 .operands = &[_]Operand{
12372 .{ .kind = .IdResultType, .quantifier = .required },
12373 .{ .kind = .IdResult, .quantifier = .required },
12374 .{ .kind = .IdRef, .quantifier = .required },
12375 .{ .kind = .IdRef, .quantifier = .required },
12376 .{ .kind = .LiteralInteger, .quantifier = .required },
12377 .{ .kind = .LiteralInteger, .quantifier = .required },
12378 .{ .kind = .LiteralInteger, .quantifier = .required },
12379 .{ .kind = .LiteralInteger, .quantifier = .required },
12380 .{ .kind = .LiteralInteger, .quantifier = .required },
12381 },
12382 },
12383 .{
12384 .name = "OpPtrCastToCrossWorkgroupINTEL",
12385 .opcode = 5934,
12386 .operands = &[_]Operand{
12387 .{ .kind = .IdResultType, .quantifier = .required },
12388 .{ .kind = .IdResult, .quantifier = .required },
12389 .{ .kind = .IdRef, .quantifier = .required },
12390 },
12391 },
12392 .{
12393 .name = "OpCrossWorkgroupCastToPtrINTEL",
12394 .opcode = 5938,
12395 .operands = &[_]Operand{
12396 .{ .kind = .IdResultType, .quantifier = .required },
12397 .{ .kind = .IdResult, .quantifier = .required },
12398 .{ .kind = .IdRef, .quantifier = .required },
12399 },
12400 },
12401 .{
12402 .name = "OpReadPipeBlockingINTEL",
12403 .opcode = 5946,
12404 .operands = &[_]Operand{
12405 .{ .kind = .IdResultType, .quantifier = .required },
12406 .{ .kind = .IdResult, .quantifier = .required },
12407 .{ .kind = .IdRef, .quantifier = .required },
12408 .{ .kind = .IdRef, .quantifier = .required },
12409 },
12410 },
12411 .{
12412 .name = "OpWritePipeBlockingINTEL",
12413 .opcode = 5947,
12414 .operands = &[_]Operand{
12415 .{ .kind = .IdResultType, .quantifier = .required },
12416 .{ .kind = .IdResult, .quantifier = .required },
12417 .{ .kind = .IdRef, .quantifier = .required },
12418 .{ .kind = .IdRef, .quantifier = .required },
12419 },
12420 },
12421 .{
12422 .name = "OpFPGARegINTEL",
12423 .opcode = 5949,
12424 .operands = &[_]Operand{
12425 .{ .kind = .IdResultType, .quantifier = .required },
12426 .{ .kind = .IdResult, .quantifier = .required },
12427 .{ .kind = .IdRef, .quantifier = .required },
12428 .{ .kind = .IdRef, .quantifier = .required },
12429 },
12430 },
12431 .{
12432 .name = "OpRayQueryGetRayTMinKHR",
12433 .opcode = 6016,
12434 .operands = &[_]Operand{
12435 .{ .kind = .IdResultType, .quantifier = .required },
12436 .{ .kind = .IdResult, .quantifier = .required },
12437 .{ .kind = .IdRef, .quantifier = .required },
12438 },
12439 },
12440 .{
12441 .name = "OpRayQueryGetRayFlagsKHR",
12442 .opcode = 6017,
12443 .operands = &[_]Operand{
12444 .{ .kind = .IdResultType, .quantifier = .required },
12445 .{ .kind = .IdResult, .quantifier = .required },
12446 .{ .kind = .IdRef, .quantifier = .required },
12447 },
12448 },
12449 .{
12450 .name = "OpRayQueryGetIntersectionTKHR",
12451 .opcode = 6018,
12452 .operands = &[_]Operand{
12453 .{ .kind = .IdResultType, .quantifier = .required },
12454 .{ .kind = .IdResult, .quantifier = .required },
12455 .{ .kind = .IdRef, .quantifier = .required },
12456 .{ .kind = .IdRef, .quantifier = .required },
12457 },
12458 },
12459 .{
12460 .name = "OpRayQueryGetIntersectionInstanceCustomIndexKHR",
12461 .opcode = 6019,
12462 .operands = &[_]Operand{
12463 .{ .kind = .IdResultType, .quantifier = .required },
12464 .{ .kind = .IdResult, .quantifier = .required },
12465 .{ .kind = .IdRef, .quantifier = .required },
12466 .{ .kind = .IdRef, .quantifier = .required },
12467 },
12468 },
12469 .{
12470 .name = "OpRayQueryGetIntersectionInstanceIdKHR",
12471 .opcode = 6020,
12472 .operands = &[_]Operand{
12473 .{ .kind = .IdResultType, .quantifier = .required },
12474 .{ .kind = .IdResult, .quantifier = .required },
12475 .{ .kind = .IdRef, .quantifier = .required },
12476 .{ .kind = .IdRef, .quantifier = .required },
12477 },
12478 },
12479 .{
12480 .name = "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR",
12481 .opcode = 6021,
12482 .operands = &[_]Operand{
12483 .{ .kind = .IdResultType, .quantifier = .required },
12484 .{ .kind = .IdResult, .quantifier = .required },
12485 .{ .kind = .IdRef, .quantifier = .required },
12486 .{ .kind = .IdRef, .quantifier = .required },
12487 },
12488 },
12489 .{
12490 .name = "OpRayQueryGetIntersectionGeometryIndexKHR",
12491 .opcode = 6022,
12492 .operands = &[_]Operand{
12493 .{ .kind = .IdResultType, .quantifier = .required },
12494 .{ .kind = .IdResult, .quantifier = .required },
12495 .{ .kind = .IdRef, .quantifier = .required },
12496 .{ .kind = .IdRef, .quantifier = .required },
12497 },
12498 },
12499 .{
12500 .name = "OpRayQueryGetIntersectionPrimitiveIndexKHR",
12501 .opcode = 6023,
12502 .operands = &[_]Operand{
12503 .{ .kind = .IdResultType, .quantifier = .required },
12504 .{ .kind = .IdResult, .quantifier = .required },
12505 .{ .kind = .IdRef, .quantifier = .required },
12506 .{ .kind = .IdRef, .quantifier = .required },
12507 },
12508 },
12509 .{
12510 .name = "OpRayQueryGetIntersectionBarycentricsKHR",
12511 .opcode = 6024,
12512 .operands = &[_]Operand{
12513 .{ .kind = .IdResultType, .quantifier = .required },
12514 .{ .kind = .IdResult, .quantifier = .required },
12515 .{ .kind = .IdRef, .quantifier = .required },
12516 .{ .kind = .IdRef, .quantifier = .required },
12517 },
12518 },
12519 .{
12520 .name = "OpRayQueryGetIntersectionFrontFaceKHR",
12521 .opcode = 6025,
12522 .operands = &[_]Operand{
12523 .{ .kind = .IdResultType, .quantifier = .required },
12524 .{ .kind = .IdResult, .quantifier = .required },
12525 .{ .kind = .IdRef, .quantifier = .required },
12526 .{ .kind = .IdRef, .quantifier = .required },
12527 },
12528 },
12529 .{
12530 .name = "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR",
12531 .opcode = 6026,
12532 .operands = &[_]Operand{
12533 .{ .kind = .IdResultType, .quantifier = .required },
12534 .{ .kind = .IdResult, .quantifier = .required },
12535 .{ .kind = .IdRef, .quantifier = .required },
12536 },
12537 },
12538 .{
12539 .name = "OpRayQueryGetIntersectionObjectRayDirectionKHR",
12540 .opcode = 6027,
12541 .operands = &[_]Operand{
12542 .{ .kind = .IdResultType, .quantifier = .required },
12543 .{ .kind = .IdResult, .quantifier = .required },
12544 .{ .kind = .IdRef, .quantifier = .required },
12545 .{ .kind = .IdRef, .quantifier = .required },
12546 },
12547 },
12548 .{
12549 .name = "OpRayQueryGetIntersectionObjectRayOriginKHR",
12550 .opcode = 6028,
12551 .operands = &[_]Operand{
12552 .{ .kind = .IdResultType, .quantifier = .required },
12553 .{ .kind = .IdResult, .quantifier = .required },
12554 .{ .kind = .IdRef, .quantifier = .required },
12555 .{ .kind = .IdRef, .quantifier = .required },
12556 },
12557 },
12558 .{
12559 .name = "OpRayQueryGetWorldRayDirectionKHR",
12560 .opcode = 6029,
12561 .operands = &[_]Operand{
12562 .{ .kind = .IdResultType, .quantifier = .required },
12563 .{ .kind = .IdResult, .quantifier = .required },
12564 .{ .kind = .IdRef, .quantifier = .required },
12565 },
12566 },
12567 .{
12568 .name = "OpRayQueryGetWorldRayOriginKHR",
12569 .opcode = 6030,
12570 .operands = &[_]Operand{
12571 .{ .kind = .IdResultType, .quantifier = .required },
12572 .{ .kind = .IdResult, .quantifier = .required },
12573 .{ .kind = .IdRef, .quantifier = .required },
12574 },
12575 },
12576 .{
12577 .name = "OpRayQueryGetIntersectionObjectToWorldKHR",
12578 .opcode = 6031,
12579 .operands = &[_]Operand{
12580 .{ .kind = .IdResultType, .quantifier = .required },
12581 .{ .kind = .IdResult, .quantifier = .required },
12582 .{ .kind = .IdRef, .quantifier = .required },
12583 .{ .kind = .IdRef, .quantifier = .required },
12584 },
12585 },
12586 .{
12587 .name = "OpRayQueryGetIntersectionWorldToObjectKHR",
12588 .opcode = 6032,
12589 .operands = &[_]Operand{
12590 .{ .kind = .IdResultType, .quantifier = .required },
12591 .{ .kind = .IdResult, .quantifier = .required },
12592 .{ .kind = .IdRef, .quantifier = .required },
12593 .{ .kind = .IdRef, .quantifier = .required },
12594 },
12595 },
12596 .{
12597 .name = "OpAtomicFAddEXT",
12598 .opcode = 6035,
12599 .operands = &[_]Operand{
12600 .{ .kind = .IdResultType, .quantifier = .required },
12601 .{ .kind = .IdResult, .quantifier = .required },
12602 .{ .kind = .IdRef, .quantifier = .required },
12603 .{ .kind = .IdScope, .quantifier = .required },
12604 .{ .kind = .IdMemorySemantics, .quantifier = .required },
12605 .{ .kind = .IdRef, .quantifier = .required },
12606 },
12607 },
12608 .{
12609 .name = "OpTypeBufferSurfaceINTEL",
12610 .opcode = 6086,
12611 .operands = &[_]Operand{
12612 .{ .kind = .IdResult, .quantifier = .required },
12613 .{ .kind = .AccessQualifier, .quantifier = .required },
12614 },
12615 },
12616 .{
12617 .name = "OpTypeStructContinuedINTEL",
12618 .opcode = 6090,
12619 .operands = &[_]Operand{
12620 .{ .kind = .IdRef, .quantifier = .variadic },
12621 },
12622 },
12623 .{
12624 .name = "OpConstantCompositeContinuedINTEL",
12625 .opcode = 6091,
12626 .operands = &[_]Operand{
12627 .{ .kind = .IdRef, .quantifier = .variadic },
12628 },
12629 },
12630 .{
12631 .name = "OpSpecConstantCompositeContinuedINTEL",
12632 .opcode = 6092,
12633 .operands = &[_]Operand{
12634 .{ .kind = .IdRef, .quantifier = .variadic },
12635 },
12636 },
12637 .{
12638 .name = "OpCompositeConstructContinuedINTEL",
12639 .opcode = 6096,
12640 .operands = &[_]Operand{
12641 .{ .kind = .IdResultType, .quantifier = .required },
12642 .{ .kind = .IdResult, .quantifier = .required },
12643 .{ .kind = .IdRef, .quantifier = .variadic },
12644 },
12645 },
12646 .{
12647 .name = "OpConvertFToBF16INTEL",
12648 .opcode = 6116,
12649 .operands = &[_]Operand{
12650 .{ .kind = .IdResultType, .quantifier = .required },
12651 .{ .kind = .IdResult, .quantifier = .required },
12652 .{ .kind = .IdRef, .quantifier = .required },
12653 },
12654 },
12655 .{
12656 .name = "OpConvertBF16ToFINTEL",
12657 .opcode = 6117,
12658 .operands = &[_]Operand{
12659 .{ .kind = .IdResultType, .quantifier = .required },
12660 .{ .kind = .IdResult, .quantifier = .required },
12661 .{ .kind = .IdRef, .quantifier = .required },
12662 },
12663 },
12664 .{
12665 .name = "OpControlBarrierArriveINTEL",
12666 .opcode = 6142,
12667 .operands = &[_]Operand{
12668 .{ .kind = .IdScope, .quantifier = .required },
12669 .{ .kind = .IdScope, .quantifier = .required },
12670 .{ .kind = .IdMemorySemantics, .quantifier = .required },
12671 },
12672 },
12673 .{
12674 .name = "OpControlBarrierWaitINTEL",
12675 .opcode = 6143,
12676 .operands = &[_]Operand{
12677 .{ .kind = .IdScope, .quantifier = .required },
12678 .{ .kind = .IdScope, .quantifier = .required },
12679 .{ .kind = .IdMemorySemantics, .quantifier = .required },
12680 },
12681 },
12682 .{
12683 .name = "OpGroupIMulKHR",
12684 .opcode = 6401,
12685 .operands = &[_]Operand{
12686 .{ .kind = .IdResultType, .quantifier = .required },
12687 .{ .kind = .IdResult, .quantifier = .required },
12688 .{ .kind = .IdScope, .quantifier = .required },
12689 .{ .kind = .GroupOperation, .quantifier = .required },
12690 .{ .kind = .IdRef, .quantifier = .required },
12691 },
12692 },
12693 .{
12694 .name = "OpGroupFMulKHR",
12695 .opcode = 6402,
12696 .operands = &[_]Operand{
12697 .{ .kind = .IdResultType, .quantifier = .required },
12698 .{ .kind = .IdResult, .quantifier = .required },
12699 .{ .kind = .IdScope, .quantifier = .required },
12700 .{ .kind = .GroupOperation, .quantifier = .required },
12701 .{ .kind = .IdRef, .quantifier = .required },
12702 },
12703 },
12704 .{
12705 .name = "OpGroupBitwiseAndKHR",
12706 .opcode = 6403,
12707 .operands = &[_]Operand{
12708 .{ .kind = .IdResultType, .quantifier = .required },
12709 .{ .kind = .IdResult, .quantifier = .required },
12710 .{ .kind = .IdScope, .quantifier = .required },
12711 .{ .kind = .GroupOperation, .quantifier = .required },
12712 .{ .kind = .IdRef, .quantifier = .required },
12713 },
12714 },
12715 .{
12716 .name = "OpGroupBitwiseOrKHR",
12717 .opcode = 6404,
12718 .operands = &[_]Operand{
12719 .{ .kind = .IdResultType, .quantifier = .required },
12720 .{ .kind = .IdResult, .quantifier = .required },
12721 .{ .kind = .IdScope, .quantifier = .required },
12722 .{ .kind = .GroupOperation, .quantifier = .required },
12723 .{ .kind = .IdRef, .quantifier = .required },
12724 },
12725 },
12726 .{
12727 .name = "OpGroupBitwiseXorKHR",
12728 .opcode = 6405,
12729 .operands = &[_]Operand{
12730 .{ .kind = .IdResultType, .quantifier = .required },
12731 .{ .kind = .IdResult, .quantifier = .required },
12732 .{ .kind = .IdScope, .quantifier = .required },
12733 .{ .kind = .GroupOperation, .quantifier = .required },
12734 .{ .kind = .IdRef, .quantifier = .required },
12735 },
12736 },
12737 .{
12738 .name = "OpGroupLogicalAndKHR",
12739 .opcode = 6406,
12740 .operands = &[_]Operand{
12741 .{ .kind = .IdResultType, .quantifier = .required },
12742 .{ .kind = .IdResult, .quantifier = .required },
12743 .{ .kind = .IdScope, .quantifier = .required },
12744 .{ .kind = .GroupOperation, .quantifier = .required },
12745 .{ .kind = .IdRef, .quantifier = .required },
12746 },
12747 },
12748 .{
12749 .name = "OpGroupLogicalOrKHR",
12750 .opcode = 6407,
12751 .operands = &[_]Operand{
12752 .{ .kind = .IdResultType, .quantifier = .required },
12753 .{ .kind = .IdResult, .quantifier = .required },
12754 .{ .kind = .IdScope, .quantifier = .required },
12755 .{ .kind = .GroupOperation, .quantifier = .required },
12756 .{ .kind = .IdRef, .quantifier = .required },
12757 },
12758 },
12759 .{
12760 .name = "OpGroupLogicalXorKHR",
12761 .opcode = 6408,
12762 .operands = &[_]Operand{
12763 .{ .kind = .IdResultType, .quantifier = .required },
12764 .{ .kind = .IdResult, .quantifier = .required },
12765 .{ .kind = .IdScope, .quantifier = .required },
12766 .{ .kind = .GroupOperation, .quantifier = .required },
12767 .{ .kind = .IdRef, .quantifier = .required },
12768 },
12769 },
12770 .{
12771 .name = "OpMaskedGatherINTEL",
12772 .opcode = 6428,
12773 .operands = &[_]Operand{
12774 .{ .kind = .IdResultType, .quantifier = .required },
12775 .{ .kind = .IdResult, .quantifier = .required },
12776 .{ .kind = .IdRef, .quantifier = .required },
12777 .{ .kind = .LiteralInteger, .quantifier = .required },
12778 .{ .kind = .IdRef, .quantifier = .required },
12779 .{ .kind = .IdRef, .quantifier = .required },
12780 },
12781 },
12782 .{
12783 .name = "OpMaskedScatterINTEL",
12784 .opcode = 6429,
12785 .operands = &[_]Operand{
12786 .{ .kind = .IdRef, .quantifier = .required },
12787 .{ .kind = .IdRef, .quantifier = .required },
12788 .{ .kind = .LiteralInteger, .quantifier = .required },
12789 .{ .kind = .IdRef, .quantifier = .required },
12790 },
12791 },
12792 },
12793 .@"OpenCL.std" => &[_]Instruction{
12794 .{
12795 .name = "acos",
12796 .opcode = 0,
12797 .operands = &[_]Operand{
12798 .{ .kind = .IdRef, .quantifier = .required },
12799 },
12800 },
12801 .{
12802 .name = "acosh",
12803 .opcode = 1,
12804 .operands = &[_]Operand{
12805 .{ .kind = .IdRef, .quantifier = .required },
12806 },
12807 },
12808 .{
12809 .name = "acospi",
12810 .opcode = 2,
12811 .operands = &[_]Operand{
12812 .{ .kind = .IdRef, .quantifier = .required },
12813 },
12814 },
12815 .{
12816 .name = "asin",
12817 .opcode = 3,
12818 .operands = &[_]Operand{
12819 .{ .kind = .IdRef, .quantifier = .required },
12820 },
12821 },
12822 .{
12823 .name = "asinh",
12824 .opcode = 4,
12825 .operands = &[_]Operand{
12826 .{ .kind = .IdRef, .quantifier = .required },
12827 },
12828 },
12829 .{
12830 .name = "asinpi",
12831 .opcode = 5,
12832 .operands = &[_]Operand{
12833 .{ .kind = .IdRef, .quantifier = .required },
12834 },
12835 },
12836 .{
12837 .name = "atan",
12838 .opcode = 6,
12839 .operands = &[_]Operand{
12840 .{ .kind = .IdRef, .quantifier = .required },
12841 },
12842 },
12843 .{
12844 .name = "atan2",
12845 .opcode = 7,
12846 .operands = &[_]Operand{
12847 .{ .kind = .IdRef, .quantifier = .required },
12848 .{ .kind = .IdRef, .quantifier = .required },
12849 },
12850 },
12851 .{
12852 .name = "atanh",
12853 .opcode = 8,
12854 .operands = &[_]Operand{
12855 .{ .kind = .IdRef, .quantifier = .required },
12856 },
12857 },
12858 .{
12859 .name = "atanpi",
12860 .opcode = 9,
12861 .operands = &[_]Operand{
12862 .{ .kind = .IdRef, .quantifier = .required },
12863 },
12864 },
12865 .{
12866 .name = "atan2pi",
12867 .opcode = 10,
12868 .operands = &[_]Operand{
12869 .{ .kind = .IdRef, .quantifier = .required },
12870 .{ .kind = .IdRef, .quantifier = .required },
12871 },
12872 },
12873 .{
12874 .name = "cbrt",
12875 .opcode = 11,
12876 .operands = &[_]Operand{
12877 .{ .kind = .IdRef, .quantifier = .required },
12878 },
12879 },
12880 .{
12881 .name = "ceil",
12882 .opcode = 12,
12883 .operands = &[_]Operand{
12884 .{ .kind = .IdRef, .quantifier = .required },
12885 },
12886 },
12887 .{
12888 .name = "copysign",
12889 .opcode = 13,
12890 .operands = &[_]Operand{
12891 .{ .kind = .IdRef, .quantifier = .required },
12892 .{ .kind = .IdRef, .quantifier = .required },
12893 },
12894 },
12895 .{
12896 .name = "cos",
12897 .opcode = 14,
12898 .operands = &[_]Operand{
12899 .{ .kind = .IdRef, .quantifier = .required },
12900 },
12901 },
12902 .{
12903 .name = "cosh",
12904 .opcode = 15,
12905 .operands = &[_]Operand{
12906 .{ .kind = .IdRef, .quantifier = .required },
12907 },
12908 },
12909 .{
12910 .name = "cospi",
12911 .opcode = 16,
12912 .operands = &[_]Operand{
12913 .{ .kind = .IdRef, .quantifier = .required },
12914 },
12915 },
12916 .{
12917 .name = "erfc",
12918 .opcode = 17,
12919 .operands = &[_]Operand{
12920 .{ .kind = .IdRef, .quantifier = .required },
12921 },
12922 },
12923 .{
12924 .name = "erf",
12925 .opcode = 18,
12926 .operands = &[_]Operand{
12927 .{ .kind = .IdRef, .quantifier = .required },
12928 },
12929 },
12930 .{
12931 .name = "exp",
12932 .opcode = 19,
12933 .operands = &[_]Operand{
12934 .{ .kind = .IdRef, .quantifier = .required },
12935 },
12936 },
12937 .{
12938 .name = "exp2",
12939 .opcode = 20,
12940 .operands = &[_]Operand{
12941 .{ .kind = .IdRef, .quantifier = .required },
12942 },
12943 },
12944 .{
12945 .name = "exp10",
12946 .opcode = 21,
12947 .operands = &[_]Operand{
12948 .{ .kind = .IdRef, .quantifier = .required },
12949 },
12950 },
12951 .{
12952 .name = "expm1",
12953 .opcode = 22,
12954 .operands = &[_]Operand{
12955 .{ .kind = .IdRef, .quantifier = .required },
12956 },
12957 },
12958 .{
12959 .name = "fabs",
12960 .opcode = 23,
12961 .operands = &[_]Operand{
12962 .{ .kind = .IdRef, .quantifier = .required },
12963 },
12964 },
12965 .{
12966 .name = "fdim",
12967 .opcode = 24,
12968 .operands = &[_]Operand{
12969 .{ .kind = .IdRef, .quantifier = .required },
12970 .{ .kind = .IdRef, .quantifier = .required },
12971 },
12972 },
12973 .{
12974 .name = "floor",
12975 .opcode = 25,
12976 .operands = &[_]Operand{
12977 .{ .kind = .IdRef, .quantifier = .required },
12978 },
12979 },
12980 .{
12981 .name = "fma",
12982 .opcode = 26,
12983 .operands = &[_]Operand{
12984 .{ .kind = .IdRef, .quantifier = .required },
12985 .{ .kind = .IdRef, .quantifier = .required },
12986 .{ .kind = .IdRef, .quantifier = .required },
12987 },
12988 },
12989 .{
12990 .name = "fmax",
12991 .opcode = 27,
12992 .operands = &[_]Operand{
12993 .{ .kind = .IdRef, .quantifier = .required },
12994 .{ .kind = .IdRef, .quantifier = .required },
12995 },
12996 },
12997 .{
12998 .name = "fmin",
12999 .opcode = 28,
13000 .operands = &[_]Operand{
13001 .{ .kind = .IdRef, .quantifier = .required },
13002 .{ .kind = .IdRef, .quantifier = .required },
13003 },
13004 },
13005 .{
13006 .name = "fmod",
13007 .opcode = 29,
13008 .operands = &[_]Operand{
13009 .{ .kind = .IdRef, .quantifier = .required },
13010 .{ .kind = .IdRef, .quantifier = .required },
13011 },
13012 },
13013 .{
13014 .name = "fract",
13015 .opcode = 30,
13016 .operands = &[_]Operand{
13017 .{ .kind = .IdRef, .quantifier = .required },
13018 .{ .kind = .IdRef, .quantifier = .required },
13019 },
13020 },
13021 .{
13022 .name = "frexp",
13023 .opcode = 31,
13024 .operands = &[_]Operand{
13025 .{ .kind = .IdRef, .quantifier = .required },
13026 .{ .kind = .IdRef, .quantifier = .required },
13027 },
13028 },
13029 .{
13030 .name = "hypot",
13031 .opcode = 32,
13032 .operands = &[_]Operand{
13033 .{ .kind = .IdRef, .quantifier = .required },
13034 .{ .kind = .IdRef, .quantifier = .required },
13035 },
13036 },
13037 .{
13038 .name = "ilogb",
13039 .opcode = 33,
13040 .operands = &[_]Operand{
13041 .{ .kind = .IdRef, .quantifier = .required },
13042 },
13043 },
13044 .{
13045 .name = "ldexp",
13046 .opcode = 34,
13047 .operands = &[_]Operand{
13048 .{ .kind = .IdRef, .quantifier = .required },
13049 .{ .kind = .IdRef, .quantifier = .required },
13050 },
13051 },
13052 .{
13053 .name = "lgamma",
13054 .opcode = 35,
13055 .operands = &[_]Operand{
13056 .{ .kind = .IdRef, .quantifier = .required },
13057 },
13058 },
13059 .{
13060 .name = "lgamma_r",
13061 .opcode = 36,
13062 .operands = &[_]Operand{
13063 .{ .kind = .IdRef, .quantifier = .required },
13064 .{ .kind = .IdRef, .quantifier = .required },
13065 },
13066 },
13067 .{
13068 .name = "log",
13069 .opcode = 37,
13070 .operands = &[_]Operand{
13071 .{ .kind = .IdRef, .quantifier = .required },
13072 },
13073 },
13074 .{
13075 .name = "log2",
13076 .opcode = 38,
13077 .operands = &[_]Operand{
13078 .{ .kind = .IdRef, .quantifier = .required },
13079 },
13080 },
13081 .{
13082 .name = "log10",
13083 .opcode = 39,
13084 .operands = &[_]Operand{
13085 .{ .kind = .IdRef, .quantifier = .required },
13086 },
13087 },
13088 .{
13089 .name = "log1p",
13090 .opcode = 40,
13091 .operands = &[_]Operand{
13092 .{ .kind = .IdRef, .quantifier = .required },
13093 },
13094 },
13095 .{
13096 .name = "logb",
13097 .opcode = 41,
13098 .operands = &[_]Operand{
13099 .{ .kind = .IdRef, .quantifier = .required },
13100 },
13101 },
13102 .{
13103 .name = "mad",
13104 .opcode = 42,
13105 .operands = &[_]Operand{
13106 .{ .kind = .IdRef, .quantifier = .required },
13107 .{ .kind = .IdRef, .quantifier = .required },
13108 .{ .kind = .IdRef, .quantifier = .required },
13109 },
13110 },
13111 .{
13112 .name = "maxmag",
13113 .opcode = 43,
13114 .operands = &[_]Operand{
13115 .{ .kind = .IdRef, .quantifier = .required },
13116 .{ .kind = .IdRef, .quantifier = .required },
13117 },
13118 },
13119 .{
13120 .name = "minmag",
13121 .opcode = 44,
13122 .operands = &[_]Operand{
13123 .{ .kind = .IdRef, .quantifier = .required },
13124 .{ .kind = .IdRef, .quantifier = .required },
13125 },
13126 },
13127 .{
13128 .name = "modf",
13129 .opcode = 45,
13130 .operands = &[_]Operand{
13131 .{ .kind = .IdRef, .quantifier = .required },
13132 .{ .kind = .IdRef, .quantifier = .required },
13133 },
13134 },
13135 .{
13136 .name = "nan",
13137 .opcode = 46,
13138 .operands = &[_]Operand{
13139 .{ .kind = .IdRef, .quantifier = .required },
13140 },
13141 },
13142 .{
13143 .name = "nextafter",
13144 .opcode = 47,
13145 .operands = &[_]Operand{
13146 .{ .kind = .IdRef, .quantifier = .required },
13147 .{ .kind = .IdRef, .quantifier = .required },
13148 },
13149 },
13150 .{
13151 .name = "pow",
13152 .opcode = 48,
13153 .operands = &[_]Operand{
13154 .{ .kind = .IdRef, .quantifier = .required },
13155 .{ .kind = .IdRef, .quantifier = .required },
13156 },
13157 },
13158 .{
13159 .name = "pown",
13160 .opcode = 49,
13161 .operands = &[_]Operand{
13162 .{ .kind = .IdRef, .quantifier = .required },
13163 .{ .kind = .IdRef, .quantifier = .required },
13164 },
13165 },
13166 .{
13167 .name = "powr",
13168 .opcode = 50,
13169 .operands = &[_]Operand{
13170 .{ .kind = .IdRef, .quantifier = .required },
13171 .{ .kind = .IdRef, .quantifier = .required },
13172 },
13173 },
13174 .{
13175 .name = "remainder",
13176 .opcode = 51,
13177 .operands = &[_]Operand{
13178 .{ .kind = .IdRef, .quantifier = .required },
13179 .{ .kind = .IdRef, .quantifier = .required },
13180 },
13181 },
13182 .{
13183 .name = "remquo",
13184 .opcode = 52,
13185 .operands = &[_]Operand{
13186 .{ .kind = .IdRef, .quantifier = .required },
13187 .{ .kind = .IdRef, .quantifier = .required },
13188 .{ .kind = .IdRef, .quantifier = .required },
13189 },
13190 },
13191 .{
13192 .name = "rint",
13193 .opcode = 53,
13194 .operands = &[_]Operand{
13195 .{ .kind = .IdRef, .quantifier = .required },
13196 },
13197 },
13198 .{
13199 .name = "rootn",
13200 .opcode = 54,
13201 .operands = &[_]Operand{
13202 .{ .kind = .IdRef, .quantifier = .required },
13203 .{ .kind = .IdRef, .quantifier = .required },
13204 },
13205 },
13206 .{
13207 .name = "round",
13208 .opcode = 55,
13209 .operands = &[_]Operand{
13210 .{ .kind = .IdRef, .quantifier = .required },
13211 },
13212 },
13213 .{
13214 .name = "rsqrt",
13215 .opcode = 56,
13216 .operands = &[_]Operand{
13217 .{ .kind = .IdRef, .quantifier = .required },
13218 },
13219 },
13220 .{
13221 .name = "sin",
13222 .opcode = 57,
13223 .operands = &[_]Operand{
13224 .{ .kind = .IdRef, .quantifier = .required },
13225 },
13226 },
13227 .{
13228 .name = "sincos",
13229 .opcode = 58,
13230 .operands = &[_]Operand{
13231 .{ .kind = .IdRef, .quantifier = .required },
13232 .{ .kind = .IdRef, .quantifier = .required },
13233 },
13234 },
13235 .{
13236 .name = "sinh",
13237 .opcode = 59,
13238 .operands = &[_]Operand{
13239 .{ .kind = .IdRef, .quantifier = .required },
13240 },
13241 },
13242 .{
13243 .name = "sinpi",
13244 .opcode = 60,
13245 .operands = &[_]Operand{
13246 .{ .kind = .IdRef, .quantifier = .required },
13247 },
13248 },
13249 .{
13250 .name = "sqrt",
13251 .opcode = 61,
13252 .operands = &[_]Operand{
13253 .{ .kind = .IdRef, .quantifier = .required },
13254 },
13255 },
13256 .{
13257 .name = "tan",
13258 .opcode = 62,
13259 .operands = &[_]Operand{
13260 .{ .kind = .IdRef, .quantifier = .required },
13261 },
13262 },
13263 .{
13264 .name = "tanh",
13265 .opcode = 63,
13266 .operands = &[_]Operand{
13267 .{ .kind = .IdRef, .quantifier = .required },
13268 },
13269 },
13270 .{
13271 .name = "tanpi",
13272 .opcode = 64,
13273 .operands = &[_]Operand{
13274 .{ .kind = .IdRef, .quantifier = .required },
13275 },
13276 },
13277 .{
13278 .name = "tgamma",
13279 .opcode = 65,
13280 .operands = &[_]Operand{
13281 .{ .kind = .IdRef, .quantifier = .required },
13282 },
13283 },
13284 .{
13285 .name = "trunc",
13286 .opcode = 66,
13287 .operands = &[_]Operand{
13288 .{ .kind = .IdRef, .quantifier = .required },
13289 },
13290 },
13291 .{
13292 .name = "half_cos",
13293 .opcode = 67,
13294 .operands = &[_]Operand{
13295 .{ .kind = .IdRef, .quantifier = .required },
13296 },
13297 },
13298 .{
13299 .name = "half_divide",
13300 .opcode = 68,
13301 .operands = &[_]Operand{
13302 .{ .kind = .IdRef, .quantifier = .required },
13303 .{ .kind = .IdRef, .quantifier = .required },
13304 },
13305 },
13306 .{
13307 .name = "half_exp",
13308 .opcode = 69,
13309 .operands = &[_]Operand{
13310 .{ .kind = .IdRef, .quantifier = .required },
13311 },
13312 },
13313 .{
13314 .name = "half_exp2",
13315 .opcode = 70,
13316 .operands = &[_]Operand{
13317 .{ .kind = .IdRef, .quantifier = .required },
13318 },
13319 },
13320 .{
13321 .name = "half_exp10",
13322 .opcode = 71,
13323 .operands = &[_]Operand{
13324 .{ .kind = .IdRef, .quantifier = .required },
13325 },
13326 },
13327 .{
13328 .name = "half_log",
13329 .opcode = 72,
13330 .operands = &[_]Operand{
13331 .{ .kind = .IdRef, .quantifier = .required },
13332 },
13333 },
13334 .{
13335 .name = "half_log2",
13336 .opcode = 73,
13337 .operands = &[_]Operand{
13338 .{ .kind = .IdRef, .quantifier = .required },
13339 },
13340 },
13341 .{
13342 .name = "half_log10",
13343 .opcode = 74,
13344 .operands = &[_]Operand{
13345 .{ .kind = .IdRef, .quantifier = .required },
13346 },
13347 },
13348 .{
13349 .name = "half_powr",
13350 .opcode = 75,
13351 .operands = &[_]Operand{
13352 .{ .kind = .IdRef, .quantifier = .required },
13353 .{ .kind = .IdRef, .quantifier = .required },
13354 },
13355 },
13356 .{
13357 .name = "half_recip",
13358 .opcode = 76,
13359 .operands = &[_]Operand{
13360 .{ .kind = .IdRef, .quantifier = .required },
13361 },
13362 },
13363 .{
13364 .name = "half_rsqrt",
13365 .opcode = 77,
13366 .operands = &[_]Operand{
13367 .{ .kind = .IdRef, .quantifier = .required },
13368 },
13369 },
13370 .{
13371 .name = "half_sin",
13372 .opcode = 78,
13373 .operands = &[_]Operand{
13374 .{ .kind = .IdRef, .quantifier = .required },
13375 },
13376 },
13377 .{
13378 .name = "half_sqrt",
13379 .opcode = 79,
13380 .operands = &[_]Operand{
13381 .{ .kind = .IdRef, .quantifier = .required },
13382 },
13383 },
13384 .{
13385 .name = "half_tan",
13386 .opcode = 80,
13387 .operands = &[_]Operand{
13388 .{ .kind = .IdRef, .quantifier = .required },
13389 },
13390 },
13391 .{
13392 .name = "native_cos",
13393 .opcode = 81,
13394 .operands = &[_]Operand{
13395 .{ .kind = .IdRef, .quantifier = .required },
13396 },
13397 },
13398 .{
13399 .name = "native_divide",
13400 .opcode = 82,
13401 .operands = &[_]Operand{
13402 .{ .kind = .IdRef, .quantifier = .required },
13403 .{ .kind = .IdRef, .quantifier = .required },
13404 },
13405 },
13406 .{
13407 .name = "native_exp",
13408 .opcode = 83,
13409 .operands = &[_]Operand{
13410 .{ .kind = .IdRef, .quantifier = .required },
13411 },
13412 },
13413 .{
13414 .name = "native_exp2",
13415 .opcode = 84,
13416 .operands = &[_]Operand{
13417 .{ .kind = .IdRef, .quantifier = .required },
13418 },
13419 },
13420 .{
13421 .name = "native_exp10",
13422 .opcode = 85,
13423 .operands = &[_]Operand{
13424 .{ .kind = .IdRef, .quantifier = .required },
13425 },
13426 },
13427 .{
13428 .name = "native_log",
13429 .opcode = 86,
13430 .operands = &[_]Operand{
13431 .{ .kind = .IdRef, .quantifier = .required },
13432 },
13433 },
13434 .{
13435 .name = "native_log2",
13436 .opcode = 87,
13437 .operands = &[_]Operand{
13438 .{ .kind = .IdRef, .quantifier = .required },
13439 },
13440 },
13441 .{
13442 .name = "native_log10",
13443 .opcode = 88,
13444 .operands = &[_]Operand{
13445 .{ .kind = .IdRef, .quantifier = .required },
13446 },
13447 },
13448 .{
13449 .name = "native_powr",
13450 .opcode = 89,
13451 .operands = &[_]Operand{
13452 .{ .kind = .IdRef, .quantifier = .required },
13453 .{ .kind = .IdRef, .quantifier = .required },
13454 },
13455 },
13456 .{
13457 .name = "native_recip",
13458 .opcode = 90,
13459 .operands = &[_]Operand{
13460 .{ .kind = .IdRef, .quantifier = .required },
13461 },
13462 },
13463 .{
13464 .name = "native_rsqrt",
13465 .opcode = 91,
13466 .operands = &[_]Operand{
13467 .{ .kind = .IdRef, .quantifier = .required },
13468 },
13469 },
13470 .{
13471 .name = "native_sin",
13472 .opcode = 92,
13473 .operands = &[_]Operand{
13474 .{ .kind = .IdRef, .quantifier = .required },
13475 },
13476 },
13477 .{
13478 .name = "native_sqrt",
13479 .opcode = 93,
13480 .operands = &[_]Operand{
13481 .{ .kind = .IdRef, .quantifier = .required },
13482 },
13483 },
13484 .{
13485 .name = "native_tan",
13486 .opcode = 94,
13487 .operands = &[_]Operand{
13488 .{ .kind = .IdRef, .quantifier = .required },
13489 },
13490 },
13491 .{
13492 .name = "fclamp",
13493 .opcode = 95,
13494 .operands = &[_]Operand{
13495 .{ .kind = .IdRef, .quantifier = .required },
13496 .{ .kind = .IdRef, .quantifier = .required },
13497 .{ .kind = .IdRef, .quantifier = .required },
13498 },
13499 },
13500 .{
13501 .name = "degrees",
13502 .opcode = 96,
13503 .operands = &[_]Operand{
13504 .{ .kind = .IdRef, .quantifier = .required },
13505 },
13506 },
13507 .{
13508 .name = "fmax_common",
13509 .opcode = 97,
13510 .operands = &[_]Operand{
13511 .{ .kind = .IdRef, .quantifier = .required },
13512 .{ .kind = .IdRef, .quantifier = .required },
13513 },
13514 },
13515 .{
13516 .name = "fmin_common",
13517 .opcode = 98,
13518 .operands = &[_]Operand{
13519 .{ .kind = .IdRef, .quantifier = .required },
13520 .{ .kind = .IdRef, .quantifier = .required },
13521 },
13522 },
13523 .{
13524 .name = "mix",
13525 .opcode = 99,
13526 .operands = &[_]Operand{
13527 .{ .kind = .IdRef, .quantifier = .required },
13528 .{ .kind = .IdRef, .quantifier = .required },
13529 .{ .kind = .IdRef, .quantifier = .required },
13530 },
13531 },
13532 .{
13533 .name = "radians",
13534 .opcode = 100,
13535 .operands = &[_]Operand{
13536 .{ .kind = .IdRef, .quantifier = .required },
13537 },
13538 },
13539 .{
13540 .name = "step",
13541 .opcode = 101,
13542 .operands = &[_]Operand{
13543 .{ .kind = .IdRef, .quantifier = .required },
13544 .{ .kind = .IdRef, .quantifier = .required },
13545 },
13546 },
13547 .{
13548 .name = "smoothstep",
13549 .opcode = 102,
13550 .operands = &[_]Operand{
13551 .{ .kind = .IdRef, .quantifier = .required },
13552 .{ .kind = .IdRef, .quantifier = .required },
13553 .{ .kind = .IdRef, .quantifier = .required },
13554 },
13555 },
13556 .{
13557 .name = "sign",
13558 .opcode = 103,
13559 .operands = &[_]Operand{
13560 .{ .kind = .IdRef, .quantifier = .required },
13561 },
13562 },
13563 .{
13564 .name = "cross",
13565 .opcode = 104,
13566 .operands = &[_]Operand{
13567 .{ .kind = .IdRef, .quantifier = .required },
13568 .{ .kind = .IdRef, .quantifier = .required },
13569 },
13570 },
13571 .{
13572 .name = "distance",
13573 .opcode = 105,
13574 .operands = &[_]Operand{
13575 .{ .kind = .IdRef, .quantifier = .required },
13576 .{ .kind = .IdRef, .quantifier = .required },
13577 },
13578 },
13579 .{
13580 .name = "length",
13581 .opcode = 106,
13582 .operands = &[_]Operand{
13583 .{ .kind = .IdRef, .quantifier = .required },
13584 },
13585 },
13586 .{
13587 .name = "normalize",
13588 .opcode = 107,
13589 .operands = &[_]Operand{
13590 .{ .kind = .IdRef, .quantifier = .required },
13591 },
13592 },
13593 .{
13594 .name = "fast_distance",
13595 .opcode = 108,
13596 .operands = &[_]Operand{
13597 .{ .kind = .IdRef, .quantifier = .required },
13598 .{ .kind = .IdRef, .quantifier = .required },
13599 },
13600 },
13601 .{
13602 .name = "fast_length",
13603 .opcode = 109,
13604 .operands = &[_]Operand{
13605 .{ .kind = .IdRef, .quantifier = .required },
13606 },
13607 },
13608 .{
13609 .name = "fast_normalize",
13610 .opcode = 110,
13611 .operands = &[_]Operand{
13612 .{ .kind = .IdRef, .quantifier = .required },
13613 },
13614 },
13615 .{
13616 .name = "s_abs",
13617 .opcode = 141,
13618 .operands = &[_]Operand{
13619 .{ .kind = .IdRef, .quantifier = .required },
13620 },
13621 },
13622 .{
13623 .name = "s_abs_diff",
13624 .opcode = 142,
13625 .operands = &[_]Operand{
13626 .{ .kind = .IdRef, .quantifier = .required },
13627 .{ .kind = .IdRef, .quantifier = .required },
13628 },
13629 },
13630 .{
13631 .name = "s_add_sat",
13632 .opcode = 143,
13633 .operands = &[_]Operand{
13634 .{ .kind = .IdRef, .quantifier = .required },
13635 .{ .kind = .IdRef, .quantifier = .required },
13636 },
13637 },
13638 .{
13639 .name = "u_add_sat",
13640 .opcode = 144,
13641 .operands = &[_]Operand{
13642 .{ .kind = .IdRef, .quantifier = .required },
13643 .{ .kind = .IdRef, .quantifier = .required },
13644 },
13645 },
13646 .{
13647 .name = "s_hadd",
13648 .opcode = 145,
13649 .operands = &[_]Operand{
13650 .{ .kind = .IdRef, .quantifier = .required },
13651 .{ .kind = .IdRef, .quantifier = .required },
13652 },
13653 },
13654 .{
13655 .name = "u_hadd",
13656 .opcode = 146,
13657 .operands = &[_]Operand{
13658 .{ .kind = .IdRef, .quantifier = .required },
13659 .{ .kind = .IdRef, .quantifier = .required },
13660 },
13661 },
13662 .{
13663 .name = "s_rhadd",
13664 .opcode = 147,
13665 .operands = &[_]Operand{
13666 .{ .kind = .IdRef, .quantifier = .required },
13667 .{ .kind = .IdRef, .quantifier = .required },
13668 },
13669 },
13670 .{
13671 .name = "u_rhadd",
13672 .opcode = 148,
13673 .operands = &[_]Operand{
13674 .{ .kind = .IdRef, .quantifier = .required },
13675 .{ .kind = .IdRef, .quantifier = .required },
13676 },
13677 },
13678 .{
13679 .name = "s_clamp",
13680 .opcode = 149,
13681 .operands = &[_]Operand{
13682 .{ .kind = .IdRef, .quantifier = .required },
13683 .{ .kind = .IdRef, .quantifier = .required },
13684 .{ .kind = .IdRef, .quantifier = .required },
13685 },
13686 },
13687 .{
13688 .name = "u_clamp",
13689 .opcode = 150,
13690 .operands = &[_]Operand{
13691 .{ .kind = .IdRef, .quantifier = .required },
13692 .{ .kind = .IdRef, .quantifier = .required },
13693 .{ .kind = .IdRef, .quantifier = .required },
13694 },
13695 },
13696 .{
13697 .name = "clz",
13698 .opcode = 151,
13699 .operands = &[_]Operand{
13700 .{ .kind = .IdRef, .quantifier = .required },
13701 },
13702 },
13703 .{
13704 .name = "ctz",
13705 .opcode = 152,
13706 .operands = &[_]Operand{
13707 .{ .kind = .IdRef, .quantifier = .required },
13708 },
13709 },
13710 .{
13711 .name = "s_mad_hi",
13712 .opcode = 153,
13713 .operands = &[_]Operand{
13714 .{ .kind = .IdRef, .quantifier = .required },
13715 .{ .kind = .IdRef, .quantifier = .required },
13716 .{ .kind = .IdRef, .quantifier = .required },
13717 },
13718 },
13719 .{
13720 .name = "u_mad_sat",
13721 .opcode = 154,
13722 .operands = &[_]Operand{
13723 .{ .kind = .IdRef, .quantifier = .required },
13724 .{ .kind = .IdRef, .quantifier = .required },
13725 .{ .kind = .IdRef, .quantifier = .required },
13726 },
13727 },
13728 .{
13729 .name = "s_mad_sat",
13730 .opcode = 155,
13731 .operands = &[_]Operand{
13732 .{ .kind = .IdRef, .quantifier = .required },
13733 .{ .kind = .IdRef, .quantifier = .required },
13734 .{ .kind = .IdRef, .quantifier = .required },
13735 },
13736 },
13737 .{
13738 .name = "s_max",
13739 .opcode = 156,
13740 .operands = &[_]Operand{
13741 .{ .kind = .IdRef, .quantifier = .required },
13742 .{ .kind = .IdRef, .quantifier = .required },
13743 },
13744 },
13745 .{
13746 .name = "u_max",
13747 .opcode = 157,
13748 .operands = &[_]Operand{
13749 .{ .kind = .IdRef, .quantifier = .required },
13750 .{ .kind = .IdRef, .quantifier = .required },
13751 },
13752 },
13753 .{
13754 .name = "s_min",
13755 .opcode = 158,
13756 .operands = &[_]Operand{
13757 .{ .kind = .IdRef, .quantifier = .required },
13758 .{ .kind = .IdRef, .quantifier = .required },
13759 },
13760 },
13761 .{
13762 .name = "u_min",
13763 .opcode = 159,
13764 .operands = &[_]Operand{
13765 .{ .kind = .IdRef, .quantifier = .required },
13766 .{ .kind = .IdRef, .quantifier = .required },
13767 },
13768 },
13769 .{
13770 .name = "s_mul_hi",
13771 .opcode = 160,
13772 .operands = &[_]Operand{
13773 .{ .kind = .IdRef, .quantifier = .required },
13774 .{ .kind = .IdRef, .quantifier = .required },
13775 },
13776 },
13777 .{
13778 .name = "rotate",
13779 .opcode = 161,
13780 .operands = &[_]Operand{
13781 .{ .kind = .IdRef, .quantifier = .required },
13782 .{ .kind = .IdRef, .quantifier = .required },
13783 },
13784 },
13785 .{
13786 .name = "s_sub_sat",
13787 .opcode = 162,
13788 .operands = &[_]Operand{
13789 .{ .kind = .IdRef, .quantifier = .required },
13790 .{ .kind = .IdRef, .quantifier = .required },
13791 },
13792 },
13793 .{
13794 .name = "u_sub_sat",
13795 .opcode = 163,
13796 .operands = &[_]Operand{
13797 .{ .kind = .IdRef, .quantifier = .required },
13798 .{ .kind = .IdRef, .quantifier = .required },
13799 },
13800 },
13801 .{
13802 .name = "u_upsample",
13803 .opcode = 164,
13804 .operands = &[_]Operand{
13805 .{ .kind = .IdRef, .quantifier = .required },
13806 .{ .kind = .IdRef, .quantifier = .required },
13807 },
13808 },
13809 .{
13810 .name = "s_upsample",
13811 .opcode = 165,
13812 .operands = &[_]Operand{
13813 .{ .kind = .IdRef, .quantifier = .required },
13814 .{ .kind = .IdRef, .quantifier = .required },
13815 },
13816 },
13817 .{
13818 .name = "popcount",
13819 .opcode = 166,
13820 .operands = &[_]Operand{
13821 .{ .kind = .IdRef, .quantifier = .required },
13822 },
13823 },
13824 .{
13825 .name = "s_mad24",
13826 .opcode = 167,
13827 .operands = &[_]Operand{
13828 .{ .kind = .IdRef, .quantifier = .required },
13829 .{ .kind = .IdRef, .quantifier = .required },
13830 .{ .kind = .IdRef, .quantifier = .required },
13831 },
13832 },
13833 .{
13834 .name = "u_mad24",
13835 .opcode = 168,
13836 .operands = &[_]Operand{
13837 .{ .kind = .IdRef, .quantifier = .required },
13838 .{ .kind = .IdRef, .quantifier = .required },
13839 .{ .kind = .IdRef, .quantifier = .required },
13840 },
13841 },
13842 .{
13843 .name = "s_mul24",
13844 .opcode = 169,
13845 .operands = &[_]Operand{
13846 .{ .kind = .IdRef, .quantifier = .required },
13847 .{ .kind = .IdRef, .quantifier = .required },
13848 },
13849 },
13850 .{
13851 .name = "u_mul24",
13852 .opcode = 170,
13853 .operands = &[_]Operand{
13854 .{ .kind = .IdRef, .quantifier = .required },
13855 .{ .kind = .IdRef, .quantifier = .required },
13856 },
13857 },
13858 .{
13859 .name = "vloadn",
13860 .opcode = 171,
13861 .operands = &[_]Operand{
13862 .{ .kind = .IdRef, .quantifier = .required },
13863 .{ .kind = .IdRef, .quantifier = .required },
13864 .{ .kind = .LiteralInteger, .quantifier = .required },
13865 },
13866 },
13867 .{
13868 .name = "vstoren",
13869 .opcode = 172,
13870 .operands = &[_]Operand{
13871 .{ .kind = .IdRef, .quantifier = .required },
13872 .{ .kind = .IdRef, .quantifier = .required },
13873 .{ .kind = .IdRef, .quantifier = .required },
13874 },
13875 },
13876 .{
13877 .name = "vload_half",
13878 .opcode = 173,
13879 .operands = &[_]Operand{
13880 .{ .kind = .IdRef, .quantifier = .required },
13881 .{ .kind = .IdRef, .quantifier = .required },
13882 },
13883 },
13884 .{
13885 .name = "vload_halfn",
13886 .opcode = 174,
13887 .operands = &[_]Operand{
13888 .{ .kind = .IdRef, .quantifier = .required },
13889 .{ .kind = .IdRef, .quantifier = .required },
13890 .{ .kind = .LiteralInteger, .quantifier = .required },
13891 },
13892 },
13893 .{
13894 .name = "vstore_half",
13895 .opcode = 175,
13896 .operands = &[_]Operand{
13897 .{ .kind = .IdRef, .quantifier = .required },
13898 .{ .kind = .IdRef, .quantifier = .required },
13899 .{ .kind = .IdRef, .quantifier = .required },
13900 },
13901 },
13902 .{
13903 .name = "vstore_half_r",
13904 .opcode = 176,
13905 .operands = &[_]Operand{
13906 .{ .kind = .IdRef, .quantifier = .required },
13907 .{ .kind = .IdRef, .quantifier = .required },
13908 .{ .kind = .IdRef, .quantifier = .required },
13909 .{ .kind = .FPRoundingMode, .quantifier = .required },
13910 },
13911 },
13912 .{
13913 .name = "vstore_halfn",
13914 .opcode = 177,
13915 .operands = &[_]Operand{
13916 .{ .kind = .IdRef, .quantifier = .required },
13917 .{ .kind = .IdRef, .quantifier = .required },
13918 .{ .kind = .IdRef, .quantifier = .required },
13919 },
13920 },
13921 .{
13922 .name = "vstore_halfn_r",
13923 .opcode = 178,
13924 .operands = &[_]Operand{
13925 .{ .kind = .IdRef, .quantifier = .required },
13926 .{ .kind = .IdRef, .quantifier = .required },
13927 .{ .kind = .IdRef, .quantifier = .required },
13928 .{ .kind = .FPRoundingMode, .quantifier = .required },
13929 },
13930 },
13931 .{
13932 .name = "vloada_halfn",
13933 .opcode = 179,
13934 .operands = &[_]Operand{
13935 .{ .kind = .IdRef, .quantifier = .required },
13936 .{ .kind = .IdRef, .quantifier = .required },
13937 .{ .kind = .LiteralInteger, .quantifier = .required },
13938 },
13939 },
13940 .{
13941 .name = "vstorea_halfn",
13942 .opcode = 180,
13943 .operands = &[_]Operand{
13944 .{ .kind = .IdRef, .quantifier = .required },
13945 .{ .kind = .IdRef, .quantifier = .required },
13946 .{ .kind = .IdRef, .quantifier = .required },
13947 },
13948 },
13949 .{
13950 .name = "vstorea_halfn_r",
13951 .opcode = 181,
13952 .operands = &[_]Operand{
13953 .{ .kind = .IdRef, .quantifier = .required },
13954 .{ .kind = .IdRef, .quantifier = .required },
13955 .{ .kind = .IdRef, .quantifier = .required },
13956 .{ .kind = .FPRoundingMode, .quantifier = .required },
13957 },
13958 },
13959 .{
13960 .name = "shuffle",
13961 .opcode = 182,
13962 .operands = &[_]Operand{
13963 .{ .kind = .IdRef, .quantifier = .required },
13964 .{ .kind = .IdRef, .quantifier = .required },
13965 },
13966 },
13967 .{
13968 .name = "shuffle2",
13969 .opcode = 183,
13970 .operands = &[_]Operand{
13971 .{ .kind = .IdRef, .quantifier = .required },
13972 .{ .kind = .IdRef, .quantifier = .required },
13973 .{ .kind = .IdRef, .quantifier = .required },
13974 },
13975 },
13976 .{
13977 .name = "printf",
13978 .opcode = 184,
13979 .operands = &[_]Operand{
13980 .{ .kind = .IdRef, .quantifier = .required },
13981 .{ .kind = .IdRef, .quantifier = .variadic },
13982 },
13983 },
13984 .{
13985 .name = "prefetch",
13986 .opcode = 185,
13987 .operands = &[_]Operand{
13988 .{ .kind = .IdRef, .quantifier = .required },
13989 .{ .kind = .IdRef, .quantifier = .required },
13990 },
13991 },
13992 .{
13993 .name = "bitselect",
13994 .opcode = 186,
13995 .operands = &[_]Operand{
13996 .{ .kind = .IdRef, .quantifier = .required },
13997 .{ .kind = .IdRef, .quantifier = .required },
13998 .{ .kind = .IdRef, .quantifier = .required },
13999 },
14000 },
14001 .{
14002 .name = "select",
14003 .opcode = 187,
14004 .operands = &[_]Operand{
14005 .{ .kind = .IdRef, .quantifier = .required },
14006 .{ .kind = .IdRef, .quantifier = .required },
14007 .{ .kind = .IdRef, .quantifier = .required },
14008 },
14009 },
14010 .{
14011 .name = "u_abs",
14012 .opcode = 201,
14013 .operands = &[_]Operand{
14014 .{ .kind = .IdRef, .quantifier = .required },
14015 },
14016 },
14017 .{
14018 .name = "u_abs_diff",
14019 .opcode = 202,
14020 .operands = &[_]Operand{
14021 .{ .kind = .IdRef, .quantifier = .required },
14022 .{ .kind = .IdRef, .quantifier = .required },
14023 },
14024 },
14025 .{
14026 .name = "u_mul_hi",
14027 .opcode = 203,
14028 .operands = &[_]Operand{
14029 .{ .kind = .IdRef, .quantifier = .required },
14030 .{ .kind = .IdRef, .quantifier = .required },
14031 },
14032 },
14033 .{
14034 .name = "u_mad_hi",
14035 .opcode = 204,
14036 .operands = &[_]Operand{
14037 .{ .kind = .IdRef, .quantifier = .required },
14038 .{ .kind = .IdRef, .quantifier = .required },
14039 .{ .kind = .IdRef, .quantifier = .required },
14040 },
14041 },
14042 },
14043 .@"GLSL.std.450" => &[_]Instruction{
14044 .{
14045 .name = "Round",
14046 .opcode = 1,
14047 .operands = &[_]Operand{
14048 .{ .kind = .IdRef, .quantifier = .required },
14049 },
14050 },
14051 .{
14052 .name = "RoundEven",
14053 .opcode = 2,
14054 .operands = &[_]Operand{
14055 .{ .kind = .IdRef, .quantifier = .required },
14056 },
14057 },
14058 .{
14059 .name = "Trunc",
14060 .opcode = 3,
14061 .operands = &[_]Operand{
14062 .{ .kind = .IdRef, .quantifier = .required },
14063 },
14064 },
14065 .{
14066 .name = "FAbs",
14067 .opcode = 4,
14068 .operands = &[_]Operand{
14069 .{ .kind = .IdRef, .quantifier = .required },
14070 },
14071 },
14072 .{
14073 .name = "SAbs",
14074 .opcode = 5,
14075 .operands = &[_]Operand{
14076 .{ .kind = .IdRef, .quantifier = .required },
14077 },
14078 },
14079 .{
14080 .name = "FSign",
14081 .opcode = 6,
14082 .operands = &[_]Operand{
14083 .{ .kind = .IdRef, .quantifier = .required },
14084 },
14085 },
14086 .{
14087 .name = "SSign",
14088 .opcode = 7,
14089 .operands = &[_]Operand{
14090 .{ .kind = .IdRef, .quantifier = .required },
14091 },
14092 },
14093 .{
14094 .name = "Floor",
14095 .opcode = 8,
14096 .operands = &[_]Operand{
14097 .{ .kind = .IdRef, .quantifier = .required },
14098 },
14099 },
14100 .{
14101 .name = "Ceil",
14102 .opcode = 9,
14103 .operands = &[_]Operand{
14104 .{ .kind = .IdRef, .quantifier = .required },
14105 },
14106 },
14107 .{
14108 .name = "Fract",
14109 .opcode = 10,
14110 .operands = &[_]Operand{
14111 .{ .kind = .IdRef, .quantifier = .required },
14112 },
14113 },
14114 .{
14115 .name = "Radians",
14116 .opcode = 11,
14117 .operands = &[_]Operand{
14118 .{ .kind = .IdRef, .quantifier = .required },
14119 },
14120 },
14121 .{
14122 .name = "Degrees",
14123 .opcode = 12,
14124 .operands = &[_]Operand{
14125 .{ .kind = .IdRef, .quantifier = .required },
14126 },
14127 },
14128 .{
14129 .name = "Sin",
14130 .opcode = 13,
14131 .operands = &[_]Operand{
14132 .{ .kind = .IdRef, .quantifier = .required },
14133 },
14134 },
14135 .{
14136 .name = "Cos",
14137 .opcode = 14,
14138 .operands = &[_]Operand{
14139 .{ .kind = .IdRef, .quantifier = .required },
14140 },
14141 },
14142 .{
14143 .name = "Tan",
14144 .opcode = 15,
14145 .operands = &[_]Operand{
14146 .{ .kind = .IdRef, .quantifier = .required },
14147 },
14148 },
14149 .{
14150 .name = "Asin",
14151 .opcode = 16,
14152 .operands = &[_]Operand{
14153 .{ .kind = .IdRef, .quantifier = .required },
14154 },
14155 },
14156 .{
14157 .name = "Acos",
14158 .opcode = 17,
14159 .operands = &[_]Operand{
14160 .{ .kind = .IdRef, .quantifier = .required },
14161 },
14162 },
14163 .{
14164 .name = "Atan",
14165 .opcode = 18,
14166 .operands = &[_]Operand{
14167 .{ .kind = .IdRef, .quantifier = .required },
14168 },
14169 },
14170 .{
14171 .name = "Sinh",
14172 .opcode = 19,
14173 .operands = &[_]Operand{
14174 .{ .kind = .IdRef, .quantifier = .required },
14175 },
14176 },
14177 .{
14178 .name = "Cosh",
14179 .opcode = 20,
14180 .operands = &[_]Operand{
14181 .{ .kind = .IdRef, .quantifier = .required },
14182 },
14183 },
14184 .{
14185 .name = "Tanh",
14186 .opcode = 21,
14187 .operands = &[_]Operand{
14188 .{ .kind = .IdRef, .quantifier = .required },
14189 },
14190 },
14191 .{
14192 .name = "Asinh",
14193 .opcode = 22,
14194 .operands = &[_]Operand{
14195 .{ .kind = .IdRef, .quantifier = .required },
14196 },
14197 },
14198 .{
14199 .name = "Acosh",
14200 .opcode = 23,
14201 .operands = &[_]Operand{
14202 .{ .kind = .IdRef, .quantifier = .required },
14203 },
14204 },
14205 .{
14206 .name = "Atanh",
14207 .opcode = 24,
14208 .operands = &[_]Operand{
14209 .{ .kind = .IdRef, .quantifier = .required },
14210 },
14211 },
14212 .{
14213 .name = "Atan2",
14214 .opcode = 25,
14215 .operands = &[_]Operand{
14216 .{ .kind = .IdRef, .quantifier = .required },
14217 .{ .kind = .IdRef, .quantifier = .required },
14218 },
14219 },
14220 .{
14221 .name = "Pow",
14222 .opcode = 26,
14223 .operands = &[_]Operand{
14224 .{ .kind = .IdRef, .quantifier = .required },
14225 .{ .kind = .IdRef, .quantifier = .required },
14226 },
14227 },
14228 .{
14229 .name = "Exp",
14230 .opcode = 27,
14231 .operands = &[_]Operand{
14232 .{ .kind = .IdRef, .quantifier = .required },
14233 },
14234 },
14235 .{
14236 .name = "Log",
14237 .opcode = 28,
14238 .operands = &[_]Operand{
14239 .{ .kind = .IdRef, .quantifier = .required },
14240 },
14241 },
14242 .{
14243 .name = "Exp2",
14244 .opcode = 29,
14245 .operands = &[_]Operand{
14246 .{ .kind = .IdRef, .quantifier = .required },
14247 },
14248 },
14249 .{
14250 .name = "Log2",
14251 .opcode = 30,
14252 .operands = &[_]Operand{
14253 .{ .kind = .IdRef, .quantifier = .required },
14254 },
14255 },
14256 .{
14257 .name = "Sqrt",
14258 .opcode = 31,
14259 .operands = &[_]Operand{
14260 .{ .kind = .IdRef, .quantifier = .required },
14261 },
14262 },
14263 .{
14264 .name = "InverseSqrt",
14265 .opcode = 32,
14266 .operands = &[_]Operand{
14267 .{ .kind = .IdRef, .quantifier = .required },
14268 },
14269 },
14270 .{
14271 .name = "Determinant",
14272 .opcode = 33,
14273 .operands = &[_]Operand{
14274 .{ .kind = .IdRef, .quantifier = .required },
14275 },
14276 },
14277 .{
14278 .name = "MatrixInverse",
14279 .opcode = 34,
14280 .operands = &[_]Operand{
14281 .{ .kind = .IdRef, .quantifier = .required },
14282 },
14283 },
14284 .{
14285 .name = "Modf",
14286 .opcode = 35,
14287 .operands = &[_]Operand{
14288 .{ .kind = .IdRef, .quantifier = .required },
14289 .{ .kind = .IdRef, .quantifier = .required },
14290 },
14291 },
14292 .{
14293 .name = "ModfStruct",
14294 .opcode = 36,
14295 .operands = &[_]Operand{
14296 .{ .kind = .IdRef, .quantifier = .required },
14297 },
14298 },
14299 .{
14300 .name = "FMin",
14301 .opcode = 37,
14302 .operands = &[_]Operand{
14303 .{ .kind = .IdRef, .quantifier = .required },
14304 .{ .kind = .IdRef, .quantifier = .required },
14305 },
14306 },
14307 .{
14308 .name = "UMin",
14309 .opcode = 38,
14310 .operands = &[_]Operand{
14311 .{ .kind = .IdRef, .quantifier = .required },
14312 .{ .kind = .IdRef, .quantifier = .required },
14313 },
14314 },
14315 .{
14316 .name = "SMin",
14317 .opcode = 39,
14318 .operands = &[_]Operand{
14319 .{ .kind = .IdRef, .quantifier = .required },
14320 .{ .kind = .IdRef, .quantifier = .required },
14321 },
14322 },
14323 .{
14324 .name = "FMax",
14325 .opcode = 40,
14326 .operands = &[_]Operand{
14327 .{ .kind = .IdRef, .quantifier = .required },
14328 .{ .kind = .IdRef, .quantifier = .required },
14329 },
14330 },
14331 .{
14332 .name = "UMax",
14333 .opcode = 41,
14334 .operands = &[_]Operand{
14335 .{ .kind = .IdRef, .quantifier = .required },
14336 .{ .kind = .IdRef, .quantifier = .required },
14337 },
14338 },
14339 .{
14340 .name = "SMax",
14341 .opcode = 42,
14342 .operands = &[_]Operand{
14343 .{ .kind = .IdRef, .quantifier = .required },
14344 .{ .kind = .IdRef, .quantifier = .required },
14345 },
14346 },
14347 .{
14348 .name = "FClamp",
14349 .opcode = 43,
14350 .operands = &[_]Operand{
14351 .{ .kind = .IdRef, .quantifier = .required },
14352 .{ .kind = .IdRef, .quantifier = .required },
14353 .{ .kind = .IdRef, .quantifier = .required },
14354 },
14355 },
14356 .{
14357 .name = "UClamp",
14358 .opcode = 44,
14359 .operands = &[_]Operand{
14360 .{ .kind = .IdRef, .quantifier = .required },
14361 .{ .kind = .IdRef, .quantifier = .required },
14362 .{ .kind = .IdRef, .quantifier = .required },
14363 },
14364 },
14365 .{
14366 .name = "SClamp",
14367 .opcode = 45,
14368 .operands = &[_]Operand{
14369 .{ .kind = .IdRef, .quantifier = .required },
14370 .{ .kind = .IdRef, .quantifier = .required },
14371 .{ .kind = .IdRef, .quantifier = .required },
14372 },
14373 },
14374 .{
14375 .name = "FMix",
14376 .opcode = 46,
14377 .operands = &[_]Operand{
14378 .{ .kind = .IdRef, .quantifier = .required },
14379 .{ .kind = .IdRef, .quantifier = .required },
14380 .{ .kind = .IdRef, .quantifier = .required },
14381 },
14382 },
14383 .{
14384 .name = "IMix",
14385 .opcode = 47,
14386 .operands = &[_]Operand{
14387 .{ .kind = .IdRef, .quantifier = .required },
14388 .{ .kind = .IdRef, .quantifier = .required },
14389 .{ .kind = .IdRef, .quantifier = .required },
14390 },
14391 },
14392 .{
14393 .name = "Step",
14394 .opcode = 48,
14395 .operands = &[_]Operand{
14396 .{ .kind = .IdRef, .quantifier = .required },
14397 .{ .kind = .IdRef, .quantifier = .required },
14398 },
14399 },
14400 .{
14401 .name = "SmoothStep",
14402 .opcode = 49,
14403 .operands = &[_]Operand{
14404 .{ .kind = .IdRef, .quantifier = .required },
14405 .{ .kind = .IdRef, .quantifier = .required },
14406 .{ .kind = .IdRef, .quantifier = .required },
14407 },
14408 },
14409 .{
14410 .name = "Fma",
14411 .opcode = 50,
14412 .operands = &[_]Operand{
14413 .{ .kind = .IdRef, .quantifier = .required },
14414 .{ .kind = .IdRef, .quantifier = .required },
14415 .{ .kind = .IdRef, .quantifier = .required },
14416 },
14417 },
14418 .{
14419 .name = "Frexp",
14420 .opcode = 51,
14421 .operands = &[_]Operand{
14422 .{ .kind = .IdRef, .quantifier = .required },
14423 .{ .kind = .IdRef, .quantifier = .required },
14424 },
14425 },
14426 .{
14427 .name = "FrexpStruct",
14428 .opcode = 52,
14429 .operands = &[_]Operand{
14430 .{ .kind = .IdRef, .quantifier = .required },
14431 },
14432 },
14433 .{
14434 .name = "Ldexp",
14435 .opcode = 53,
14436 .operands = &[_]Operand{
14437 .{ .kind = .IdRef, .quantifier = .required },
14438 .{ .kind = .IdRef, .quantifier = .required },
14439 },
14440 },
14441 .{
14442 .name = "PackSnorm4x8",
14443 .opcode = 54,
14444 .operands = &[_]Operand{
14445 .{ .kind = .IdRef, .quantifier = .required },
14446 },
14447 },
14448 .{
14449 .name = "PackUnorm4x8",
14450 .opcode = 55,
14451 .operands = &[_]Operand{
14452 .{ .kind = .IdRef, .quantifier = .required },
14453 },
14454 },
14455 .{
14456 .name = "PackSnorm2x16",
14457 .opcode = 56,
14458 .operands = &[_]Operand{
14459 .{ .kind = .IdRef, .quantifier = .required },
14460 },
14461 },
14462 .{
14463 .name = "PackUnorm2x16",
14464 .opcode = 57,
14465 .operands = &[_]Operand{
14466 .{ .kind = .IdRef, .quantifier = .required },
14467 },
14468 },
14469 .{
14470 .name = "PackHalf2x16",
14471 .opcode = 58,
14472 .operands = &[_]Operand{
14473 .{ .kind = .IdRef, .quantifier = .required },
14474 },
14475 },
14476 .{
14477 .name = "PackDouble2x32",
14478 .opcode = 59,
14479 .operands = &[_]Operand{
14480 .{ .kind = .IdRef, .quantifier = .required },
14481 },
14482 },
14483 .{
14484 .name = "UnpackSnorm2x16",
14485 .opcode = 60,
14486 .operands = &[_]Operand{
14487 .{ .kind = .IdRef, .quantifier = .required },
14488 },
14489 },
14490 .{
14491 .name = "UnpackUnorm2x16",
14492 .opcode = 61,
14493 .operands = &[_]Operand{
14494 .{ .kind = .IdRef, .quantifier = .required },
14495 },
14496 },
14497 .{
14498 .name = "UnpackHalf2x16",
14499 .opcode = 62,
14500 .operands = &[_]Operand{
14501 .{ .kind = .IdRef, .quantifier = .required },
14502 },
14503 },
14504 .{
14505 .name = "UnpackSnorm4x8",
14506 .opcode = 63,
14507 .operands = &[_]Operand{
14508 .{ .kind = .IdRef, .quantifier = .required },
14509 },
14510 },
14511 .{
14512 .name = "UnpackUnorm4x8",
14513 .opcode = 64,
14514 .operands = &[_]Operand{
14515 .{ .kind = .IdRef, .quantifier = .required },
14516 },
14517 },
14518 .{
14519 .name = "UnpackDouble2x32",
14520 .opcode = 65,
14521 .operands = &[_]Operand{
14522 .{ .kind = .IdRef, .quantifier = .required },
14523 },
14524 },
14525 .{
14526 .name = "Length",
14527 .opcode = 66,
14528 .operands = &[_]Operand{
14529 .{ .kind = .IdRef, .quantifier = .required },
14530 },
14531 },
14532 .{
14533 .name = "Distance",
14534 .opcode = 67,
14535 .operands = &[_]Operand{
14536 .{ .kind = .IdRef, .quantifier = .required },
14537 .{ .kind = .IdRef, .quantifier = .required },
14538 },
14539 },
14540 .{
14541 .name = "Cross",
14542 .opcode = 68,
14543 .operands = &[_]Operand{
14544 .{ .kind = .IdRef, .quantifier = .required },
14545 .{ .kind = .IdRef, .quantifier = .required },
14546 },
14547 },
14548 .{
14549 .name = "Normalize",
14550 .opcode = 69,
14551 .operands = &[_]Operand{
14552 .{ .kind = .IdRef, .quantifier = .required },
14553 },
14554 },
14555 .{
14556 .name = "FaceForward",
14557 .opcode = 70,
14558 .operands = &[_]Operand{
14559 .{ .kind = .IdRef, .quantifier = .required },
14560 .{ .kind = .IdRef, .quantifier = .required },
14561 .{ .kind = .IdRef, .quantifier = .required },
14562 },
14563 },
14564 .{
14565 .name = "Reflect",
14566 .opcode = 71,
14567 .operands = &[_]Operand{
14568 .{ .kind = .IdRef, .quantifier = .required },
14569 .{ .kind = .IdRef, .quantifier = .required },
14570 },
14571 },
14572 .{
14573 .name = "Refract",
14574 .opcode = 72,
14575 .operands = &[_]Operand{
14576 .{ .kind = .IdRef, .quantifier = .required },
14577 .{ .kind = .IdRef, .quantifier = .required },
14578 .{ .kind = .IdRef, .quantifier = .required },
14579 },
14580 },
14581 .{
14582 .name = "FindILsb",
14583 .opcode = 73,
14584 .operands = &[_]Operand{
14585 .{ .kind = .IdRef, .quantifier = .required },
14586 },
14587 },
14588 .{
14589 .name = "FindSMsb",
14590 .opcode = 74,
14591 .operands = &[_]Operand{
14592 .{ .kind = .IdRef, .quantifier = .required },
14593 },
14594 },
14595 .{
14596 .name = "FindUMsb",
14597 .opcode = 75,
14598 .operands = &[_]Operand{
14599 .{ .kind = .IdRef, .quantifier = .required },
14600 },
14601 },
14602 .{
14603 .name = "InterpolateAtCentroid",
14604 .opcode = 76,
14605 .operands = &[_]Operand{
14606 .{ .kind = .IdRef, .quantifier = .required },
14607 },
14608 },
14609 .{
14610 .name = "InterpolateAtSample",
14611 .opcode = 77,
14612 .operands = &[_]Operand{
14613 .{ .kind = .IdRef, .quantifier = .required },
14614 .{ .kind = .IdRef, .quantifier = .required },
14615 },
14616 },
14617 .{
14618 .name = "InterpolateAtOffset",
14619 .opcode = 78,
14620 .operands = &[_]Operand{
14621 .{ .kind = .IdRef, .quantifier = .required },
14622 .{ .kind = .IdRef, .quantifier = .required },
14623 },
14624 },
14625 .{
14626 .name = "NMin",
14627 .opcode = 79,
14628 .operands = &[_]Operand{
14629 .{ .kind = .IdRef, .quantifier = .required },
14630 .{ .kind = .IdRef, .quantifier = .required },
14631 },
14632 },
14633 .{
14634 .name = "NMax",
14635 .opcode = 80,
14636 .operands = &[_]Operand{
14637 .{ .kind = .IdRef, .quantifier = .required },
14638 .{ .kind = .IdRef, .quantifier = .required },
14639 },
14640 },
14641 .{
14642 .name = "NClamp",
14643 .opcode = 81,
14644 .operands = &[_]Operand{
14645 .{ .kind = .IdRef, .quantifier = .required },
14646 .{ .kind = .IdRef, .quantifier = .required },
14647 .{ .kind = .IdRef, .quantifier = .required },
14648 },
14649 },
14650 },
14651 .@"OpenCL.DebugInfo.100" => &[_]Instruction{
14652 .{
14653 .name = "DebugInfoNone",
14654 .opcode = 0,
14655 .operands = &[_]Operand{},
14656 },
14657 .{
14658 .name = "DebugCompilationUnit",
14659 .opcode = 1,
14660 .operands = &[_]Operand{
14661 .{ .kind = .LiteralInteger, .quantifier = .required },
14662 .{ .kind = .LiteralInteger, .quantifier = .required },
14663 .{ .kind = .IdRef, .quantifier = .required },
14664 .{ .kind = .SourceLanguage, .quantifier = .required },
14665 },
14666 },
14667 .{
14668 .name = "DebugTypeBasic",
14669 .opcode = 2,
14670 .operands = &[_]Operand{
14671 .{ .kind = .IdRef, .quantifier = .required },
14672 .{ .kind = .IdRef, .quantifier = .required },
14673 .{ .kind = .@"OpenCL.DebugInfo.100.DebugBaseTypeAttributeEncoding", .quantifier = .required },
14674 },
14675 },
14676 .{
14677 .name = "DebugTypePointer",
14678 .opcode = 3,
14679 .operands = &[_]Operand{
14680 .{ .kind = .IdRef, .quantifier = .required },
14681 .{ .kind = .StorageClass, .quantifier = .required },
14682 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14683 },
14684 },
14685 .{
14686 .name = "DebugTypeQualifier",
14687 .opcode = 4,
14688 .operands = &[_]Operand{
14689 .{ .kind = .IdRef, .quantifier = .required },
14690 .{ .kind = .@"OpenCL.DebugInfo.100.DebugTypeQualifier", .quantifier = .required },
14691 },
14692 },
14693 .{
14694 .name = "DebugTypeArray",
14695 .opcode = 5,
14696 .operands = &[_]Operand{
14697 .{ .kind = .IdRef, .quantifier = .required },
14698 .{ .kind = .IdRef, .quantifier = .variadic },
14699 },
14700 },
14701 .{
14702 .name = "DebugTypeVector",
14703 .opcode = 6,
14704 .operands = &[_]Operand{
14705 .{ .kind = .IdRef, .quantifier = .required },
14706 .{ .kind = .LiteralInteger, .quantifier = .required },
14707 },
14708 },
14709 .{
14710 .name = "DebugTypedef",
14711 .opcode = 7,
14712 .operands = &[_]Operand{
14713 .{ .kind = .IdRef, .quantifier = .required },
14714 .{ .kind = .IdRef, .quantifier = .required },
14715 .{ .kind = .IdRef, .quantifier = .required },
14716 .{ .kind = .LiteralInteger, .quantifier = .required },
14717 .{ .kind = .LiteralInteger, .quantifier = .required },
14718 .{ .kind = .IdRef, .quantifier = .required },
14719 },
14720 },
14721 .{
14722 .name = "DebugTypeFunction",
14723 .opcode = 8,
14724 .operands = &[_]Operand{
14725 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14726 .{ .kind = .IdRef, .quantifier = .required },
14727 .{ .kind = .IdRef, .quantifier = .variadic },
14728 },
14729 },
14730 .{
14731 .name = "DebugTypeEnum",
14732 .opcode = 9,
14733 .operands = &[_]Operand{
14734 .{ .kind = .IdRef, .quantifier = .required },
14735 .{ .kind = .IdRef, .quantifier = .required },
14736 .{ .kind = .IdRef, .quantifier = .required },
14737 .{ .kind = .LiteralInteger, .quantifier = .required },
14738 .{ .kind = .LiteralInteger, .quantifier = .required },
14739 .{ .kind = .IdRef, .quantifier = .required },
14740 .{ .kind = .IdRef, .quantifier = .required },
14741 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14742 .{ .kind = .PairIdRefIdRef, .quantifier = .variadic },
14743 },
14744 },
14745 .{
14746 .name = "DebugTypeComposite",
14747 .opcode = 10,
14748 .operands = &[_]Operand{
14749 .{ .kind = .IdRef, .quantifier = .required },
14750 .{ .kind = .@"OpenCL.DebugInfo.100.DebugCompositeType", .quantifier = .required },
14751 .{ .kind = .IdRef, .quantifier = .required },
14752 .{ .kind = .LiteralInteger, .quantifier = .required },
14753 .{ .kind = .LiteralInteger, .quantifier = .required },
14754 .{ .kind = .IdRef, .quantifier = .required },
14755 .{ .kind = .IdRef, .quantifier = .required },
14756 .{ .kind = .IdRef, .quantifier = .required },
14757 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14758 .{ .kind = .IdRef, .quantifier = .variadic },
14759 },
14760 },
14761 .{
14762 .name = "DebugTypeMember",
14763 .opcode = 11,
14764 .operands = &[_]Operand{
14765 .{ .kind = .IdRef, .quantifier = .required },
14766 .{ .kind = .IdRef, .quantifier = .required },
14767 .{ .kind = .IdRef, .quantifier = .required },
14768 .{ .kind = .LiteralInteger, .quantifier = .required },
14769 .{ .kind = .LiteralInteger, .quantifier = .required },
14770 .{ .kind = .IdRef, .quantifier = .required },
14771 .{ .kind = .IdRef, .quantifier = .required },
14772 .{ .kind = .IdRef, .quantifier = .required },
14773 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14774 .{ .kind = .IdRef, .quantifier = .optional },
14775 },
14776 },
14777 .{
14778 .name = "DebugTypeInheritance",
14779 .opcode = 12,
14780 .operands = &[_]Operand{
14781 .{ .kind = .IdRef, .quantifier = .required },
14782 .{ .kind = .IdRef, .quantifier = .required },
14783 .{ .kind = .IdRef, .quantifier = .required },
14784 .{ .kind = .IdRef, .quantifier = .required },
14785 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14786 },
14787 },
14788 .{
14789 .name = "DebugTypePtrToMember",
14790 .opcode = 13,
14791 .operands = &[_]Operand{
14792 .{ .kind = .IdRef, .quantifier = .required },
14793 .{ .kind = .IdRef, .quantifier = .required },
14794 },
14795 },
14796 .{
14797 .name = "DebugTypeTemplate",
14798 .opcode = 14,
14799 .operands = &[_]Operand{
14800 .{ .kind = .IdRef, .quantifier = .required },
14801 .{ .kind = .IdRef, .quantifier = .variadic },
14802 },
14803 },
14804 .{
14805 .name = "DebugTypeTemplateParameter",
14806 .opcode = 15,
14807 .operands = &[_]Operand{
14808 .{ .kind = .IdRef, .quantifier = .required },
14809 .{ .kind = .IdRef, .quantifier = .required },
14810 .{ .kind = .IdRef, .quantifier = .required },
14811 .{ .kind = .IdRef, .quantifier = .required },
14812 .{ .kind = .LiteralInteger, .quantifier = .required },
14813 .{ .kind = .LiteralInteger, .quantifier = .required },
14814 },
14815 },
14816 .{
14817 .name = "DebugTypeTemplateTemplateParameter",
14818 .opcode = 16,
14819 .operands = &[_]Operand{
14820 .{ .kind = .IdRef, .quantifier = .required },
14821 .{ .kind = .IdRef, .quantifier = .required },
14822 .{ .kind = .IdRef, .quantifier = .required },
14823 .{ .kind = .LiteralInteger, .quantifier = .required },
14824 .{ .kind = .LiteralInteger, .quantifier = .required },
14825 },
14826 },
14827 .{
14828 .name = "DebugTypeTemplateParameterPack",
14829 .opcode = 17,
14830 .operands = &[_]Operand{
14831 .{ .kind = .IdRef, .quantifier = .required },
14832 .{ .kind = .IdRef, .quantifier = .required },
14833 .{ .kind = .LiteralInteger, .quantifier = .required },
14834 .{ .kind = .LiteralInteger, .quantifier = .required },
14835 .{ .kind = .IdRef, .quantifier = .variadic },
14836 },
14837 },
14838 .{
14839 .name = "DebugGlobalVariable",
14840 .opcode = 18,
14841 .operands = &[_]Operand{
14842 .{ .kind = .IdRef, .quantifier = .required },
14843 .{ .kind = .IdRef, .quantifier = .required },
14844 .{ .kind = .IdRef, .quantifier = .required },
14845 .{ .kind = .LiteralInteger, .quantifier = .required },
14846 .{ .kind = .LiteralInteger, .quantifier = .required },
14847 .{ .kind = .IdRef, .quantifier = .required },
14848 .{ .kind = .IdRef, .quantifier = .required },
14849 .{ .kind = .IdRef, .quantifier = .required },
14850 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14851 .{ .kind = .IdRef, .quantifier = .optional },
14852 },
14853 },
14854 .{
14855 .name = "DebugFunctionDeclaration",
14856 .opcode = 19,
14857 .operands = &[_]Operand{
14858 .{ .kind = .IdRef, .quantifier = .required },
14859 .{ .kind = .IdRef, .quantifier = .required },
14860 .{ .kind = .IdRef, .quantifier = .required },
14861 .{ .kind = .LiteralInteger, .quantifier = .required },
14862 .{ .kind = .LiteralInteger, .quantifier = .required },
14863 .{ .kind = .IdRef, .quantifier = .required },
14864 .{ .kind = .IdRef, .quantifier = .required },
14865 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14866 },
14867 },
14868 .{
14869 .name = "DebugFunction",
14870 .opcode = 20,
14871 .operands = &[_]Operand{
14872 .{ .kind = .IdRef, .quantifier = .required },
14873 .{ .kind = .IdRef, .quantifier = .required },
14874 .{ .kind = .IdRef, .quantifier = .required },
14875 .{ .kind = .LiteralInteger, .quantifier = .required },
14876 .{ .kind = .LiteralInteger, .quantifier = .required },
14877 .{ .kind = .IdRef, .quantifier = .required },
14878 .{ .kind = .IdRef, .quantifier = .required },
14879 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14880 .{ .kind = .LiteralInteger, .quantifier = .required },
14881 .{ .kind = .IdRef, .quantifier = .required },
14882 .{ .kind = .IdRef, .quantifier = .optional },
14883 },
14884 },
14885 .{
14886 .name = "DebugLexicalBlock",
14887 .opcode = 21,
14888 .operands = &[_]Operand{
14889 .{ .kind = .IdRef, .quantifier = .required },
14890 .{ .kind = .LiteralInteger, .quantifier = .required },
14891 .{ .kind = .LiteralInteger, .quantifier = .required },
14892 .{ .kind = .IdRef, .quantifier = .required },
14893 .{ .kind = .IdRef, .quantifier = .optional },
14894 },
14895 },
14896 .{
14897 .name = "DebugLexicalBlockDiscriminator",
14898 .opcode = 22,
14899 .operands = &[_]Operand{
14900 .{ .kind = .IdRef, .quantifier = .required },
14901 .{ .kind = .LiteralInteger, .quantifier = .required },
14902 .{ .kind = .IdRef, .quantifier = .required },
14903 },
14904 },
14905 .{
14906 .name = "DebugScope",
14907 .opcode = 23,
14908 .operands = &[_]Operand{
14909 .{ .kind = .IdRef, .quantifier = .required },
14910 .{ .kind = .IdRef, .quantifier = .optional },
14911 },
14912 },
14913 .{
14914 .name = "DebugNoScope",
14915 .opcode = 24,
14916 .operands = &[_]Operand{},
14917 },
14918 .{
14919 .name = "DebugInlinedAt",
14920 .opcode = 25,
14921 .operands = &[_]Operand{
14922 .{ .kind = .LiteralInteger, .quantifier = .required },
14923 .{ .kind = .IdRef, .quantifier = .required },
14924 .{ .kind = .IdRef, .quantifier = .optional },
14925 },
14926 },
14927 .{
14928 .name = "DebugLocalVariable",
14929 .opcode = 26,
14930 .operands = &[_]Operand{
14931 .{ .kind = .IdRef, .quantifier = .required },
14932 .{ .kind = .IdRef, .quantifier = .required },
14933 .{ .kind = .IdRef, .quantifier = .required },
14934 .{ .kind = .LiteralInteger, .quantifier = .required },
14935 .{ .kind = .LiteralInteger, .quantifier = .required },
14936 .{ .kind = .IdRef, .quantifier = .required },
14937 .{ .kind = .@"OpenCL.DebugInfo.100.DebugInfoFlags", .quantifier = .required },
14938 .{ .kind = .LiteralInteger, .quantifier = .optional },
14939 },
14940 },
14941 .{
14942 .name = "DebugInlinedVariable",
14943 .opcode = 27,
14944 .operands = &[_]Operand{
14945 .{ .kind = .IdRef, .quantifier = .required },
14946 .{ .kind = .IdRef, .quantifier = .required },
14947 },
14948 },
14949 .{
14950 .name = "DebugDeclare",
14951 .opcode = 28,
14952 .operands = &[_]Operand{
14953 .{ .kind = .IdRef, .quantifier = .required },
14954 .{ .kind = .IdRef, .quantifier = .required },
14955 .{ .kind = .IdRef, .quantifier = .required },
14956 },
14957 },
14958 .{
14959 .name = "DebugValue",
14960 .opcode = 29,
14961 .operands = &[_]Operand{
14962 .{ .kind = .IdRef, .quantifier = .required },
14963 .{ .kind = .IdRef, .quantifier = .required },
14964 .{ .kind = .IdRef, .quantifier = .required },
14965 .{ .kind = .IdRef, .quantifier = .variadic },
14966 },
14967 },
14968 .{
14969 .name = "DebugOperation",
14970 .opcode = 30,
14971 .operands = &[_]Operand{
14972 .{ .kind = .@"OpenCL.DebugInfo.100.DebugOperation", .quantifier = .required },
14973 .{ .kind = .LiteralInteger, .quantifier = .variadic },
14974 },
14975 },
14976 .{
14977 .name = "DebugExpression",
14978 .opcode = 31,
14979 .operands = &[_]Operand{
14980 .{ .kind = .IdRef, .quantifier = .variadic },
14981 },
14982 },
14983 .{
14984 .name = "DebugMacroDef",
14985 .opcode = 32,
14986 .operands = &[_]Operand{
14987 .{ .kind = .IdRef, .quantifier = .required },
14988 .{ .kind = .LiteralInteger, .quantifier = .required },
14989 .{ .kind = .IdRef, .quantifier = .required },
14990 .{ .kind = .IdRef, .quantifier = .optional },
14991 },
14992 },
14993 .{
14994 .name = "DebugMacroUndef",
14995 .opcode = 33,
14996 .operands = &[_]Operand{
14997 .{ .kind = .IdRef, .quantifier = .required },
14998 .{ .kind = .LiteralInteger, .quantifier = .required },
14999 .{ .kind = .IdRef, .quantifier = .required },
15000 },
15001 },
15002 .{
15003 .name = "DebugImportedEntity",
15004 .opcode = 34,
15005 .operands = &[_]Operand{
15006 .{ .kind = .IdRef, .quantifier = .required },
15007 .{ .kind = .@"OpenCL.DebugInfo.100.DebugImportedEntity", .quantifier = .required },
15008 .{ .kind = .IdRef, .quantifier = .required },
15009 .{ .kind = .IdRef, .quantifier = .required },
15010 .{ .kind = .LiteralInteger, .quantifier = .required },
15011 .{ .kind = .LiteralInteger, .quantifier = .required },
15012 .{ .kind = .IdRef, .quantifier = .required },
15013 },
15014 },
15015 .{
15016 .name = "DebugSource",
15017 .opcode = 35,
15018 .operands = &[_]Operand{
15019 .{ .kind = .IdRef, .quantifier = .required },
15020 .{ .kind = .IdRef, .quantifier = .optional },
15021 },
15022 },
15023 .{
15024 .name = "DebugModuleINTEL",
15025 .opcode = 36,
15026 .operands = &[_]Operand{
15027 .{ .kind = .IdRef, .quantifier = .required },
15028 .{ .kind = .IdRef, .quantifier = .required },
15029 .{ .kind = .IdRef, .quantifier = .required },
15030 .{ .kind = .LiteralInteger, .quantifier = .required },
15031 .{ .kind = .IdRef, .quantifier = .required },
15032 .{ .kind = .IdRef, .quantifier = .required },
15033 .{ .kind = .IdRef, .quantifier = .required },
15034 .{ .kind = .LiteralInteger, .quantifier = .required },
15035 },
15036 },
15037 },
15038 .SPV_AMD_shader_ballot => &[_]Instruction{
15039 .{
15040 .name = "SwizzleInvocationsAMD",
15041 .opcode = 1,
15042 .operands = &[_]Operand{
15043 .{ .kind = .IdRef, .quantifier = .required },
15044 .{ .kind = .IdRef, .quantifier = .required },
15045 },
15046 },
15047 .{
15048 .name = "SwizzleInvocationsMaskedAMD",
15049 .opcode = 2,
15050 .operands = &[_]Operand{
15051 .{ .kind = .IdRef, .quantifier = .required },
15052 .{ .kind = .IdRef, .quantifier = .required },
15053 },
15054 },
15055 .{
15056 .name = "WriteInvocationAMD",
15057 .opcode = 3,
15058 .operands = &[_]Operand{
15059 .{ .kind = .IdRef, .quantifier = .required },
15060 .{ .kind = .IdRef, .quantifier = .required },
15061 .{ .kind = .IdRef, .quantifier = .required },
15062 },
15063 },
15064 .{
15065 .name = "MbcntAMD",
15066 .opcode = 4,
15067 .operands = &[_]Operand{
15068 .{ .kind = .IdRef, .quantifier = .required },
15069 },
15070 },
15071 },
15072 .@"NonSemantic.Shader.DebugInfo.100" => &[_]Instruction{
15073 .{
15074 .name = "DebugInfoNone",
15075 .opcode = 0,
15076 .operands = &[_]Operand{},
15077 },
15078 .{
15079 .name = "DebugCompilationUnit",
15080 .opcode = 1,
15081 .operands = &[_]Operand{
15082 .{ .kind = .IdRef, .quantifier = .required },
15083 .{ .kind = .IdRef, .quantifier = .required },
15084 .{ .kind = .IdRef, .quantifier = .required },
15085 .{ .kind = .IdRef, .quantifier = .required },
15086 },
15087 },
15088 .{
15089 .name = "DebugTypeBasic",
15090 .opcode = 2,
15091 .operands = &[_]Operand{
15092 .{ .kind = .IdRef, .quantifier = .required },
15093 .{ .kind = .IdRef, .quantifier = .required },
15094 .{ .kind = .IdRef, .quantifier = .required },
15095 .{ .kind = .IdRef, .quantifier = .required },
15096 },
15097 },
15098 .{
15099 .name = "DebugTypePointer",
15100 .opcode = 3,
15101 .operands = &[_]Operand{
15102 .{ .kind = .IdRef, .quantifier = .required },
15103 .{ .kind = .IdRef, .quantifier = .required },
15104 .{ .kind = .IdRef, .quantifier = .required },
15105 },
15106 },
15107 .{
15108 .name = "DebugTypeQualifier",
15109 .opcode = 4,
15110 .operands = &[_]Operand{
15111 .{ .kind = .IdRef, .quantifier = .required },
15112 .{ .kind = .IdRef, .quantifier = .required },
15113 },
15114 },
15115 .{
15116 .name = "DebugTypeArray",
15117 .opcode = 5,
15118 .operands = &[_]Operand{
15119 .{ .kind = .IdRef, .quantifier = .required },
15120 .{ .kind = .IdRef, .quantifier = .variadic },
15121 },
15122 },
15123 .{
15124 .name = "DebugTypeVector",
15125 .opcode = 6,
15126 .operands = &[_]Operand{
15127 .{ .kind = .IdRef, .quantifier = .required },
15128 .{ .kind = .IdRef, .quantifier = .required },
15129 },
15130 },
15131 .{
15132 .name = "DebugTypedef",
15133 .opcode = 7,
15134 .operands = &[_]Operand{
15135 .{ .kind = .IdRef, .quantifier = .required },
15136 .{ .kind = .IdRef, .quantifier = .required },
15137 .{ .kind = .IdRef, .quantifier = .required },
15138 .{ .kind = .IdRef, .quantifier = .required },
15139 .{ .kind = .IdRef, .quantifier = .required },
15140 .{ .kind = .IdRef, .quantifier = .required },
15141 },
15142 },
15143 .{
15144 .name = "DebugTypeFunction",
15145 .opcode = 8,
15146 .operands = &[_]Operand{
15147 .{ .kind = .IdRef, .quantifier = .required },
15148 .{ .kind = .IdRef, .quantifier = .required },
15149 .{ .kind = .IdRef, .quantifier = .variadic },
15150 },
15151 },
15152 .{
15153 .name = "DebugTypeEnum",
15154 .opcode = 9,
15155 .operands = &[_]Operand{
15156 .{ .kind = .IdRef, .quantifier = .required },
15157 .{ .kind = .IdRef, .quantifier = .required },
15158 .{ .kind = .IdRef, .quantifier = .required },
15159 .{ .kind = .IdRef, .quantifier = .required },
15160 .{ .kind = .IdRef, .quantifier = .required },
15161 .{ .kind = .IdRef, .quantifier = .required },
15162 .{ .kind = .IdRef, .quantifier = .required },
15163 .{ .kind = .IdRef, .quantifier = .required },
15164 .{ .kind = .PairIdRefIdRef, .quantifier = .variadic },
15165 },
15166 },
15167 .{
15168 .name = "DebugTypeComposite",
15169 .opcode = 10,
15170 .operands = &[_]Operand{
15171 .{ .kind = .IdRef, .quantifier = .required },
15172 .{ .kind = .IdRef, .quantifier = .required },
15173 .{ .kind = .IdRef, .quantifier = .required },
15174 .{ .kind = .IdRef, .quantifier = .required },
15175 .{ .kind = .IdRef, .quantifier = .required },
15176 .{ .kind = .IdRef, .quantifier = .required },
15177 .{ .kind = .IdRef, .quantifier = .required },
15178 .{ .kind = .IdRef, .quantifier = .required },
15179 .{ .kind = .IdRef, .quantifier = .required },
15180 .{ .kind = .IdRef, .quantifier = .variadic },
15181 },
15182 },
15183 .{
15184 .name = "DebugTypeMember",
15185 .opcode = 11,
15186 .operands = &[_]Operand{
15187 .{ .kind = .IdRef, .quantifier = .required },
15188 .{ .kind = .IdRef, .quantifier = .required },
15189 .{ .kind = .IdRef, .quantifier = .required },
15190 .{ .kind = .IdRef, .quantifier = .required },
15191 .{ .kind = .IdRef, .quantifier = .required },
15192 .{ .kind = .IdRef, .quantifier = .required },
15193 .{ .kind = .IdRef, .quantifier = .required },
15194 .{ .kind = .IdRef, .quantifier = .required },
15195 .{ .kind = .IdRef, .quantifier = .optional },
15196 },
15197 },
15198 .{
15199 .name = "DebugTypeInheritance",
15200 .opcode = 12,
15201 .operands = &[_]Operand{
15202 .{ .kind = .IdRef, .quantifier = .required },
15203 .{ .kind = .IdRef, .quantifier = .required },
15204 .{ .kind = .IdRef, .quantifier = .required },
15205 .{ .kind = .IdRef, .quantifier = .required },
15206 },
15207 },
15208 .{
15209 .name = "DebugTypePtrToMember",
15210 .opcode = 13,
15211 .operands = &[_]Operand{
15212 .{ .kind = .IdRef, .quantifier = .required },
15213 .{ .kind = .IdRef, .quantifier = .required },
15214 },
15215 },
15216 .{
15217 .name = "DebugTypeTemplate",
15218 .opcode = 14,
15219 .operands = &[_]Operand{
15220 .{ .kind = .IdRef, .quantifier = .required },
15221 .{ .kind = .IdRef, .quantifier = .variadic },
15222 },
15223 },
15224 .{
15225 .name = "DebugTypeTemplateParameter",
15226 .opcode = 15,
15227 .operands = &[_]Operand{
15228 .{ .kind = .IdRef, .quantifier = .required },
15229 .{ .kind = .IdRef, .quantifier = .required },
15230 .{ .kind = .IdRef, .quantifier = .required },
15231 .{ .kind = .IdRef, .quantifier = .required },
15232 .{ .kind = .IdRef, .quantifier = .required },
15233 .{ .kind = .IdRef, .quantifier = .required },
15234 },
15235 },
15236 .{
15237 .name = "DebugTypeTemplateTemplateParameter",
15238 .opcode = 16,
15239 .operands = &[_]Operand{
15240 .{ .kind = .IdRef, .quantifier = .required },
15241 .{ .kind = .IdRef, .quantifier = .required },
15242 .{ .kind = .IdRef, .quantifier = .required },
15243 .{ .kind = .IdRef, .quantifier = .required },
15244 .{ .kind = .IdRef, .quantifier = .required },
15245 },
15246 },
15247 .{
15248 .name = "DebugTypeTemplateParameterPack",
15249 .opcode = 17,
15250 .operands = &[_]Operand{
15251 .{ .kind = .IdRef, .quantifier = .required },
15252 .{ .kind = .IdRef, .quantifier = .required },
15253 .{ .kind = .IdRef, .quantifier = .required },
15254 .{ .kind = .IdRef, .quantifier = .required },
15255 .{ .kind = .IdRef, .quantifier = .variadic },
15256 },
15257 },
15258 .{
15259 .name = "DebugGlobalVariable",
15260 .opcode = 18,
15261 .operands = &[_]Operand{
15262 .{ .kind = .IdRef, .quantifier = .required },
15263 .{ .kind = .IdRef, .quantifier = .required },
15264 .{ .kind = .IdRef, .quantifier = .required },
15265 .{ .kind = .IdRef, .quantifier = .required },
15266 .{ .kind = .IdRef, .quantifier = .required },
15267 .{ .kind = .IdRef, .quantifier = .required },
15268 .{ .kind = .IdRef, .quantifier = .required },
15269 .{ .kind = .IdRef, .quantifier = .required },
15270 .{ .kind = .IdRef, .quantifier = .required },
15271 .{ .kind = .IdRef, .quantifier = .optional },
15272 },
15273 },
15274 .{
15275 .name = "DebugFunctionDeclaration",
15276 .opcode = 19,
15277 .operands = &[_]Operand{
15278 .{ .kind = .IdRef, .quantifier = .required },
15279 .{ .kind = .IdRef, .quantifier = .required },
15280 .{ .kind = .IdRef, .quantifier = .required },
15281 .{ .kind = .IdRef, .quantifier = .required },
15282 .{ .kind = .IdRef, .quantifier = .required },
15283 .{ .kind = .IdRef, .quantifier = .required },
15284 .{ .kind = .IdRef, .quantifier = .required },
15285 .{ .kind = .IdRef, .quantifier = .required },
15286 },
15287 },
15288 .{
15289 .name = "DebugFunction",
15290 .opcode = 20,
15291 .operands = &[_]Operand{
15292 .{ .kind = .IdRef, .quantifier = .required },
15293 .{ .kind = .IdRef, .quantifier = .required },
15294 .{ .kind = .IdRef, .quantifier = .required },
15295 .{ .kind = .IdRef, .quantifier = .required },
15296 .{ .kind = .IdRef, .quantifier = .required },
15297 .{ .kind = .IdRef, .quantifier = .required },
15298 .{ .kind = .IdRef, .quantifier = .required },
15299 .{ .kind = .IdRef, .quantifier = .required },
15300 .{ .kind = .IdRef, .quantifier = .required },
15301 .{ .kind = .IdRef, .quantifier = .optional },
15302 },
15303 },
15304 .{
15305 .name = "DebugLexicalBlock",
15306 .opcode = 21,
15307 .operands = &[_]Operand{
15308 .{ .kind = .IdRef, .quantifier = .required },
15309 .{ .kind = .IdRef, .quantifier = .required },
15310 .{ .kind = .IdRef, .quantifier = .required },
15311 .{ .kind = .IdRef, .quantifier = .required },
15312 .{ .kind = .IdRef, .quantifier = .optional },
15313 },
15314 },
15315 .{
15316 .name = "DebugLexicalBlockDiscriminator",
15317 .opcode = 22,
15318 .operands = &[_]Operand{
15319 .{ .kind = .IdRef, .quantifier = .required },
15320 .{ .kind = .IdRef, .quantifier = .required },
15321 .{ .kind = .IdRef, .quantifier = .required },
15322 },
15323 },
15324 .{
15325 .name = "DebugScope",
15326 .opcode = 23,
15327 .operands = &[_]Operand{
15328 .{ .kind = .IdRef, .quantifier = .required },
15329 .{ .kind = .IdRef, .quantifier = .optional },
15330 },
15331 },
15332 .{
15333 .name = "DebugNoScope",
15334 .opcode = 24,
15335 .operands = &[_]Operand{},
15336 },
15337 .{
15338 .name = "DebugInlinedAt",
15339 .opcode = 25,
15340 .operands = &[_]Operand{
15341 .{ .kind = .IdRef, .quantifier = .required },
15342 .{ .kind = .IdRef, .quantifier = .required },
15343 .{ .kind = .IdRef, .quantifier = .optional },
15344 },
15345 },
15346 .{
15347 .name = "DebugLocalVariable",
15348 .opcode = 26,
15349 .operands = &[_]Operand{
15350 .{ .kind = .IdRef, .quantifier = .required },
15351 .{ .kind = .IdRef, .quantifier = .required },
15352 .{ .kind = .IdRef, .quantifier = .required },
15353 .{ .kind = .IdRef, .quantifier = .required },
15354 .{ .kind = .IdRef, .quantifier = .required },
15355 .{ .kind = .IdRef, .quantifier = .required },
15356 .{ .kind = .IdRef, .quantifier = .required },
15357 .{ .kind = .IdRef, .quantifier = .optional },
15358 },
15359 },
15360 .{
15361 .name = "DebugInlinedVariable",
15362 .opcode = 27,
15363 .operands = &[_]Operand{
15364 .{ .kind = .IdRef, .quantifier = .required },
15365 .{ .kind = .IdRef, .quantifier = .required },
15366 },
15367 },
15368 .{
15369 .name = "DebugDeclare",
15370 .opcode = 28,
15371 .operands = &[_]Operand{
15372 .{ .kind = .IdRef, .quantifier = .required },
15373 .{ .kind = .IdRef, .quantifier = .required },
15374 .{ .kind = .IdRef, .quantifier = .required },
15375 .{ .kind = .IdRef, .quantifier = .variadic },
15376 },
15377 },
15378 .{
15379 .name = "DebugValue",
15380 .opcode = 29,
15381 .operands = &[_]Operand{
15382 .{ .kind = .IdRef, .quantifier = .required },
15383 .{ .kind = .IdRef, .quantifier = .required },
15384 .{ .kind = .IdRef, .quantifier = .required },
15385 .{ .kind = .IdRef, .quantifier = .variadic },
15386 },
15387 },
15388 .{
15389 .name = "DebugOperation",
15390 .opcode = 30,
15391 .operands = &[_]Operand{
15392 .{ .kind = .IdRef, .quantifier = .required },
15393 .{ .kind = .IdRef, .quantifier = .variadic },
15394 },
15395 },
15396 .{
15397 .name = "DebugExpression",
15398 .opcode = 31,
15399 .operands = &[_]Operand{
15400 .{ .kind = .IdRef, .quantifier = .variadic },
15401 },
15402 },
15403 .{
15404 .name = "DebugMacroDef",
15405 .opcode = 32,
15406 .operands = &[_]Operand{
15407 .{ .kind = .IdRef, .quantifier = .required },
15408 .{ .kind = .IdRef, .quantifier = .required },
15409 .{ .kind = .IdRef, .quantifier = .required },
15410 .{ .kind = .IdRef, .quantifier = .optional },
15411 },
15412 },
15413 .{
15414 .name = "DebugMacroUndef",
15415 .opcode = 33,
15416 .operands = &[_]Operand{
15417 .{ .kind = .IdRef, .quantifier = .required },
15418 .{ .kind = .IdRef, .quantifier = .required },
15419 .{ .kind = .IdRef, .quantifier = .required },
15420 },
15421 },
15422 .{
15423 .name = "DebugImportedEntity",
15424 .opcode = 34,
15425 .operands = &[_]Operand{
15426 .{ .kind = .IdRef, .quantifier = .required },
15427 .{ .kind = .IdRef, .quantifier = .required },
15428 .{ .kind = .IdRef, .quantifier = .required },
15429 .{ .kind = .IdRef, .quantifier = .required },
15430 .{ .kind = .IdRef, .quantifier = .required },
15431 .{ .kind = .IdRef, .quantifier = .required },
15432 .{ .kind = .IdRef, .quantifier = .required },
15433 },
15434 },
15435 .{
15436 .name = "DebugSource",
15437 .opcode = 35,
15438 .operands = &[_]Operand{
15439 .{ .kind = .IdRef, .quantifier = .required },
15440 .{ .kind = .IdRef, .quantifier = .optional },
15441 },
15442 },
15443 .{
15444 .name = "DebugFunctionDefinition",
15445 .opcode = 101,
15446 .operands = &[_]Operand{
15447 .{ .kind = .IdRef, .quantifier = .required },
15448 .{ .kind = .IdRef, .quantifier = .required },
15449 },
15450 },
15451 .{
15452 .name = "DebugSourceContinued",
15453 .opcode = 102,
15454 .operands = &[_]Operand{
15455 .{ .kind = .IdRef, .quantifier = .required },
15456 },
15457 },
15458 .{
15459 .name = "DebugLine",
15460 .opcode = 103,
15461 .operands = &[_]Operand{
15462 .{ .kind = .IdRef, .quantifier = .required },
15463 .{ .kind = .IdRef, .quantifier = .required },
15464 .{ .kind = .IdRef, .quantifier = .required },
15465 .{ .kind = .IdRef, .quantifier = .required },
15466 .{ .kind = .IdRef, .quantifier = .required },
15467 },
15468 },
15469 .{
15470 .name = "DebugNoLine",
15471 .opcode = 104,
15472 .operands = &[_]Operand{},
15473 },
15474 .{
15475 .name = "DebugBuildIdentifier",
15476 .opcode = 105,
15477 .operands = &[_]Operand{
15478 .{ .kind = .IdRef, .quantifier = .required },
15479 .{ .kind = .IdRef, .quantifier = .required },
15480 },
15481 },
15482 .{
15483 .name = "DebugStoragePath",
15484 .opcode = 106,
15485 .operands = &[_]Operand{
15486 .{ .kind = .IdRef, .quantifier = .required },
15487 },
15488 },
15489 .{
15490 .name = "DebugEntryPoint",
15491 .opcode = 107,
15492 .operands = &[_]Operand{
15493 .{ .kind = .IdRef, .quantifier = .required },
15494 .{ .kind = .IdRef, .quantifier = .required },
15495 .{ .kind = .IdRef, .quantifier = .required },
15496 .{ .kind = .IdRef, .quantifier = .required },
15497 },
15498 },
15499 .{
15500 .name = "DebugTypeMatrix",
15501 .opcode = 108,
15502 .operands = &[_]Operand{
15503 .{ .kind = .IdRef, .quantifier = .required },
15504 .{ .kind = .IdRef, .quantifier = .required },
15505 .{ .kind = .IdRef, .quantifier = .required },
15506 },
15507 },
15508 },
15509 .@"NonSemantic.VkspReflection" => &[_]Instruction{
15510 .{
15511 .name = "Configuration",
15512 .opcode = 1,
15513 .operands = &[_]Operand{
15514 .{ .kind = .LiteralString, .quantifier = .required },
15515 .{ .kind = .LiteralInteger, .quantifier = .required },
15516 .{ .kind = .LiteralString, .quantifier = .required },
15517 .{ .kind = .LiteralString, .quantifier = .required },
15518 .{ .kind = .LiteralString, .quantifier = .required },
15519 .{ .kind = .LiteralInteger, .quantifier = .required },
15520 .{ .kind = .LiteralInteger, .quantifier = .required },
15521 .{ .kind = .LiteralInteger, .quantifier = .required },
15522 },
15523 },
15524 .{
15525 .name = "StartCounter",
15526 .opcode = 2,
15527 .operands = &[_]Operand{
15528 .{ .kind = .LiteralString, .quantifier = .required },
15529 },
15530 },
15531 .{
15532 .name = "StopCounter",
15533 .opcode = 3,
15534 .operands = &[_]Operand{
15535 .{ .kind = .IdRef, .quantifier = .required },
15536 },
15537 },
15538 .{
15539 .name = "PushConstants",
15540 .opcode = 4,
15541 .operands = &[_]Operand{
15542 .{ .kind = .LiteralInteger, .quantifier = .required },
15543 .{ .kind = .LiteralInteger, .quantifier = .required },
15544 .{ .kind = .LiteralString, .quantifier = .required },
15545 .{ .kind = .LiteralInteger, .quantifier = .required },
15546 },
15547 },
15548 .{
15549 .name = "SpecializationMapEntry",
15550 .opcode = 5,
15551 .operands = &[_]Operand{
15552 .{ .kind = .LiteralInteger, .quantifier = .required },
15553 .{ .kind = .LiteralInteger, .quantifier = .required },
15554 .{ .kind = .LiteralInteger, .quantifier = .required },
15555 },
15556 },
15557 .{
15558 .name = "DescriptorSetBuffer",
15559 .opcode = 6,
15560 .operands = &[_]Operand{
15561 .{ .kind = .LiteralInteger, .quantifier = .required },
15562 .{ .kind = .LiteralInteger, .quantifier = .required },
15563 .{ .kind = .LiteralInteger, .quantifier = .required },
15564 .{ .kind = .LiteralInteger, .quantifier = .required },
15565 .{ .kind = .LiteralInteger, .quantifier = .required },
15566 .{ .kind = .LiteralInteger, .quantifier = .required },
15567 .{ .kind = .LiteralInteger, .quantifier = .required },
15568 .{ .kind = .LiteralInteger, .quantifier = .required },
15569 .{ .kind = .LiteralInteger, .quantifier = .required },
15570 .{ .kind = .LiteralInteger, .quantifier = .required },
15571 .{ .kind = .LiteralInteger, .quantifier = .required },
15572 .{ .kind = .LiteralInteger, .quantifier = .required },
15573 .{ .kind = .LiteralInteger, .quantifier = .required },
15574 },
15575 },
15576 .{
15577 .name = "DescriptorSetImage",
15578 .opcode = 7,
15579 .operands = &[_]Operand{
15580 .{ .kind = .LiteralInteger, .quantifier = .required },
15581 .{ .kind = .LiteralInteger, .quantifier = .required },
15582 .{ .kind = .LiteralInteger, .quantifier = .required },
15583 .{ .kind = .LiteralInteger, .quantifier = .required },
15584 .{ .kind = .LiteralInteger, .quantifier = .required },
15585 .{ .kind = .LiteralInteger, .quantifier = .required },
15586 .{ .kind = .LiteralInteger, .quantifier = .required },
15587 .{ .kind = .LiteralInteger, .quantifier = .required },
15588 .{ .kind = .LiteralInteger, .quantifier = .required },
15589 .{ .kind = .LiteralInteger, .quantifier = .required },
15590 .{ .kind = .LiteralInteger, .quantifier = .required },
15591 .{ .kind = .LiteralInteger, .quantifier = .required },
15592 .{ .kind = .LiteralInteger, .quantifier = .required },
15593 .{ .kind = .LiteralInteger, .quantifier = .required },
15594 .{ .kind = .LiteralInteger, .quantifier = .required },
15595 .{ .kind = .LiteralInteger, .quantifier = .required },
15596 .{ .kind = .LiteralInteger, .quantifier = .required },
15597 .{ .kind = .LiteralInteger, .quantifier = .required },
15598 .{ .kind = .LiteralInteger, .quantifier = .required },
15599 .{ .kind = .LiteralInteger, .quantifier = .required },
15600 .{ .kind = .LiteralInteger, .quantifier = .required },
15601 .{ .kind = .LiteralInteger, .quantifier = .required },
15602 .{ .kind = .LiteralInteger, .quantifier = .required },
15603 .{ .kind = .LiteralInteger, .quantifier = .required },
15604 .{ .kind = .LiteralInteger, .quantifier = .required },
15605 .{ .kind = .LiteralInteger, .quantifier = .required },
15606 .{ .kind = .LiteralInteger, .quantifier = .required },
15607 .{ .kind = .LiteralInteger, .quantifier = .required },
15608 .{ .kind = .LiteralInteger, .quantifier = .required },
15609 .{ .kind = .LiteralInteger, .quantifier = .required },
15610 .{ .kind = .LiteralInteger, .quantifier = .required },
15611 .{ .kind = .LiteralInteger, .quantifier = .required },
15612 .{ .kind = .LiteralInteger, .quantifier = .required },
15613 },
15614 },
15615 .{
15616 .name = "DescriptorSetSampler",
15617 .opcode = 8,
15618 .operands = &[_]Operand{
15619 .{ .kind = .LiteralInteger, .quantifier = .required },
15620 .{ .kind = .LiteralInteger, .quantifier = .required },
15621 .{ .kind = .LiteralInteger, .quantifier = .required },
15622 .{ .kind = .LiteralInteger, .quantifier = .required },
15623 .{ .kind = .LiteralInteger, .quantifier = .required },
15624 .{ .kind = .LiteralInteger, .quantifier = .required },
15625 .{ .kind = .LiteralInteger, .quantifier = .required },
15626 .{ .kind = .LiteralInteger, .quantifier = .required },
15627 .{ .kind = .LiteralInteger, .quantifier = .required },
15628 .{ .kind = .LiteralInteger, .quantifier = .required },
15629 .{ .kind = .LiteralFloat, .quantifier = .required },
15630 .{ .kind = .LiteralInteger, .quantifier = .required },
15631 .{ .kind = .LiteralFloat, .quantifier = .required },
15632 .{ .kind = .LiteralInteger, .quantifier = .required },
15633 .{ .kind = .LiteralInteger, .quantifier = .required },
15634 .{ .kind = .LiteralFloat, .quantifier = .required },
15635 .{ .kind = .LiteralFloat, .quantifier = .required },
15636 .{ .kind = .LiteralInteger, .quantifier = .required },
15637 .{ .kind = .LiteralInteger, .quantifier = .required },
15638 },
15639 },
15640 },
15641 .@"NonSemantic.ClspvReflection.6" => &[_]Instruction{
15642 .{
15643 .name = "Kernel",
15644 .opcode = 1,
15645 .operands = &[_]Operand{
15646 .{ .kind = .IdRef, .quantifier = .required },
15647 .{ .kind = .IdRef, .quantifier = .required },
15648 .{ .kind = .IdRef, .quantifier = .optional },
15649 .{ .kind = .IdRef, .quantifier = .optional },
15650 .{ .kind = .IdRef, .quantifier = .optional },
15651 },
15652 },
15653 .{
15654 .name = "ArgumentInfo",
15655 .opcode = 2,
15656 .operands = &[_]Operand{
15657 .{ .kind = .IdRef, .quantifier = .required },
15658 .{ .kind = .IdRef, .quantifier = .optional },
15659 .{ .kind = .IdRef, .quantifier = .optional },
15660 .{ .kind = .IdRef, .quantifier = .optional },
15661 .{ .kind = .IdRef, .quantifier = .optional },
15662 },
15663 },
15664 .{
15665 .name = "ArgumentStorageBuffer",
15666 .opcode = 3,
15667 .operands = &[_]Operand{
15668 .{ .kind = .IdRef, .quantifier = .required },
15669 .{ .kind = .IdRef, .quantifier = .required },
15670 .{ .kind = .IdRef, .quantifier = .required },
15671 .{ .kind = .IdRef, .quantifier = .required },
15672 .{ .kind = .IdRef, .quantifier = .optional },
15673 },
15674 },
15675 .{
15676 .name = "ArgumentUniform",
15677 .opcode = 4,
15678 .operands = &[_]Operand{
15679 .{ .kind = .IdRef, .quantifier = .required },
15680 .{ .kind = .IdRef, .quantifier = .required },
15681 .{ .kind = .IdRef, .quantifier = .required },
15682 .{ .kind = .IdRef, .quantifier = .required },
15683 .{ .kind = .IdRef, .quantifier = .optional },
15684 },
15685 },
15686 .{
15687 .name = "ArgumentPodStorageBuffer",
15688 .opcode = 5,
15689 .operands = &[_]Operand{
15690 .{ .kind = .IdRef, .quantifier = .required },
15691 .{ .kind = .IdRef, .quantifier = .required },
15692 .{ .kind = .IdRef, .quantifier = .required },
15693 .{ .kind = .IdRef, .quantifier = .required },
15694 .{ .kind = .IdRef, .quantifier = .required },
15695 .{ .kind = .IdRef, .quantifier = .required },
15696 .{ .kind = .IdRef, .quantifier = .optional },
15697 },
15698 },
15699 .{
15700 .name = "ArgumentPodUniform",
15701 .opcode = 6,
15702 .operands = &[_]Operand{
15703 .{ .kind = .IdRef, .quantifier = .required },
15704 .{ .kind = .IdRef, .quantifier = .required },
15705 .{ .kind = .IdRef, .quantifier = .required },
15706 .{ .kind = .IdRef, .quantifier = .required },
15707 .{ .kind = .IdRef, .quantifier = .required },
15708 .{ .kind = .IdRef, .quantifier = .required },
15709 .{ .kind = .IdRef, .quantifier = .optional },
15710 },
15711 },
15712 .{
15713 .name = "ArgumentPodPushConstant",
15714 .opcode = 7,
15715 .operands = &[_]Operand{
15716 .{ .kind = .IdRef, .quantifier = .required },
15717 .{ .kind = .IdRef, .quantifier = .required },
15718 .{ .kind = .IdRef, .quantifier = .required },
15719 .{ .kind = .IdRef, .quantifier = .required },
15720 .{ .kind = .IdRef, .quantifier = .optional },
15721 },
15722 },
15723 .{
15724 .name = "ArgumentSampledImage",
15725 .opcode = 8,
15726 .operands = &[_]Operand{
15727 .{ .kind = .IdRef, .quantifier = .required },
15728 .{ .kind = .IdRef, .quantifier = .required },
15729 .{ .kind = .IdRef, .quantifier = .required },
15730 .{ .kind = .IdRef, .quantifier = .required },
15731 .{ .kind = .IdRef, .quantifier = .optional },
15732 },
15733 },
15734 .{
15735 .name = "ArgumentStorageImage",
15736 .opcode = 9,
15737 .operands = &[_]Operand{
15738 .{ .kind = .IdRef, .quantifier = .required },
15739 .{ .kind = .IdRef, .quantifier = .required },
15740 .{ .kind = .IdRef, .quantifier = .required },
15741 .{ .kind = .IdRef, .quantifier = .required },
15742 .{ .kind = .IdRef, .quantifier = .optional },
15743 },
15744 },
15745 .{
15746 .name = "ArgumentSampler",
15747 .opcode = 10,
15748 .operands = &[_]Operand{
15749 .{ .kind = .IdRef, .quantifier = .required },
15750 .{ .kind = .IdRef, .quantifier = .required },
15751 .{ .kind = .IdRef, .quantifier = .required },
15752 .{ .kind = .IdRef, .quantifier = .required },
15753 .{ .kind = .IdRef, .quantifier = .optional },
15754 },
15755 },
15756 .{
15757 .name = "ArgumentWorkgroup",
15758 .opcode = 11,
15759 .operands = &[_]Operand{
15760 .{ .kind = .IdRef, .quantifier = .required },
15761 .{ .kind = .IdRef, .quantifier = .required },
15762 .{ .kind = .IdRef, .quantifier = .required },
15763 .{ .kind = .IdRef, .quantifier = .required },
15764 .{ .kind = .IdRef, .quantifier = .optional },
15765 },
15766 },
15767 .{
15768 .name = "SpecConstantWorkgroupSize",
15769 .opcode = 12,
15770 .operands = &[_]Operand{
15771 .{ .kind = .IdRef, .quantifier = .required },
15772 .{ .kind = .IdRef, .quantifier = .required },
15773 .{ .kind = .IdRef, .quantifier = .required },
15774 },
15775 },
15776 .{
15777 .name = "SpecConstantGlobalOffset",
15778 .opcode = 13,
15779 .operands = &[_]Operand{
15780 .{ .kind = .IdRef, .quantifier = .required },
15781 .{ .kind = .IdRef, .quantifier = .required },
15782 .{ .kind = .IdRef, .quantifier = .required },
15783 },
15784 },
15785 .{
15786 .name = "SpecConstantWorkDim",
15787 .opcode = 14,
15788 .operands = &[_]Operand{
15789 .{ .kind = .IdRef, .quantifier = .required },
15790 },
15791 },
15792 .{
15793 .name = "PushConstantGlobalOffset",
15794 .opcode = 15,
15795 .operands = &[_]Operand{
15796 .{ .kind = .IdRef, .quantifier = .required },
15797 .{ .kind = .IdRef, .quantifier = .required },
15798 },
15799 },
15800 .{
15801 .name = "PushConstantEnqueuedLocalSize",
15802 .opcode = 16,
15803 .operands = &[_]Operand{
15804 .{ .kind = .IdRef, .quantifier = .required },
15805 .{ .kind = .IdRef, .quantifier = .required },
15806 },
15807 },
15808 .{
15809 .name = "PushConstantGlobalSize",
15810 .opcode = 17,
15811 .operands = &[_]Operand{
15812 .{ .kind = .IdRef, .quantifier = .required },
15813 .{ .kind = .IdRef, .quantifier = .required },
15814 },
15815 },
15816 .{
15817 .name = "PushConstantRegionOffset",
15818 .opcode = 18,
15819 .operands = &[_]Operand{
15820 .{ .kind = .IdRef, .quantifier = .required },
15821 .{ .kind = .IdRef, .quantifier = .required },
15822 },
15823 },
15824 .{
15825 .name = "PushConstantNumWorkgroups",
15826 .opcode = 19,
15827 .operands = &[_]Operand{
15828 .{ .kind = .IdRef, .quantifier = .required },
15829 .{ .kind = .IdRef, .quantifier = .required },
15830 },
15831 },
15832 .{
15833 .name = "PushConstantRegionGroupOffset",
15834 .opcode = 20,
15835 .operands = &[_]Operand{
15836 .{ .kind = .IdRef, .quantifier = .required },
15837 .{ .kind = .IdRef, .quantifier = .required },
15838 },
15839 },
15840 .{
15841 .name = "ConstantDataStorageBuffer",
15842 .opcode = 21,
15843 .operands = &[_]Operand{
15844 .{ .kind = .IdRef, .quantifier = .required },
15845 .{ .kind = .IdRef, .quantifier = .required },
15846 .{ .kind = .IdRef, .quantifier = .required },
15847 },
15848 },
15849 .{
15850 .name = "ConstantDataUniform",
15851 .opcode = 22,
15852 .operands = &[_]Operand{
15853 .{ .kind = .IdRef, .quantifier = .required },
15854 .{ .kind = .IdRef, .quantifier = .required },
15855 .{ .kind = .IdRef, .quantifier = .required },
15856 },
15857 },
15858 .{
15859 .name = "LiteralSampler",
15860 .opcode = 23,
15861 .operands = &[_]Operand{
15862 .{ .kind = .IdRef, .quantifier = .required },
15863 .{ .kind = .IdRef, .quantifier = .required },
15864 .{ .kind = .IdRef, .quantifier = .required },
15865 },
15866 },
15867 .{
15868 .name = "PropertyRequiredWorkgroupSize",
15869 .opcode = 24,
15870 .operands = &[_]Operand{
15871 .{ .kind = .IdRef, .quantifier = .required },
15872 .{ .kind = .IdRef, .quantifier = .required },
15873 .{ .kind = .IdRef, .quantifier = .required },
15874 .{ .kind = .IdRef, .quantifier = .required },
15875 },
15876 },
15877 .{
15878 .name = "SpecConstantSubgroupMaxSize",
15879 .opcode = 25,
15880 .operands = &[_]Operand{
15881 .{ .kind = .IdRef, .quantifier = .required },
15882 },
15883 },
15884 .{
15885 .name = "ArgumentPointerPushConstant",
15886 .opcode = 26,
15887 .operands = &[_]Operand{
15888 .{ .kind = .IdRef, .quantifier = .required },
15889 .{ .kind = .IdRef, .quantifier = .required },
15890 .{ .kind = .IdRef, .quantifier = .required },
15891 .{ .kind = .IdRef, .quantifier = .required },
15892 .{ .kind = .IdRef, .quantifier = .optional },
15893 },
15894 },
15895 .{
15896 .name = "ArgumentPointerUniform",
15897 .opcode = 27,
15898 .operands = &[_]Operand{
15899 .{ .kind = .IdRef, .quantifier = .required },
15900 .{ .kind = .IdRef, .quantifier = .required },
15901 .{ .kind = .IdRef, .quantifier = .required },
15902 .{ .kind = .IdRef, .quantifier = .required },
15903 .{ .kind = .IdRef, .quantifier = .required },
15904 .{ .kind = .IdRef, .quantifier = .required },
15905 .{ .kind = .IdRef, .quantifier = .optional },
15906 },
15907 },
15908 .{
15909 .name = "ProgramScopeVariablesStorageBuffer",
15910 .opcode = 28,
15911 .operands = &[_]Operand{
15912 .{ .kind = .IdRef, .quantifier = .required },
15913 .{ .kind = .IdRef, .quantifier = .required },
15914 .{ .kind = .IdRef, .quantifier = .required },
15915 },
15916 },
15917 .{
15918 .name = "ProgramScopeVariablePointerRelocation",
15919 .opcode = 29,
15920 .operands = &[_]Operand{
15921 .{ .kind = .IdRef, .quantifier = .required },
15922 .{ .kind = .IdRef, .quantifier = .required },
15923 .{ .kind = .IdRef, .quantifier = .required },
15924 },
15925 },
15926 .{
15927 .name = "ImageArgumentInfoChannelOrderPushConstant",
15928 .opcode = 30,
15929 .operands = &[_]Operand{
15930 .{ .kind = .IdRef, .quantifier = .required },
15931 .{ .kind = .IdRef, .quantifier = .required },
15932 .{ .kind = .IdRef, .quantifier = .required },
15933 .{ .kind = .IdRef, .quantifier = .required },
15934 },
15935 },
15936 .{
15937 .name = "ImageArgumentInfoChannelDataTypePushConstant",
15938 .opcode = 31,
15939 .operands = &[_]Operand{
15940 .{ .kind = .IdRef, .quantifier = .required },
15941 .{ .kind = .IdRef, .quantifier = .required },
15942 .{ .kind = .IdRef, .quantifier = .required },
15943 .{ .kind = .IdRef, .quantifier = .required },
15944 },
15945 },
15946 .{
15947 .name = "ImageArgumentInfoChannelOrderUniform",
15948 .opcode = 32,
15949 .operands = &[_]Operand{
15950 .{ .kind = .IdRef, .quantifier = .required },
15951 .{ .kind = .IdRef, .quantifier = .required },
15952 .{ .kind = .IdRef, .quantifier = .required },
15953 .{ .kind = .IdRef, .quantifier = .required },
15954 .{ .kind = .IdRef, .quantifier = .required },
15955 .{ .kind = .IdRef, .quantifier = .required },
15956 },
15957 },
15958 .{
15959 .name = "ImageArgumentInfoChannelDataTypeUniform",
15960 .opcode = 33,
15961 .operands = &[_]Operand{
15962 .{ .kind = .IdRef, .quantifier = .required },
15963 .{ .kind = .IdRef, .quantifier = .required },
15964 .{ .kind = .IdRef, .quantifier = .required },
15965 .{ .kind = .IdRef, .quantifier = .required },
15966 .{ .kind = .IdRef, .quantifier = .required },
15967 .{ .kind = .IdRef, .quantifier = .required },
15968 },
15969 },
15970 .{
15971 .name = "ArgumentStorageTexelBuffer",
15972 .opcode = 34,
15973 .operands = &[_]Operand{
15974 .{ .kind = .IdRef, .quantifier = .required },
15975 .{ .kind = .IdRef, .quantifier = .required },
15976 .{ .kind = .IdRef, .quantifier = .required },
15977 .{ .kind = .IdRef, .quantifier = .required },
15978 .{ .kind = .IdRef, .quantifier = .optional },
15979 },
15980 },
15981 .{
15982 .name = "ArgumentUniformTexelBuffer",
15983 .opcode = 35,
15984 .operands = &[_]Operand{
15985 .{ .kind = .IdRef, .quantifier = .required },
15986 .{ .kind = .IdRef, .quantifier = .required },
15987 .{ .kind = .IdRef, .quantifier = .required },
15988 .{ .kind = .IdRef, .quantifier = .required },
15989 .{ .kind = .IdRef, .quantifier = .optional },
15990 },
15991 },
15992 .{
15993 .name = "ConstantDataPointerPushConstant",
15994 .opcode = 36,
15995 .operands = &[_]Operand{
15996 .{ .kind = .IdRef, .quantifier = .required },
15997 .{ .kind = .IdRef, .quantifier = .required },
15998 .{ .kind = .IdRef, .quantifier = .required },
15999 },
16000 },
16001 .{
16002 .name = "ProgramScopeVariablePointerPushConstant",
16003 .opcode = 37,
16004 .operands = &[_]Operand{
16005 .{ .kind = .IdRef, .quantifier = .required },
16006 .{ .kind = .IdRef, .quantifier = .required },
16007 .{ .kind = .IdRef, .quantifier = .required },
16008 },
16009 },
16010 .{
16011 .name = "PrintfInfo",
16012 .opcode = 38,
16013 .operands = &[_]Operand{
16014 .{ .kind = .IdRef, .quantifier = .required },
16015 .{ .kind = .IdRef, .quantifier = .required },
16016 .{ .kind = .IdRef, .quantifier = .variadic },
16017 },
16018 },
16019 .{
16020 .name = "PrintfBufferStorageBuffer",
16021 .opcode = 39,
16022 .operands = &[_]Operand{
16023 .{ .kind = .IdRef, .quantifier = .required },
16024 .{ .kind = .IdRef, .quantifier = .required },
16025 .{ .kind = .IdRef, .quantifier = .required },
16026 },
16027 },
16028 .{
16029 .name = "PrintfBufferPointerPushConstant",
16030 .opcode = 40,
16031 .operands = &[_]Operand{
16032 .{ .kind = .IdRef, .quantifier = .required },
16033 .{ .kind = .IdRef, .quantifier = .required },
16034 .{ .kind = .IdRef, .quantifier = .required },
16035 },
16036 },
16037 .{
16038 .name = "NormalizedSamplerMaskPushConstant",
16039 .opcode = 41,
16040 .operands = &[_]Operand{
16041 .{ .kind = .IdRef, .quantifier = .required },
16042 .{ .kind = .IdRef, .quantifier = .required },
16043 .{ .kind = .IdRef, .quantifier = .required },
16044 .{ .kind = .IdRef, .quantifier = .required },
16045 },
16046 },
16047 },
16048 .SPV_AMD_gcn_shader => &[_]Instruction{
16049 .{
16050 .name = "CubeFaceIndexAMD",
16051 .opcode = 1,
16052 .operands = &[_]Operand{
16053 .{ .kind = .IdRef, .quantifier = .required },
16054 },
16055 },
16056 .{
16057 .name = "CubeFaceCoordAMD",
16058 .opcode = 2,
16059 .operands = &[_]Operand{
16060 .{ .kind = .IdRef, .quantifier = .required },
16061 },
16062 },
16063 .{
16064 .name = "TimeAMD",
16065 .opcode = 3,
16066 .operands = &[_]Operand{},
16067 },
16068 },
16069 .SPV_AMD_shader_trinary_minmax => &[_]Instruction{
16070 .{
16071 .name = "FMin3AMD",
16072 .opcode = 1,
16073 .operands = &[_]Operand{
16074 .{ .kind = .IdRef, .quantifier = .required },
16075 .{ .kind = .IdRef, .quantifier = .required },
16076 .{ .kind = .IdRef, .quantifier = .required },
16077 },
16078 },
16079 .{
16080 .name = "UMin3AMD",
16081 .opcode = 2,
16082 .operands = &[_]Operand{
16083 .{ .kind = .IdRef, .quantifier = .required },
16084 .{ .kind = .IdRef, .quantifier = .required },
16085 .{ .kind = .IdRef, .quantifier = .required },
16086 },
16087 },
16088 .{
16089 .name = "SMin3AMD",
16090 .opcode = 3,
16091 .operands = &[_]Operand{
16092 .{ .kind = .IdRef, .quantifier = .required },
16093 .{ .kind = .IdRef, .quantifier = .required },
16094 .{ .kind = .IdRef, .quantifier = .required },
16095 },
16096 },
16097 .{
16098 .name = "FMax3AMD",
16099 .opcode = 4,
16100 .operands = &[_]Operand{
16101 .{ .kind = .IdRef, .quantifier = .required },
16102 .{ .kind = .IdRef, .quantifier = .required },
16103 .{ .kind = .IdRef, .quantifier = .required },
16104 },
16105 },
16106 .{
16107 .name = "UMax3AMD",
16108 .opcode = 5,
16109 .operands = &[_]Operand{
16110 .{ .kind = .IdRef, .quantifier = .required },
16111 .{ .kind = .IdRef, .quantifier = .required },
16112 .{ .kind = .IdRef, .quantifier = .required },
16113 },
16114 },
16115 .{
16116 .name = "SMax3AMD",
16117 .opcode = 6,
16118 .operands = &[_]Operand{
16119 .{ .kind = .IdRef, .quantifier = .required },
16120 .{ .kind = .IdRef, .quantifier = .required },
16121 .{ .kind = .IdRef, .quantifier = .required },
16122 },
16123 },
16124 .{
16125 .name = "FMid3AMD",
16126 .opcode = 7,
16127 .operands = &[_]Operand{
16128 .{ .kind = .IdRef, .quantifier = .required },
16129 .{ .kind = .IdRef, .quantifier = .required },
16130 .{ .kind = .IdRef, .quantifier = .required },
16131 },
16132 },
16133 .{
16134 .name = "UMid3AMD",
16135 .opcode = 8,
16136 .operands = &[_]Operand{
16137 .{ .kind = .IdRef, .quantifier = .required },
16138 .{ .kind = .IdRef, .quantifier = .required },
16139 .{ .kind = .IdRef, .quantifier = .required },
16140 },
16141 },
16142 .{
16143 .name = "SMid3AMD",
16144 .opcode = 9,
16145 .operands = &[_]Operand{
16146 .{ .kind = .IdRef, .quantifier = .required },
16147 .{ .kind = .IdRef, .quantifier = .required },
16148 .{ .kind = .IdRef, .quantifier = .required },
16149 },
16150 },
16151 },
16152 .DebugInfo => &[_]Instruction{
16153 .{
16154 .name = "DebugInfoNone",
16155 .opcode = 0,
16156 .operands = &[_]Operand{},
16157 },
16158 .{
16159 .name = "DebugCompilationUnit",
16160 .opcode = 1,
16161 .operands = &[_]Operand{
16162 .{ .kind = .IdRef, .quantifier = .required },
16163 .{ .kind = .LiteralInteger, .quantifier = .required },
16164 .{ .kind = .LiteralInteger, .quantifier = .required },
16165 },
16166 },
16167 .{
16168 .name = "DebugTypeBasic",
16169 .opcode = 2,
16170 .operands = &[_]Operand{
16171 .{ .kind = .IdRef, .quantifier = .required },
16172 .{ .kind = .IdRef, .quantifier = .required },
16173 .{ .kind = .@"DebugInfo.DebugBaseTypeAttributeEncoding", .quantifier = .required },
16174 },
16175 },
16176 .{
16177 .name = "DebugTypePointer",
16178 .opcode = 3,
16179 .operands = &[_]Operand{
16180 .{ .kind = .IdRef, .quantifier = .required },
16181 .{ .kind = .StorageClass, .quantifier = .required },
16182 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16183 },
16184 },
16185 .{
16186 .name = "DebugTypeQualifier",
16187 .opcode = 4,
16188 .operands = &[_]Operand{
16189 .{ .kind = .IdRef, .quantifier = .required },
16190 .{ .kind = .@"DebugInfo.DebugTypeQualifier", .quantifier = .required },
16191 },
16192 },
16193 .{
16194 .name = "DebugTypeArray",
16195 .opcode = 5,
16196 .operands = &[_]Operand{
16197 .{ .kind = .IdRef, .quantifier = .required },
16198 .{ .kind = .IdRef, .quantifier = .variadic },
16199 },
16200 },
16201 .{
16202 .name = "DebugTypeVector",
16203 .opcode = 6,
16204 .operands = &[_]Operand{
16205 .{ .kind = .IdRef, .quantifier = .required },
16206 .{ .kind = .LiteralInteger, .quantifier = .required },
16207 },
16208 },
16209 .{
16210 .name = "DebugTypedef",
16211 .opcode = 7,
16212 .operands = &[_]Operand{
16213 .{ .kind = .IdRef, .quantifier = .required },
16214 .{ .kind = .IdRef, .quantifier = .required },
16215 .{ .kind = .IdRef, .quantifier = .required },
16216 .{ .kind = .LiteralInteger, .quantifier = .required },
16217 .{ .kind = .LiteralInteger, .quantifier = .required },
16218 .{ .kind = .IdRef, .quantifier = .required },
16219 },
16220 },
16221 .{
16222 .name = "DebugTypeFunction",
16223 .opcode = 8,
16224 .operands = &[_]Operand{
16225 .{ .kind = .IdRef, .quantifier = .required },
16226 .{ .kind = .IdRef, .quantifier = .variadic },
16227 },
16228 },
16229 .{
16230 .name = "DebugTypeEnum",
16231 .opcode = 9,
16232 .operands = &[_]Operand{
16233 .{ .kind = .IdRef, .quantifier = .required },
16234 .{ .kind = .IdRef, .quantifier = .required },
16235 .{ .kind = .IdRef, .quantifier = .required },
16236 .{ .kind = .LiteralInteger, .quantifier = .required },
16237 .{ .kind = .LiteralInteger, .quantifier = .required },
16238 .{ .kind = .IdRef, .quantifier = .required },
16239 .{ .kind = .IdRef, .quantifier = .required },
16240 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16241 .{ .kind = .PairIdRefIdRef, .quantifier = .variadic },
16242 },
16243 },
16244 .{
16245 .name = "DebugTypeComposite",
16246 .opcode = 10,
16247 .operands = &[_]Operand{
16248 .{ .kind = .IdRef, .quantifier = .required },
16249 .{ .kind = .@"DebugInfo.DebugCompositeType", .quantifier = .required },
16250 .{ .kind = .IdRef, .quantifier = .required },
16251 .{ .kind = .LiteralInteger, .quantifier = .required },
16252 .{ .kind = .LiteralInteger, .quantifier = .required },
16253 .{ .kind = .IdRef, .quantifier = .required },
16254 .{ .kind = .IdRef, .quantifier = .required },
16255 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16256 .{ .kind = .IdRef, .quantifier = .variadic },
16257 },
16258 },
16259 .{
16260 .name = "DebugTypeMember",
16261 .opcode = 11,
16262 .operands = &[_]Operand{
16263 .{ .kind = .IdRef, .quantifier = .required },
16264 .{ .kind = .IdRef, .quantifier = .required },
16265 .{ .kind = .IdRef, .quantifier = .required },
16266 .{ .kind = .LiteralInteger, .quantifier = .required },
16267 .{ .kind = .LiteralInteger, .quantifier = .required },
16268 .{ .kind = .IdRef, .quantifier = .required },
16269 .{ .kind = .IdRef, .quantifier = .required },
16270 .{ .kind = .IdRef, .quantifier = .required },
16271 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16272 .{ .kind = .IdRef, .quantifier = .optional },
16273 },
16274 },
16275 .{
16276 .name = "DebugTypeInheritance",
16277 .opcode = 12,
16278 .operands = &[_]Operand{
16279 .{ .kind = .IdRef, .quantifier = .required },
16280 .{ .kind = .IdRef, .quantifier = .required },
16281 .{ .kind = .IdRef, .quantifier = .required },
16282 .{ .kind = .IdRef, .quantifier = .required },
16283 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16284 },
16285 },
16286 .{
16287 .name = "DebugTypePtrToMember",
16288 .opcode = 13,
16289 .operands = &[_]Operand{
16290 .{ .kind = .IdRef, .quantifier = .required },
16291 .{ .kind = .IdRef, .quantifier = .required },
16292 },
16293 },
16294 .{
16295 .name = "DebugTypeTemplate",
16296 .opcode = 14,
16297 .operands = &[_]Operand{
16298 .{ .kind = .IdRef, .quantifier = .required },
16299 .{ .kind = .IdRef, .quantifier = .variadic },
16300 },
16301 },
16302 .{
16303 .name = "DebugTypeTemplateParameter",
16304 .opcode = 15,
16305 .operands = &[_]Operand{
16306 .{ .kind = .IdRef, .quantifier = .required },
16307 .{ .kind = .IdRef, .quantifier = .required },
16308 .{ .kind = .IdRef, .quantifier = .required },
16309 .{ .kind = .IdRef, .quantifier = .required },
16310 .{ .kind = .LiteralInteger, .quantifier = .required },
16311 .{ .kind = .LiteralInteger, .quantifier = .required },
16312 },
16313 },
16314 .{
16315 .name = "DebugTypeTemplateTemplateParameter",
16316 .opcode = 16,
16317 .operands = &[_]Operand{
16318 .{ .kind = .IdRef, .quantifier = .required },
16319 .{ .kind = .IdRef, .quantifier = .required },
16320 .{ .kind = .IdRef, .quantifier = .required },
16321 .{ .kind = .LiteralInteger, .quantifier = .required },
16322 .{ .kind = .LiteralInteger, .quantifier = .required },
16323 },
16324 },
16325 .{
16326 .name = "DebugTypeTemplateParameterPack",
16327 .opcode = 17,
16328 .operands = &[_]Operand{
16329 .{ .kind = .IdRef, .quantifier = .required },
16330 .{ .kind = .IdRef, .quantifier = .required },
16331 .{ .kind = .LiteralInteger, .quantifier = .required },
16332 .{ .kind = .LiteralInteger, .quantifier = .required },
16333 .{ .kind = .IdRef, .quantifier = .variadic },
16334 },
16335 },
16336 .{
16337 .name = "DebugGlobalVariable",
16338 .opcode = 18,
16339 .operands = &[_]Operand{
16340 .{ .kind = .IdRef, .quantifier = .required },
16341 .{ .kind = .IdRef, .quantifier = .required },
16342 .{ .kind = .IdRef, .quantifier = .required },
16343 .{ .kind = .LiteralInteger, .quantifier = .required },
16344 .{ .kind = .LiteralInteger, .quantifier = .required },
16345 .{ .kind = .IdRef, .quantifier = .required },
16346 .{ .kind = .IdRef, .quantifier = .required },
16347 .{ .kind = .IdRef, .quantifier = .required },
16348 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16349 .{ .kind = .IdRef, .quantifier = .optional },
16350 },
16351 },
16352 .{
16353 .name = "DebugFunctionDeclaration",
16354 .opcode = 19,
16355 .operands = &[_]Operand{
16356 .{ .kind = .IdRef, .quantifier = .required },
16357 .{ .kind = .IdRef, .quantifier = .required },
16358 .{ .kind = .IdRef, .quantifier = .required },
16359 .{ .kind = .LiteralInteger, .quantifier = .required },
16360 .{ .kind = .LiteralInteger, .quantifier = .required },
16361 .{ .kind = .IdRef, .quantifier = .required },
16362 .{ .kind = .IdRef, .quantifier = .required },
16363 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16364 },
16365 },
16366 .{
16367 .name = "DebugFunction",
16368 .opcode = 20,
16369 .operands = &[_]Operand{
16370 .{ .kind = .IdRef, .quantifier = .required },
16371 .{ .kind = .IdRef, .quantifier = .required },
16372 .{ .kind = .IdRef, .quantifier = .required },
16373 .{ .kind = .LiteralInteger, .quantifier = .required },
16374 .{ .kind = .LiteralInteger, .quantifier = .required },
16375 .{ .kind = .IdRef, .quantifier = .required },
16376 .{ .kind = .IdRef, .quantifier = .required },
16377 .{ .kind = .@"DebugInfo.DebugInfoFlags", .quantifier = .required },
16378 .{ .kind = .LiteralInteger, .quantifier = .required },
16379 .{ .kind = .IdRef, .quantifier = .required },
16380 .{ .kind = .IdRef, .quantifier = .optional },
16381 },
16382 },
16383 .{
16384 .name = "DebugLexicalBlock",
16385 .opcode = 21,
16386 .operands = &[_]Operand{
16387 .{ .kind = .IdRef, .quantifier = .required },
16388 .{ .kind = .LiteralInteger, .quantifier = .required },
16389 .{ .kind = .LiteralInteger, .quantifier = .required },
16390 .{ .kind = .IdRef, .quantifier = .required },
16391 .{ .kind = .IdRef, .quantifier = .optional },
16392 },
16393 },
16394 .{
16395 .name = "DebugLexicalBlockDiscriminator",
16396 .opcode = 22,
16397 .operands = &[_]Operand{
16398 .{ .kind = .IdRef, .quantifier = .required },
16399 .{ .kind = .LiteralInteger, .quantifier = .required },
16400 .{ .kind = .IdRef, .quantifier = .required },
16401 },
16402 },
16403 .{
16404 .name = "DebugScope",
16405 .opcode = 23,
16406 .operands = &[_]Operand{
16407 .{ .kind = .IdRef, .quantifier = .required },
16408 .{ .kind = .IdRef, .quantifier = .optional },
16409 },
16410 },
16411 .{
16412 .name = "DebugNoScope",
16413 .opcode = 24,
16414 .operands = &[_]Operand{},
16415 },
16416 .{
16417 .name = "DebugInlinedAt",
16418 .opcode = 25,
16419 .operands = &[_]Operand{
16420 .{ .kind = .LiteralInteger, .quantifier = .required },
16421 .{ .kind = .IdRef, .quantifier = .required },
16422 .{ .kind = .IdRef, .quantifier = .optional },
16423 },
16424 },
16425 .{
16426 .name = "DebugLocalVariable",
16427 .opcode = 26,
16428 .operands = &[_]Operand{
16429 .{ .kind = .IdRef, .quantifier = .required },
16430 .{ .kind = .IdRef, .quantifier = .required },
16431 .{ .kind = .IdRef, .quantifier = .required },
16432 .{ .kind = .LiteralInteger, .quantifier = .required },
16433 .{ .kind = .LiteralInteger, .quantifier = .required },
16434 .{ .kind = .IdRef, .quantifier = .required },
16435 .{ .kind = .LiteralInteger, .quantifier = .optional },
16436 },
16437 },
16438 .{
16439 .name = "DebugInlinedVariable",
16440 .opcode = 27,
16441 .operands = &[_]Operand{
16442 .{ .kind = .IdRef, .quantifier = .required },
16443 .{ .kind = .IdRef, .quantifier = .required },
16444 },
16445 },
16446 .{
16447 .name = "DebugDeclare",
16448 .opcode = 28,
16449 .operands = &[_]Operand{
16450 .{ .kind = .IdRef, .quantifier = .required },
16451 .{ .kind = .IdRef, .quantifier = .required },
16452 .{ .kind = .IdRef, .quantifier = .required },
16453 },
16454 },
16455 .{
16456 .name = "DebugValue",
16457 .opcode = 29,
16458 .operands = &[_]Operand{
16459 .{ .kind = .IdRef, .quantifier = .required },
16460 .{ .kind = .IdRef, .quantifier = .required },
16461 .{ .kind = .IdRef, .quantifier = .variadic },
16462 },
16463 },
16464 .{
16465 .name = "DebugOperation",
16466 .opcode = 30,
16467 .operands = &[_]Operand{
16468 .{ .kind = .@"DebugInfo.DebugOperation", .quantifier = .required },
16469 .{ .kind = .LiteralInteger, .quantifier = .variadic },
16470 },
16471 },
16472 .{
16473 .name = "DebugExpression",
16474 .opcode = 31,
16475 .operands = &[_]Operand{
16476 .{ .kind = .IdRef, .quantifier = .variadic },
16477 },
16478 },
16479 .{
16480 .name = "DebugMacroDef",
16481 .opcode = 32,
16482 .operands = &[_]Operand{
16483 .{ .kind = .IdRef, .quantifier = .required },
16484 .{ .kind = .LiteralInteger, .quantifier = .required },
16485 .{ .kind = .IdRef, .quantifier = .required },
16486 .{ .kind = .IdRef, .quantifier = .optional },
16487 },
16488 },
16489 .{
16490 .name = "DebugMacroUndef",
16491 .opcode = 33,
16492 .operands = &[_]Operand{
16493 .{ .kind = .IdRef, .quantifier = .required },
16494 .{ .kind = .LiteralInteger, .quantifier = .required },
16495 .{ .kind = .IdRef, .quantifier = .required },
16496 },
16497 },
16498 },
16499 .@"NonSemantic.DebugPrintf" => &[_]Instruction{
16500 .{
16501 .name = "DebugPrintf",
16502 .opcode = 1,
16503 .operands = &[_]Operand{
16504 .{ .kind = .IdRef, .quantifier = .required },
16505 .{ .kind = .IdRef, .quantifier = .variadic },
16506 },
16507 },
16508 },
16509 .SPV_AMD_shader_explicit_vertex_parameter => &[_]Instruction{
16510 .{
16511 .name = "InterpolateAtVertexAMD",
16512 .opcode = 1,
16513 .operands = &[_]Operand{
16514 .{ .kind = .IdRef, .quantifier = .required },
16515 .{ .kind = .IdRef, .quantifier = .required },
16516 },
16517 },
16518 },
16519 .@"NonSemantic.DebugBreak" => &[_]Instruction{
16520 .{
16521 .name = "DebugBreak",
16522 .opcode = 1,
16523 .operands = &[_]Operand{},
16524 },
16525 },
16526 .zig => &[_]Instruction{
16527 .{
16528 .name = "InvocationGlobal",
16529 .opcode = 0,
16530 .operands = &[_]Operand{
16531 .{ .kind = .IdRef, .quantifier = .required },
16532 },
16533 },
16534 },
16535 };
16536 }
16537};
src/link/SpirV.zig+37-7
......@@ -39,8 +39,12 @@ const Liveness = @import("../Liveness.zig");
3939const Value = @import("../Value.zig");
4040
4141const SpvModule = @import("../codegen/spirv/Module.zig");
42const Section = @import("../codegen/spirv/Section.zig");
4243const spec = @import("../codegen/spirv/spec.zig");
4344const IdResult = spec.IdResult;
45const Word = spec.Word;
46
47const BinaryModule = @import("SpirV/BinaryModule.zig");
4448
4549base: link.File,
4650
......@@ -163,7 +167,8 @@ pub fn updateExports(
163167 .Vertex => spec.ExecutionModel.Vertex,
164168 .Fragment => spec.ExecutionModel.Fragment,
165169 .Kernel => spec.ExecutionModel.Kernel,
166 else => return,
170 .C => return, // TODO: What to do here?
171 else => unreachable,
167172 };
168173 const is_vulkan = target.os.tag == .vulkan;
169174
......@@ -197,8 +202,6 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node
197202 @panic("Attempted to compile for architecture that was disabled by build configuration");
198203 }
199204
200 _ = arena; // Has the same lifetime as the call to Compilation.update.
201
202205 const tracy = trace(@src());
203206 defer tracy.end();
204207
......@@ -223,9 +226,9 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node
223226 defer error_info.deinit();
224227
225228 try error_info.appendSlice("zig_errors");
226 const module = self.base.comp.module.?;
227 for (module.global_error_set.keys()) |name_nts| {
228 const name = module.intern_pool.stringToSlice(name_nts);
229 const mod = self.base.comp.module.?;
230 for (mod.global_error_set.keys()) |name_nts| {
231 const name = mod.intern_pool.stringToSlice(name_nts);
229232 // Errors can contain pretty much any character - to encode them in a string we must escape
230233 // them somehow. Easiest here is to use some established scheme, one which also preseves the
231234 // name if it contains no strange characters is nice for debugging. URI encoding fits the bill.
......@@ -239,7 +242,34 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node
239242 .extension = error_info.items,
240243 });
241244
242 try spv.flush(self.base.file.?, target);
245 const module = try spv.finalize(arena, target);
246 errdefer arena.free(module);
247
248 const linked_module = self.linkModule(arena, module) catch |err| switch (err) {
249 error.OutOfMemory => return error.OutOfMemory,
250 else => |other| {
251 log.err("error while linking: {s}\n", .{@errorName(other)});
252 return error.FlushFailure;
253 },
254 };
255
256 try self.base.file.?.writeAll(std.mem.sliceAsBytes(linked_module));
257}
258
259fn linkModule(self: *SpirV, a: Allocator, module: []Word) ![]Word {
260 _ = self;
261
262 const lower_invocation_globals = @import("SpirV/lower_invocation_globals.zig");
263 const prune_unused = @import("SpirV/prune_unused.zig");
264
265 var parser = try BinaryModule.Parser.init(a);
266 defer parser.deinit();
267 var binary = try parser.parse(module);
268
269 try lower_invocation_globals.run(&parser, &binary);
270 try prune_unused.run(&parser, &binary);
271
272 return binary.finalize(a);
243273}
244274
245275fn writeCapabilities(spv: *SpvModule, target: std.Target) !void {
src/link/SpirV/BinaryModule.zig created+461
......@@ -0,0 +1,461 @@
1const std = @import("std");
2const assert = std.debug.assert;
3const Allocator = std.mem.Allocator;
4const log = std.log.scoped(.spirv_parse);
5
6const spec = @import("../../codegen/spirv/spec.zig");
7const Opcode = spec.Opcode;
8const Word = spec.Word;
9const InstructionSet = spec.InstructionSet;
10const ResultId = spec.IdResult;
11
12const BinaryModule = @This();
13
14pub const header_words = 5;
15
16/// The module SPIR-V version.
17version: spec.Version,
18
19/// The generator magic number.
20generator_magic: u32,
21
22/// The result-id bound of this SPIR-V module.
23id_bound: u32,
24
25/// The instructions of this module. This does not contain the header.
26instructions: []const Word,
27
28/// Maps OpExtInstImport result-ids to their InstructionSet.
29ext_inst_map: std.AutoHashMapUnmanaged(ResultId, InstructionSet),
30
31/// This map contains the width of arithmetic types (OpTypeInt and
32/// OpTypeFloat). We need this information to correctly parse the operands
33/// of Op(Spec)Constant and OpSwitch.
34arith_type_width: std.AutoHashMapUnmanaged(ResultId, u16),
35
36/// The starting offsets of some sections
37sections: struct {
38 functions: usize,
39},
40
41pub fn deinit(self: *BinaryModule, a: Allocator) void {
42 self.ext_inst_map.deinit(a);
43 self.arith_type_width.deinit(a);
44 self.* = undefined;
45}
46
47pub fn iterateInstructions(self: BinaryModule) Instruction.Iterator {
48 return Instruction.Iterator.init(self.instructions, 0);
49}
50
51pub fn iterateInstructionsFrom(self: BinaryModule, offset: usize) Instruction.Iterator {
52 return Instruction.Iterator.init(self.instructions, offset);
53}
54
55pub fn instructionAt(self: BinaryModule, offset: usize) Instruction {
56 var it = self.iterateInstructionsFrom(offset);
57 return it.next().?;
58}
59
60pub fn finalize(self: BinaryModule, a: Allocator) ![]Word {
61 const result = try a.alloc(Word, 5 + self.instructions.len);
62 errdefer a.free(result);
63
64 result[0] = spec.magic_number;
65 result[1] = @bitCast(self.version);
66 result[2] = spec.zig_generator_id;
67 result[3] = self.id_bound;
68 result[4] = 0; // Schema
69
70 @memcpy(result[5..], self.instructions);
71 return result;
72}
73
74/// Errors that can be raised when the module is not correct.
75/// Note that the parser doesn't validate SPIR-V modules by a
76/// long shot. It only yields errors that critically prevent
77/// further analysis of the module.
78pub const ParseError = error{
79 /// Raised when the module doesn't start with the SPIR-V magic.
80 /// This usually means that the module isn't actually SPIR-V.
81 InvalidMagic,
82 /// Raised when the module has an invalid "physical" format:
83 /// For example when the header is incomplete, or an instruction
84 /// has an illegal format.
85 InvalidPhysicalFormat,
86 /// OpExtInstImport was used with an unknown extension string.
87 InvalidExtInstImport,
88 /// The module had an instruction with an invalid (unknown) opcode.
89 InvalidOpcode,
90 /// An instruction's operands did not conform to the SPIR-V specification
91 /// for that instruction.
92 InvalidOperands,
93 /// A result-id was declared more than once.
94 DuplicateId,
95 /// Some ID did not resolve.
96 InvalidId,
97 /// Parser ran out of memory.
98 OutOfMemory,
99};
100
101pub const Instruction = struct {
102 pub const Iterator = struct {
103 words: []const Word,
104 index: usize = 0,
105 offset: usize = 0,
106
107 pub fn init(words: []const Word, start_offset: usize) Iterator {
108 return .{ .words = words, .offset = start_offset };
109 }
110
111 pub fn next(self: *Iterator) ?Instruction {
112 if (self.offset >= self.words.len) return null;
113
114 const instruction_len = self.words[self.offset] >> 16;
115 defer self.offset += instruction_len;
116 defer self.index += 1;
117 assert(instruction_len != 0 and self.offset < self.words.len); // Verified in BinaryModule.parse.
118
119 return Instruction{
120 .opcode = @enumFromInt(self.words[self.offset] & 0xFFFF),
121 .index = self.index,
122 .offset = self.offset,
123 .operands = self.words[self.offset..][1..instruction_len],
124 };
125 }
126 };
127
128 /// The opcode for this instruction.
129 opcode: Opcode,
130 /// The instruction's index.
131 index: usize,
132 /// The instruction's word offset in the module.
133 offset: usize,
134 /// The raw (unparsed) operands for this instruction.
135 operands: []const Word,
136};
137
138/// This parser contains information (acceleration tables)
139/// that can be persisted across different modules. This is
140/// used to initialize the module, and is also used when
141/// further analyzing it.
142pub const Parser = struct {
143 /// The allocator used to allocate this parser's structures,
144 /// and also the structures of any parsed module.
145 a: Allocator,
146
147 /// Maps (instruction set, opcode) => instruction index (for instruction set)
148 opcode_table: std.AutoHashMapUnmanaged(u32, u16) = .{},
149
150 pub fn init(a: Allocator) !Parser {
151 var self = Parser{
152 .a = a,
153 };
154 errdefer self.deinit();
155
156 inline for (std.meta.tags(InstructionSet)) |set| {
157 const instructions = set.instructions();
158 try self.opcode_table.ensureUnusedCapacity(a, @intCast(instructions.len));
159 for (instructions, 0..) |inst, i| {
160 // Note: Some instructions may alias another. In this case we don't really care
161 // which one is first: they all (should) have the same operands anyway. Just pick
162 // the first, which is usually the core, KHR or EXT variant.
163 const entry = self.opcode_table.getOrPutAssumeCapacity(mapSetAndOpcode(set, @intCast(inst.opcode)));
164 if (!entry.found_existing) {
165 entry.value_ptr.* = @intCast(i);
166 }
167 }
168 }
169
170 return self;
171 }
172
173 pub fn deinit(self: *Parser) void {
174 self.opcode_table.deinit(self.a);
175 }
176
177 fn mapSetAndOpcode(set: InstructionSet, opcode: u16) u32 {
178 return (@as(u32, @intFromEnum(set)) << 16) | opcode;
179 }
180
181 pub fn getInstSpec(self: Parser, opcode: Opcode) ?spec.Instruction {
182 const index = self.opcode_table.get(mapSetAndOpcode(.core, @intFromEnum(opcode))) orelse return null;
183 return InstructionSet.core.instructions()[index];
184 }
185
186 pub fn parse(self: *Parser, module: []const u32) ParseError!BinaryModule {
187 if (module[0] != spec.magic_number) {
188 return error.InvalidMagic;
189 } else if (module.len < header_words) {
190 log.err("module only has {}/{} header words", .{ module.len, header_words });
191 return error.InvalidPhysicalFormat;
192 }
193
194 var binary = BinaryModule{
195 .version = @bitCast(module[1]),
196 .generator_magic = module[2],
197 .id_bound = module[3],
198 .instructions = module[header_words..],
199 .ext_inst_map = .{},
200 .arith_type_width = .{},
201 .sections = undefined,
202 };
203
204 var maybe_function_section: ?usize = null;
205
206 // First pass through the module to verify basic structure and
207 // to gather some initial stuff for more detailed analysis.
208 // We want to check some stuff that Instruction.Iterator is no good for,
209 // so just iterate manually.
210 var offset: usize = 0;
211 while (offset < binary.instructions.len) {
212 const len = binary.instructions[offset] >> 16;
213 if (len == 0 or len + offset > binary.instructions.len) {
214 log.err("invalid instruction format: len={}, end={}, module len={}", .{ len, len + offset, binary.instructions.len });
215 return error.InvalidPhysicalFormat;
216 }
217 defer offset += len;
218
219 // We can't really efficiently use non-exhaustive enums here, because we would
220 // need to manually write out all valid cases. Since we have this map anyway, just
221 // use that.
222 const opcode: Opcode = @enumFromInt(@as(u16, @truncate(binary.instructions[offset])));
223 const inst_spec = self.getInstSpec(opcode) orelse {
224 log.err("invalid opcode for core set: {}", .{@intFromEnum(opcode)});
225 return error.InvalidOpcode;
226 };
227
228 const operands = binary.instructions[offset..][1..len];
229 switch (opcode) {
230 .OpExtInstImport => {
231 const set_name = std.mem.sliceTo(std.mem.sliceAsBytes(operands[1..]), 0);
232 const set = std.meta.stringToEnum(InstructionSet, set_name) orelse {
233 log.err("invalid instruction set '{s}'", .{set_name});
234 return error.InvalidExtInstImport;
235 };
236 if (set == .core) return error.InvalidExtInstImport;
237 try binary.ext_inst_map.put(self.a, @enumFromInt(operands[0]), set);
238 },
239 .OpTypeInt, .OpTypeFloat => {
240 const entry = try binary.arith_type_width.getOrPut(self.a, @enumFromInt(operands[0]));
241 if (entry.found_existing) return error.DuplicateId;
242 entry.value_ptr.* = std.math.cast(u16, operands[1]) orelse return error.InvalidOperands;
243 },
244 .OpFunction => if (maybe_function_section == null) {
245 maybe_function_section = offset;
246 },
247 else => {},
248 }
249
250 // OpSwitch takes a value as argument, not an OpType... hence we need to populate arith_type_width
251 // with ALL operations that return an int or float.
252 const spec_operands = inst_spec.operands;
253 if (spec_operands.len >= 2 and
254 spec_operands[0].kind == .IdResultType and
255 spec_operands[1].kind == .IdResult)
256 {
257 if (operands.len < 2) return error.InvalidOperands;
258 if (binary.arith_type_width.get(@enumFromInt(operands[0]))) |width| {
259 const entry = try binary.arith_type_width.getOrPut(self.a, @enumFromInt(operands[1]));
260 if (entry.found_existing) return error.DuplicateId;
261 entry.value_ptr.* = width;
262 }
263 }
264 }
265
266 binary.sections = .{
267 .functions = maybe_function_section orelse binary.instructions.len,
268 };
269
270 return binary;
271 }
272
273 /// Parse offsets in the instruction that contain result-ids.
274 /// Returned offsets are relative to inst.operands.
275 /// Returns in an arraylist to armortize allocations.
276 pub fn parseInstructionResultIds(
277 self: *Parser,
278 binary: BinaryModule,
279 inst: Instruction,
280 offsets: *std.ArrayList(u16),
281 ) !void {
282 const index = self.opcode_table.get(mapSetAndOpcode(.core, @intFromEnum(inst.opcode))).?;
283 const operands = InstructionSet.core.instructions()[index].operands;
284
285 var offset: usize = 0;
286 switch (inst.opcode) {
287 .OpSpecConstantOp => {
288 assert(operands[0].kind == .IdResultType);
289 assert(operands[1].kind == .IdResult);
290 offset = try self.parseOperandsResultIds(binary, inst, operands[0..2], offset, offsets);
291
292 if (offset >= inst.operands.len) return error.InvalidPhysicalFormat;
293 const spec_opcode = std.math.cast(u16, inst.operands[offset]) orelse return error.InvalidPhysicalFormat;
294 const spec_index = self.opcode_table.get(mapSetAndOpcode(.core, spec_opcode)) orelse
295 return error.InvalidPhysicalFormat;
296 const spec_operands = InstructionSet.core.instructions()[spec_index].operands;
297 assert(spec_operands[0].kind == .IdResultType);
298 assert(spec_operands[1].kind == .IdResult);
299 offset = try self.parseOperandsResultIds(binary, inst, spec_operands[2..], offset + 1, offsets);
300 },
301 .OpExtInst => {
302 assert(operands[0].kind == .IdResultType);
303 assert(operands[1].kind == .IdResult);
304 offset = try self.parseOperandsResultIds(binary, inst, operands[0..2], offset, offsets);
305
306 if (offset + 1 >= inst.operands.len) return error.InvalidPhysicalFormat;
307 const set_id: ResultId = @enumFromInt(inst.operands[offset]);
308 try offsets.append(@intCast(offset));
309 const set = binary.ext_inst_map.get(set_id) orelse {
310 log.err("invalid instruction set {}", .{@intFromEnum(set_id)});
311 return error.InvalidId;
312 };
313 const ext_opcode = std.math.cast(u16, inst.operands[offset + 1]) orelse return error.InvalidPhysicalFormat;
314 const ext_index = self.opcode_table.get(mapSetAndOpcode(set, ext_opcode)) orelse
315 return error.InvalidPhysicalFormat;
316 const ext_operands = set.instructions()[ext_index].operands;
317 offset = try self.parseOperandsResultIds(binary, inst, ext_operands, offset + 2, offsets);
318 },
319 else => {
320 offset = try self.parseOperandsResultIds(binary, inst, operands, offset, offsets);
321 },
322 }
323
324 if (offset != inst.operands.len) return error.InvalidPhysicalFormat;
325 }
326
327 fn parseOperandsResultIds(
328 self: *Parser,
329 binary: BinaryModule,
330 inst: Instruction,
331 operands: []const spec.Operand,
332 start_offset: usize,
333 offsets: *std.ArrayList(u16),
334 ) !usize {
335 var offset = start_offset;
336 for (operands) |operand| {
337 offset = try self.parseOperandResultIds(binary, inst, operand, offset, offsets);
338 }
339 return offset;
340 }
341
342 fn parseOperandResultIds(
343 self: *Parser,
344 binary: BinaryModule,
345 inst: Instruction,
346 operand: spec.Operand,
347 start_offset: usize,
348 offsets: *std.ArrayList(u16),
349 ) !usize {
350 var offset = start_offset;
351 switch (operand.quantifier) {
352 .variadic => while (offset < inst.operands.len) {
353 offset = try self.parseOperandKindResultIds(binary, inst, operand.kind, offset, offsets);
354 },
355 .optional => if (offset < inst.operands.len) {
356 offset = try self.parseOperandKindResultIds(binary, inst, operand.kind, offset, offsets);
357 },
358 .required => {
359 offset = try self.parseOperandKindResultIds(binary, inst, operand.kind, offset, offsets);
360 },
361 }
362 return offset;
363 }
364
365 fn parseOperandKindResultIds(
366 self: *Parser,
367 binary: BinaryModule,
368 inst: Instruction,
369 kind: spec.OperandKind,
370 start_offset: usize,
371 offsets: *std.ArrayList(u16),
372 ) !usize {
373 var offset = start_offset;
374 if (offset >= inst.operands.len) return error.InvalidPhysicalFormat;
375
376 switch (kind.category()) {
377 .bit_enum => {
378 const mask = inst.operands[offset];
379 offset += 1;
380 for (kind.enumerants()) |enumerant| {
381 if ((mask & enumerant.value) != 0) {
382 for (enumerant.parameters) |param_kind| {
383 offset = try self.parseOperandKindResultIds(binary, inst, param_kind, offset, offsets);
384 }
385 }
386 }
387 },
388 .value_enum => {
389 const value = inst.operands[offset];
390 offset += 1;
391 for (kind.enumerants()) |enumerant| {
392 if (value == enumerant.value) {
393 for (enumerant.parameters) |param_kind| {
394 offset = try self.parseOperandKindResultIds(binary, inst, param_kind, offset, offsets);
395 }
396 break;
397 }
398 }
399 },
400 .id => {
401 try offsets.append(@intCast(offset));
402 offset += 1;
403 },
404 else => switch (kind) {
405 .LiteralInteger, .LiteralFloat => offset += 1,
406 .LiteralString => while (true) {
407 if (offset >= inst.operands.len) return error.InvalidPhysicalFormat;
408 const word = inst.operands[offset];
409 offset += 1;
410
411 if (word & 0xFF000000 == 0 or
412 word & 0x00FF0000 == 0 or
413 word & 0x0000FF00 == 0 or
414 word & 0x000000FF == 0)
415 {
416 break;
417 }
418 },
419 .LiteralContextDependentNumber => {
420 assert(inst.opcode == .OpConstant or inst.opcode == .OpSpecConstantOp);
421 const bit_width = binary.arith_type_width.get(@enumFromInt(inst.operands[0])) orelse {
422 log.err("invalid LiteralContextDependentNumber type {}", .{inst.operands[0]});
423 return error.InvalidId;
424 };
425 offset += switch (bit_width) {
426 1...32 => 1,
427 33...64 => 2,
428 else => unreachable,
429 };
430 },
431 .LiteralExtInstInteger => unreachable,
432 .LiteralSpecConstantOpInteger => unreachable,
433 .PairLiteralIntegerIdRef => { // Switch case
434 assert(inst.opcode == .OpSwitch);
435 const bit_width = binary.arith_type_width.get(@enumFromInt(inst.operands[0])) orelse {
436 log.err("invalid OpSwitch type {}", .{inst.operands[0]});
437 return error.InvalidId;
438 };
439 offset += switch (bit_width) {
440 1...32 => 1,
441 33...64 => 2,
442 else => unreachable,
443 };
444 try offsets.append(@intCast(offset));
445 offset += 1;
446 },
447 .PairIdRefLiteralInteger => {
448 try offsets.append(@intCast(offset));
449 offset += 2;
450 },
451 .PairIdRefIdRef => {
452 try offsets.append(@intCast(offset));
453 try offsets.append(@intCast(offset + 1));
454 offset += 2;
455 },
456 else => unreachable,
457 },
458 }
459 return offset;
460 }
461};
src/link/SpirV/lower_invocation_globals.zig created+700
......@@ -0,0 +1,700 @@
1const std = @import("std");
2const Allocator = std.mem.Allocator;
3const assert = std.debug.assert;
4const log = std.log.scoped(.spirv_link);
5
6const BinaryModule = @import("BinaryModule.zig");
7const Section = @import("../../codegen/spirv/Section.zig");
8const spec = @import("../../codegen/spirv/spec.zig");
9const ResultId = spec.IdResult;
10const Word = spec.Word;
11
12/// This structure contains all the stuff that we need to parse from the module in
13/// order to run this pass, as well as some functions to ease its use.
14const ModuleInfo = struct {
15 /// Information about a particular function.
16 const Fn = struct {
17 /// The index of the first callee in `callee_store`.
18 first_callee: usize,
19 /// The return type id of this function
20 return_type: ResultId,
21 /// The parameter types of this function
22 param_types: []const ResultId,
23 /// The set of (result-id's of) invocation globals that are accessed
24 /// in this function, or after resolution, that are accessed in this
25 /// function or any of it's callees.
26 invocation_globals: std.AutoArrayHashMapUnmanaged(ResultId, void),
27 };
28
29 /// Information about a particular invocation global
30 const InvocationGlobal = struct {
31 /// The list of invocation globals that this invocation global
32 /// depends on.
33 dependencies: std.AutoArrayHashMapUnmanaged(ResultId, void),
34 /// The invocation global's type
35 ty: ResultId,
36 /// Initializer function. May be `none`.
37 /// Note that if the initializer is `none`, then `dependencies` is empty.
38 initializer: ResultId,
39 };
40
41 /// Maps function result-id -> Fn information structure.
42 functions: std.AutoArrayHashMapUnmanaged(ResultId, Fn),
43 /// Set of OpFunction result-ids in this module.
44 entry_points: std.AutoArrayHashMapUnmanaged(ResultId, void),
45 /// For each function, a list of function result-ids that it calls.
46 callee_store: []const ResultId,
47 /// Maps each invocation global result-id to a type-id.
48 invocation_globals: std.AutoArrayHashMapUnmanaged(ResultId, InvocationGlobal),
49
50 /// Fetch the list of callees per function. Guaranteed to contain only unique IDs.
51 fn callees(self: ModuleInfo, fn_id: ResultId) []const ResultId {
52 const fn_index = self.functions.getIndex(fn_id).?;
53 const values = self.functions.values();
54 const first_callee = values[fn_index].first_callee;
55 if (fn_index == values.len - 1) {
56 return self.callee_store[first_callee..];
57 } else {
58 const next_first_callee = values[fn_index + 1].first_callee;
59 return self.callee_store[first_callee..next_first_callee];
60 }
61 }
62
63 /// Extract most of the required information from the binary. The remaining info is
64 /// constructed by `resolve()`.
65 fn parse(
66 arena: Allocator,
67 parser: *BinaryModule.Parser,
68 binary: BinaryModule,
69 ) BinaryModule.ParseError!ModuleInfo {
70 var entry_points = std.AutoArrayHashMap(ResultId, void).init(arena);
71 var functions = std.AutoArrayHashMap(ResultId, Fn).init(arena);
72 var fn_types = std.AutoHashMap(ResultId, struct {
73 return_type: ResultId,
74 param_types: []const ResultId,
75 }).init(arena);
76 var calls = std.AutoArrayHashMap(ResultId, void).init(arena);
77 var callee_store = std.ArrayList(ResultId).init(arena);
78 var function_invocation_globals = std.AutoArrayHashMap(ResultId, void).init(arena);
79 var result_id_offsets = std.ArrayList(u16).init(arena);
80 var invocation_globals = std.AutoArrayHashMap(ResultId, InvocationGlobal).init(arena);
81
82 var maybe_current_function: ?ResultId = null;
83 var fn_ty_id: ResultId = undefined;
84
85 var it = binary.iterateInstructions();
86 while (it.next()) |inst| {
87 result_id_offsets.items.len = 0;
88 try parser.parseInstructionResultIds(binary, inst, &result_id_offsets);
89
90 switch (inst.opcode) {
91 .OpEntryPoint => {
92 const entry_point: ResultId = @enumFromInt(inst.operands[1]);
93 const entry = try entry_points.getOrPut(entry_point);
94 if (entry.found_existing) {
95 log.err("Entry point type {} has duplicate definition", .{entry_point});
96 return error.DuplicateId;
97 }
98 },
99 .OpTypeFunction => {
100 const fn_type: ResultId = @enumFromInt(inst.operands[0]);
101 const return_type: ResultId = @enumFromInt(inst.operands[1]);
102 const param_types: []const ResultId = @ptrCast(inst.operands[2..]);
103
104 const entry = try fn_types.getOrPut(fn_type);
105 if (entry.found_existing) {
106 log.err("Function type {} has duplicate definition", .{fn_type});
107 return error.DuplicateId;
108 }
109
110 entry.value_ptr.* = .{
111 .return_type = return_type,
112 .param_types = param_types,
113 };
114 },
115 .OpExtInst => {
116 // Note: format and set are already verified by parseInstructionResultIds().
117 const global_type: ResultId = @enumFromInt(inst.operands[0]);
118 const result_id: ResultId = @enumFromInt(inst.operands[1]);
119 const set_id: ResultId = @enumFromInt(inst.operands[2]);
120 const set_inst = inst.operands[3];
121
122 const set = binary.ext_inst_map.get(set_id).?;
123 if (set == .zig and set_inst == 0) {
124 const initializer: ResultId = if (inst.operands.len >= 5)
125 @enumFromInt(inst.operands[4])
126 else
127 .none;
128
129 try invocation_globals.put(result_id, .{
130 .dependencies = .{},
131 .ty = global_type,
132 .initializer = initializer,
133 });
134 }
135 },
136 .OpFunction => {
137 if (maybe_current_function) |current_function| {
138 log.err("OpFunction {} does not have an OpFunctionEnd", .{current_function});
139 return error.InvalidPhysicalFormat;
140 }
141
142 maybe_current_function = @enumFromInt(inst.operands[1]);
143 fn_ty_id = @enumFromInt(inst.operands[3]);
144 function_invocation_globals.clearRetainingCapacity();
145 },
146 .OpFunctionCall => {
147 const callee: ResultId = @enumFromInt(inst.operands[2]);
148 try calls.put(callee, {});
149 },
150 .OpFunctionEnd => {
151 const current_function = maybe_current_function orelse {
152 log.err("encountered OpFunctionEnd without corresponding OpFunction", .{});
153 return error.InvalidPhysicalFormat;
154 };
155 const entry = try functions.getOrPut(current_function);
156 if (entry.found_existing) {
157 log.err("Function {} has duplicate definition", .{current_function});
158 return error.DuplicateId;
159 }
160
161 const first_callee = callee_store.items.len;
162 try callee_store.appendSlice(calls.keys());
163
164 const fn_type = fn_types.get(fn_ty_id) orelse {
165 log.err("Function {} has invalid OpFunction type", .{current_function});
166 return error.InvalidId;
167 };
168
169 entry.value_ptr.* = .{
170 .first_callee = first_callee,
171 .return_type = fn_type.return_type,
172 .param_types = fn_type.param_types,
173 .invocation_globals = try function_invocation_globals.unmanaged.clone(arena),
174 };
175 maybe_current_function = null;
176 calls.clearRetainingCapacity();
177 },
178 else => {},
179 }
180
181 for (result_id_offsets.items) |off| {
182 const result_id: ResultId = @enumFromInt(inst.operands[off]);
183 if (invocation_globals.contains(result_id)) {
184 try function_invocation_globals.put(result_id, {});
185 }
186 }
187 }
188
189 if (maybe_current_function) |current_function| {
190 log.err("OpFunction {} does not have an OpFunctionEnd", .{current_function});
191 return error.InvalidPhysicalFormat;
192 }
193
194 return ModuleInfo{
195 .functions = functions.unmanaged,
196 .entry_points = entry_points.unmanaged,
197 .callee_store = callee_store.items,
198 .invocation_globals = invocation_globals.unmanaged,
199 };
200 }
201
202 /// Derive the remaining info from the structures filled in by parsing.
203 fn resolve(self: *ModuleInfo, arena: Allocator) !void {
204 try self.resolveInvocationGlobalUsage(arena);
205 try self.resolveInvocationGlobalDependencies(arena);
206 }
207
208 /// For each function, extend the list of `invocation_globals` with the
209 /// invocation globals that ALL of its dependencies use.
210 fn resolveInvocationGlobalUsage(self: *ModuleInfo, arena: Allocator) !void {
211 var seen = try std.DynamicBitSetUnmanaged.initEmpty(arena, self.functions.count());
212
213 for (self.functions.keys()) |id| {
214 try self.resolveInvocationGlobalUsageStep(arena, id, &seen);
215 }
216 }
217
218 fn resolveInvocationGlobalUsageStep(
219 self: *ModuleInfo,
220 arena: Allocator,
221 id: ResultId,
222 seen: *std.DynamicBitSetUnmanaged,
223 ) !void {
224 const index = self.functions.getIndex(id) orelse {
225 log.err("function calls invalid function {}", .{id});
226 return error.InvalidId;
227 };
228
229 if (seen.isSet(index)) {
230 return;
231 }
232 seen.set(index);
233
234 const info = &self.functions.values()[index];
235 for (self.callees(id)) |callee| {
236 try self.resolveInvocationGlobalUsageStep(arena, callee, seen);
237 const callee_info = self.functions.get(callee).?;
238 for (callee_info.invocation_globals.keys()) |global| {
239 try info.invocation_globals.put(arena, global, {});
240 }
241 }
242 }
243
244 /// For each invocation global, populate and fully resolve the `dependencies` set.
245 /// This requires `resolveInvocationGlobalUsage()` to be already done.
246 fn resolveInvocationGlobalDependencies(
247 self: *ModuleInfo,
248 arena: Allocator,
249 ) !void {
250 var seen = try std.DynamicBitSetUnmanaged.initEmpty(arena, self.invocation_globals.count());
251
252 for (self.invocation_globals.keys()) |id| {
253 try self.resolveInvocationGlobalDependenciesStep(arena, id, &seen);
254 }
255 }
256
257 fn resolveInvocationGlobalDependenciesStep(
258 self: *ModuleInfo,
259 arena: Allocator,
260 id: ResultId,
261 seen: *std.DynamicBitSetUnmanaged,
262 ) !void {
263 const index = self.invocation_globals.getIndex(id) orelse {
264 log.err("invalid invocation global {}", .{id});
265 return error.InvalidId;
266 };
267
268 if (seen.isSet(index)) {
269 return;
270 }
271 seen.set(index);
272
273 const info = &self.invocation_globals.values()[index];
274 if (info.initializer == .none) {
275 return;
276 }
277
278 const initializer = self.functions.get(info.initializer) orelse {
279 log.err("invocation global {} has invalid initializer {}", .{ id, info.initializer });
280 return error.InvalidId;
281 };
282
283 for (initializer.invocation_globals.keys()) |dependency| {
284 if (dependency == id) {
285 // The set of invocation global dependencies includes the dependency itself,
286 // so we need to skip that case.
287 continue;
288 }
289
290 try info.dependencies.put(arena, dependency, {});
291 try self.resolveInvocationGlobalDependenciesStep(arena, dependency, seen);
292
293 const dep_info = self.invocation_globals.getPtr(dependency).?;
294
295 for (dep_info.dependencies.keys()) |global| {
296 try info.dependencies.put(arena, global, {});
297 }
298 }
299 }
300};
301
302const ModuleBuilder = struct {
303 const FunctionType = struct {
304 return_type: ResultId,
305 param_types: []const ResultId,
306
307 const Context = struct {
308 pub fn hash(_: @This(), ty: FunctionType) u32 {
309 var hasher = std.hash.Wyhash.init(0);
310 hasher.update(std.mem.asBytes(&ty.return_type));
311 hasher.update(std.mem.sliceAsBytes(ty.param_types));
312 return @truncate(hasher.final());
313 }
314
315 pub fn eql(_: @This(), a: FunctionType, b: FunctionType, _: usize) bool {
316 if (a.return_type != b.return_type) return false;
317 return std.mem.eql(ResultId, a.param_types, b.param_types);
318 }
319 };
320 };
321
322 const FunctionNewInfo = struct {
323 /// This is here just so that we don't need to allocate the new
324 /// param_types multiple times.
325 new_function_type: ResultId,
326 /// The first ID of the parameters for the invocation globals.
327 /// Each global is allocate here according to the index in
328 /// `ModuleInfo.Fn.invocation_globals`.
329 global_id_base: u32,
330
331 fn invocationGlobalId(self: FunctionNewInfo, index: usize) ResultId {
332 return @enumFromInt(self.global_id_base + @as(u32, @intCast(index)));
333 }
334 };
335
336 arena: Allocator,
337 section: Section,
338 /// The ID bound of the new module.
339 id_bound: u32,
340 /// The first ID of the new entry points. Entry points are allocated from
341 /// here according to their index in `info.entry_points`.
342 entry_point_new_id_base: u32,
343 /// A set of all function types in the new program. SPIR-V mandates that these are unique,
344 /// and until a general type deduplication pass is programmed, we just handle it here via this.
345 function_types: std.ArrayHashMapUnmanaged(FunctionType, ResultId, FunctionType.Context, true) = .{},
346 /// Maps functions to new information required for creating the module
347 function_new_info: std.AutoArrayHashMapUnmanaged(ResultId, FunctionNewInfo) = .{},
348 /// Offset of the functions section in the new binary.
349 new_functions_section: ?usize,
350
351 fn init(arena: Allocator, binary: BinaryModule, info: ModuleInfo) !ModuleBuilder {
352 var self = ModuleBuilder{
353 .arena = arena,
354 .section = .{},
355 .id_bound = binary.id_bound,
356 .entry_point_new_id_base = undefined,
357 .new_functions_section = null,
358 };
359 self.entry_point_new_id_base = @intFromEnum(self.allocIds(@intCast(info.entry_points.count())));
360 return self;
361 }
362
363 fn allocId(self: *ModuleBuilder) ResultId {
364 return self.allocIds(1);
365 }
366
367 fn allocIds(self: *ModuleBuilder, n: u32) ResultId {
368 defer self.id_bound += n;
369 return @enumFromInt(self.id_bound);
370 }
371
372 fn finalize(self: *ModuleBuilder, a: Allocator, binary: *BinaryModule) !void {
373 binary.id_bound = self.id_bound;
374 binary.instructions = try a.dupe(Word, self.section.instructions.items);
375 // Nothing is removed in this pass so we don't need to change any of the maps,
376 // just make sure the section is updated.
377 binary.sections.functions = self.new_functions_section orelse binary.instructions.len;
378 }
379
380 /// Process everything from `binary` up to the first function and emit it into the builder.
381 fn processPreamble(self: *ModuleBuilder, binary: BinaryModule, info: ModuleInfo) !void {
382 var it = binary.iterateInstructions();
383 while (it.next()) |inst| {
384 switch (inst.opcode) {
385 .OpExtInst => {
386 const set_id: ResultId = @enumFromInt(inst.operands[2]);
387 const set_inst = inst.operands[3];
388 const set = binary.ext_inst_map.get(set_id).?;
389 if (set == .zig and set_inst == 0) {
390 continue;
391 }
392 },
393 .OpEntryPoint => {
394 const original_id: ResultId = @enumFromInt(inst.operands[1]);
395 const new_id_index = info.entry_points.getIndex(original_id).?;
396 const new_id: ResultId = @enumFromInt(self.entry_point_new_id_base + new_id_index);
397 try self.section.emitRaw(self.arena, .OpEntryPoint, inst.operands.len);
398 self.section.writeWord(inst.operands[0]);
399 self.section.writeOperand(ResultId, new_id);
400 self.section.writeWords(inst.operands[2..]);
401 continue;
402 },
403 .OpTypeFunction => {
404 // Re-emitted in `emitFunctionTypes()`. We can do this because
405 // OpTypeFunction's may not currently be used anywhere that is not
406 // directly with an OpFunction. For now we igore Intels function
407 // pointers extension, that is not a problem with a generalized
408 // pass anyway.
409 continue;
410 },
411 .OpFunction => break,
412 else => {},
413 }
414
415 try self.section.emitRawInstruction(self.arena, inst.opcode, inst.operands);
416 }
417 }
418
419 /// Derive new information required for further emitting this module,
420 fn deriveNewFnInfo(self: *ModuleBuilder, info: ModuleInfo) !void {
421 for (info.functions.keys(), info.functions.values()) |func, fn_info| {
422 const invocation_global_count = fn_info.invocation_globals.count();
423 const new_param_types = try self.arena.alloc(ResultId, fn_info.param_types.len + invocation_global_count);
424 for (fn_info.invocation_globals.keys(), 0..) |global, i| {
425 new_param_types[i] = info.invocation_globals.get(global).?.ty;
426 }
427 @memcpy(new_param_types[invocation_global_count..], fn_info.param_types);
428
429 const new_type = try self.internFunctionType(fn_info.return_type, new_param_types);
430 try self.function_new_info.put(self.arena, func, .{
431 .new_function_type = new_type,
432 .global_id_base = @intFromEnum(self.allocIds(@intCast(invocation_global_count))),
433 });
434 }
435 }
436
437 /// Emit the new function types, which include the parameters for the invocation globals.
438 /// Currently, this function re-emits ALL function types to ensure that there are
439 /// no duplicates in the final program.
440 /// TODO: The above should be resolved by a generalized deduplication pass, and then
441 /// we only need to emit the new function pointers type here.
442 fn emitFunctionTypes(self: *ModuleBuilder, info: ModuleInfo) !void {
443 // TODO: Handle decorators. Function types usually don't have those
444 // though, but stuff like OpName could be a possibility.
445
446 // Entry points retain their old function type, so make sure to emit
447 // those in the `function_types` set.
448 for (info.entry_points.keys()) |func| {
449 const fn_info = info.functions.get(func).?;
450 _ = try self.internFunctionType(fn_info.return_type, fn_info.param_types);
451 }
452
453 for (self.function_types.keys(), self.function_types.values()) |fn_type, result_id| {
454 try self.section.emit(self.arena, .OpTypeFunction, .{
455 .id_result = result_id,
456 .return_type = fn_type.return_type,
457 .id_ref_2 = fn_type.param_types,
458 });
459 }
460 }
461
462 fn internFunctionType(self: *ModuleBuilder, return_type: ResultId, param_types: []const ResultId) !ResultId {
463 const entry = try self.function_types.getOrPut(self.arena, .{
464 .return_type = return_type,
465 .param_types = param_types,
466 });
467
468 if (!entry.found_existing) {
469 const new_id = self.allocId();
470 entry.value_ptr.* = new_id;
471 }
472
473 return entry.value_ptr.*;
474 }
475
476 /// Rewrite the modules' functions and emit them with the new parameter types.
477 fn rewriteFunctions(
478 self: *ModuleBuilder,
479 parser: *BinaryModule.Parser,
480 binary: BinaryModule,
481 info: ModuleInfo,
482 ) !void {
483 var result_id_offsets = std.ArrayList(u16).init(self.arena);
484 var operands = std.ArrayList(u32).init(self.arena);
485
486 var maybe_current_function: ?ResultId = null;
487 var it = binary.iterateInstructionsFrom(binary.sections.functions);
488 self.new_functions_section = self.section.instructions.items.len;
489 while (it.next()) |inst| {
490 result_id_offsets.items.len = 0;
491 try parser.parseInstructionResultIds(binary, inst, &result_id_offsets);
492
493 operands.items.len = 0;
494 try operands.appendSlice(inst.operands);
495
496 // Replace the result-ids with the global's new result-id if required.
497 for (result_id_offsets.items) |off| {
498 const result_id: ResultId = @enumFromInt(operands.items[off]);
499 if (info.invocation_globals.contains(result_id)) {
500 const func = maybe_current_function.?;
501 const new_info = self.function_new_info.get(func).?;
502 const fn_info = info.functions.get(func).?;
503 const index = fn_info.invocation_globals.getIndex(result_id).?;
504 operands.items[off] = @intFromEnum(new_info.invocationGlobalId(index));
505 }
506 }
507
508 switch (inst.opcode) {
509 .OpFunction => {
510 // Re-declare the function with the new parameters.
511 const func: ResultId = @enumFromInt(operands.items[1]);
512 const fn_info = info.functions.get(func).?;
513 const new_info = self.function_new_info.get(func).?;
514
515 try self.section.emitRaw(self.arena, .OpFunction, 4);
516 self.section.writeOperand(ResultId, fn_info.return_type);
517 self.section.writeOperand(ResultId, func);
518 self.section.writeWord(operands.items[2]);
519 self.section.writeOperand(ResultId, new_info.new_function_type);
520
521 // Emit the OpFunctionParameters for the invocation globals. The functions
522 // actual parameters are emitted unchanged from their original form, so
523 // we don't need to handle those here.
524
525 for (fn_info.invocation_globals.keys(), 0..) |global, index| {
526 const ty = info.invocation_globals.get(global).?.ty;
527 const id = new_info.invocationGlobalId(index);
528 try self.section.emit(self.arena, .OpFunctionParameter, .{
529 .id_result_type = ty,
530 .id_result = id,
531 });
532 }
533
534 maybe_current_function = func;
535 },
536 .OpFunctionCall => {
537 // Add the required invocation globals to the function's new parameter list.
538 const caller = maybe_current_function.?;
539 const callee: ResultId = @enumFromInt(operands.items[2]);
540 const caller_info = info.functions.get(caller).?;
541 const callee_info = info.functions.get(callee).?;
542 const caller_new_info = self.function_new_info.get(caller).?;
543 const total_params = callee_info.invocation_globals.count() + callee_info.param_types.len;
544
545 try self.section.emitRaw(self.arena, .OpFunctionCall, 3 + total_params);
546 self.section.writeWord(operands.items[0]); // Copy result type-id
547 self.section.writeWord(operands.items[1]); // Copy result-id
548 self.section.writeOperand(ResultId, callee);
549
550 // Add the new arguments
551 for (callee_info.invocation_globals.keys()) |global| {
552 const caller_global_index = caller_info.invocation_globals.getIndex(global).?;
553 const id = caller_new_info.invocationGlobalId(caller_global_index);
554 self.section.writeOperand(ResultId, id);
555 }
556
557 // Add the original arguments
558 self.section.writeWords(operands.items[3..]);
559 },
560 else => {
561 try self.section.emitRawInstruction(self.arena, inst.opcode, operands.items);
562 },
563 }
564 }
565 }
566
567 fn emitNewEntryPoints(self: *ModuleBuilder, info: ModuleInfo) !void {
568 var all_function_invocation_globals = std.AutoArrayHashMap(ResultId, void).init(self.arena);
569
570 for (info.entry_points.keys(), 0..) |func, entry_point_index| {
571 const fn_info = info.functions.get(func).?;
572 const ep_id: ResultId = @enumFromInt(self.entry_point_new_id_base + @as(u32, @intCast(entry_point_index)));
573 const fn_type = self.function_types.get(.{
574 .return_type = fn_info.return_type,
575 .param_types = fn_info.param_types,
576 }).?;
577
578 try self.section.emit(self.arena, .OpFunction, .{
579 .id_result_type = fn_info.return_type,
580 .id_result = ep_id,
581 .function_control = .{}, // TODO: Copy the attributes from the original function maybe?
582 .function_type = fn_type,
583 });
584
585 // Emit OpFunctionParameter instructions for the original kernel's parameters.
586 const params_id_base: u32 = @intFromEnum(self.allocIds(@intCast(fn_info.param_types.len)));
587 for (fn_info.param_types, 0..) |param_type, i| {
588 const id: ResultId = @enumFromInt(params_id_base + @as(u32, @intCast(i)));
589 try self.section.emit(self.arena, .OpFunctionParameter, .{
590 .id_result_type = param_type,
591 .id_result = id,
592 });
593 }
594
595 try self.section.emit(self.arena, .OpLabel, .{
596 .id_result = self.allocId(),
597 });
598
599 // Besides the IDs of the main kernel, we also need the
600 // dependencies of the globals.
601 // Just quickly construct that set here.
602 all_function_invocation_globals.clearRetainingCapacity();
603 for (fn_info.invocation_globals.keys()) |global| {
604 try all_function_invocation_globals.put(global, {});
605 const global_info = info.invocation_globals.get(global).?;
606 for (global_info.dependencies.keys()) |dependency| {
607 try all_function_invocation_globals.put(dependency, {});
608 }
609 }
610
611 // Declare the IDs of the invocation globals.
612 const global_id_base: u32 = @intFromEnum(self.allocIds(@intCast(all_function_invocation_globals.count())));
613 for (all_function_invocation_globals.keys(), 0..) |global, i| {
614 const global_info = info.invocation_globals.get(global).?;
615
616 const id: ResultId = @enumFromInt(global_id_base + @as(u32, @intCast(i)));
617 try self.section.emit(self.arena, .OpVariable, .{
618 .id_result_type = global_info.ty,
619 .id_result = id,
620 .storage_class = .Function,
621 .initializer = null,
622 });
623 }
624
625 // Call initializers for invocation globals that need it
626 for (all_function_invocation_globals.keys()) |global| {
627 const global_info = info.invocation_globals.get(global).?;
628 if (global_info.initializer == .none) continue;
629
630 const initializer_info = info.functions.get(global_info.initializer).?;
631 assert(initializer_info.param_types.len == 0);
632
633 try self.callWithGlobalsAndLinearParams(
634 all_function_invocation_globals,
635 global_info.initializer,
636 initializer_info,
637 global_id_base,
638 undefined,
639 );
640 }
641
642 // Call the main kernel entry
643 try self.callWithGlobalsAndLinearParams(
644 all_function_invocation_globals,
645 func,
646 fn_info,
647 global_id_base,
648 params_id_base,
649 );
650
651 try self.section.emit(self.arena, .OpReturn, {});
652 try self.section.emit(self.arena, .OpFunctionEnd, {});
653 }
654 }
655
656 fn callWithGlobalsAndLinearParams(
657 self: *ModuleBuilder,
658 all_globals: std.AutoArrayHashMap(ResultId, void),
659 func: ResultId,
660 callee_info: ModuleInfo.Fn,
661 global_id_base: u32,
662 params_id_base: u32,
663 ) !void {
664 const total_arguments = callee_info.invocation_globals.count() + callee_info.param_types.len;
665 try self.section.emitRaw(self.arena, .OpFunctionCall, 3 + total_arguments);
666 self.section.writeOperand(ResultId, callee_info.return_type);
667 self.section.writeOperand(ResultId, self.allocId());
668 self.section.writeOperand(ResultId, func);
669
670 // Add the invocation globals
671 for (callee_info.invocation_globals.keys()) |global| {
672 const index = all_globals.getIndex(global).?;
673 const id: ResultId = @enumFromInt(global_id_base + @as(u32, @intCast(index)));
674 self.section.writeOperand(ResultId, id);
675 }
676
677 // Add the arguments
678 for (0..callee_info.param_types.len) |index| {
679 const id: ResultId = @enumFromInt(params_id_base + @as(u32, @intCast(index)));
680 self.section.writeOperand(ResultId, id);
681 }
682 }
683};
684
685pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
686 var arena = std.heap.ArenaAllocator.init(parser.a);
687 defer arena.deinit();
688 const a = arena.allocator();
689
690 var info = try ModuleInfo.parse(a, parser, binary.*);
691 try info.resolve(a);
692
693 var builder = try ModuleBuilder.init(a, binary.*, info);
694 try builder.deriveNewFnInfo(info);
695 try builder.processPreamble(binary.*, info);
696 try builder.emitFunctionTypes(info);
697 try builder.rewriteFunctions(parser, binary.*, info);
698 try builder.emitNewEntryPoints(info);
699 try builder.finalize(parser.a, binary);
700}
src/link/SpirV/prune_unused.zig created+354
......@@ -0,0 +1,354 @@
1//! This pass is used to simple pruning of unused things:
2//! - Instructions at global scope
3//! - Functions
4//! Debug info and nonsemantic instructions are not handled;
5//! this pass is mainly intended for cleaning up left over
6//! stuff from codegen and other passes that is generated
7//! but not actually used.
8
9const std = @import("std");
10const Allocator = std.mem.Allocator;
11const assert = std.debug.assert;
12const log = std.log.scoped(.spirv_link);
13
14const BinaryModule = @import("BinaryModule.zig");
15const Section = @import("../../codegen/spirv/Section.zig");
16const spec = @import("../../codegen/spirv/spec.zig");
17const Opcode = spec.Opcode;
18const ResultId = spec.IdResult;
19const Word = spec.Word;
20
21/// Return whether a particular opcode's instruction can be pruned.
22/// These are idempotent instructions at globals scope and instructions
23/// within functions that do not have any side effects.
24/// The opcodes that return true here do not necessarily need to
25/// have an .IdResult. If they don't, then they are regarded
26/// as 'decoration'-style instructions that don't keep their
27/// operands alive, but will be emitted if they are.
28fn canPrune(op: Opcode) bool {
29 // This list should be as worked out as possible, but just
30 // getting common instructions is a good effort/effect ratio.
31 // When adding items to this list, also check whether the
32 // instruction requires any special control flow rules (like
33 // with labels and control flow and stuff) and whether the
34 // instruction has any non-trivial side effects (like OpLoad
35 // with the Volatile memory semantics).
36 return switch (op.class()) {
37 .TypeDeclaration,
38 .Conversion,
39 .Arithmetic,
40 .RelationalAndLogical,
41 .Bit,
42 => true,
43 else => switch (op) {
44 .OpFunction,
45 .OpUndef,
46 .OpString,
47 .OpName,
48 .OpMemberName,
49 // Prune OpConstant* instructions but
50 // retain OpSpecConstant declaration instructions
51 .OpConstantTrue,
52 .OpConstantFalse,
53 .OpConstant,
54 .OpConstantComposite,
55 .OpConstantSampler,
56 .OpConstantNull,
57 .OpSpecConstantOp,
58 // Prune ext inst import instructions, but not
59 // ext inst instructions themselves, because
60 // we don't know if they might have side effects.
61 .OpExtInstImport,
62 => true,
63 else => false,
64 },
65 };
66}
67
68const ModuleInfo = struct {
69 const Fn = struct {
70 /// The index of the first callee in `callee_store`.
71 first_callee: usize,
72 };
73
74 /// Maps function result-id -> Fn information structure.
75 functions: std.AutoArrayHashMapUnmanaged(ResultId, Fn),
76 /// For each function, a list of function result-ids that it calls.
77 callee_store: []const ResultId,
78 /// For each instruction, the offset at which it appears in the source module.
79 result_id_to_code_offset: std.AutoArrayHashMapUnmanaged(ResultId, usize),
80
81 /// Fetch the list of callees per function. Guaranteed to contain only unique IDs.
82 fn callees(self: ModuleInfo, fn_id: ResultId) []const ResultId {
83 const fn_index = self.functions.getIndex(fn_id).?;
84 const values = self.functions.values();
85 const first_callee = values[fn_index].first_callee;
86 if (fn_index == values.len - 1) {
87 return self.callee_store[first_callee..];
88 } else {
89 const next_first_callee = values[fn_index + 1].first_callee;
90 return self.callee_store[first_callee..next_first_callee];
91 }
92 }
93
94 /// Extract the information required to run this pass from the binary.
95 // TODO: Should the contents of this function be merged with that of lower_invocation_globals.zig?
96 // Many of the contents are the same...
97 fn parse(
98 arena: Allocator,
99 parser: *BinaryModule.Parser,
100 binary: BinaryModule,
101 ) !ModuleInfo {
102 var functions = std.AutoArrayHashMap(ResultId, Fn).init(arena);
103 var calls = std.AutoArrayHashMap(ResultId, void).init(arena);
104 var callee_store = std.ArrayList(ResultId).init(arena);
105 var result_id_to_code_offset = std.AutoArrayHashMap(ResultId, usize).init(arena);
106 var maybe_current_function: ?ResultId = null;
107 var it = binary.iterateInstructions();
108 while (it.next()) |inst| {
109 const inst_spec = parser.getInstSpec(inst.opcode).?;
110
111 // Result-id can only be the first or second operand
112 const maybe_result_id: ?ResultId = for (0..2) |i| {
113 if (inst_spec.operands.len > i and inst_spec.operands[i].kind == .IdResult) {
114 break @enumFromInt(inst.operands[i]);
115 }
116 } else null;
117
118 // Only add result-ids of functions and anything outside a function.
119 // Result-ids declared inside functions cannot be reached outside anyway,
120 // and we don't care about the internals of functions anyway.
121 // Note that in the case of OpFunction, `maybe_current_function` is
122 // also `null`, because it is set below.
123 if (maybe_result_id) |result_id| {
124 try result_id_to_code_offset.put(result_id, inst.offset);
125 }
126
127 switch (inst.opcode) {
128 .OpFunction => {
129 if (maybe_current_function) |current_function| {
130 log.err("OpFunction {} does not have an OpFunctionEnd", .{current_function});
131 return error.InvalidPhysicalFormat;
132 }
133
134 maybe_current_function = @enumFromInt(inst.operands[1]);
135 },
136 .OpFunctionCall => {
137 const callee: ResultId = @enumFromInt(inst.operands[2]);
138 try calls.put(callee, {});
139 },
140 .OpFunctionEnd => {
141 const current_function = maybe_current_function orelse {
142 log.err("encountered OpFunctionEnd without corresponding OpFunction", .{});
143 return error.InvalidPhysicalFormat;
144 };
145 const entry = try functions.getOrPut(current_function);
146 if (entry.found_existing) {
147 log.err("Function {} has duplicate definition", .{current_function});
148 return error.DuplicateId;
149 }
150
151 const first_callee = callee_store.items.len;
152 try callee_store.appendSlice(calls.keys());
153
154 entry.value_ptr.* = .{
155 .first_callee = first_callee,
156 };
157 maybe_current_function = null;
158 calls.clearRetainingCapacity();
159 },
160 else => {},
161 }
162 }
163
164 if (maybe_current_function) |current_function| {
165 log.err("OpFunction {} does not have an OpFunctionEnd", .{current_function});
166 return error.InvalidPhysicalFormat;
167 }
168
169 return ModuleInfo{
170 .functions = functions.unmanaged,
171 .callee_store = callee_store.items,
172 .result_id_to_code_offset = result_id_to_code_offset.unmanaged,
173 };
174 }
175};
176
177const AliveMarker = struct {
178 parser: *BinaryModule.Parser,
179 binary: BinaryModule,
180 info: ModuleInfo,
181 result_id_offsets: std.ArrayList(u16),
182 alive: std.DynamicBitSetUnmanaged,
183
184 fn markAlive(self: *AliveMarker, result_id: ResultId) BinaryModule.ParseError!void {
185 const index = self.info.result_id_to_code_offset.getIndex(result_id) orelse {
186 log.err("undefined result-id {}", .{result_id});
187 return error.InvalidId;
188 };
189
190 if (self.alive.isSet(index)) {
191 return;
192 }
193 self.alive.set(index);
194
195 const offset = self.info.result_id_to_code_offset.values()[index];
196 const inst = self.binary.instructionAt(offset);
197
198 if (inst.opcode == .OpFunction) {
199 try self.markFunctionAlive(inst);
200 } else {
201 try self.markInstructionAlive(inst);
202 }
203 }
204
205 fn markFunctionAlive(
206 self: *AliveMarker,
207 func_inst: BinaryModule.Instruction,
208 ) !void {
209 // Go through the instruction and mark the
210 // operands of each instruction alive.
211 var it = self.binary.iterateInstructionsFrom(func_inst.offset);
212 try self.markInstructionAlive(it.next().?);
213 while (it.next()) |inst| {
214 if (inst.opcode == .OpFunctionEnd) {
215 break;
216 }
217
218 if (!canPrune(inst.opcode)) {
219 try self.markInstructionAlive(inst);
220 }
221 }
222 }
223
224 fn markInstructionAlive(
225 self: *AliveMarker,
226 inst: BinaryModule.Instruction,
227 ) !void {
228 const start_offset = self.result_id_offsets.items.len;
229 try self.parser.parseInstructionResultIds(self.binary, inst, &self.result_id_offsets);
230 const end_offset = self.result_id_offsets.items.len;
231
232 // Recursive calls to markInstructionAlive() might change the pointer in self.result_id_offsets,
233 // so we need to iterate it manually.
234 var i = start_offset;
235 while (i < end_offset) : (i += 1) {
236 const offset = self.result_id_offsets.items[i];
237 try self.markAlive(@enumFromInt(inst.operands[offset]));
238 }
239 }
240};
241
242fn removeIdsFromMap(a: Allocator, map: anytype, info: ModuleInfo, alive_marker: AliveMarker) !void {
243 var to_remove = std.ArrayList(ResultId).init(a);
244 var it = map.iterator();
245 while (it.next()) |entry| {
246 const id = entry.key_ptr.*;
247 const index = info.result_id_to_code_offset.getIndex(id).?;
248 if (!alive_marker.alive.isSet(index)) {
249 try to_remove.append(id);
250 }
251 }
252
253 for (to_remove.items) |id| {
254 assert(map.remove(id));
255 }
256}
257
258pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
259 var arena = std.heap.ArenaAllocator.init(parser.a);
260 defer arena.deinit();
261 const a = arena.allocator();
262
263 const info = try ModuleInfo.parse(a, parser, binary.*);
264
265 var alive_marker = AliveMarker{
266 .parser = parser,
267 .binary = binary.*,
268 .info = info,
269 .result_id_offsets = std.ArrayList(u16).init(a),
270 .alive = try std.DynamicBitSetUnmanaged.initEmpty(a, info.result_id_to_code_offset.count()),
271 };
272
273 // Mark initial stuff as slive
274 {
275 var it = binary.iterateInstructions();
276 while (it.next()) |inst| {
277 if (inst.opcode == .OpFunction) {
278 // No need to process further.
279 break;
280 } else if (!canPrune(inst.opcode)) {
281 try alive_marker.markInstructionAlive(inst);
282 }
283 }
284 }
285
286 var section = Section{};
287
288 var new_functions_section: ?usize = null;
289 var it = binary.iterateInstructions();
290 skip: while (it.next()) |inst| {
291 const inst_spec = parser.getInstSpec(inst.opcode).?;
292
293 reemit: {
294 if (!canPrune(inst.opcode)) {
295 break :reemit;
296 }
297
298 // Result-id can only be the first or second operand
299 const result_id: ResultId = for (0..2) |i| {
300 if (inst_spec.operands.len > i and inst_spec.operands[i].kind == .IdResult) {
301 break @enumFromInt(inst.operands[i]);
302 }
303 } else {
304 // Instruction can be pruned but doesn't have a result id.
305 // Check all operands to see if they are alive, and emit it only if so.
306 alive_marker.result_id_offsets.items.len = 0;
307 try parser.parseInstructionResultIds(binary.*, inst, &alive_marker.result_id_offsets);
308 for (alive_marker.result_id_offsets.items) |offset| {
309 const id: ResultId = @enumFromInt(inst.operands[offset]);
310 const index = info.result_id_to_code_offset.getIndex(id).?;
311
312 if (!alive_marker.alive.isSet(index)) {
313 continue :skip;
314 }
315 }
316
317 break :reemit;
318 };
319
320 const index = info.result_id_to_code_offset.getIndex(result_id).?;
321 if (alive_marker.alive.isSet(index)) {
322 break :reemit;
323 }
324
325 if (inst.opcode != .OpFunction) {
326 // Instruction can be pruned and its not alive, so skip it.
327 continue :skip;
328 }
329
330 // We're at the start of a function that can be pruned, so skip everything until
331 // we encounter an OpFunctionEnd.
332 while (it.next()) |body_inst| {
333 if (body_inst.opcode == .OpFunctionEnd)
334 break;
335 }
336
337 continue :skip;
338 }
339
340 if (inst.opcode == .OpFunction and new_functions_section == null) {
341 new_functions_section = section.instructions.items.len;
342 }
343
344 try section.emitRawInstruction(a, inst.opcode, inst.operands);
345 }
346
347 // This pass might have pruned ext inst imports or arith types, update
348 // those maps to main consistency.
349 try removeIdsFromMap(a, &binary.ext_inst_map, info, alive_marker);
350 try removeIdsFromMap(a, &binary.arith_type_width, info, alive_marker);
351
352 binary.instructions = try parser.a.dupe(Word, section.toWords());
353 binary.sections.functions = new_functions_section orelse binary.instructions.len;
354}
test/behavior/align.zig+1
......@@ -18,6 +18,7 @@ test "global variable alignment" {
1818test "large alignment of local constant" {
1919 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2020 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
21 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // flaky
2122
2223 const x: f32 align(128) = 12.34;
2324 try std.testing.expect(@intFromPtr(&x) % 128 == 0);
test/behavior/basic.zig+1
......@@ -757,6 +757,7 @@ test "extern variable with non-pointer opaque type" {
757757 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
758758 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
759759 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
760 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
760761
761762 @export(var_to_export, .{ .name = "opaque_extern_var" });
762763 try expect(@as(*align(1) u32, @ptrCast(&opaque_extern_var)).* == 42);
test/behavior/byval_arg_var.zig-1
......@@ -5,7 +5,6 @@ var result: []const u8 = "wrong";
55
66test "pass string literal byvalue to a generic var param" {
77 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
98
109 start();
1110 blowUpStack(10);
test/behavior/cast.zig+2-1
......@@ -1252,7 +1252,6 @@ test "implicit cast from *T to ?*anyopaque" {
12521252 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
12531253 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
12541254 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1255 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
12561255
12571256 var a: u8 = 1;
12581257 incrementVoidPtrValue(&a);
......@@ -2035,6 +2034,8 @@ test "peer type resolution: tuple pointer and optional slice" {
20352034 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
20362035 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
20372036 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2037 // Miscompilation on Intel's OpenCL CPU runtime.
2038 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // flaky
20382039
20392040 var a: ?[:0]const u8 = null;
20402041 var b = &.{ @as(u8, 'x'), @as(u8, 'y'), @as(u8, 'z') };
test/behavior/error.zig-2
......@@ -124,7 +124,6 @@ test "debug info for optional error set" {
124124
125125test "implicit cast to optional to error union to return result loc" {
126126 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
127 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
128127
129128 const S = struct {
130129 fn entry() !void {
......@@ -951,7 +950,6 @@ test "returning an error union containing a type with no runtime bits" {
951950test "try used in recursive function with inferred error set" {
952951 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
953952 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
954 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
955953
956954 const Value = union(enum) {
957955 values: []const @This(),
test/behavior/floatop.zig-2
......@@ -127,7 +127,6 @@ test "cmp f16" {
127127test "cmp f32/f64" {
128128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
129129 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
130 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
131130
132131 try testCmp(f32);
133132 try comptime testCmp(f32);
......@@ -979,7 +978,6 @@ test "@abs f32/f64" {
979978 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
980979 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
981980 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
982 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
983981
984982 try testFabs(f32);
985983 try comptime testFabs(f32);
test/behavior/optional.zig-3
......@@ -28,7 +28,6 @@ pub const EmptyStruct = struct {};
2828
2929test "optional pointer to size zero struct" {
3030 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
31 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
3231
3332 var e = EmptyStruct{};
3433 const o: ?*EmptyStruct = &e;
......@@ -36,8 +35,6 @@ test "optional pointer to size zero struct" {
3635}
3736
3837test "equality compare optional pointers" {
39 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
40
4138 try testNullPtrsEql();
4239 try comptime testNullPtrsEql();
4340}
test/behavior/pointers.zig-1
......@@ -216,7 +216,6 @@ test "assign null directly to C pointer and test null equality" {
216216 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
217217 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
218218 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
219 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
220219
221220 var x: [*c]i32 = null;
222221 _ = &x;
test/behavior/vector.zig-2
......@@ -372,7 +372,6 @@ test "load vector elements via comptime index" {
372372 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
373373 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
374374 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
375 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
376375
377376 const S = struct {
378377 fn doTheTest() !void {
......@@ -394,7 +393,6 @@ test "store vector elements via comptime index" {
394393 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
395394 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
396395 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
397 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
398396
399397 const S = struct {
400398 fn doTheTest() !void {
test/behavior/while.zig-2
......@@ -38,8 +38,6 @@ fn staticWhileLoop2() i32 {
3838}
3939
4040test "while with continue expression" {
41 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
42
4341 var sum: i32 = 0;
4442 {
4543 var i: i32 = 0;
tools/gen_spirv_spec.zig+316-91
......@@ -1,45 +1,138 @@
11const std = @import("std");
2const g = @import("spirv/grammar.zig");
32const Allocator = std.mem.Allocator;
3const g = @import("spirv/grammar.zig");
4const CoreRegistry = g.CoreRegistry;
5const ExtensionRegistry = g.ExtensionRegistry;
6const Instruction = g.Instruction;
7const OperandKind = g.OperandKind;
8const Enumerant = g.Enumerant;
9const Operand = g.Operand;
410
511const ExtendedStructSet = std.StringHashMap(void);
612
13const Extension = struct {
14 name: []const u8,
15 spec: ExtensionRegistry,
16};
17
18const CmpInst = struct {
19 fn lt(_: CmpInst, a: Instruction, b: Instruction) bool {
20 return a.opcode < b.opcode;
21 }
22};
23
24const StringPair = struct { []const u8, []const u8 };
25
26const StringPairContext = struct {
27 pub fn hash(_: @This(), a: StringPair) u32 {
28 var hasher = std.hash.Wyhash.init(0);
29 const x, const y = a;
30 hasher.update(x);
31 hasher.update(y);
32 return @truncate(hasher.final());
33 }
34
35 pub fn eql(_: @This(), a: StringPair, b: StringPair, b_index: usize) bool {
36 _ = b_index;
37 const a_x, const a_y = a;
38 const b_x, const b_y = b;
39 return std.mem.eql(u8, a_x, b_x) and std.mem.eql(u8, a_y, b_y);
40 }
41};
42
43const OperandKindMap = std.ArrayHashMap(StringPair, OperandKind, StringPairContext, true);
44
45/// Khronos made it so that these names are not defined explicitly, so
46/// we need to hardcode it (like they did).
47/// See https://github.com/KhronosGroup/SPIRV-Registry/
48const set_names = std.ComptimeStringMap([]const u8, .{
49 .{ "opencl.std.100", "OpenCL.std" },
50 .{ "glsl.std.450", "GLSL.std.450" },
51 .{ "opencl.debuginfo.100", "OpenCL.DebugInfo.100" },
52 .{ "spv-amd-shader-ballot", "SPV_AMD_shader_ballot" },
53 .{ "nonsemantic.shader.debuginfo.100", "NonSemantic.Shader.DebugInfo.100" },
54 .{ "nonsemantic.vkspreflection", "NonSemantic.VkspReflection" },
55 .{ "nonsemantic.clspvreflection", "NonSemantic.ClspvReflection.6" }, // This version needs to be handled manually
56 .{ "spv-amd-gcn-shader", "SPV_AMD_gcn_shader" },
57 .{ "spv-amd-shader-trinary-minmax", "SPV_AMD_shader_trinary_minmax" },
58 .{ "debuginfo", "DebugInfo" },
59 .{ "nonsemantic.debugprintf", "NonSemantic.DebugPrintf" },
60 .{ "spv-amd-shader-explicit-vertex-parameter", "SPV_AMD_shader_explicit_vertex_parameter" },
61 .{ "nonsemantic.debugbreak", "NonSemantic.DebugBreak" },
62 .{ "zig", "zig" },
63});
64
765pub fn main() !void {
866 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
967 defer arena.deinit();
10 const allocator = arena.allocator();
68 const a = arena.allocator();
69
70 const args = try std.process.argsAlloc(a);
71 if (args.len != 3) {
72 usageAndExit(args[0], 1);
73 }
74
75 const json_path = try std.fs.path.join(a, &.{ args[1], "include/spirv/unified1/" });
76 const dir = try std.fs.cwd().openDir(json_path, .{ .iterate = true });
77
78 const core_spec = try readRegistry(CoreRegistry, a, dir, "spirv.core.grammar.json");
79 std.sort.block(Instruction, core_spec.instructions, CmpInst{}, CmpInst.lt);
80
81 var exts = std.ArrayList(Extension).init(a);
82
83 var it = dir.iterate();
84 while (try it.next()) |entry| {
85 if (entry.kind != .file) {
86 continue;
87 }
88
89 try readExtRegistry(&exts, a, dir, entry.name);
90 }
91
92 try readExtRegistry(&exts, a, std.fs.cwd(), args[2]);
93
94 var bw = std.io.bufferedWriter(std.io.getStdOut().writer());
95 try render(bw.writer(), a, core_spec, exts.items);
96 try bw.flush();
97}
1198
12 const args = try std.process.argsAlloc(allocator);
13 if (args.len != 2) {
14 usageAndExit(std.io.getStdErr(), args[0], 1);
99fn readExtRegistry(exts: *std.ArrayList(Extension), a: Allocator, dir: std.fs.Dir, sub_path: []const u8) !void {
100 const filename = std.fs.path.basename(sub_path);
101 if (!std.mem.startsWith(u8, filename, "extinst.")) {
102 return;
15103 }
16104
17 const spec_path = args[1];
18 const spec = try std.fs.cwd().readFileAlloc(allocator, spec_path, std.math.maxInt(usize));
105 std.debug.assert(std.mem.endsWith(u8, filename, ".grammar.json"));
106 const name = filename["extinst.".len .. filename.len - ".grammar.json".len];
107 const spec = try readRegistry(ExtensionRegistry, a, dir, sub_path);
19108
109 std.sort.block(Instruction, spec.instructions, CmpInst{}, CmpInst.lt);
110
111 try exts.append(.{ .name = set_names.get(name).?, .spec = spec });
112}
113
114fn readRegistry(comptime RegistryType: type, a: Allocator, dir: std.fs.Dir, path: []const u8) !RegistryType {
115 const spec = try dir.readFileAlloc(a, path, std.math.maxInt(usize));
20116 // Required for json parsing.
21117 @setEvalBranchQuota(10000);
22118
23 var scanner = std.json.Scanner.initCompleteInput(allocator, spec);
119 var scanner = std.json.Scanner.initCompleteInput(a, spec);
24120 var diagnostics = std.json.Diagnostics{};
25121 scanner.enableDiagnostics(&diagnostics);
26 const parsed = std.json.parseFromTokenSource(g.CoreRegistry, allocator, &scanner, .{}) catch |err| {
27 std.debug.print("line,col: {},{}\n", .{ diagnostics.getLine(), diagnostics.getColumn() });
122 const parsed = std.json.parseFromTokenSource(RegistryType, a, &scanner, .{}) catch |err| {
123 std.debug.print("{s}:{}:{}:\n", .{ path, diagnostics.getLine(), diagnostics.getColumn() });
28124 return err;
29125 };
30
31 var bw = std.io.bufferedWriter(std.io.getStdOut().writer());
32 try render(bw.writer(), allocator, parsed.value);
33 try bw.flush();
126 return parsed.value;
34127}
35128
36129/// Returns a set with types that require an extra struct for the `Instruction` interface
37130/// to the spir-v spec, or whether the original type can be used.
38131fn extendedStructs(
39 arena: Allocator,
40 kinds: []const g.OperandKind,
132 a: Allocator,
133 kinds: []const OperandKind,
41134) !ExtendedStructSet {
42 var map = ExtendedStructSet.init(arena);
135 var map = ExtendedStructSet.init(a);
43136 try map.ensureTotalCapacity(@as(u32, @intCast(kinds.len)));
44137
45138 for (kinds) |kind| {
......@@ -73,10 +166,12 @@ fn tagPriorityScore(tag: []const u8) usize {
73166 }
74167}
75168
76fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void {
169fn render(writer: anytype, a: Allocator, registry: CoreRegistry, extensions: []const Extension) !void {
77170 try writer.writeAll(
78171 \\//! This file is auto-generated by tools/gen_spirv_spec.zig.
79172 \\
173 \\const std = @import("std");
174 \\
80175 \\pub const Version = packed struct(Word) {
81176 \\ padding: u8 = 0,
82177 \\ minor: u8,
......@@ -89,8 +184,21 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
89184 \\};
90185 \\
91186 \\pub const Word = u32;
92 \\pub const IdResult = struct{
93 \\ id: Word,
187 \\pub const IdResult = enum(Word) {
188 \\ none,
189 \\ _,
190 \\
191 \\ pub fn format(
192 \\ self: IdResult,
193 \\ comptime _: []const u8,
194 \\ _: std.fmt.FormatOptions,
195 \\ writer: anytype,
196 \\ ) @TypeOf(writer).Error!void {
197 \\ switch (self) {
198 \\ .none => try writer.writeAll("(none)"),
199 \\ else => try writer.print("%{}", .{@intFromEnum(self)}),
200 \\ }
201 \\ }
94202 \\};
95203 \\pub const IdResultType = IdResult;
96204 \\pub const IdRef = IdResult;
......@@ -99,6 +207,7 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
99207 \\pub const IdScope = IdRef;
100208 \\
101209 \\pub const LiteralInteger = Word;
210 \\pub const LiteralFloat = Word;
102211 \\pub const LiteralString = []const u8;
103212 \\pub const LiteralContextDependentNumber = union(enum) {
104213 \\ int32: i32,
......@@ -139,6 +248,13 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
139248 \\ parameters: []const OperandKind,
140249 \\};
141250 \\
251 \\pub const Instruction = struct {
252 \\ name: []const u8,
253 \\ opcode: Word,
254 \\ operands: []const Operand,
255 \\};
256 \\
257 \\pub const zig_generator_id: Word = 41;
142258 \\
143259 );
144260
......@@ -151,15 +267,123 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
151267 .{ registry.major_version, registry.minor_version, registry.revision, registry.magic_number },
152268 );
153269
154 const extended_structs = try extendedStructs(allocator, registry.operand_kinds);
155 try renderClass(writer, allocator, registry.instructions);
156 try renderOperandKind(writer, registry.operand_kinds);
157 try renderOpcodes(writer, allocator, registry.instructions, extended_structs);
158 try renderOperandKinds(writer, allocator, registry.operand_kinds, extended_structs);
270 // Merge the operand kinds from all extensions together.
271 // var all_operand_kinds = std.ArrayList(OperandKind).init(a);
272 // try all_operand_kinds.appendSlice(registry.operand_kinds);
273 var all_operand_kinds = OperandKindMap.init(a);
274 for (registry.operand_kinds) |kind| {
275 try all_operand_kinds.putNoClobber(.{ "core", kind.kind }, kind);
276 }
277 for (extensions) |ext| {
278 // Note: extensions may define the same operand kind, with different
279 // parameters. Instead of trying to merge them, just discriminate them
280 // using the name of the extension. This is similar to what
281 // the official headers do.
282
283 try all_operand_kinds.ensureUnusedCapacity(ext.spec.operand_kinds.len);
284 for (ext.spec.operand_kinds) |kind| {
285 var new_kind = kind;
286 new_kind.kind = try std.mem.join(a, ".", &.{ ext.name, kind.kind });
287 try all_operand_kinds.putNoClobber(.{ ext.name, kind.kind }, new_kind);
288 }
289 }
290
291 const extended_structs = try extendedStructs(a, all_operand_kinds.values());
292 // Note: extensions don't seem to have class.
293 try renderClass(writer, a, registry.instructions);
294 try renderOperandKind(writer, all_operand_kinds.values());
295 try renderOpcodes(writer, a, registry.instructions, extended_structs);
296 try renderOperandKinds(writer, a, all_operand_kinds.values(), extended_structs);
297 try renderInstructionSet(writer, a, registry, extensions, all_operand_kinds);
298}
299
300fn renderInstructionSet(
301 writer: anytype,
302 a: Allocator,
303 core: CoreRegistry,
304 extensions: []const Extension,
305 all_operand_kinds: OperandKindMap,
306) !void {
307 _ = a;
308 try writer.writeAll(
309 \\pub const InstructionSet = enum {
310 \\ core,
311 );
312
313 for (extensions) |ext| {
314 try writer.print("{},\n", .{std.zig.fmtId(ext.name)});
315 }
316
317 try writer.writeAll(
318 \\
319 \\ pub fn instructions(self: InstructionSet) []const Instruction {
320 \\ return switch (self) {
321 \\
322 );
323
324 try renderInstructionsCase(writer, "core", core.instructions, all_operand_kinds);
325 for (extensions) |ext| {
326 try renderInstructionsCase(writer, ext.name, ext.spec.instructions, all_operand_kinds);
327 }
328
329 try writer.writeAll(
330 \\ };
331 \\ }
332 \\};
333 \\
334 );
335}
336
337fn renderInstructionsCase(
338 writer: anytype,
339 set_name: []const u8,
340 instructions: []const Instruction,
341 all_operand_kinds: OperandKindMap,
342) !void {
343 // Note: theoretically we could dedup from tags and give every instruction a list of aliases,
344 // but there aren't so many total aliases and that would add more overhead in total. We will
345 // just filter those out when needed.
346
347 try writer.print(".{} => &[_]Instruction{{\n", .{std.zig.fmtId(set_name)});
348
349 for (instructions) |inst| {
350 try writer.print(
351 \\.{{
352 \\ .name = "{s}",
353 \\ .opcode = {},
354 \\ .operands = &[_]Operand{{
355 \\
356 , .{ inst.opname, inst.opcode });
357
358 for (inst.operands) |operand| {
359 const quantifier = if (operand.quantifier) |q|
360 switch (q) {
361 .@"?" => "optional",
362 .@"*" => "variadic",
363 }
364 else
365 "required";
366
367 const kind = all_operand_kinds.get(.{ set_name, operand.kind }) orelse
368 all_operand_kinds.get(.{ "core", operand.kind }).?;
369 try writer.print(".{{.kind = .{}, .quantifier = .{s}}},\n", .{ std.zig.fmtId(kind.kind), quantifier });
370 }
371
372 try writer.writeAll(
373 \\ },
374 \\},
375 \\
376 );
377 }
378
379 try writer.writeAll(
380 \\},
381 \\
382 );
159383}
160384
161fn renderClass(writer: anytype, allocator: Allocator, instructions: []const g.Instruction) !void {
162 var class_map = std.StringArrayHashMap(void).init(allocator);
385fn renderClass(writer: anytype, a: Allocator, instructions: []const Instruction) !void {
386 var class_map = std.StringArrayHashMap(void).init(a);
163387
164388 for (instructions) |inst| {
165389 if (std.mem.eql(u8, inst.class.?, "@exclude")) {
......@@ -173,7 +397,7 @@ fn renderClass(writer: anytype, allocator: Allocator, instructions: []const g.In
173397 try renderInstructionClass(writer, class);
174398 try writer.writeAll(",\n");
175399 }
176 try writer.writeAll("};\n");
400 try writer.writeAll("};\n\n");
177401}
178402
179403fn renderInstructionClass(writer: anytype, class: []const u8) !void {
......@@ -192,15 +416,20 @@ fn renderInstructionClass(writer: anytype, class: []const u8) !void {
192416 }
193417}
194418
195fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {
196 try writer.writeAll("pub const OperandKind = enum {\n");
419fn renderOperandKind(writer: anytype, operands: []const OperandKind) !void {
420 try writer.writeAll(
421 \\pub const OperandKind = enum {
422 \\ Opcode,
423 \\
424 );
197425 for (operands) |operand| {
198426 try writer.print("{},\n", .{std.zig.fmtId(operand.kind)});
199427 }
200428 try writer.writeAll(
201429 \\
202430 \\pub fn category(self: OperandKind) OperandCategory {
203 \\return switch (self) {
431 \\ return switch (self) {
432 \\ .Opcode => .literal,
204433 \\
205434 );
206435 for (operands) |operand| {
......@@ -214,10 +443,11 @@ fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {
214443 try writer.print(".{} => .{s},\n", .{ std.zig.fmtId(operand.kind), cat });
215444 }
216445 try writer.writeAll(
217 \\};
446 \\ };
218447 \\}
219448 \\pub fn enumerants(self: OperandKind) []const Enumerant {
220 \\return switch (self) {
449 \\ return switch (self) {
450 \\ .Opcode => unreachable,
221451 \\
222452 );
223453 for (operands) |operand| {
......@@ -242,7 +472,7 @@ fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {
242472 try writer.writeAll("};\n}\n};\n");
243473}
244474
245fn renderEnumerant(writer: anytype, enumerant: g.Enumerant) !void {
475fn renderEnumerant(writer: anytype, enumerant: Enumerant) !void {
246476 try writer.print(".{{.name = \"{s}\", .value = ", .{enumerant.enumerant});
247477 switch (enumerant.value) {
248478 .bitflag => |flag| try writer.writeAll(flag),
......@@ -260,14 +490,14 @@ fn renderEnumerant(writer: anytype, enumerant: g.Enumerant) !void {
260490
261491fn renderOpcodes(
262492 writer: anytype,
263 allocator: Allocator,
264 instructions: []const g.Instruction,
493 a: Allocator,
494 instructions: []const Instruction,
265495 extended_structs: ExtendedStructSet,
266496) !void {
267 var inst_map = std.AutoArrayHashMap(u32, usize).init(allocator);
497 var inst_map = std.AutoArrayHashMap(u32, usize).init(a);
268498 try inst_map.ensureTotalCapacity(instructions.len);
269499
270 var aliases = std.ArrayList(struct { inst: usize, alias: usize }).init(allocator);
500 var aliases = std.ArrayList(struct { inst: usize, alias: usize }).init(a);
271501 try aliases.ensureTotalCapacity(instructions.len);
272502
273503 for (instructions, 0..) |inst, i| {
......@@ -302,7 +532,9 @@ fn renderOpcodes(
302532 try writer.print("{} = {},\n", .{ std.zig.fmtId(inst.opname), inst.opcode });
303533 }
304534
305 try writer.writeByte('\n');
535 try writer.writeAll(
536 \\
537 );
306538
307539 for (aliases.items) |alias| {
308540 try writer.print("pub const {} = Opcode.{};\n", .{
......@@ -314,7 +546,7 @@ fn renderOpcodes(
314546 try writer.writeAll(
315547 \\
316548 \\pub fn Operands(comptime self: Opcode) type {
317 \\return switch (self) {
549 \\ return switch (self) {
318550 \\
319551 );
320552
......@@ -324,35 +556,10 @@ fn renderOpcodes(
324556 }
325557
326558 try writer.writeAll(
327 \\};
328 \\}
329 \\pub fn operands(self: Opcode) []const Operand {
330 \\return switch (self) {
331 \\
332 );
333
334 for (instructions_indices) |i| {
335 const inst = instructions[i];
336 try writer.print(".{} => &[_]Operand{{", .{std.zig.fmtId(inst.opname)});
337 for (inst.operands) |operand| {
338 const quantifier = if (operand.quantifier) |q|
339 switch (q) {
340 .@"?" => "optional",
341 .@"*" => "variadic",
342 }
343 else
344 "required";
345
346 try writer.print(".{{.kind = .{s}, .quantifier = .{s}}},", .{ operand.kind, quantifier });
347 }
348 try writer.writeAll("},\n");
349 }
350
351 try writer.writeAll(
352 \\};
559 \\ };
353560 \\}
354561 \\pub fn class(self: Opcode) Class {
355 \\return switch (self) {
562 \\ return switch (self) {
356563 \\
357564 );
358565
......@@ -363,19 +570,24 @@ fn renderOpcodes(
363570 try writer.writeAll(",\n");
364571 }
365572
366 try writer.writeAll("};\n}\n};\n");
573 try writer.writeAll(
574 \\ };
575 \\}
576 \\};
577 \\
578 );
367579}
368580
369581fn renderOperandKinds(
370582 writer: anytype,
371 allocator: Allocator,
372 kinds: []const g.OperandKind,
583 a: Allocator,
584 kinds: []const OperandKind,
373585 extended_structs: ExtendedStructSet,
374586) !void {
375587 for (kinds) |kind| {
376588 switch (kind.category) {
377 .ValueEnum => try renderValueEnum(writer, allocator, kind, extended_structs),
378 .BitEnum => try renderBitEnum(writer, allocator, kind, extended_structs),
589 .ValueEnum => try renderValueEnum(writer, a, kind, extended_structs),
590 .BitEnum => try renderBitEnum(writer, a, kind, extended_structs),
379591 else => {},
380592 }
381593 }
......@@ -383,20 +595,26 @@ fn renderOperandKinds(
383595
384596fn renderValueEnum(
385597 writer: anytype,
386 allocator: Allocator,
387 enumeration: g.OperandKind,
598 a: Allocator,
599 enumeration: OperandKind,
388600 extended_structs: ExtendedStructSet,
389601) !void {
390602 const enumerants = enumeration.enumerants orelse return error.InvalidRegistry;
391603
392 var enum_map = std.AutoArrayHashMap(u32, usize).init(allocator);
604 var enum_map = std.AutoArrayHashMap(u32, usize).init(a);
393605 try enum_map.ensureTotalCapacity(enumerants.len);
394606
395 var aliases = std.ArrayList(struct { enumerant: usize, alias: usize }).init(allocator);
607 var aliases = std.ArrayList(struct { enumerant: usize, alias: usize }).init(a);
396608 try aliases.ensureTotalCapacity(enumerants.len);
397609
398610 for (enumerants, 0..) |enumerant, i| {
399 const result = enum_map.getOrPutAssumeCapacity(enumerant.value.int);
611 try writer.context.flush();
612 const value: u31 = switch (enumerant.value) {
613 .int => |value| value,
614 // Some extensions declare ints as string
615 .bitflag => |value| try std.fmt.parseInt(u31, value, 10),
616 };
617 const result = enum_map.getOrPutAssumeCapacity(value);
400618 if (!result.found_existing) {
401619 result.value_ptr.* = i;
402620 continue;
......@@ -422,9 +640,12 @@ fn renderValueEnum(
422640
423641 for (enum_indices) |i| {
424642 const enumerant = enumerants[i];
425 if (enumerant.value != .int) return error.InvalidRegistry;
643 // if (enumerant.value != .int) return error.InvalidRegistry;
426644
427 try writer.print("{} = {},\n", .{ std.zig.fmtId(enumerant.enumerant), enumerant.value.int });
645 switch (enumerant.value) {
646 .int => |value| try writer.print("{} = {},\n", .{ std.zig.fmtId(enumerant.enumerant), value }),
647 .bitflag => |value| try writer.print("{} = {s},\n", .{ std.zig.fmtId(enumerant.enumerant), value }),
648 }
428649 }
429650
430651 try writer.writeByte('\n');
......@@ -454,8 +675,8 @@ fn renderValueEnum(
454675
455676fn renderBitEnum(
456677 writer: anytype,
457 allocator: Allocator,
458 enumeration: g.OperandKind,
678 a: Allocator,
679 enumeration: OperandKind,
459680 extended_structs: ExtendedStructSet,
460681) !void {
461682 try writer.print("pub const {s} = packed struct {{\n", .{std.zig.fmtId(enumeration.kind)});
......@@ -463,7 +684,7 @@ fn renderBitEnum(
463684 var flags_by_bitpos = [_]?usize{null} ** 32;
464685 const enumerants = enumeration.enumerants orelse return error.InvalidRegistry;
465686
466 var aliases = std.ArrayList(struct { flag: usize, alias: u5 }).init(allocator);
687 var aliases = std.ArrayList(struct { flag: usize, alias: u5 }).init(a);
467688 try aliases.ensureTotalCapacity(enumerants.len);
468689
469690 for (enumerants, 0..) |enumerant, i| {
......@@ -471,6 +692,10 @@ fn renderBitEnum(
471692 const value = try parseHexInt(enumerant.value.bitflag);
472693 if (value == 0) {
473694 continue; // Skip 'none' items
695 } else if (std.mem.eql(u8, enumerant.enumerant, "FlagIsPublic")) {
696 // This flag is special and poorly defined in the json files.
697 // Just skip it for now
698 continue;
474699 }
475700
476701 std.debug.assert(@popCount(value) == 1);
......@@ -540,7 +765,7 @@ fn renderOperand(
540765 mask,
541766 },
542767 field_name: []const u8,
543 parameters: []const g.Operand,
768 parameters: []const Operand,
544769 extended_structs: ExtendedStructSet,
545770) !void {
546771 if (kind == .instruction) {
......@@ -606,7 +831,7 @@ fn renderOperand(
606831 try writer.writeAll(",\n");
607832}
608833
609fn renderFieldName(writer: anytype, operands: []const g.Operand, field_index: usize) !void {
834fn renderFieldName(writer: anytype, operands: []const Operand, field_index: usize) !void {
610835 const operand = operands[field_index];
611836
612837 // Should be enough for all names - adjust as needed.
......@@ -673,16 +898,16 @@ fn parseHexInt(text: []const u8) !u31 {
673898 return try std.fmt.parseInt(u31, text[prefix.len..], 16);
674899}
675900
676fn usageAndExit(file: std.fs.File, arg0: []const u8, code: u8) noreturn {
677 file.writer().print(
678 \\Usage: {s} <spirv json spec>
901fn usageAndExit(arg0: []const u8, code: u8) noreturn {
902 std.io.getStdErr().writer().print(
903 \\Usage: {s} <SPIRV-Headers repository path> <path/to/zig/src/codegen/spirv/extinst.zig.grammar.json>
679904 \\
680 \\Generates Zig bindings for a SPIR-V specification .json (either core or
681 \\extinst versions). The result, printed to stdout, should be used to update
905 \\Generates Zig bindings for SPIR-V specifications found in the SPIRV-Headers
906 \\repository. The result, printed to stdout, should be used to update
682907 \\files in src/codegen/spirv. Don't forget to format the output.
683908 \\
684 \\The relevant specifications can be obtained from the SPIR-V registry:
685 \\https://github.com/KhronosGroup/SPIRV-Headers/blob/master/include/spirv/unified1/
909 \\<SPIRV-Headers repository path> should point to a clone of
910 \\https://github.com/KhronosGroup/SPIRV-Headers/
686911 \\
687912 , .{arg0}) catch std.process.exit(1);
688913 std.process.exit(code);
tools/spirv/grammar.zig+4-2
......@@ -22,8 +22,8 @@ pub const CoreRegistry = struct {
2222};
2323
2424pub const ExtensionRegistry = struct {
25 copyright: [][]const u8,
26 version: u32,
25 copyright: ?[][]const u8 = null,
26 version: ?u32 = null,
2727 revision: u32,
2828 instructions: []Instruction,
2929 operand_kinds: []OperandKind = &[_]OperandKind{},
......@@ -40,6 +40,8 @@ pub const Instruction = struct {
4040 opcode: u32,
4141 operands: []Operand = &[_]Operand{},
4242 capabilities: [][]const u8 = &[_][]const u8{},
43 // DebugModuleINTEL has this...
44 capability: ?[]const u8 = null,
4345 extensions: [][]const u8 = &[_][]const u8{},
4446 version: ?[]const u8 = null,
4547