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");...@@ -30,6 +30,8 @@ const SpvAssembler = @import("spirv/Assembler.zig");
3030
31const InstMap = std.AutoHashMapUnmanaged(Air.Inst.Index, IdRef);31const InstMap = std.AutoHashMapUnmanaged(Air.Inst.Index, IdRef);
3232
33pub const zig_call_abi_ver = 3;
34
33/// We want to store some extra facts about types as mapped from Zig to SPIR-V.35/// We want to store some extra facts about types as mapped from Zig to SPIR-V.
34/// This structure is used to keep that extra information, as well as36/// This structure is used to keep that extra information, as well as
35/// the cached reference to the type.37/// the cached reference to the type.
...@@ -252,15 +254,18 @@ pub const Object = struct {...@@ -252,15 +254,18 @@ pub const Object = struct {
252 /// Note: Function does not actually generate the decl, it just allocates an index.254 /// Note: Function does not actually generate the decl, it just allocates an index.
253 pub fn resolveDecl(self: *Object, mod: *Module, decl_index: InternPool.DeclIndex) !SpvModule.Decl.Index {255 pub fn resolveDecl(self: *Object, mod: *Module, decl_index: InternPool.DeclIndex) !SpvModule.Decl.Index {
254 const decl = mod.declPtr(decl_index);256 const decl = mod.declPtr(decl_index);
257 assert(decl.has_tv); // TODO: Do we need to handle a situation where this is false?
255 try mod.markDeclAlive(decl);258 try mod.markDeclAlive(decl);
256259
257 const entry = try self.decl_link.getOrPut(self.gpa, decl_index);260 const entry = try self.decl_link.getOrPut(self.gpa, decl_index);
258 if (!entry.found_existing) {261 if (!entry.found_existing) {
259 // TODO: Extern fn?262 // TODO: Extern fn?
260 const kind: SpvModule.DeclKind = if (decl.val.isFuncBody(mod))263 const kind: SpvModule.Decl.Kind = if (decl.val.isFuncBody(mod))
261 .func264 .func
262 else265 else switch (decl.@"addrspace") {
263 .global;266 .generic => .invocation_global,
267 else => .global,
268 };
264269
265 entry.value_ptr.* = try self.spv.allocDecl(kind);270 entry.value_ptr.* = try self.spv.allocDecl(kind);
266 }271 }
...@@ -443,87 +448,90 @@ const DeclGen = struct {...@@ -443,87 +448,90 @@ const DeclGen = struct {
443 return self.inst_results.get(index).?; // Assertion means instruction does not dominate usage.448 return self.inst_results.get(index).?; // Assertion means instruction does not dominate usage.
444 }449 }
445450
446 fn resolveAnonDecl(self: *DeclGen, val: InternPool.Index, storage_class: StorageClass) !IdRef {451 fn resolveAnonDecl(self: *DeclGen, val: InternPool.Index) !IdRef {
447 // TODO: This cannot be a function at this point, but it should probably be handled anyway.452 // 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
448 const spv_decl_index = blk: {458 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 });
450 if (entry.found_existing) {460 if (entry.found_existing) {
451 try self.addFunctionDep(entry.value_ptr.*, storage_class);461 try self.addFunctionDep(entry.value_ptr.*, .Function);
452 return self.spv.declPtr(entry.value_ptr.*).result_id;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);
453 }465 }
454466
455 const spv_decl_index = try self.spv.allocDecl(.global);467 const spv_decl_index = try self.spv.allocDecl(.invocation_global);
456 try self.addFunctionDep(spv_decl_index, storage_class);468 try self.addFunctionDep(spv_decl_index, .Function);
457 entry.value_ptr.* = spv_decl_index;469 entry.value_ptr.* = spv_decl_index;
458 break :blk spv_decl_index;470 break :blk spv_decl_index;
459 };471 };
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
474 // TODO: At some point we will be able to generate this all constant here, but then all of473 // TODO: At some point we will be able to generate this all constant here, but then all of
475 // constant() will need to be implemented such that it doesn't generate any at-runtime code.474 // constant() will need to be implemented such that it doesn't generate any at-runtime code.
476 // NOTE: Because this is a global, we really only want to initialize it once. Therefore the475 // 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, which476 // constant lowering of this value will need to be deferred to an initializer similar to
478 // is then added to the list of initializers using endGlobal().477 // other globals.
479478
480 // Save the current state so that we can temporarily generate into a different function.479 const result_id = self.spv.declPtr(spv_decl_index).result_id;
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;
486480
487 self.func = .{};481 {
488 defer self.func.deinit(self.gpa);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?489 self.func = .{};
491 const begin = self.spv.beginGlobal();490 defer self.func.deinit(self.gpa);
492491
493 const void_ty_ref = try self.resolveType(Type.void, .direct);492 const void_ty_ref = try self.resolveType(Type.void, .direct);
494 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{493 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{
495 .return_type = void_ty_ref,494 .return_type = void_ty_ref,
496 .parameters = &.{},495 .parameters = &.{},
497 } });496 } });
498497
499 const initializer_id = self.spv.allocId();498 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;
511499
512 const val_id = try self.constant(ty, Value.fromInterned(val), .indirect);500 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
513 try self.func.body.emit(self.spv.gpa, .OpStore, .{501 .id_result_type = self.typeId(void_ty_ref),
514 .pointer = var_id,502 .id_result = initializer_id,
515 .object = val_id,503 .function_control = .{},
516 });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);512 const val_id = try self.constant(ty, Value.fromInterned(val), .indirect);
519 try self.func.body.emit(self.spv.gpa, .OpReturn, {});513 try self.func.body.emit(self.spv.gpa, .OpStore, .{
520 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});514 .pointer = result_id,
521 try self.spv.addFunction(spv_decl_index, self.func);515 .object = val_id,
516 });
522517
523 try self.spv.debugNameFmt(var_id, "__anon_{d}", .{@intFromEnum(val)});518 try self.func.body.emit(self.spv.gpa, .OpReturn, {});
524 try self.spv.debugNameFmt(initializer_id, "initializer of __anon_{d}", .{@intFromEnum(val)});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);
527 }535 }
528536
529 fn addFunctionDep(self: *DeclGen, decl_index: SpvModule.Decl.Index, storage_class: StorageClass) !void {537 fn addFunctionDep(self: *DeclGen, decl_index: SpvModule.Decl.Index, storage_class: StorageClass) !void {
...@@ -768,18 +776,75 @@ const DeclGen = struct {...@@ -768,18 +776,75 @@ const DeclGen = struct {
768 };776 };
769 }777 }
770778
771 /// Construct a composite value at runtime. If the parameters are in direct779 /// Construct a struct at runtime.
772 /// representation, then the result is also in direct representation. Otherwise,780 /// ty must be a struct type.
773 /// if the parameters are in indirect representation, then the result is too.781 /// Constituents should be in `indirect` representation (as the elements of a struct should be).
774 fn constructComposite(self: *DeclGen, ty: Type, constituents: []const IdRef) !IdRef {782 /// Result is in `direct` representation.
775 const constituents_id = self.spv.allocId();783 fn constructStruct(self: *DeclGen, ty: Type, types: []const Type, constituents: []const IdRef) !IdRef {
776 const type_id = try self.resolveType(ty, .direct);784 assert(types.len == constituents.len);
777 try self.func.body.emit(self.spv.gpa, .OpCompositeConstruct, .{785 // The Khronos LLVM-SPIRV translator crashes because it cannot construct structs which'
778 .id_result_type = self.typeId(type_id),786 // operands are not constant.
779 .id_result = constituents_id,787 // See https://github.com/KhronosGroup/SPIRV-LLVM-Translator/issues/1349
780 .constituents = constituents,788 // For now, just initialize the struct by setting the fields manually...
781 });789 // TODO: Make this OpCompositeConstruct when we can
782 return constituents_id;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, .{});
783 }848 }
784849
785 /// This function generates a load for a constant in direct (ie, non-memory) representation.850 /// This function generates a load for a constant in direct (ie, non-memory) representation.
...@@ -887,15 +952,18 @@ const DeclGen = struct {...@@ -887,15 +952,18 @@ const DeclGen = struct {
887 });952 });
888953
889 var constituents: [2]IdRef = undefined;954 var constituents: [2]IdRef = undefined;
955 var types: [2]Type = undefined;
890 if (eu_layout.error_first) {956 if (eu_layout.error_first) {
891 constituents[0] = try self.constant(err_ty, err_val, .indirect);957 constituents[0] = try self.constant(err_ty, err_val, .indirect);
892 constituents[1] = try self.constant(payload_ty, payload_val, .indirect);958 constituents[1] = try self.constant(payload_ty, payload_val, .indirect);
959 types = .{ err_ty, payload_ty };
893 } else {960 } else {
894 constituents[0] = try self.constant(payload_ty, payload_val, .indirect);961 constituents[0] = try self.constant(payload_ty, payload_val, .indirect);
895 constituents[1] = try self.constant(err_ty, err_val, .indirect);962 constituents[1] = try self.constant(err_ty, err_val, .indirect);
963 types = .{ payload_ty, err_ty };
896 }964 }
897965
898 return try self.constructComposite(ty, &constituents);966 return try self.constructStruct(ty, &types, &constituents);
899 },967 },
900 .enum_tag => {968 .enum_tag => {
901 const int_val = try val.intFromEnum(ty, mod);969 const int_val = try val.intFromEnum(ty, mod);
...@@ -907,7 +975,11 @@ const DeclGen = struct {...@@ -907,7 +975,11 @@ const DeclGen = struct {
907 const ptr_ty = ty.slicePtrFieldType(mod);975 const ptr_ty = ty.slicePtrFieldType(mod);
908 const ptr_id = try self.constantPtr(ptr_ty, Value.fromInterned(slice.ptr));976 const ptr_id = try self.constantPtr(ptr_ty, Value.fromInterned(slice.ptr));
909 const len_id = try self.constant(Type.usize, Value.fromInterned(slice.len), .indirect);977 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 );
911 },983 },
912 .opt => {984 .opt => {
913 const payload_ty = ty.optionalChild(mod);985 const payload_ty = ty.optionalChild(mod);
...@@ -934,7 +1006,11 @@ const DeclGen = struct {...@@ -934,7 +1006,11 @@ const DeclGen = struct {
934 else1006 else
935 try self.spv.constUndef(try self.resolveType(payload_ty, .indirect));1007 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 );
938 },1014 },
939 .aggregate => |aggregate| switch (ip.indexToKey(ty.ip_index)) {1015 .aggregate => |aggregate| switch (ip.indexToKey(ty.ip_index)) {
940 inline .array_type, .vector_type => |array_type, tag| {1016 inline .array_type, .vector_type => |array_type, tag| {
...@@ -971,9 +1047,9 @@ const DeclGen = struct {...@@ -971,9 +1047,9 @@ const DeclGen = struct {
971 const sentinel = Value.fromInterned(array_type.sentinel);1047 const sentinel = Value.fromInterned(array_type.sentinel);
972 constituents[constituents.len - 1] = try self.constant(elem_ty, sentinel, .indirect);1048 constituents[constituents.len - 1] = try self.constant(elem_ty, sentinel, .indirect);
973 }1049 }
974 return self.constructComposite(ty, constituents);1050 return self.constructArray(ty, constituents);
975 },1051 },
976 inline .vector_type => return self.constructComposite(ty, constituents),1052 inline .vector_type => return self.constructVector(ty, constituents),
977 else => unreachable,1053 else => unreachable,
978 }1054 }
979 },1055 },
...@@ -983,6 +1059,9 @@ const DeclGen = struct {...@@ -983,6 +1059,9 @@ const DeclGen = struct {
983 return self.todo("packed struct constants", .{});1059 return self.todo("packed struct constants", .{});
984 }1060 }
9851061
1062 var types = std.ArrayList(Type).init(self.gpa);
1063 defer types.deinit();
1064
986 var constituents = std.ArrayList(IdRef).init(self.gpa);1065 var constituents = std.ArrayList(IdRef).init(self.gpa);
987 defer constituents.deinit();1066 defer constituents.deinit();
9881067
...@@ -998,10 +1077,11 @@ const DeclGen = struct {...@@ -998,10 +1077,11 @@ const DeclGen = struct {
998 const field_val = try val.fieldValue(mod, field_index);1077 const field_val = try val.fieldValue(mod, field_index);
999 const field_id = try self.constant(field_ty, field_val, .indirect);1078 const field_id = try self.constant(field_ty, field_val, .indirect);
10001079
1080 try types.append(field_ty);
1001 try constituents.append(field_id);1081 try constituents.append(field_id);
1002 }1082 }
10031083
1004 return try self.constructComposite(ty, constituents.items);1084 return try self.constructStruct(ty, types.items, constituents.items);
1005 },1085 },
1006 .anon_struct_type => unreachable, // TODO1086 .anon_struct_type => unreachable, // TODO
1007 else => unreachable,1087 else => unreachable,
...@@ -1107,19 +1187,10 @@ const DeclGen = struct {...@@ -1107,19 +1187,10 @@ const DeclGen = struct {
1107 unreachable; // TODO1187 unreachable; // TODO
1108 }1188 }
11091189
1110 const final_storage_class = self.spvStorageClass(ty.ptrAddressSpace(mod));1190 // Anon decl refs are always generic.
1111 const actual_storage_class = switch (final_storage_class) {1191 assert(ty.ptrAddressSpace(mod) == .generic);
1112 .Generic => .CrossWorkgroup,1192 const decl_ptr_ty_ref = try self.ptrType(decl_ty, .Generic);
1113 else => |other| other,1193 const ptr_id = try self.resolveAnonDecl(decl_val);
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 };
11231194
1124 if (decl_ptr_ty_ref != ty_ref) {1195 if (decl_ptr_ty_ref != ty_ref) {
1125 // Differing pointer types, insert a cast.1196 // Differing pointer types, insert a cast.
...@@ -1157,8 +1228,13 @@ const DeclGen = struct {...@@ -1157,8 +1228,13 @@ const DeclGen = struct {
1157 }1228 }
11581229
1159 const spv_decl_index = try self.object.resolveDecl(mod, decl_index);1230 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;
1162 const final_storage_class = self.spvStorageClass(decl.@"addrspace");1238 const final_storage_class = self.spvStorageClass(decl.@"addrspace");
1163 try self.addFunctionDep(spv_decl_index, final_storage_class);1239 try self.addFunctionDep(spv_decl_index, final_storage_class);
11641240
...@@ -1437,6 +1513,13 @@ const DeclGen = struct {...@@ -1437,6 +1513,13 @@ const DeclGen = struct {
1437 if (self.type_map.get(ty.toIntern())) |info| return info.ty_ref;1513 if (self.type_map.get(ty.toIntern())) |info| return info.ty_ref;
14381514
1439 const fn_info = mod.typeToFunc(ty).?;1515 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
1440 // TODO: Put this somewhere in Sema.zig1523 // TODO: Put this somewhere in Sema.zig
1441 if (fn_info.is_var_args)1524 if (fn_info.is_var_args)
1442 return self.fail("VarArgs functions are unsupported for SPIR-V", .{});1525 return self.fail("VarArgs functions are unsupported for SPIR-V", .{});
...@@ -1841,7 +1924,7 @@ const DeclGen = struct {...@@ -1841,7 +1924,7 @@ const DeclGen = struct {
1841 for (wip.results) |*result| {1924 for (wip.results) |*result| {
1842 result.* = try wip.dg.convertToIndirect(wip.ty, result.*);1925 result.* = try wip.dg.convertToIndirect(wip.ty, result.*);
1843 }1926 }
1844 return try wip.dg.constructComposite(wip.result_ty, wip.results);1927 return try wip.dg.constructArray(wip.result_ty, wip.results);
1845 } else {1928 } else {
1846 return wip.results[0];1929 return wip.results[0];
1847 }1930 }
...@@ -1884,13 +1967,15 @@ const DeclGen = struct {...@@ -1884,13 +1967,15 @@ const DeclGen = struct {
1884 /// (anyerror!void has the same layout as anyerror).1967 /// (anyerror!void has the same layout as anyerror).
1885 /// Each test declaration generates a function like.1968 /// Each test declaration generates a function like.
1886 /// %anyerror = OpTypeInt 0 161969 /// %anyerror = OpTypeInt 0 16
1970 /// %p_invocation_globals_struct_ty = ...
1887 /// %p_anyerror = OpTypePointer CrossWorkgroup %anyerror1971 /// %p_anyerror = OpTypePointer CrossWorkgroup %anyerror
1888 /// %K = OpTypeFunction %void %p_anyerror1972 /// %K = OpTypeFunction %void %p_invocation_globals_struct_ty %p_anyerror
1889 ///1973 ///
1890 /// %test = OpFunction %void %K1974 /// %test = OpFunction %void %K
1975 /// %p_invocation_globals = OpFunctionParameter p_invocation_globals_struct_ty
1891 /// %p_err = OpFunctionParameter %p_anyerror1976 /// %p_err = OpFunctionParameter %p_anyerror
1892 /// %lbl = OpLabel1977 /// %lbl = OpLabel
1893 /// %result = OpFunctionCall %anyerror %func1978 /// %result = OpFunctionCall %anyerror %func %p_invocation_globals
1894 /// OpStore %p_err %result1979 /// OpStore %p_err %result
1895 /// OpFunctionEnd1980 /// OpFunctionEnd
1896 /// TODO is to also write out the error as a function call parameter, and to somehow fetch1981 /// TODO is to also write out the error as a function call parameter, and to somehow fetch
...@@ -1900,10 +1985,12 @@ const DeclGen = struct {...@@ -1900,10 +1985,12 @@ const DeclGen = struct {
1900 const ptr_anyerror_ty_ref = try self.ptrType(Type.anyerror, .CrossWorkgroup);1985 const ptr_anyerror_ty_ref = try self.ptrType(Type.anyerror, .CrossWorkgroup);
1901 const void_ty_ref = try self.resolveType(Type.void, .direct);1986 const void_ty_ref = try self.resolveType(Type.void, .direct);
19021987
1903 const kernel_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{1988 const kernel_proto_ty_ref = try self.spv.resolve(.{
1904 .return_type = void_ty_ref,1989 .function_type = .{
1905 .parameters = &.{ptr_anyerror_ty_ref},1990 .return_type = void_ty_ref,
1906 } });1991 .parameters = &.{ptr_anyerror_ty_ref},
1992 },
1993 });
19071994
1908 const test_id = self.spv.declPtr(spv_test_decl_index).result_id;1995 const test_id = self.spv.declPtr(spv_test_decl_index).result_id;
19091996
...@@ -1954,147 +2041,164 @@ const DeclGen = struct {...@@ -1954,147 +2041,164 @@ const DeclGen = struct {
1954 const ip = &mod.intern_pool;2041 const ip = &mod.intern_pool;
1955 const decl = mod.declPtr(self.decl_index);2042 const decl = mod.declPtr(self.decl_index);
1956 const spv_decl_index = try self.object.resolveDecl(mod, self.decl_index);2043 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)) |_| {2052 const prototype_ty_ref = try self.resolveType(decl.ty, .direct);
1962 assert(decl.ty.zigTypeTag(mod) == .Fn);2053 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
1963 const fn_info = mod.typeToFunc(decl.ty).?;2054 .id_result_type = self.typeId(return_ty_ref),
1964 const return_ty_ref = try self.resolveFnReturnType(Type.fromInterned(fn_info.return_type));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);2063 comptime assert(zig_call_abi_ver == 3);
1967 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{2064 try self.args.ensureUnusedCapacity(self.gpa, fn_info.param_types.len);
1968 .id_result_type = self.typeId(return_ty_ref),2065 for (fn_info.param_types.get(ip)) |param_ty_index| {
1969 .id_result = decl_id,2066 const param_ty = Type.fromInterned(param_ty_index);
1970 .function_control = switch (fn_info.cc) {2067 if (!param_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
1971 .Inline => .{ .Inline = true },2068
1972 else => .{},2069 const param_type_id = try self.resolveTypeId(param_ty);
1973 },2070 const arg_result_id = self.spv.allocId();
1974 .function_type = prototype_id,2071 try self.func.prologue.emit(self.spv.gpa, .OpFunctionParameter, .{
1975 });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);2078 // TODO: This could probably be done in a better way...
1978 for (fn_info.param_types.get(ip)) |param_ty_index| {2079 const root_block_id = self.spv.allocId();
1979 const param_ty = Type.fromInterned(param_ty_index);
1980 if (!param_ty.hasRuntimeBitsIgnoreComptime(mod)) continue;
19812080
1982 const param_type_id = try self.resolveTypeId(param_ty);2081 // The root block of a function declaration should appear before OpVariable instructions,
1983 const arg_result_id = self.spv.allocId();2082 // so it is generated into the function's prologue.
1984 try self.func.prologue.emit(self.spv.gpa, .OpFunctionParameter, .{2083 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
1985 .id_result_type = param_type_id,2084 .id_result = root_block_id,
1986 .id_result = arg_result_id,
1987 });2085 });
1988 self.args.appendAssumeCapacity(arg_result_id);2086 self.current_block_label = root_block_id;
1989 }
19902087
1991 // TODO: This could probably be done in a better way...2088 const main_body = self.air.getMainBody();
1992 const root_block_id = self.spv.allocId();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,2104 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
1995 // so it is generated into the function's prologue.2105 try self.spv.debugName(result_id, fqn);
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;
20002106
2001 const main_body = self.air.getMainBody();2107 // Temporarily generate a test kernel declaration if this is a test function.
2002 switch (self.control_flow) {2108 if (self.module.test_functions.contains(self.decl_index)) {
2003 .structured => {2109 try self.generateTestEntryPoint(fqn, spv_decl_index);
2004 _ = try self.genStructuredBody(.selection, main_body);2110 }
2005 // We always expect paths to here to end, but we still need the block2111 },
2006 // to act as a dummy merge block.2112 .global => {
2007 try self.func.body.emit(self.spv.gpa, .OpUnreachable, {});2113 const maybe_init_val: ?Value = blk: {
2008 },2114 if (decl.val.getVariable(mod)) |payload| {
2009 .unstructured => {2115 if (payload.is_extern) break :blk null;
2010 try self.genBody(main_body);2116 break :blk Value.fromInterned(payload.init);
2011 },2117 }
2012 }2118 break :blk decl.val;
2013 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});2119 };
2014 // Append the actual code into the functions section.2120 assert(maybe_init_val == null); // TODO
2015 try self.spv.addFunction(spv_decl_index, self.func);
20162121
2017 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));2122 const final_storage_class = self.spvStorageClass(decl.@"addrspace");
2018 try self.spv.debugName(decl_id, fqn);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.2125 const ptr_ty_ref = try self.ptrType(decl.ty, final_storage_class);
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 };
20322126
2033 // Generate the actual variable for the global...2127 try self.spv.sections.types_globals_constants.emit(self.spv.gpa, .OpVariable, .{
2034 const final_storage_class = self.spvStorageClass(decl.@"addrspace");2128 .id_result_type = self.typeId(ptr_ty_ref),
2035 const actual_storage_class = blk: {2129 .id_result = result_id,
2036 if (target.os.tag != .vulkan) {2130 .storage_class = final_storage_class,
2037 break :blk switch (final_storage_class) {2131 });
2038 .Generic => .CrossWorkgroup,
2039 else => final_storage_class,
2040 };
2041 }
2042 break :blk final_storage_class;
2043 };
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();2146 try self.spv.declareDeclDeps(spv_decl_index, &.{});
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);
20552147
2056 if (opt_init_val) |init_val| {2148 const ptr_ty_ref = try self.ptrType(decl.ty, .Function);
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);
20602149
2061 const initializer_proto_ty_ref = try self.spv.resolve(.{ .function_type = .{2150 if (maybe_init_val) |init_val| {
2062 .return_type = void_ty_ref,2151 // TODO: Combine with resolveAnonDecl?
2063 .parameters = &.{},2152 const void_ty_ref = try self.resolveType(Type.void, .direct);
2064 } });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.2158 const initializer_id = self.spv.allocId();
2067 const initializer_id = self.spv.allocId();2159 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{
2068 try self.func.prologue.emit(self.spv.gpa, .OpFunction, .{2160 .id_result_type = self.typeId(void_ty_ref),
2069 .id_result_type = self.typeId(void_ty_ref),2161 .id_result = initializer_id,
2070 .id_result = initializer_id,2162 .function_control = .{},
2071 .function_control = .{},2163 .function_type = self.typeId(initializer_proto_ty_ref),
2072 .function_type = self.typeId(initializer_proto_ty_ref),2164 });
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;
20792165
2080 const val_id = try self.constant(decl.ty, init_val, .indirect);2166 const root_block_id = self.spv.allocId();
2081 try self.func.body.emit(self.spv.gpa, .OpStore, .{2167 try self.func.prologue.emit(self.spv.gpa, .OpLabel, .{
2082 .pointer = decl_id,2168 .id_result = root_block_id,
2083 .object = val_id,2169 });
2084 });2170 self.current_block_label = root_block_id;
20852171
2086 // TODO: We should be able to get rid of this by now...2172 const val_id = try self.constant(decl.ty, init_val, .indirect);
2087 self.spv.endGlobal(spv_decl_index, begin, decl_id, initializer_id);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, {});2178 try self.func.body.emit(self.spv.gpa, .OpReturn, {});
2090 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});2179 try self.func.body.emit(self.spv.gpa, .OpFunctionEnd, {});
2091 try self.spv.addFunction(spv_decl_index, self.func);2180 try self.spv.addFunction(spv_decl_index, self.func);
20922181
2093 try self.spv.debugNameFmt(initializer_id, "initializer of {s}", .{fqn});2182 const fqn = ip.stringToSlice(try decl.fullyQualifiedName(self.module));
2094 } else {2183 try self.spv.debugNameFmt(initializer_id, "initializer of {s}", .{fqn});
2095 self.spv.endGlobal(spv_decl_index, begin, decl_id, null);2184
2096 try self.spv.declareDeclDeps(spv_decl_index, &.{});2185 try self.spv.sections.types_globals_constants.emit(self.spv.gpa, .OpExtInst, .{
2097 }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 },
2098 }2202 }
2099 }2203 }
21002204
...@@ -2487,8 +2591,8 @@ const DeclGen = struct {...@@ -2487,8 +2591,8 @@ const DeclGen = struct {
2487 else => unreachable,2591 else => unreachable,
2488 };2592 };
2489 const set_id = switch (target.os.tag) {2593 const set_id = switch (target.os.tag) {
2490 .opencl => try self.spv.importInstructionSet(.opencl),2594 .opencl => try self.spv.importInstructionSet(.@"OpenCL.std"),
2491 .vulkan => try self.spv.importInstructionSet(.glsl),2595 .vulkan => try self.spv.importInstructionSet(.@"GLSL.std.450"),
2492 else => unreachable,2596 else => unreachable,
2493 };2597 };
24942598
...@@ -2662,8 +2766,8 @@ const DeclGen = struct {...@@ -2662,8 +2766,8 @@ const DeclGen = struct {
2662 else => unreachable,2766 else => unreachable,
2663 };2767 };
2664 const set_id = switch (target.os.tag) {2768 const set_id = switch (target.os.tag) {
2665 .opencl => try self.spv.importInstructionSet(.opencl),2769 .opencl => try self.spv.importInstructionSet(.@"OpenCL.std"),
2666 .vulkan => try self.spv.importInstructionSet(.glsl),2770 .vulkan => try self.spv.importInstructionSet(.@"GLSL.std.450"),
2667 else => unreachable,2771 else => unreachable,
2668 };2772 };
26692773
...@@ -2792,8 +2896,9 @@ const DeclGen = struct {...@@ -2792,8 +2896,9 @@ const DeclGen = struct {
2792 ov_id.* = try self.intFromBool(wip_ov.ty_ref, overflowed_id);2896 ov_id.* = try self.intFromBool(wip_ov.ty_ref, overflowed_id);
2793 }2897 }
27942898
2795 return try self.constructComposite(2899 return try self.constructStruct(
2796 result_ty,2900 result_ty,
2901 &.{ operand_ty, ov_ty },
2797 &.{ try wip_result.finalize(), try wip_ov.finalize() },2902 &.{ try wip_result.finalize(), try wip_ov.finalize() },
2798 );2903 );
2799 }2904 }
...@@ -2885,8 +2990,9 @@ const DeclGen = struct {...@@ -2885,8 +2990,9 @@ const DeclGen = struct {
2885 ov_id.* = try self.intFromBool(wip_ov.ty_ref, overflowed_id);2990 ov_id.* = try self.intFromBool(wip_ov.ty_ref, overflowed_id);
2886 }2991 }
28872992
2888 return try self.constructComposite(2993 return try self.constructStruct(
2889 result_ty,2994 result_ty,
2995 &.{ operand_ty, ov_ty },
2890 &.{ try wip_result.finalize(), try wip_ov.finalize() },2996 &.{ try wip_result.finalize(), try wip_ov.finalize() },
2891 );2997 );
2892 }2998 }
...@@ -3201,35 +3307,76 @@ const DeclGen = struct {...@@ -3201,35 +3307,76 @@ const DeclGen = struct {
3201 else3307 else
3202 try self.convertToDirect(Type.bool, rhs_id);3308 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);
3205 if (!payload_ty.hasRuntimeBitsIgnoreComptime(mod)) {3310 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);
3207 }3312 }
32083313
3209 // TODO: Should we short circuit here? It shouldn't affect correctness, but3314 // a = lhs_valid
3210 // perhaps it will generate more efficient code.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
3212 const lhs_pl_id = try self.extractField(payload_ty, lhs_id, 0);3329 const lhs_pl_id = try self.extractField(payload_ty, lhs_id, 0);
3213 const rhs_pl_id = try self.extractField(payload_ty, rhs_id, 0);3330 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 };
3227 switch (op) {3332 switch (op) {
3228 .eq => try self.func.body.emit(self.spv.gpa, .OpLogicalAnd, args),3333 .eq => {
3229 .neq => try self.func.body.emit(self.spv.gpa, .OpLogicalOr, args),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 },
3230 else => unreachable,3378 else => unreachable,
3231 }3379 }
3232 return result_id;
3233 },3380 },
3234 .Vector => {3381 .Vector => {
3235 var wip = try self.elementWise(result_ty, true);3382 var wip = try self.elementWise(result_ty, true);
...@@ -3588,7 +3735,11 @@ const DeclGen = struct {...@@ -3588,7 +3735,11 @@ const DeclGen = struct {
3588 // Convert the pointer-to-array to a pointer to the first element.3735 // Convert the pointer-to-array to a pointer to the first element.
3589 try self.accessChain(elem_ptr_ty_ref, array_ptr_id, &.{0});3736 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 );
3592 }3743 }
35933744
3594 fn airSlice(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {3745 fn airSlice(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
...@@ -3596,11 +3747,16 @@ const DeclGen = struct {...@@ -3596,11 +3747,16 @@ const DeclGen = struct {
3596 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;3747 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
3597 const ptr_id = try self.resolve(bin_op.lhs);3748 const ptr_id = try self.resolve(bin_op.lhs);
3598 const len_id = try self.resolve(bin_op.rhs);3749 const len_id = try self.resolve(bin_op.rhs);
3750 const ptr_ty = self.typeOf(bin_op.lhs);
3599 const slice_ty = self.typeOfIndex(inst);3751 const slice_ty = self.typeOfIndex(inst);
36003752
3601 // Note: Types should not need to be converted to direct, these types3753 // Note: Types should not need to be converted to direct, these types
3602 // dont need to be converted.3754 // 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 );
3604 }3760 }
36053761
3606 fn airAggregateInit(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {3762 fn airAggregateInit(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
...@@ -3618,6 +3774,8 @@ const DeclGen = struct {...@@ -3618,6 +3774,8 @@ const DeclGen = struct {
3618 unreachable; // TODO3774 unreachable; // TODO
3619 }3775 }
36203776
3777 const types = try self.gpa.alloc(Type, elements.len);
3778 defer self.gpa.free(types);
3621 const constituents = try self.gpa.alloc(IdRef, elements.len);3779 const constituents = try self.gpa.alloc(IdRef, elements.len);
3622 defer self.gpa.free(constituents);3780 defer self.gpa.free(constituents);
3623 var index: usize = 0;3781 var index: usize = 0;
...@@ -3629,6 +3787,7 @@ const DeclGen = struct {...@@ -3629,6 +3787,7 @@ const DeclGen = struct {
3629 assert(Type.fromInterned(field_ty).hasRuntimeBits(mod));3787 assert(Type.fromInterned(field_ty).hasRuntimeBits(mod));
36303788
3631 const id = try self.resolve(element);3789 const id = try self.resolve(element);
3790 types[index] = Type.fromInterned(field_ty);
3632 constituents[index] = try self.convertToIndirect(Type.fromInterned(field_ty), id);3791 constituents[index] = try self.convertToIndirect(Type.fromInterned(field_ty), id);
3633 index += 1;3792 index += 1;
3634 }3793 }
...@@ -3643,6 +3802,7 @@ const DeclGen = struct {...@@ -3643,6 +3802,7 @@ const DeclGen = struct {
3643 assert(field_ty.hasRuntimeBitsIgnoreComptime(mod));3802 assert(field_ty.hasRuntimeBitsIgnoreComptime(mod));
36443803
3645 const id = try self.resolve(element);3804 const id = try self.resolve(element);
3805 types[index] = field_ty;
3646 constituents[index] = try self.convertToIndirect(field_ty, id);3806 constituents[index] = try self.convertToIndirect(field_ty, id);
3647 index += 1;3807 index += 1;
3648 }3808 }
...@@ -3650,7 +3810,11 @@ const DeclGen = struct {...@@ -3650,7 +3810,11 @@ const DeclGen = struct {
3650 else => unreachable,3810 else => unreachable,
3651 }3811 }
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 );
3654 },3818 },
3655 .Vector => {3819 .Vector => {
3656 const n_elems = result_ty.vectorLen(mod);3820 const n_elems = result_ty.vectorLen(mod);
...@@ -3662,7 +3826,7 @@ const DeclGen = struct {...@@ -3662,7 +3826,7 @@ const DeclGen = struct {
3662 elem_ids[i] = try self.convertToIndirect(result_ty.childType(mod), id);3826 elem_ids[i] = try self.convertToIndirect(result_ty.childType(mod), id);
3663 }3827 }
36643828
3665 return try self.constructComposite(result_ty, elem_ids);3829 return try self.constructVector(result_ty, elem_ids);
3666 },3830 },
3667 .Array => {3831 .Array => {
3668 const array_info = result_ty.arrayInfo(mod);3832 const array_info = result_ty.arrayInfo(mod);
...@@ -3679,7 +3843,7 @@ const DeclGen = struct {...@@ -3679,7 +3843,7 @@ const DeclGen = struct {
3679 elem_ids[n_elems - 1] = try self.constant(array_info.elem_type, sentinel_val, .indirect);3843 elem_ids[n_elems - 1] = try self.constant(array_info.elem_type, sentinel_val, .indirect);
3680 }3844 }
36813845
3682 return try self.constructComposite(result_ty, elem_ids);3846 return try self.constructArray(result_ty, elem_ids);
3683 },3847 },
3684 else => unreachable,3848 else => unreachable,
3685 }3849 }
...@@ -4792,7 +4956,11 @@ const DeclGen = struct {...@@ -4792,7 +4956,11 @@ const DeclGen = struct {
4792 members[eu_layout.errorFieldIndex()] = operand_id;4956 members[eu_layout.errorFieldIndex()] = operand_id;
4793 members[eu_layout.payloadFieldIndex()] = try self.spv.constUndef(payload_ty_ref);4957 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);
4796 }4964 }
47974965
4798 fn airWrapErrUnionPayload(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {4966 fn airWrapErrUnionPayload(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
...@@ -4811,7 +4979,11 @@ const DeclGen = struct {...@@ -4811,7 +4979,11 @@ const DeclGen = struct {
4811 members[eu_layout.errorFieldIndex()] = try self.constInt(err_ty_ref, 0);4979 members[eu_layout.errorFieldIndex()] = try self.constInt(err_ty_ref, 0);
4812 members[eu_layout.payloadFieldIndex()] = try self.convertToIndirect(payload_ty, operand_id);4980 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);
4815 }4987 }
48164988
4817 fn airIsNull(self: *DeclGen, inst: Air.Inst.Index, is_pointer: bool, pred: enum { is_null, is_non_null }) !?IdRef {4989 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 {...@@ -4978,7 +5150,8 @@ const DeclGen = struct {
49785150
4979 const payload_id = try self.convertToIndirect(payload_ty, operand_id);5151 const payload_id = try self.convertToIndirect(payload_ty, operand_id);
4980 const members = [_]IdRef{ payload_id, try self.constBool(true, .indirect) };5152 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);
4982 }5155 }
49835156
4984 fn airSwitchBr(self: *DeclGen, inst: Air.Inst.Index) !void {5157 fn airSwitchBr(self: *DeclGen, inst: Air.Inst.Index) !void {
...@@ -5058,7 +5231,7 @@ const DeclGen = struct {...@@ -5058,7 +5231,7 @@ const DeclGen = struct {
5058 const case_body = self.air.extra[case.end + items.len ..][0..case.data.body_len];5231 const case_body = self.air.extra[case.end + items.len ..][0..case.data.body_len];
5059 extra_index = case.end + case.data.items_len + case_body.len;5232 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
5063 for (items) |item| {5236 for (items) |item| {
5064 const value = (try self.air.value(item, mod)) orelse unreachable;5237 const value = (try self.air.value(item, mod)) orelse unreachable;
...@@ -5072,7 +5245,7 @@ const DeclGen = struct {...@@ -5072,7 +5245,7 @@ const DeclGen = struct {
5072 else => unreachable,5245 else => unreachable,
5073 };5246 };
5074 const int_lit: spec.LiteralContextDependentNumber = switch (cond_words) {5247 const int_lit: spec.LiteralContextDependentNumber = switch (cond_words) {
5075 1 => .{ .uint32 = @as(u32, @intCast(int_val)) },5248 1 => .{ .uint32 = @intCast(int_val) },
5076 2 => .{ .uint64 = int_val },5249 2 => .{ .uint64 = int_val },
5077 else => unreachable,5250 else => unreachable,
5078 };5251 };
...@@ -5097,7 +5270,7 @@ const DeclGen = struct {...@@ -5097,7 +5270,7 @@ const DeclGen = struct {
5097 const case_body: []const Air.Inst.Index = @ptrCast(self.air.extra[case.end + items.len ..][0..case.data.body_len]);5270 const case_body: []const Air.Inst.Index = @ptrCast(self.air.extra[case.end + items.len ..][0..case.data.body_len]);
5098 extra_index = case.end + case.data.items_len + case_body.len;5271 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
5102 try self.beginSpvBlock(label);5275 try self.beginSpvBlock(label);
51035276
...@@ -5327,9 +5500,9 @@ const DeclGen = struct {...@@ -5327,9 +5500,9 @@ const DeclGen = struct {
5327 const result_id = self.spv.allocId();5500 const result_id = self.spv.allocId();
5328 const callee_id = try self.resolve(pl_op.operand);5501 const callee_id = try self.resolve(pl_op.operand);
53295502
5503 comptime assert(zig_call_abi_ver == 3);
5330 const params = try self.gpa.alloc(spec.IdRef, args.len);5504 const params = try self.gpa.alloc(spec.IdRef, args.len);
5331 defer self.gpa.free(params);5505 defer self.gpa.free(params);
5332
5333 var n_params: usize = 0;5506 var n_params: usize = 0;
5334 for (args) |arg| {5507 for (args) |arg| {
5335 // Note: resolve() might emit instructions, so we need to call it5508 // Note: resolve() might emit instructions, so we need to call it
src/codegen/spirv/Assembler.zig+21-3
...@@ -194,6 +194,11 @@ inst: struct {...@@ -194,6 +194,11 @@ inst: struct {
194/// This map maps results to their tracked values.194/// This map maps results to their tracked values.
195value_map: AsmValueMap = .{},195value_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
197/// Free the resources owned by this assembler.202/// Free the resources owned by this assembler.
198pub fn deinit(self: *Assembler) void {203pub fn deinit(self: *Assembler) void {
199 for (self.errors.items) |err| {204 for (self.errors.items) |err| {
...@@ -204,9 +209,20 @@ pub fn deinit(self: *Assembler) void {...@@ -204,9 +209,20 @@ pub fn deinit(self: *Assembler) void {
204 self.inst.operands.deinit(self.gpa);209 self.inst.operands.deinit(self.gpa);
205 self.inst.string_bytes.deinit(self.gpa);210 self.inst.string_bytes.deinit(self.gpa);
206 self.value_map.deinit(self.gpa);211 self.value_map.deinit(self.gpa);
212 self.instruction_map.deinit(self.gpa);
207}213}
208214
209pub fn assemble(self: *Assembler) Error!void {215pub 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
210 try self.tokenize();226 try self.tokenize();
211 while (!self.testToken(.eof)) {227 while (!self.testToken(.eof)) {
212 try self.parseInstruction();228 try self.parseInstruction();
...@@ -475,12 +491,14 @@ fn parseInstruction(self: *Assembler) !void {...@@ -475,12 +491,14 @@ fn parseInstruction(self: *Assembler) !void {
475 }491 }
476492
477 const opcode_text = self.tokenText(opcode_tok);493 const opcode_text = self.tokenText(opcode_tok);
478 @setEvalBranchQuota(10000);494 const index = self.instruction_map.getIndex(opcode_text) orelse {
479 self.inst.opcode = std.meta.stringToEnum(Opcode, opcode_text) orelse {
480 return self.fail(opcode_tok.start, "invalid opcode '{s}'", .{opcode_text});495 return self.fail(opcode_tok.start, "invalid opcode '{s}'", .{opcode_text});
481 };496 };
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;
484 // This is a loop because the result-id is not always the first operand.502 // This is a loop because the result-id is not always the first operand.
485 const requires_lhs_result = for (expected_operands) |op| {503 const requires_lhs_result = for (expected_operands) |op| {
486 if (op.kind == .IdResult) break true;504 if (op.kind == .IdResult) break true;
src/codegen/spirv/Cache.zig+10-21
...@@ -134,7 +134,10 @@ const Tag = enum {...@@ -134,7 +134,10 @@ const Tag = enum {
134 /// data is (bool) type134 /// data is (bool) type
135 bool_false,135 bool_false,
136136
137 const SimpleType = enum { void, bool };137 const SimpleType = enum {
138 void,
139 bool,
140 };
138141
139 const VectorType = Key.VectorType;142 const VectorType = Key.VectorType;
140 const ArrayType = Key.ArrayType;143 const ArrayType = Key.ArrayType;
...@@ -287,11 +290,12 @@ pub const Key = union(enum) {...@@ -287,11 +290,12 @@ pub const Key = union(enum) {
287 pub const PointerType = struct {290 pub const PointerType = struct {
288 storage_class: StorageClass,291 storage_class: StorageClass,
289 child_type: Ref,292 child_type: Ref,
293 /// Ref to a .fwd_ptr_type.
290 fwd: Ref,294 fwd: Ref,
291 // TODO: Decorations:295 // TODO: Decorations:
292 // - Alignment296 // - Alignment
293 // - ArrayStride,297 // - ArrayStride
294 // - MaxByteOffset,298 // - MaxByteOffset
295 };299 };
296300
297 pub const ForwardPointerType = struct {301 pub const ForwardPointerType = struct {
...@@ -728,6 +732,9 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref {...@@ -728,6 +732,9 @@ pub fn resolve(self: *Self, spv: *Module, key: Key) !Ref {
728 // },732 // },
729 .ptr_type => |ptr| Item{733 .ptr_type => |ptr| Item{
730 .tag = .type_ptr_simple,734 .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.
731 .result_id = self.resultId(ptr.fwd),738 .result_id = self.resultId(ptr.fwd),
732 .data = try self.addExtra(spv, Tag.SimplePointerType{739 .data = try self.addExtra(spv, Tag.SimplePointerType{
733 .storage_class = ptr.storage_class,740 .storage_class = ptr.storage_class,
...@@ -896,24 +903,6 @@ pub fn lookup(self: *const Self, ref: Ref) Key {...@@ -896,24 +903,6 @@ pub fn lookup(self: *const Self, ref: Ref) Key {
896 },903 },
897 };904 };
898 },905 },
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 // },
917 .type_ptr_simple => {906 .type_ptr_simple => {
918 const payload = self.extraData(Tag.SimplePointerType, data);907 const payload = self.extraData(Tag.SimplePointerType, data);
919 return .{908 return .{
src/codegen/spirv/Module.zig+45-229
...@@ -72,9 +72,20 @@ pub const Decl = struct {...@@ -72,9 +72,20 @@ pub const Decl = struct {
72 /// Index to refer to a Decl by.72 /// Index to refer to a Decl by.
73 pub const Index = enum(u32) { _ };73 pub const Index = enum(u32) { _ };
7474
75 /// The result-id to be used for this declaration. This is the final result-id75 /// Useful to tell what kind of decl this is, and hold the result-id or field index
76 /// of the decl, which may be an OpFunction, OpVariable, or the result of a sequence76 /// to be used for this decl.
77 /// of OpSpecConstantOp operations.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.
78 result_id: IdRef,89 result_id: IdRef,
79 /// The offset of the first dependency of this decl in the `decl_deps` array.90 /// The offset of the first dependency of this decl in the `decl_deps` array.
80 begin_dep: u32,91 begin_dep: u32,
...@@ -82,20 +93,6 @@ pub const Decl = struct {...@@ -82,20 +93,6 @@ pub const Decl = struct {
82 end_dep: u32,93 end_dep: u32,
83};94};
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
99/// This models a kernel entry point.96/// This models a kernel entry point.
100pub const EntryPoint = struct {97pub const EntryPoint = struct {
101 /// The declaration that should be exported.98 /// The declaration that should be exported.
...@@ -165,18 +162,8 @@ decl_deps: std.ArrayListUnmanaged(Decl.Index) = .{},...@@ -165,18 +162,8 @@ decl_deps: std.ArrayListUnmanaged(Decl.Index) = .{},
165/// The list of entry points that should be exported from this module.162/// The list of entry points that should be exported from this module.
166entry_points: std.ArrayListUnmanaged(EntryPoint) = .{},163entry_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
178/// The list of extended instruction sets that should be imported.165/// 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
181pub fn init(gpa: Allocator) Module {168pub fn init(gpa: Allocator) Module {
182 return .{169 return .{
...@@ -205,9 +192,6 @@ pub fn deinit(self: *Module) void {...@@ -205,9 +192,6 @@ pub fn deinit(self: *Module) void {
205192
206 self.entry_points.deinit(self.gpa);193 self.entry_points.deinit(self.gpa);
207194
208 self.globals.globals.deinit(self.gpa);
209 self.globals.section.deinit(self.gpa);
210
211 self.extended_instruction_set.deinit(self.gpa);195 self.extended_instruction_set.deinit(self.gpa);
212196
213 self.* = undefined;197 self.* = undefined;
...@@ -215,12 +199,12 @@ pub fn deinit(self: *Module) void {...@@ -215,12 +199,12 @@ pub fn deinit(self: *Module) void {
215199
216pub fn allocId(self: *Module) spec.IdResult {200pub fn allocId(self: *Module) spec.IdResult {
217 defer self.next_result_id += 1;201 defer self.next_result_id += 1;
218 return .{ .id = self.next_result_id };202 return @enumFromInt(self.next_result_id);
219}203}
220204
221pub fn allocIds(self: *Module, n: u32) spec.IdResult {205pub fn allocIds(self: *Module, n: u32) spec.IdResult {
222 defer self.next_result_id += n;206 defer self.next_result_id += n;
223 return .{ .id = self.next_result_id };207 return @enumFromInt(self.next_result_id);
224}208}
225209
226pub fn idBound(self: Module) Word {210pub fn idBound(self: Module) Word {
...@@ -243,46 +227,6 @@ pub fn resolveString(self: *Module, str: []const u8) !CacheString {...@@ -243,46 +227,6 @@ pub fn resolveString(self: *Module, str: []const u8) !CacheString {
243 return try self.cache.addString(self, str);227 return try self.cache.addString(self, str);
244}228}
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
286fn addEntryPointDeps(230fn addEntryPointDeps(
287 self: *Module,231 self: *Module,
288 decl_index: Decl.Index,232 decl_index: Decl.Index,
...@@ -298,8 +242,8 @@ fn addEntryPointDeps(...@@ -298,8 +242,8 @@ fn addEntryPointDeps(
298242
299 seen.set(@intFromEnum(decl_index));243 seen.set(@intFromEnum(decl_index));
300244
301 if (self.globalPtr(decl_index)) |global| {245 if (decl.kind == .global) {
302 try interface.append(global.result_id);246 try interface.append(decl.result_id);
303 }247 }
304248
305 for (deps) |dep| {249 for (deps) |dep| {
...@@ -335,81 +279,9 @@ fn entryPoints(self: *Module) !Section {...@@ -335,81 +279,9 @@ fn entryPoints(self: *Module) !Section {
335 return entry_points;279 return entry_points;
336}280}
337281
338/// Generate a function that calls all initialization functions,282pub fn finalize(self: *Module, a: Allocator, target: std.Target) ![]Word {
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 {
408 // See SPIR-V Spec section 2.3, "Physical Layout of a SPIR-V Module and Instruction"283 // See SPIR-V Spec section 2.3, "Physical Layout of a SPIR-V Module and Instruction"
409284 // TODO: Audit calls to allocId() in this function to make it idempotent.
410 // TODO: Perform topological sort on the globals.
411 var globals = try self.orderGlobals();
412 defer globals.deinit(self.gpa);
413285
414 var entry_points = try self.entryPoints();286 var entry_points = try self.entryPoints();
415 defer entry_points.deinit(self.gpa);287 defer entry_points.deinit(self.gpa);
...@@ -417,13 +289,6 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {...@@ -417,13 +289,6 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
417 var types_constants = try self.cache.materialize(self);289 var types_constants = try self.cache.materialize(self);
418 defer types_constants.deinit(self.gpa);290 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
427 const header = [_]Word{292 const header = [_]Word{
428 spec.magic_number,293 spec.magic_number,
429 // TODO: From cpu features294 // TODO: From cpu features
...@@ -436,7 +301,7 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {...@@ -436,7 +301,7 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
436 else => 4,301 else => 4,
437 },302 },
438 }),303 }),
439 0, // TODO: Register Zig compiler magic number.304 spec.zig_generator_id,
440 self.idBound(),305 self.idBound(),
441 0, // Schema (currently reserved for future use)306 0, // Schema (currently reserved for future use)
442 };307 };
...@@ -468,30 +333,23 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {...@@ -468,30 +333,23 @@ pub fn flush(self: *Module, file: std.fs.File, target: std.Target) !void {
468 self.sections.annotations.toWords(),333 self.sections.annotations.toWords(),
469 types_constants.toWords(),334 types_constants.toWords(),
470 self.sections.types_globals_constants.toWords(),335 self.sections.types_globals_constants.toWords(),
471 globals.toWords(),
472 self.sections.functions.toWords(),336 self.sections.functions.toWords(),
473 };337 };
474338
475 if (builtin.zig_backend == .stage2_x86_64) {339 var total_result_size: usize = 0;
476 for (buffers) |buf| {340 for (buffers) |buffer| {
477 try file.writeAll(std.mem.sliceAsBytes(buf));341 total_result_size += buffer.len;
478 }342 }
479 } else {343 const result = try a.alloc(Word, total_result_size);
480 // miscompiles with x86_64 backend344 errdefer a.free(result);
481 var iovc_buffers: [buffers.len]std.os.iovec_const = undefined;345
482 var file_size: u64 = 0;346 var offset: usize = 0;
483 for (&iovc_buffers, 0..) |*iovc, i| {347 for (buffers) |buffer| {
484 // Note, since spir-v supports both little and big endian we can ignore byte order here and348 @memcpy(result[offset..][0..buffer.len], buffer);
485 // just treat the words as a sequence of bytes.349 offset += buffer.len;
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);
494 }350 }
351
352 return result;
495}353}
496354
497/// Merge the sections making up a function declaration into this module.355/// 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 {...@@ -501,23 +359,17 @@ pub fn addFunction(self: *Module, decl_index: Decl.Index, func: Fn) !void {
501 try self.declareDeclDeps(decl_index, func.decl_deps.keys());359 try self.declareDeclDeps(decl_index, func.decl_deps.keys());
502}360}
503361
504pub const ExtendedInstructionSet = enum {
505 glsl,
506 opencl,
507};
508
509/// Imports or returns the existing id of an extended instruction set362/// 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
511 const gop = try self.extended_instruction_set.getOrPut(self.gpa, set);366 const gop = try self.extended_instruction_set.getOrPut(self.gpa, set);
512 if (gop.found_existing) return gop.value_ptr.*;367 if (gop.found_existing) return gop.value_ptr.*;
513368
514 const result_id = self.allocId();369 const result_id = self.allocId();
515 try self.sections.extended_instruction_set.emit(self.gpa, .OpExtInstImport, .{370 try self.sections.extended_instruction_set.emit(self.gpa, .OpExtInstImport, .{
516 .id_result = result_id,371 .id_result = result_id,
517 .name = switch (set) {372 .name = @tagName(set),
518 .glsl => "GLSL.std.450",
519 .opencl => "OpenCL.std",
520 },
521 });373 });
522 gop.value_ptr.* = result_id;374 gop.value_ptr.* = result_id;
523375
...@@ -631,40 +483,21 @@ pub fn decorateMember(...@@ -631,40 +483,21 @@ pub fn decorateMember(
631 });483 });
632}484}
633485
634pub const DeclKind = enum {486pub fn allocDecl(self: *Module, kind: Decl.Kind) !Decl.Index {
635 func,
636 global,
637};
638
639pub fn allocDecl(self: *Module, kind: DeclKind) !Decl.Index {
640 try self.decls.append(self.gpa, .{487 try self.decls.append(self.gpa, .{
488 .kind = kind,
641 .result_id = self.allocId(),489 .result_id = self.allocId(),
642 .begin_dep = undefined,490 .begin_dep = undefined,
643 .end_dep = undefined,491 .end_dep = undefined,
644 });492 });
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))));
658}495}
659496
660pub fn declPtr(self: *Module, index: Decl.Index) *Decl {497pub fn declPtr(self: *Module, index: Decl.Index) *Decl {
661 return &self.decls.items[@intFromEnum(index)];498 return &self.decls.items[@intFromEnum(index)];
662}499}
663500
664pub fn globalPtr(self: *Module, index: Decl.Index) ?*Global {
665 return self.globals.globals.getPtr(index);
666}
667
668/// Declare ALL dependencies for a decl.501/// Declare ALL dependencies for a decl.
669pub fn declareDeclDeps(self: *Module, decl_index: Decl.Index, deps: []const Decl.Index) !void {502pub fn declareDeclDeps(self: *Module, decl_index: Decl.Index, deps: []const Decl.Index) !void {
670 const begin_dep = @as(u32, @intCast(self.decl_deps.items.len));503 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...@@ -676,26 +509,9 @@ pub fn declareDeclDeps(self: *Module, decl_index: Decl.Index, deps: []const Decl
676 decl.end_dep = end_dep;509 decl.end_dep = end_dep;
677}510}
678511
679pub fn beginGlobal(self: *Module) u32 {512/// Declare a SPIR-V function as an entry point. This causes an extra wrapper
680 return @as(u32, @intCast(self.globals.section.instructions.items.len));513/// function to be generated, which is then exported as the real entry point. The purpose of this
681}514/// wrapper is to allocate and initialize the structure holding the instance globals.
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
699pub fn declareEntryPoint(515pub fn declareEntryPoint(
700 self: *Module,516 self: *Module,
701 decl_index: Decl.Index,517 decl_index: Decl.Index,
src/codegen/spirv/Section.zig+21-10
...@@ -53,6 +53,17 @@ pub fn emitRaw(...@@ -53,6 +53,17 @@ pub fn emitRaw(
53 section.writeWord((@as(Word, @intCast(word_count << 16))) | @intFromEnum(opcode));53 section.writeWord((@as(Word, @intCast(word_count << 16))) | @intFromEnum(opcode));
54}54}
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
56pub fn emit(67pub fn emit(
57 section: *Section,68 section: *Section,
58 allocator: Allocator,69 allocator: Allocator,
...@@ -123,7 +134,7 @@ fn writeOperands(section: *Section, comptime Operands: type, operands: Operands)...@@ -123,7 +134,7 @@ fn writeOperands(section: *Section, comptime Operands: type, operands: Operands)
123134
124pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand) void {135pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand) void {
125 switch (Operand) {136 switch (Operand) {
126 spec.IdResult => section.writeWord(operand.id),137 spec.IdResult => section.writeWord(@intFromEnum(operand)),
127138
128 spec.LiteralInteger => section.writeWord(operand),139 spec.LiteralInteger => section.writeWord(operand),
129140
...@@ -138,9 +149,9 @@ pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand)...@@ -138,9 +149,9 @@ pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand)
138 // instruction in which it is used.149 // instruction in which it is used.
139 spec.LiteralSpecConstantOpInteger => section.writeWord(@intFromEnum(operand.opcode)),150 spec.LiteralSpecConstantOpInteger => section.writeWord(@intFromEnum(operand.opcode)),
140151
141 spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, operand.label.id }),152 spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, @enumFromInt(operand.label) }),
142 spec.PairIdRefLiteralInteger => section.writeWords(&.{ operand.target.id, operand.member }),153 spec.PairIdRefLiteralInteger => section.writeWords(&.{ @intFromEnum(operand.target), operand.member }),
143 spec.PairIdRefIdRef => section.writeWords(&.{ operand[0].id, operand[1].id }),154 spec.PairIdRefIdRef => section.writeWords(&.{ @intFromEnum(operand[0]), @intFromEnum(operand[1]) }),
144155
145 else => switch (@typeInfo(Operand)) {156 else => switch (@typeInfo(Operand)) {
146 .Enum => section.writeWord(@intFromEnum(operand)),157 .Enum => section.writeWord(@intFromEnum(operand)),
...@@ -338,8 +349,8 @@ test "SPIR-V Section emit() - simple" {...@@ -338,8 +349,8 @@ test "SPIR-V Section emit() - simple" {
338 defer section.deinit(std.testing.allocator);349 defer section.deinit(std.testing.allocator);
339350
340 try section.emit(std.testing.allocator, .OpUndef, .{351 try section.emit(std.testing.allocator, .OpUndef, .{
341 .id_result_type = .{ .id = 0 },352 .id_result_type = @enumFromInt(0),
342 .id_result = .{ .id = 1 },353 .id_result = @enumFromInt(1),
343 });354 });
344355
345 try testing.expectEqualSlices(Word, &.{356 try testing.expectEqualSlices(Word, &.{
...@@ -356,7 +367,7 @@ test "SPIR-V Section emit() - string" {...@@ -356,7 +367,7 @@ test "SPIR-V Section emit() - string" {
356 try section.emit(std.testing.allocator, .OpSource, .{367 try section.emit(std.testing.allocator, .OpSource, .{
357 .source_language = .Unknown,368 .source_language = .Unknown,
358 .version = 123,369 .version = 123,
359 .file = .{ .id = 456 },370 .file = @enumFromInt(256),
360 .source = "pub fn main() void {}",371 .source = "pub fn main() void {}",
361 });372 });
362373
...@@ -381,8 +392,8 @@ test "SPIR-V Section emit() - extended mask" {...@@ -381,8 +392,8 @@ test "SPIR-V Section emit() - extended mask" {
381 defer section.deinit(std.testing.allocator);392 defer section.deinit(std.testing.allocator);
382393
383 try section.emit(std.testing.allocator, .OpLoopMerge, .{394 try section.emit(std.testing.allocator, .OpLoopMerge, .{
384 .merge_block = .{ .id = 10 },395 .merge_block = @enumFromInt(10),
385 .continue_target = .{ .id = 20 },396 .continue_target = @enumFromInt(20),
386 .loop_control = .{397 .loop_control = .{
387 .Unroll = true,398 .Unroll = true,
388 .DependencyLength = .{399 .DependencyLength = .{
...@@ -405,7 +416,7 @@ test "SPIR-V Section emit() - extended union" {...@@ -405,7 +416,7 @@ test "SPIR-V Section emit() - extended union" {
405 defer section.deinit(std.testing.allocator);416 defer section.deinit(std.testing.allocator);
406417
407 try section.emit(std.testing.allocator, .OpExecutionMode, .{418 try section.emit(std.testing.allocator, .OpExecutionMode, .{
408 .entry_point = .{ .id = 888 },419 .entry_point = @enumFromInt(888),
409 .mode = .{420 .mode = .{
410 .LocalSize = .{ .x_size = 4, .y_size = 8, .z_size = 16 },421 .LocalSize = .{ .x_size = 4, .y_size = 8, .z_size = 16 },
411 },422 },
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 @@...@@ -1,5 +1,7 @@
1//! This file is auto-generated by tools/gen_spirv_spec.zig.1//! This file is auto-generated by tools/gen_spirv_spec.zig.
22
3const std = @import("std");
4
3pub const Version = packed struct(Word) {5pub const Version = packed struct(Word) {
4 padding: u8 = 0,6 padding: u8 = 0,
5 minor: u8,7 minor: u8,
...@@ -12,8 +14,21 @@ pub const Version = packed struct(Word) {...@@ -12,8 +14,21 @@ pub const Version = packed struct(Word) {
12};14};
1315
14pub const Word = u32;16pub const Word = u32;
15pub const IdResult = struct {17pub const IdResult = enum(Word) {
16 id: 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 }
17};32};
18pub const IdResultType = IdResult;33pub const IdResultType = IdResult;
19pub const IdRef = IdResult;34pub const IdRef = IdResult;
...@@ -22,6 +37,7 @@ pub const IdMemorySemantics = IdRef;...@@ -22,6 +37,7 @@ pub const IdMemorySemantics = IdRef;
22pub const IdScope = IdRef;37pub const IdScope = IdRef;
2338
24pub const LiteralInteger = Word;39pub const LiteralInteger = Word;
40pub const LiteralFloat = Word;
25pub const LiteralString = []const u8;41pub const LiteralString = []const u8;
26pub const LiteralContextDependentNumber = union(enum) {42pub const LiteralContextDependentNumber = union(enum) {
27 int32: i32,43 int32: i32,
...@@ -62,6 +78,13 @@ pub const Enumerant = struct {...@@ -62,6 +78,13 @@ pub const Enumerant = struct {
62 parameters: []const OperandKind,78 parameters: []const OperandKind,
63};79};
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;
65pub const version = Version{ .major = 1, .minor = 6, .patch = 1 };88pub const version = Version{ .major = 1, .minor = 6, .patch = 1 };
66pub const magic_number: Word = 0x07230203;89pub const magic_number: Word = 0x07230203;
6790
...@@ -92,7 +115,9 @@ pub const Class = enum {...@@ -92,7 +115,9 @@ pub const Class = enum {
92 NonUniform,115 NonUniform,
93 Reserved,116 Reserved,
94};117};
118
95pub const OperandKind = enum {119pub const OperandKind = enum {
120 Opcode,
96 ImageOperands,121 ImageOperands,
97 FPFastMathMode,122 FPFastMathMode,
98 SelectionControl,123 SelectionControl,
...@@ -103,6 +128,7 @@ pub const OperandKind = enum {...@@ -103,6 +128,7 @@ pub const OperandKind = enum {
103 KernelProfilingInfo,128 KernelProfilingInfo,
104 RayFlags,129 RayFlags,
105 FragmentShadingRate,130 FragmentShadingRate,
131 RawAccessChainOperands,
106 SourceLanguage,132 SourceLanguage,
107 ExecutionModel,133 ExecutionModel,
108 AddressingModel,134 AddressingModel,
...@@ -122,6 +148,7 @@ pub const OperandKind = enum {...@@ -122,6 +148,7 @@ pub const OperandKind = enum {
122 OverflowModes,148 OverflowModes,
123 LinkageType,149 LinkageType,
124 AccessQualifier,150 AccessQualifier,
151 HostAccessQualifier,
125 FunctionParameterAttribute,152 FunctionParameterAttribute,
126 Decoration,153 Decoration,
127 BuiltIn,154 BuiltIn,
...@@ -133,6 +160,13 @@ pub const OperandKind = enum {...@@ -133,6 +160,13 @@ pub const OperandKind = enum {
133 RayQueryCommittedIntersectionType,160 RayQueryCommittedIntersectionType,
134 RayQueryCandidateIntersectionType,161 RayQueryCandidateIntersectionType,
135 PackedVectorFormat,162 PackedVectorFormat,
163 CooperativeMatrixOperands,
164 CooperativeMatrixLayout,
165 CooperativeMatrixUse,
166 InitializationModeQualifier,
167 LoadCacheControl,
168 StoreCacheControl,
169 NamedMaximumNumberOfRegisters,
136 IdResultType,170 IdResultType,
137 IdResult,171 IdResult,
138 IdMemorySemantics,172 IdMemorySemantics,
...@@ -140,15 +174,36 @@ pub const OperandKind = enum {...@@ -140,15 +174,36 @@ pub const OperandKind = enum {
140 IdRef,174 IdRef,
141 LiteralInteger,175 LiteralInteger,
142 LiteralString,176 LiteralString,
177 LiteralFloat,
143 LiteralContextDependentNumber,178 LiteralContextDependentNumber,
144 LiteralExtInstInteger,179 LiteralExtInstInteger,
145 LiteralSpecConstantOpInteger,180 LiteralSpecConstantOpInteger,
146 PairLiteralIntegerIdRef,181 PairLiteralIntegerIdRef,
147 PairIdRefLiteralInteger,182 PairIdRefLiteralInteger,
148 PairIdRefIdRef,183 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
150 pub fn category(self: OperandKind) OperandCategory {204 pub fn category(self: OperandKind) OperandCategory {
151 return switch (self) {205 return switch (self) {
206 .Opcode => .literal,
152 .ImageOperands => .bit_enum,207 .ImageOperands => .bit_enum,
153 .FPFastMathMode => .bit_enum,208 .FPFastMathMode => .bit_enum,
154 .SelectionControl => .bit_enum,209 .SelectionControl => .bit_enum,
...@@ -159,6 +214,7 @@ pub const OperandKind = enum {...@@ -159,6 +214,7 @@ pub const OperandKind = enum {
159 .KernelProfilingInfo => .bit_enum,214 .KernelProfilingInfo => .bit_enum,
160 .RayFlags => .bit_enum,215 .RayFlags => .bit_enum,
161 .FragmentShadingRate => .bit_enum,216 .FragmentShadingRate => .bit_enum,
217 .RawAccessChainOperands => .bit_enum,
162 .SourceLanguage => .value_enum,218 .SourceLanguage => .value_enum,
163 .ExecutionModel => .value_enum,219 .ExecutionModel => .value_enum,
164 .AddressingModel => .value_enum,220 .AddressingModel => .value_enum,
...@@ -178,6 +234,7 @@ pub const OperandKind = enum {...@@ -178,6 +234,7 @@ pub const OperandKind = enum {
178 .OverflowModes => .value_enum,234 .OverflowModes => .value_enum,
179 .LinkageType => .value_enum,235 .LinkageType => .value_enum,
180 .AccessQualifier => .value_enum,236 .AccessQualifier => .value_enum,
237 .HostAccessQualifier => .value_enum,
181 .FunctionParameterAttribute => .value_enum,238 .FunctionParameterAttribute => .value_enum,
182 .Decoration => .value_enum,239 .Decoration => .value_enum,
183 .BuiltIn => .value_enum,240 .BuiltIn => .value_enum,
...@@ -189,6 +246,13 @@ pub const OperandKind = enum {...@@ -189,6 +246,13 @@ pub const OperandKind = enum {
189 .RayQueryCommittedIntersectionType => .value_enum,246 .RayQueryCommittedIntersectionType => .value_enum,
190 .RayQueryCandidateIntersectionType => .value_enum,247 .RayQueryCandidateIntersectionType => .value_enum,
191 .PackedVectorFormat => .value_enum,248 .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,
192 .IdResultType => .id,256 .IdResultType => .id,
193 .IdResult => .id,257 .IdResult => .id,
194 .IdMemorySemantics => .id,258 .IdMemorySemantics => .id,
...@@ -196,16 +260,37 @@ pub const OperandKind = enum {...@@ -196,16 +260,37 @@ pub const OperandKind = enum {
196 .IdRef => .id,260 .IdRef => .id,
197 .LiteralInteger => .literal,261 .LiteralInteger => .literal,
198 .LiteralString => .literal,262 .LiteralString => .literal,
263 .LiteralFloat => .literal,
199 .LiteralContextDependentNumber => .literal,264 .LiteralContextDependentNumber => .literal,
200 .LiteralExtInstInteger => .literal,265 .LiteralExtInstInteger => .literal,
201 .LiteralSpecConstantOpInteger => .literal,266 .LiteralSpecConstantOpInteger => .literal,
202 .PairLiteralIntegerIdRef => .composite,267 .PairLiteralIntegerIdRef => .composite,
203 .PairIdRefLiteralInteger => .composite,268 .PairIdRefLiteralInteger => .composite,
204 .PairIdRefIdRef => .composite,269 .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,
205 };289 };
206 }290 }
207 pub fn enumerants(self: OperandKind) []const Enumerant {291 pub fn enumerants(self: OperandKind) []const Enumerant {
208 return switch (self) {292 return switch (self) {
293 .Opcode => unreachable,
209 .ImageOperands => &[_]Enumerant{294 .ImageOperands => &[_]Enumerant{
210 .{ .name = "Bias", .value = 0x0001, .parameters = &[_]OperandKind{.IdRef} },295 .{ .name = "Bias", .value = 0x0001, .parameters = &[_]OperandKind{.IdRef} },
211 .{ .name = "Lod", .value = 0x0002, .parameters = &[_]OperandKind{.IdRef} },296 .{ .name = "Lod", .value = 0x0002, .parameters = &[_]OperandKind{.IdRef} },
...@@ -234,8 +319,11 @@ pub const OperandKind = enum {...@@ -234,8 +319,11 @@ pub const OperandKind = enum {
234 .{ .name = "NSZ", .value = 0x0004, .parameters = &[_]OperandKind{} },319 .{ .name = "NSZ", .value = 0x0004, .parameters = &[_]OperandKind{} },
235 .{ .name = "AllowRecip", .value = 0x0008, .parameters = &[_]OperandKind{} },320 .{ .name = "AllowRecip", .value = 0x0008, .parameters = &[_]OperandKind{} },
236 .{ .name = "Fast", .value = 0x0010, .parameters = &[_]OperandKind{} },321 .{ .name = "Fast", .value = 0x0010, .parameters = &[_]OperandKind{} },
322 .{ .name = "AllowContract", .value = 0x10000, .parameters = &[_]OperandKind{} },
237 .{ .name = "AllowContractFastINTEL", .value = 0x10000, .parameters = &[_]OperandKind{} },323 .{ .name = "AllowContractFastINTEL", .value = 0x10000, .parameters = &[_]OperandKind{} },
324 .{ .name = "AllowReassoc", .value = 0x20000, .parameters = &[_]OperandKind{} },
238 .{ .name = "AllowReassocINTEL", .value = 0x20000, .parameters = &[_]OperandKind{} },325 .{ .name = "AllowReassocINTEL", .value = 0x20000, .parameters = &[_]OperandKind{} },
326 .{ .name = "AllowTransform", .value = 0x40000, .parameters = &[_]OperandKind{} },
239 },327 },
240 .SelectionControl => &[_]Enumerant{328 .SelectionControl => &[_]Enumerant{
241 .{ .name = "Flatten", .value = 0x0001, .parameters = &[_]OperandKind{} },329 .{ .name = "Flatten", .value = 0x0001, .parameters = &[_]OperandKind{} },
...@@ -258,7 +346,9 @@ pub const OperandKind = enum {...@@ -258,7 +346,9 @@ pub const OperandKind = enum {
258 .{ .name = "LoopCoalesceINTEL", .value = 0x100000, .parameters = &[_]OperandKind{.LiteralInteger} },346 .{ .name = "LoopCoalesceINTEL", .value = 0x100000, .parameters = &[_]OperandKind{.LiteralInteger} },
259 .{ .name = "MaxInterleavingINTEL", .value = 0x200000, .parameters = &[_]OperandKind{.LiteralInteger} },347 .{ .name = "MaxInterleavingINTEL", .value = 0x200000, .parameters = &[_]OperandKind{.LiteralInteger} },
260 .{ .name = "SpeculatedIterationsINTEL", .value = 0x400000, .parameters = &[_]OperandKind{.LiteralInteger} },348 .{ .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} },
262 },352 },
263 .FunctionControl => &[_]Enumerant{353 .FunctionControl => &[_]Enumerant{
264 .{ .name = "Inline", .value = 0x0001, .parameters = &[_]OperandKind{} },354 .{ .name = "Inline", .value = 0x0001, .parameters = &[_]OperandKind{} },
...@@ -297,6 +387,8 @@ pub const OperandKind = enum {...@@ -297,6 +387,8 @@ pub const OperandKind = enum {
297 .{ .name = "MakePointerVisibleKHR", .value = 0x0010, .parameters = &[_]OperandKind{.IdScope} },387 .{ .name = "MakePointerVisibleKHR", .value = 0x0010, .parameters = &[_]OperandKind{.IdScope} },
298 .{ .name = "NonPrivatePointer", .value = 0x0020, .parameters = &[_]OperandKind{} },388 .{ .name = "NonPrivatePointer", .value = 0x0020, .parameters = &[_]OperandKind{} },
299 .{ .name = "NonPrivatePointerKHR", .value = 0x0020, .parameters = &[_]OperandKind{} },389 .{ .name = "NonPrivatePointerKHR", .value = 0x0020, .parameters = &[_]OperandKind{} },
390 .{ .name = "AliasScopeINTELMask", .value = 0x10000, .parameters = &[_]OperandKind{.IdRef} },
391 .{ .name = "NoAliasINTELMask", .value = 0x20000, .parameters = &[_]OperandKind{.IdRef} },
300 },392 },
301 .KernelProfilingInfo => &[_]Enumerant{393 .KernelProfilingInfo => &[_]Enumerant{
302 .{ .name = "CmdExecTime", .value = 0x0001, .parameters = &[_]OperandKind{} },394 .{ .name = "CmdExecTime", .value = 0x0001, .parameters = &[_]OperandKind{} },
...@@ -313,6 +405,7 @@ pub const OperandKind = enum {...@@ -313,6 +405,7 @@ pub const OperandKind = enum {
313 .{ .name = "CullNoOpaqueKHR", .value = 0x0080, .parameters = &[_]OperandKind{} },405 .{ .name = "CullNoOpaqueKHR", .value = 0x0080, .parameters = &[_]OperandKind{} },
314 .{ .name = "SkipTrianglesKHR", .value = 0x0100, .parameters = &[_]OperandKind{} },406 .{ .name = "SkipTrianglesKHR", .value = 0x0100, .parameters = &[_]OperandKind{} },
315 .{ .name = "SkipAABBsKHR", .value = 0x0200, .parameters = &[_]OperandKind{} },407 .{ .name = "SkipAABBsKHR", .value = 0x0200, .parameters = &[_]OperandKind{} },
408 .{ .name = "ForceOpacityMicromap2StateEXT", .value = 0x0400, .parameters = &[_]OperandKind{} },
316 },409 },
317 .FragmentShadingRate => &[_]Enumerant{410 .FragmentShadingRate => &[_]Enumerant{
318 .{ .name = "Vertical2Pixels", .value = 0x0001, .parameters = &[_]OperandKind{} },411 .{ .name = "Vertical2Pixels", .value = 0x0001, .parameters = &[_]OperandKind{} },
...@@ -320,6 +413,10 @@ pub const OperandKind = enum {...@@ -320,6 +413,10 @@ pub const OperandKind = enum {
320 .{ .name = "Horizontal2Pixels", .value = 0x0004, .parameters = &[_]OperandKind{} },413 .{ .name = "Horizontal2Pixels", .value = 0x0004, .parameters = &[_]OperandKind{} },
321 .{ .name = "Horizontal4Pixels", .value = 0x0008, .parameters = &[_]OperandKind{} },414 .{ .name = "Horizontal4Pixels", .value = 0x0008, .parameters = &[_]OperandKind{} },
322 },415 },
416 .RawAccessChainOperands => &[_]Enumerant{
417 .{ .name = "RobustnessPerComponentNV", .value = 0x0001, .parameters = &[_]OperandKind{} },
418 .{ .name = "RobustnessPerElementNV", .value = 0x0002, .parameters = &[_]OperandKind{} },
419 },
323 .SourceLanguage => &[_]Enumerant{420 .SourceLanguage => &[_]Enumerant{
324 .{ .name = "Unknown", .value = 0, .parameters = &[_]OperandKind{} },421 .{ .name = "Unknown", .value = 0, .parameters = &[_]OperandKind{} },
325 .{ .name = "ESSL", .value = 1, .parameters = &[_]OperandKind{} },422 .{ .name = "ESSL", .value = 1, .parameters = &[_]OperandKind{} },
...@@ -328,6 +425,12 @@ pub const OperandKind = enum {...@@ -328,6 +425,12 @@ pub const OperandKind = enum {
328 .{ .name = "OpenCL_CPP", .value = 4, .parameters = &[_]OperandKind{} },425 .{ .name = "OpenCL_CPP", .value = 4, .parameters = &[_]OperandKind{} },
329 .{ .name = "HLSL", .value = 5, .parameters = &[_]OperandKind{} },426 .{ .name = "HLSL", .value = 5, .parameters = &[_]OperandKind{} },
330 .{ .name = "CPP_for_OpenCL", .value = 6, .parameters = &[_]OperandKind{} },427 .{ .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{} },
331 },434 },
332 .ExecutionModel => &[_]Enumerant{435 .ExecutionModel => &[_]Enumerant{
333 .{ .name = "Vertex", .value = 0, .parameters = &[_]OperandKind{} },436 .{ .name = "Vertex", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -351,6 +454,8 @@ pub const OperandKind = enum {...@@ -351,6 +454,8 @@ pub const OperandKind = enum {
351 .{ .name = "MissKHR", .value = 5317, .parameters = &[_]OperandKind{} },454 .{ .name = "MissKHR", .value = 5317, .parameters = &[_]OperandKind{} },
352 .{ .name = "CallableNV", .value = 5318, .parameters = &[_]OperandKind{} },455 .{ .name = "CallableNV", .value = 5318, .parameters = &[_]OperandKind{} },
353 .{ .name = "CallableKHR", .value = 5318, .parameters = &[_]OperandKind{} },456 .{ .name = "CallableKHR", .value = 5318, .parameters = &[_]OperandKind{} },
457 .{ .name = "TaskEXT", .value = 5364, .parameters = &[_]OperandKind{} },
458 .{ .name = "MeshEXT", .value = 5365, .parameters = &[_]OperandKind{} },
354 },459 },
355 .AddressingModel => &[_]Enumerant{460 .AddressingModel => &[_]Enumerant{
356 .{ .name = "Logical", .value = 0, .parameters = &[_]OperandKind{} },461 .{ .name = "Logical", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -405,6 +510,9 @@ pub const OperandKind = enum {...@@ -405,6 +510,9 @@ pub const OperandKind = enum {
405 .{ .name = "SubgroupsPerWorkgroupId", .value = 37, .parameters = &[_]OperandKind{.IdRef} },510 .{ .name = "SubgroupsPerWorkgroupId", .value = 37, .parameters = &[_]OperandKind{.IdRef} },
406 .{ .name = "LocalSizeId", .value = 38, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },511 .{ .name = "LocalSizeId", .value = 38, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },
407 .{ .name = "LocalSizeHintId", .value = 39, .parameters = &[_]OperandKind{ .IdRef, .IdRef, .IdRef } },512 .{ .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{} },
408 .{ .name = "SubgroupUniformControlFlowKHR", .value = 4421, .parameters = &[_]OperandKind{} },516 .{ .name = "SubgroupUniformControlFlowKHR", .value = 4421, .parameters = &[_]OperandKind{} },
409 .{ .name = "PostDepthCoverage", .value = 4446, .parameters = &[_]OperandKind{} },517 .{ .name = "PostDepthCoverage", .value = 4446, .parameters = &[_]OperandKind{} },
410 .{ .name = "DenormPreserve", .value = 4459, .parameters = &[_]OperandKind{.LiteralInteger} },518 .{ .name = "DenormPreserve", .value = 4459, .parameters = &[_]OperandKind{.LiteralInteger} },
...@@ -412,12 +520,29 @@ pub const OperandKind = enum {...@@ -412,12 +520,29 @@ pub const OperandKind = enum {
412 .{ .name = "SignedZeroInfNanPreserve", .value = 4461, .parameters = &[_]OperandKind{.LiteralInteger} },520 .{ .name = "SignedZeroInfNanPreserve", .value = 4461, .parameters = &[_]OperandKind{.LiteralInteger} },
413 .{ .name = "RoundingModeRTE", .value = 4462, .parameters = &[_]OperandKind{.LiteralInteger} },521 .{ .name = "RoundingModeRTE", .value = 4462, .parameters = &[_]OperandKind{.LiteralInteger} },
414 .{ .name = "RoundingModeRTZ", .value = 4463, .parameters = &[_]OperandKind{.LiteralInteger} },522 .{ .name = "RoundingModeRTZ", .value = 4463, .parameters = &[_]OperandKind{.LiteralInteger} },
523 .{ .name = "EarlyAndLateFragmentTestsAMD", .value = 5017, .parameters = &[_]OperandKind{} },
415 .{ .name = "StencilRefReplacingEXT", .value = 5027, .parameters = &[_]OperandKind{} },524 .{ .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{} },
416 .{ .name = "OutputLinesNV", .value = 5269, .parameters = &[_]OperandKind{} },538 .{ .name = "OutputLinesNV", .value = 5269, .parameters = &[_]OperandKind{} },
539 .{ .name = "OutputLinesEXT", .value = 5269, .parameters = &[_]OperandKind{} },
417 .{ .name = "OutputPrimitivesNV", .value = 5270, .parameters = &[_]OperandKind{.LiteralInteger} },540 .{ .name = "OutputPrimitivesNV", .value = 5270, .parameters = &[_]OperandKind{.LiteralInteger} },
541 .{ .name = "OutputPrimitivesEXT", .value = 5270, .parameters = &[_]OperandKind{.LiteralInteger} },
418 .{ .name = "DerivativeGroupQuadsNV", .value = 5289, .parameters = &[_]OperandKind{} },542 .{ .name = "DerivativeGroupQuadsNV", .value = 5289, .parameters = &[_]OperandKind{} },
419 .{ .name = "DerivativeGroupLinearNV", .value = 5290, .parameters = &[_]OperandKind{} },543 .{ .name = "DerivativeGroupLinearNV", .value = 5290, .parameters = &[_]OperandKind{} },
420 .{ .name = "OutputTrianglesNV", .value = 5298, .parameters = &[_]OperandKind{} },544 .{ .name = "OutputTrianglesNV", .value = 5298, .parameters = &[_]OperandKind{} },
545 .{ .name = "OutputTrianglesEXT", .value = 5298, .parameters = &[_]OperandKind{} },
421 .{ .name = "PixelInterlockOrderedEXT", .value = 5366, .parameters = &[_]OperandKind{} },546 .{ .name = "PixelInterlockOrderedEXT", .value = 5366, .parameters = &[_]OperandKind{} },
422 .{ .name = "PixelInterlockUnorderedEXT", .value = 5367, .parameters = &[_]OperandKind{} },547 .{ .name = "PixelInterlockUnorderedEXT", .value = 5367, .parameters = &[_]OperandKind{} },
423 .{ .name = "SampleInterlockOrderedEXT", .value = 5368, .parameters = &[_]OperandKind{} },548 .{ .name = "SampleInterlockOrderedEXT", .value = 5368, .parameters = &[_]OperandKind{} },
...@@ -434,6 +559,14 @@ pub const OperandKind = enum {...@@ -434,6 +559,14 @@ pub const OperandKind = enum {
434 .{ .name = "NoGlobalOffsetINTEL", .value = 5895, .parameters = &[_]OperandKind{} },559 .{ .name = "NoGlobalOffsetINTEL", .value = 5895, .parameters = &[_]OperandKind{} },
435 .{ .name = "NumSIMDWorkitemsINTEL", .value = 5896, .parameters = &[_]OperandKind{.LiteralInteger} },560 .{ .name = "NumSIMDWorkitemsINTEL", .value = 5896, .parameters = &[_]OperandKind{.LiteralInteger} },
436 .{ .name = "SchedulerTargetFmaxMhzINTEL", .value = 5903, .parameters = &[_]OperandKind{.LiteralInteger} },561 .{ .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} },
437 },570 },
438 .StorageClass => &[_]Enumerant{571 .StorageClass => &[_]Enumerant{
439 .{ .name = "UniformConstant", .value = 0, .parameters = &[_]OperandKind{} },572 .{ .name = "UniformConstant", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -449,6 +582,9 @@ pub const OperandKind = enum {...@@ -449,6 +582,9 @@ pub const OperandKind = enum {
449 .{ .name = "AtomicCounter", .value = 10, .parameters = &[_]OperandKind{} },582 .{ .name = "AtomicCounter", .value = 10, .parameters = &[_]OperandKind{} },
450 .{ .name = "Image", .value = 11, .parameters = &[_]OperandKind{} },583 .{ .name = "Image", .value = 11, .parameters = &[_]OperandKind{} },
451 .{ .name = "StorageBuffer", .value = 12, .parameters = &[_]OperandKind{} },584 .{ .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{} },
452 .{ .name = "CallableDataNV", .value = 5328, .parameters = &[_]OperandKind{} },588 .{ .name = "CallableDataNV", .value = 5328, .parameters = &[_]OperandKind{} },
453 .{ .name = "CallableDataKHR", .value = 5328, .parameters = &[_]OperandKind{} },589 .{ .name = "CallableDataKHR", .value = 5328, .parameters = &[_]OperandKind{} },
454 .{ .name = "IncomingCallableDataNV", .value = 5329, .parameters = &[_]OperandKind{} },590 .{ .name = "IncomingCallableDataNV", .value = 5329, .parameters = &[_]OperandKind{} },
...@@ -463,6 +599,8 @@ pub const OperandKind = enum {...@@ -463,6 +599,8 @@ pub const OperandKind = enum {
463 .{ .name = "ShaderRecordBufferKHR", .value = 5343, .parameters = &[_]OperandKind{} },599 .{ .name = "ShaderRecordBufferKHR", .value = 5343, .parameters = &[_]OperandKind{} },
464 .{ .name = "PhysicalStorageBuffer", .value = 5349, .parameters = &[_]OperandKind{} },600 .{ .name = "PhysicalStorageBuffer", .value = 5349, .parameters = &[_]OperandKind{} },
465 .{ .name = "PhysicalStorageBufferEXT", .value = 5349, .parameters = &[_]OperandKind{} },601 .{ .name = "PhysicalStorageBufferEXT", .value = 5349, .parameters = &[_]OperandKind{} },
602 .{ .name = "HitObjectAttributeNV", .value = 5385, .parameters = &[_]OperandKind{} },
603 .{ .name = "TaskPayloadWorkgroupEXT", .value = 5402, .parameters = &[_]OperandKind{} },
466 .{ .name = "CodeSectionINTEL", .value = 5605, .parameters = &[_]OperandKind{} },604 .{ .name = "CodeSectionINTEL", .value = 5605, .parameters = &[_]OperandKind{} },
467 .{ .name = "DeviceOnlyINTEL", .value = 5936, .parameters = &[_]OperandKind{} },605 .{ .name = "DeviceOnlyINTEL", .value = 5936, .parameters = &[_]OperandKind{} },
468 .{ .name = "HostOnlyINTEL", .value = 5937, .parameters = &[_]OperandKind{} },606 .{ .name = "HostOnlyINTEL", .value = 5937, .parameters = &[_]OperandKind{} },
...@@ -475,6 +613,7 @@ pub const OperandKind = enum {...@@ -475,6 +613,7 @@ pub const OperandKind = enum {
475 .{ .name = "Rect", .value = 4, .parameters = &[_]OperandKind{} },613 .{ .name = "Rect", .value = 4, .parameters = &[_]OperandKind{} },
476 .{ .name = "Buffer", .value = 5, .parameters = &[_]OperandKind{} },614 .{ .name = "Buffer", .value = 5, .parameters = &[_]OperandKind{} },
477 .{ .name = "SubpassData", .value = 6, .parameters = &[_]OperandKind{} },615 .{ .name = "SubpassData", .value = 6, .parameters = &[_]OperandKind{} },
616 .{ .name = "TileImageDataEXT", .value = 4173, .parameters = &[_]OperandKind{} },
478 },617 },
479 .SamplerAddressingMode => &[_]Enumerant{618 .SamplerAddressingMode => &[_]Enumerant{
480 .{ .name = "None", .value = 0, .parameters = &[_]OperandKind{} },619 .{ .name = "None", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -571,6 +710,8 @@ pub const OperandKind = enum {...@@ -571,6 +710,8 @@ pub const OperandKind = enum {
571 .{ .name = "Float", .value = 14, .parameters = &[_]OperandKind{} },710 .{ .name = "Float", .value = 14, .parameters = &[_]OperandKind{} },
572 .{ .name = "UnormInt24", .value = 15, .parameters = &[_]OperandKind{} },711 .{ .name = "UnormInt24", .value = 15, .parameters = &[_]OperandKind{} },
573 .{ .name = "UnormInt101010_2", .value = 16, .parameters = &[_]OperandKind{} },712 .{ .name = "UnormInt101010_2", .value = 16, .parameters = &[_]OperandKind{} },
713 .{ .name = "UnsignedIntRaw10EXT", .value = 19, .parameters = &[_]OperandKind{} },
714 .{ .name = "UnsignedIntRaw12EXT", .value = 20, .parameters = &[_]OperandKind{} },
574 },715 },
575 .FPRoundingMode => &[_]Enumerant{716 .FPRoundingMode => &[_]Enumerant{
576 .{ .name = "RTE", .value = 0, .parameters = &[_]OperandKind{} },717 .{ .name = "RTE", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -612,6 +753,12 @@ pub const OperandKind = enum {...@@ -612,6 +753,12 @@ pub const OperandKind = enum {
612 .{ .name = "WriteOnly", .value = 1, .parameters = &[_]OperandKind{} },753 .{ .name = "WriteOnly", .value = 1, .parameters = &[_]OperandKind{} },
613 .{ .name = "ReadWrite", .value = 2, .parameters = &[_]OperandKind{} },754 .{ .name = "ReadWrite", .value = 2, .parameters = &[_]OperandKind{} },
614 },755 },
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 },
615 .FunctionParameterAttribute => &[_]Enumerant{762 .FunctionParameterAttribute => &[_]Enumerant{
616 .{ .name = "Zext", .value = 0, .parameters = &[_]OperandKind{} },763 .{ .name = "Zext", .value = 0, .parameters = &[_]OperandKind{} },
617 .{ .name = "Sext", .value = 1, .parameters = &[_]OperandKind{} },764 .{ .name = "Sext", .value = 1, .parameters = &[_]OperandKind{} },
...@@ -621,6 +768,7 @@ pub const OperandKind = enum {...@@ -621,6 +768,7 @@ pub const OperandKind = enum {
621 .{ .name = "NoCapture", .value = 5, .parameters = &[_]OperandKind{} },768 .{ .name = "NoCapture", .value = 5, .parameters = &[_]OperandKind{} },
622 .{ .name = "NoWrite", .value = 6, .parameters = &[_]OperandKind{} },769 .{ .name = "NoWrite", .value = 6, .parameters = &[_]OperandKind{} },
623 .{ .name = "NoReadWrite", .value = 7, .parameters = &[_]OperandKind{} },770 .{ .name = "NoReadWrite", .value = 7, .parameters = &[_]OperandKind{} },
771 .{ .name = "RuntimeAlignedINTEL", .value = 5940, .parameters = &[_]OperandKind{} },
624 },772 },
625 .Decoration => &[_]Enumerant{773 .Decoration => &[_]Enumerant{
626 .{ .name = "RelaxedPrecision", .value = 0, .parameters = &[_]OperandKind{} },774 .{ .name = "RelaxedPrecision", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -672,12 +820,20 @@ pub const OperandKind = enum {...@@ -672,12 +820,20 @@ pub const OperandKind = enum {
672 .{ .name = "MaxByteOffsetId", .value = 47, .parameters = &[_]OperandKind{.IdRef} },820 .{ .name = "MaxByteOffsetId", .value = 47, .parameters = &[_]OperandKind{.IdRef} },
673 .{ .name = "NoSignedWrap", .value = 4469, .parameters = &[_]OperandKind{} },821 .{ .name = "NoSignedWrap", .value = 4469, .parameters = &[_]OperandKind{} },
674 .{ .name = "NoUnsignedWrap", .value = 4470, .parameters = &[_]OperandKind{} },822 .{ .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{} },
675 .{ .name = "ExplicitInterpAMD", .value = 4999, .parameters = &[_]OperandKind{} },826 .{ .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} },
676 .{ .name = "OverrideCoverageNV", .value = 5248, .parameters = &[_]OperandKind{} },831 .{ .name = "OverrideCoverageNV", .value = 5248, .parameters = &[_]OperandKind{} },
677 .{ .name = "PassthroughNV", .value = 5250, .parameters = &[_]OperandKind{} },832 .{ .name = "PassthroughNV", .value = 5250, .parameters = &[_]OperandKind{} },
678 .{ .name = "ViewportRelativeNV", .value = 5252, .parameters = &[_]OperandKind{} },833 .{ .name = "ViewportRelativeNV", .value = 5252, .parameters = &[_]OperandKind{} },
679 .{ .name = "SecondaryViewportRelativeNV", .value = 5256, .parameters = &[_]OperandKind{.LiteralInteger} },834 .{ .name = "SecondaryViewportRelativeNV", .value = 5256, .parameters = &[_]OperandKind{.LiteralInteger} },
680 .{ .name = "PerPrimitiveNV", .value = 5271, .parameters = &[_]OperandKind{} },835 .{ .name = "PerPrimitiveNV", .value = 5271, .parameters = &[_]OperandKind{} },
836 .{ .name = "PerPrimitiveEXT", .value = 5271, .parameters = &[_]OperandKind{} },
681 .{ .name = "PerViewNV", .value = 5272, .parameters = &[_]OperandKind{} },837 .{ .name = "PerViewNV", .value = 5272, .parameters = &[_]OperandKind{} },
682 .{ .name = "PerTaskNV", .value = 5273, .parameters = &[_]OperandKind{} },838 .{ .name = "PerTaskNV", .value = 5273, .parameters = &[_]OperandKind{} },
683 .{ .name = "PerVertexKHR", .value = 5285, .parameters = &[_]OperandKind{} },839 .{ .name = "PerVertexKHR", .value = 5285, .parameters = &[_]OperandKind{} },
...@@ -688,6 +844,7 @@ pub const OperandKind = enum {...@@ -688,6 +844,7 @@ pub const OperandKind = enum {
688 .{ .name = "RestrictPointerEXT", .value = 5355, .parameters = &[_]OperandKind{} },844 .{ .name = "RestrictPointerEXT", .value = 5355, .parameters = &[_]OperandKind{} },
689 .{ .name = "AliasedPointer", .value = 5356, .parameters = &[_]OperandKind{} },845 .{ .name = "AliasedPointer", .value = 5356, .parameters = &[_]OperandKind{} },
690 .{ .name = "AliasedPointerEXT", .value = 5356, .parameters = &[_]OperandKind{} },846 .{ .name = "AliasedPointerEXT", .value = 5356, .parameters = &[_]OperandKind{} },
847 .{ .name = "HitObjectShaderRecordBufferNV", .value = 5386, .parameters = &[_]OperandKind{} },
691 .{ .name = "BindlessSamplerNV", .value = 5398, .parameters = &[_]OperandKind{} },848 .{ .name = "BindlessSamplerNV", .value = 5398, .parameters = &[_]OperandKind{} },
692 .{ .name = "BindlessImageNV", .value = 5399, .parameters = &[_]OperandKind{} },849 .{ .name = "BindlessImageNV", .value = 5399, .parameters = &[_]OperandKind{} },
693 .{ .name = "BoundSamplerNV", .value = 5400, .parameters = &[_]OperandKind{} },850 .{ .name = "BoundSamplerNV", .value = 5400, .parameters = &[_]OperandKind{} },
...@@ -720,18 +877,45 @@ pub const OperandKind = enum {...@@ -720,18 +877,45 @@ pub const OperandKind = enum {
720 .{ .name = "MergeINTEL", .value = 5834, .parameters = &[_]OperandKind{ .LiteralString, .LiteralString } },877 .{ .name = "MergeINTEL", .value = 5834, .parameters = &[_]OperandKind{ .LiteralString, .LiteralString } },
721 .{ .name = "BankBitsINTEL", .value = 5835, .parameters = &[_]OperandKind{.LiteralInteger} },878 .{ .name = "BankBitsINTEL", .value = 5835, .parameters = &[_]OperandKind{.LiteralInteger} },
722 .{ .name = "ForcePow2DepthINTEL", .value = 5836, .parameters = &[_]OperandKind{.LiteralInteger} },879 .{ .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{} },
723 .{ .name = "BurstCoalesceINTEL", .value = 5899, .parameters = &[_]OperandKind{} },883 .{ .name = "BurstCoalesceINTEL", .value = 5899, .parameters = &[_]OperandKind{} },
724 .{ .name = "CacheSizeINTEL", .value = 5900, .parameters = &[_]OperandKind{.LiteralInteger} },884 .{ .name = "CacheSizeINTEL", .value = 5900, .parameters = &[_]OperandKind{.LiteralInteger} },
725 .{ .name = "DontStaticallyCoalesceINTEL", .value = 5901, .parameters = &[_]OperandKind{} },885 .{ .name = "DontStaticallyCoalesceINTEL", .value = 5901, .parameters = &[_]OperandKind{} },
726 .{ .name = "PrefetchINTEL", .value = 5902, .parameters = &[_]OperandKind{.LiteralInteger} },886 .{ .name = "PrefetchINTEL", .value = 5902, .parameters = &[_]OperandKind{.LiteralInteger} },
727 .{ .name = "StallEnableINTEL", .value = 5905, .parameters = &[_]OperandKind{} },887 .{ .name = "StallEnableINTEL", .value = 5905, .parameters = &[_]OperandKind{} },
728 .{ .name = "FuseLoopsInFunctionINTEL", .value = 5907, .parameters = &[_]OperandKind{} },888 .{ .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} },
729 .{ .name = "BufferLocationINTEL", .value = 5921, .parameters = &[_]OperandKind{.LiteralInteger} },895 .{ .name = "BufferLocationINTEL", .value = 5921, .parameters = &[_]OperandKind{.LiteralInteger} },
730 .{ .name = "IOPipeStorageINTEL", .value = 5944, .parameters = &[_]OperandKind{.LiteralInteger} },896 .{ .name = "IOPipeStorageINTEL", .value = 5944, .parameters = &[_]OperandKind{.LiteralInteger} },
731 .{ .name = "FunctionFloatingPointModeINTEL", .value = 6080, .parameters = &[_]OperandKind{ .LiteralInteger, .FPOperationMode } },897 .{ .name = "FunctionFloatingPointModeINTEL", .value = 6080, .parameters = &[_]OperandKind{ .LiteralInteger, .FPOperationMode } },
732 .{ .name = "SingleElementVectorINTEL", .value = 6085, .parameters = &[_]OperandKind{} },898 .{ .name = "SingleElementVectorINTEL", .value = 6085, .parameters = &[_]OperandKind{} },
733 .{ .name = "VectorComputeCallableFunctionINTEL", .value = 6087, .parameters = &[_]OperandKind{} },899 .{ .name = "VectorComputeCallableFunctionINTEL", .value = 6087, .parameters = &[_]OperandKind{} },
734 .{ .name = "MediaBlockIOINTEL", .value = 6140, .parameters = &[_]OperandKind{} },900 .{ .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 } },
735 },919 },
736 .BuiltIn => &[_]Enumerant{920 .BuiltIn => &[_]Enumerant{
737 .{ .name = "Position", .value = 0, .parameters = &[_]OperandKind{} },921 .{ .name = "Position", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -775,6 +959,11 @@ pub const OperandKind = enum {...@@ -775,6 +959,11 @@ pub const OperandKind = enum {
775 .{ .name = "SubgroupLocalInvocationId", .value = 41, .parameters = &[_]OperandKind{} },959 .{ .name = "SubgroupLocalInvocationId", .value = 41, .parameters = &[_]OperandKind{} },
776 .{ .name = "VertexIndex", .value = 42, .parameters = &[_]OperandKind{} },960 .{ .name = "VertexIndex", .value = 42, .parameters = &[_]OperandKind{} },
777 .{ .name = "InstanceIndex", .value = 43, .parameters = &[_]OperandKind{} },961 .{ .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{} },
778 .{ .name = "SubgroupEqMask", .value = 4416, .parameters = &[_]OperandKind{} },967 .{ .name = "SubgroupEqMask", .value = 4416, .parameters = &[_]OperandKind{} },
779 .{ .name = "SubgroupEqMaskKHR", .value = 4416, .parameters = &[_]OperandKind{} },968 .{ .name = "SubgroupEqMaskKHR", .value = 4416, .parameters = &[_]OperandKind{} },
780 .{ .name = "SubgroupGeMask", .value = 4417, .parameters = &[_]OperandKind{} },969 .{ .name = "SubgroupGeMask", .value = 4417, .parameters = &[_]OperandKind{} },
...@@ -800,6 +989,8 @@ pub const OperandKind = enum {...@@ -800,6 +989,8 @@ pub const OperandKind = enum {
800 .{ .name = "BaryCoordSmoothSampleAMD", .value = 4997, .parameters = &[_]OperandKind{} },989 .{ .name = "BaryCoordSmoothSampleAMD", .value = 4997, .parameters = &[_]OperandKind{} },
801 .{ .name = "BaryCoordPullModelAMD", .value = 4998, .parameters = &[_]OperandKind{} },990 .{ .name = "BaryCoordPullModelAMD", .value = 4998, .parameters = &[_]OperandKind{} },
802 .{ .name = "FragStencilRefEXT", .value = 5014, .parameters = &[_]OperandKind{} },991 .{ .name = "FragStencilRefEXT", .value = 5014, .parameters = &[_]OperandKind{} },
992 .{ .name = "CoalescedInputCountAMDX", .value = 5021, .parameters = &[_]OperandKind{} },
993 .{ .name = "ShaderIndexAMDX", .value = 5073, .parameters = &[_]OperandKind{} },
803 .{ .name = "ViewportMaskNV", .value = 5253, .parameters = &[_]OperandKind{} },994 .{ .name = "ViewportMaskNV", .value = 5253, .parameters = &[_]OperandKind{} },
804 .{ .name = "SecondaryPositionNV", .value = 5257, .parameters = &[_]OperandKind{} },995 .{ .name = "SecondaryPositionNV", .value = 5257, .parameters = &[_]OperandKind{} },
805 .{ .name = "SecondaryViewportMaskNV", .value = 5258, .parameters = &[_]OperandKind{} },996 .{ .name = "SecondaryViewportMaskNV", .value = 5258, .parameters = &[_]OperandKind{} },
...@@ -822,6 +1013,10 @@ pub const OperandKind = enum {...@@ -822,6 +1013,10 @@ pub const OperandKind = enum {
822 .{ .name = "FragmentSizeNV", .value = 5292, .parameters = &[_]OperandKind{} },1013 .{ .name = "FragmentSizeNV", .value = 5292, .parameters = &[_]OperandKind{} },
823 .{ .name = "FragInvocationCountEXT", .value = 5293, .parameters = &[_]OperandKind{} },1014 .{ .name = "FragInvocationCountEXT", .value = 5293, .parameters = &[_]OperandKind{} },
824 .{ .name = "InvocationsPerPixelNV", .value = 5293, .parameters = &[_]OperandKind{} },1015 .{ .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{} },
825 .{ .name = "LaunchIdNV", .value = 5319, .parameters = &[_]OperandKind{} },1020 .{ .name = "LaunchIdNV", .value = 5319, .parameters = &[_]OperandKind{} },
826 .{ .name = "LaunchIdKHR", .value = 5319, .parameters = &[_]OperandKind{} },1021 .{ .name = "LaunchIdKHR", .value = 5319, .parameters = &[_]OperandKind{} },
827 .{ .name = "LaunchSizeNV", .value = 5320, .parameters = &[_]OperandKind{} },1022 .{ .name = "LaunchSizeNV", .value = 5320, .parameters = &[_]OperandKind{} },
...@@ -848,6 +1043,9 @@ pub const OperandKind = enum {...@@ -848,6 +1043,9 @@ pub const OperandKind = enum {
848 .{ .name = "HitKindNV", .value = 5333, .parameters = &[_]OperandKind{} },1043 .{ .name = "HitKindNV", .value = 5333, .parameters = &[_]OperandKind{} },
849 .{ .name = "HitKindKHR", .value = 5333, .parameters = &[_]OperandKind{} },1044 .{ .name = "HitKindKHR", .value = 5333, .parameters = &[_]OperandKind{} },
850 .{ .name = "CurrentRayTimeNV", .value = 5334, .parameters = &[_]OperandKind{} },1045 .{ .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{} },
851 .{ .name = "IncomingRayFlagsNV", .value = 5351, .parameters = &[_]OperandKind{} },1049 .{ .name = "IncomingRayFlagsNV", .value = 5351, .parameters = &[_]OperandKind{} },
852 .{ .name = "IncomingRayFlagsKHR", .value = 5351, .parameters = &[_]OperandKind{} },1050 .{ .name = "IncomingRayFlagsKHR", .value = 5351, .parameters = &[_]OperandKind{} },
853 .{ .name = "RayGeometryIndexKHR", .value = 5352, .parameters = &[_]OperandKind{} },1051 .{ .name = "RayGeometryIndexKHR", .value = 5352, .parameters = &[_]OperandKind{} },
...@@ -855,6 +1053,9 @@ pub const OperandKind = enum {...@@ -855,6 +1053,9 @@ pub const OperandKind = enum {
855 .{ .name = "SMCountNV", .value = 5375, .parameters = &[_]OperandKind{} },1053 .{ .name = "SMCountNV", .value = 5375, .parameters = &[_]OperandKind{} },
856 .{ .name = "WarpIDNV", .value = 5376, .parameters = &[_]OperandKind{} },1054 .{ .name = "WarpIDNV", .value = 5376, .parameters = &[_]OperandKind{} },
857 .{ .name = "SMIDNV", .value = 5377, .parameters = &[_]OperandKind{} },1055 .{ .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{} },
858 },1059 },
859 .Scope => &[_]Enumerant{1060 .Scope => &[_]Enumerant{
860 .{ .name = "CrossDevice", .value = 0, .parameters = &[_]OperandKind{} },1061 .{ .name = "CrossDevice", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -951,6 +1152,10 @@ pub const OperandKind = enum {...@@ -951,6 +1152,10 @@ pub const OperandKind = enum {
951 .{ .name = "ShaderLayer", .value = 69, .parameters = &[_]OperandKind{} },1152 .{ .name = "ShaderLayer", .value = 69, .parameters = &[_]OperandKind{} },
952 .{ .name = "ShaderViewportIndex", .value = 70, .parameters = &[_]OperandKind{} },1153 .{ .name = "ShaderViewportIndex", .value = 70, .parameters = &[_]OperandKind{} },
953 .{ .name = "UniformDecoration", .value = 71, .parameters = &[_]OperandKind{} },1154 .{ .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{} },
954 .{ .name = "FragmentShadingRateKHR", .value = 4422, .parameters = &[_]OperandKind{} },1159 .{ .name = "FragmentShadingRateKHR", .value = 4422, .parameters = &[_]OperandKind{} },
955 .{ .name = "SubgroupBallotKHR", .value = 4423, .parameters = &[_]OperandKind{} },1160 .{ .name = "SubgroupBallotKHR", .value = 4423, .parameters = &[_]OperandKind{} },
956 .{ .name = "DrawParameters", .value = 4427, .parameters = &[_]OperandKind{} },1161 .{ .name = "DrawParameters", .value = 4427, .parameters = &[_]OperandKind{} },
...@@ -982,6 +1187,10 @@ pub const OperandKind = enum {...@@ -982,6 +1187,10 @@ pub const OperandKind = enum {
982 .{ .name = "RayQueryKHR", .value = 4472, .parameters = &[_]OperandKind{} },1187 .{ .name = "RayQueryKHR", .value = 4472, .parameters = &[_]OperandKind{} },
983 .{ .name = "RayTraversalPrimitiveCullingKHR", .value = 4478, .parameters = &[_]OperandKind{} },1188 .{ .name = "RayTraversalPrimitiveCullingKHR", .value = 4478, .parameters = &[_]OperandKind{} },
984 .{ .name = "RayTracingKHR", .value = 4479, .parameters = &[_]OperandKind{} },1189 .{ .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{} },
985 .{ .name = "Float16ImageAMD", .value = 5008, .parameters = &[_]OperandKind{} },1194 .{ .name = "Float16ImageAMD", .value = 5008, .parameters = &[_]OperandKind{} },
986 .{ .name = "ImageGatherBiasLodAMD", .value = 5009, .parameters = &[_]OperandKind{} },1195 .{ .name = "ImageGatherBiasLodAMD", .value = 5009, .parameters = &[_]OperandKind{} },
987 .{ .name = "FragmentMaskAMD", .value = 5010, .parameters = &[_]OperandKind{} },1196 .{ .name = "FragmentMaskAMD", .value = 5010, .parameters = &[_]OperandKind{} },
...@@ -989,6 +1198,8 @@ pub const OperandKind = enum {...@@ -989,6 +1198,8 @@ pub const OperandKind = enum {
989 .{ .name = "ImageReadWriteLodAMD", .value = 5015, .parameters = &[_]OperandKind{} },1198 .{ .name = "ImageReadWriteLodAMD", .value = 5015, .parameters = &[_]OperandKind{} },
990 .{ .name = "Int64ImageEXT", .value = 5016, .parameters = &[_]OperandKind{} },1199 .{ .name = "Int64ImageEXT", .value = 5016, .parameters = &[_]OperandKind{} },
991 .{ .name = "ShaderClockKHR", .value = 5055, .parameters = &[_]OperandKind{} },1200 .{ .name = "ShaderClockKHR", .value = 5055, .parameters = &[_]OperandKind{} },
1201 .{ .name = "ShaderEnqueueAMDX", .value = 5067, .parameters = &[_]OperandKind{} },
1202 .{ .name = "QuadControlKHR", .value = 5087, .parameters = &[_]OperandKind{} },
992 .{ .name = "SampleMaskOverrideCoverageNV", .value = 5249, .parameters = &[_]OperandKind{} },1203 .{ .name = "SampleMaskOverrideCoverageNV", .value = 5249, .parameters = &[_]OperandKind{} },
993 .{ .name = "GeometryShaderPassthroughNV", .value = 5251, .parameters = &[_]OperandKind{} },1204 .{ .name = "GeometryShaderPassthroughNV", .value = 5251, .parameters = &[_]OperandKind{} },
994 .{ .name = "ShaderViewportIndexLayerEXT", .value = 5254, .parameters = &[_]OperandKind{} },1205 .{ .name = "ShaderViewportIndexLayerEXT", .value = 5254, .parameters = &[_]OperandKind{} },
...@@ -999,6 +1210,7 @@ pub const OperandKind = enum {...@@ -999,6 +1210,7 @@ pub const OperandKind = enum {
999 .{ .name = "FragmentFullyCoveredEXT", .value = 5265, .parameters = &[_]OperandKind{} },1210 .{ .name = "FragmentFullyCoveredEXT", .value = 5265, .parameters = &[_]OperandKind{} },
1000 .{ .name = "MeshShadingNV", .value = 5266, .parameters = &[_]OperandKind{} },1211 .{ .name = "MeshShadingNV", .value = 5266, .parameters = &[_]OperandKind{} },
1001 .{ .name = "ImageFootprintNV", .value = 5282, .parameters = &[_]OperandKind{} },1212 .{ .name = "ImageFootprintNV", .value = 5282, .parameters = &[_]OperandKind{} },
1213 .{ .name = "MeshShadingEXT", .value = 5283, .parameters = &[_]OperandKind{} },
1002 .{ .name = "FragmentBarycentricKHR", .value = 5284, .parameters = &[_]OperandKind{} },1214 .{ .name = "FragmentBarycentricKHR", .value = 5284, .parameters = &[_]OperandKind{} },
1003 .{ .name = "FragmentBarycentricNV", .value = 5284, .parameters = &[_]OperandKind{} },1215 .{ .name = "FragmentBarycentricNV", .value = 5284, .parameters = &[_]OperandKind{} },
1004 .{ .name = "ComputeDerivativeGroupQuadsNV", .value = 5288, .parameters = &[_]OperandKind{} },1216 .{ .name = "ComputeDerivativeGroupQuadsNV", .value = 5288, .parameters = &[_]OperandKind{} },
...@@ -1029,6 +1241,7 @@ pub const OperandKind = enum {...@@ -1029,6 +1241,7 @@ pub const OperandKind = enum {
1029 .{ .name = "UniformTexelBufferArrayNonUniformIndexingEXT", .value = 5311, .parameters = &[_]OperandKind{} },1241 .{ .name = "UniformTexelBufferArrayNonUniformIndexingEXT", .value = 5311, .parameters = &[_]OperandKind{} },
1030 .{ .name = "StorageTexelBufferArrayNonUniformIndexing", .value = 5312, .parameters = &[_]OperandKind{} },1242 .{ .name = "StorageTexelBufferArrayNonUniformIndexing", .value = 5312, .parameters = &[_]OperandKind{} },
1031 .{ .name = "StorageTexelBufferArrayNonUniformIndexingEXT", .value = 5312, .parameters = &[_]OperandKind{} },1243 .{ .name = "StorageTexelBufferArrayNonUniformIndexingEXT", .value = 5312, .parameters = &[_]OperandKind{} },
1244 .{ .name = "RayTracingPositionFetchKHR", .value = 5336, .parameters = &[_]OperandKind{} },
1032 .{ .name = "RayTracingNV", .value = 5340, .parameters = &[_]OperandKind{} },1245 .{ .name = "RayTracingNV", .value = 5340, .parameters = &[_]OperandKind{} },
1033 .{ .name = "RayTracingMotionBlurNV", .value = 5341, .parameters = &[_]OperandKind{} },1246 .{ .name = "RayTracingMotionBlurNV", .value = 5341, .parameters = &[_]OperandKind{} },
1034 .{ .name = "VulkanMemoryModel", .value = 5345, .parameters = &[_]OperandKind{} },1247 .{ .name = "VulkanMemoryModel", .value = 5345, .parameters = &[_]OperandKind{} },
...@@ -1046,7 +1259,14 @@ pub const OperandKind = enum {...@@ -1046,7 +1259,14 @@ pub const OperandKind = enum {
1046 .{ .name = "FragmentShaderPixelInterlockEXT", .value = 5378, .parameters = &[_]OperandKind{} },1259 .{ .name = "FragmentShaderPixelInterlockEXT", .value = 5378, .parameters = &[_]OperandKind{} },
1047 .{ .name = "DemoteToHelperInvocation", .value = 5379, .parameters = &[_]OperandKind{} },1260 .{ .name = "DemoteToHelperInvocation", .value = 5379, .parameters = &[_]OperandKind{} },
1048 .{ .name = "DemoteToHelperInvocationEXT", .value = 5379, .parameters = &[_]OperandKind{} },1261 .{ .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{} },
1049 .{ .name = "BindlessTextureNV", .value = 5390, .parameters = &[_]OperandKind{} },1265 .{ .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{} },
1050 .{ .name = "SubgroupShuffleINTEL", .value = 5568, .parameters = &[_]OperandKind{} },1270 .{ .name = "SubgroupShuffleINTEL", .value = 5568, .parameters = &[_]OperandKind{} },
1051 .{ .name = "SubgroupBufferBlockIOINTEL", .value = 5569, .parameters = &[_]OperandKind{} },1271 .{ .name = "SubgroupBufferBlockIOINTEL", .value = 5569, .parameters = &[_]OperandKind{} },
1052 .{ .name = "SubgroupImageBlockIOINTEL", .value = 5570, .parameters = &[_]OperandKind{} },1272 .{ .name = "SubgroupImageBlockIOINTEL", .value = 5570, .parameters = &[_]OperandKind{} },
...@@ -1079,9 +1299,13 @@ pub const OperandKind = enum {...@@ -1079,9 +1299,13 @@ pub const OperandKind = enum {
1079 .{ .name = "FPGAMemoryAccessesINTEL", .value = 5898, .parameters = &[_]OperandKind{} },1299 .{ .name = "FPGAMemoryAccessesINTEL", .value = 5898, .parameters = &[_]OperandKind{} },
1080 .{ .name = "FPGAClusterAttributesINTEL", .value = 5904, .parameters = &[_]OperandKind{} },1300 .{ .name = "FPGAClusterAttributesINTEL", .value = 5904, .parameters = &[_]OperandKind{} },
1081 .{ .name = "LoopFuseINTEL", .value = 5906, .parameters = &[_]OperandKind{} },1301 .{ .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{} },
1082 .{ .name = "FPGABufferLocationINTEL", .value = 5920, .parameters = &[_]OperandKind{} },1305 .{ .name = "FPGABufferLocationINTEL", .value = 5920, .parameters = &[_]OperandKind{} },
1083 .{ .name = "ArbitraryPrecisionFixedPointINTEL", .value = 5922, .parameters = &[_]OperandKind{} },1306 .{ .name = "ArbitraryPrecisionFixedPointINTEL", .value = 5922, .parameters = &[_]OperandKind{} },
1084 .{ .name = "USMStorageClassesINTEL", .value = 5935, .parameters = &[_]OperandKind{} },1307 .{ .name = "USMStorageClassesINTEL", .value = 5935, .parameters = &[_]OperandKind{} },
1308 .{ .name = "RuntimeAlignedAttributeINTEL", .value = 5939, .parameters = &[_]OperandKind{} },
1085 .{ .name = "IOPipesINTEL", .value = 5943, .parameters = &[_]OperandKind{} },1309 .{ .name = "IOPipesINTEL", .value = 5943, .parameters = &[_]OperandKind{} },
1086 .{ .name = "BlockingPipesINTEL", .value = 5945, .parameters = &[_]OperandKind{} },1310 .{ .name = "BlockingPipesINTEL", .value = 5945, .parameters = &[_]OperandKind{} },
1087 .{ .name = "FPGARegINTEL", .value = 5948, .parameters = &[_]OperandKind{} },1311 .{ .name = "FPGARegINTEL", .value = 5948, .parameters = &[_]OperandKind{} },
...@@ -1093,13 +1317,30 @@ pub const OperandKind = enum {...@@ -1093,13 +1317,30 @@ pub const OperandKind = enum {
1093 .{ .name = "DotProductInput4x8BitPackedKHR", .value = 6018, .parameters = &[_]OperandKind{} },1317 .{ .name = "DotProductInput4x8BitPackedKHR", .value = 6018, .parameters = &[_]OperandKind{} },
1094 .{ .name = "DotProduct", .value = 6019, .parameters = &[_]OperandKind{} },1318 .{ .name = "DotProduct", .value = 6019, .parameters = &[_]OperandKind{} },
1095 .{ .name = "DotProductKHR", .value = 6019, .parameters = &[_]OperandKind{} },1319 .{ .name = "DotProductKHR", .value = 6019, .parameters = &[_]OperandKind{} },
1320 .{ .name = "RayCullMaskKHR", .value = 6020, .parameters = &[_]OperandKind{} },
1321 .{ .name = "CooperativeMatrixKHR", .value = 6022, .parameters = &[_]OperandKind{} },
1096 .{ .name = "BitInstructions", .value = 6025, .parameters = &[_]OperandKind{} },1322 .{ .name = "BitInstructions", .value = 6025, .parameters = &[_]OperandKind{} },
1323 .{ .name = "GroupNonUniformRotateKHR", .value = 6026, .parameters = &[_]OperandKind{} },
1324 .{ .name = "FloatControls2", .value = 6029, .parameters = &[_]OperandKind{} },
1097 .{ .name = "AtomicFloat32AddEXT", .value = 6033, .parameters = &[_]OperandKind{} },1325 .{ .name = "AtomicFloat32AddEXT", .value = 6033, .parameters = &[_]OperandKind{} },
1098 .{ .name = "AtomicFloat64AddEXT", .value = 6034, .parameters = &[_]OperandKind{} },1326 .{ .name = "AtomicFloat64AddEXT", .value = 6034, .parameters = &[_]OperandKind{} },
1099 .{ .name = "LongConstantCompositeINTEL", .value = 6089, .parameters = &[_]OperandKind{} },1327 .{ .name = "LongCompositesINTEL", .value = 6089, .parameters = &[_]OperandKind{} },
1100 .{ .name = "OptNoneINTEL", .value = 6094, .parameters = &[_]OperandKind{} },1328 .{ .name = "OptNoneINTEL", .value = 6094, .parameters = &[_]OperandKind{} },
1101 .{ .name = "AtomicFloat16AddEXT", .value = 6095, .parameters = &[_]OperandKind{} },1329 .{ .name = "AtomicFloat16AddEXT", .value = 6095, .parameters = &[_]OperandKind{} },
1102 .{ .name = "DebugInfoModuleINTEL", .value = 6114, .parameters = &[_]OperandKind{} },1330 .{ .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{} },
1103 },1344 },
1104 .RayQueryIntersection => &[_]Enumerant{1345 .RayQueryIntersection => &[_]Enumerant{
1105 .{ .name = "RayQueryCandidateIntersectionKHR", .value = 0, .parameters = &[_]OperandKind{} },1346 .{ .name = "RayQueryCandidateIntersectionKHR", .value = 0, .parameters = &[_]OperandKind{} },
...@@ -1118,6 +1359,43 @@ pub const OperandKind = enum {...@@ -1118,6 +1359,43 @@ pub const OperandKind = enum {
1118 .{ .name = "PackedVectorFormat4x8Bit", .value = 0, .parameters = &[_]OperandKind{} },1359 .{ .name = "PackedVectorFormat4x8Bit", .value = 0, .parameters = &[_]OperandKind{} },
1119 .{ .name = "PackedVectorFormat4x8BitKHR", .value = 0, .parameters = &[_]OperandKind{} },1360 .{ .name = "PackedVectorFormat4x8BitKHR", .value = 0, .parameters = &[_]OperandKind{} },
1120 },1361 },
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 },
1121 .IdResultType => unreachable,1399 .IdResultType => unreachable,
1122 .IdResult => unreachable,1400 .IdResult => unreachable,
1123 .IdMemorySemantics => unreachable,1401 .IdMemorySemantics => unreachable,
...@@ -1125,12 +1403,182 @@ pub const OperandKind = enum {...@@ -1125,12 +1403,182 @@ pub const OperandKind = enum {
1125 .IdRef => unreachable,1403 .IdRef => unreachable,
1126 .LiteralInteger => unreachable,1404 .LiteralInteger => unreachable,
1127 .LiteralString => unreachable,1405 .LiteralString => unreachable,
1406 .LiteralFloat => unreachable,
1128 .LiteralContextDependentNumber => unreachable,1407 .LiteralContextDependentNumber => unreachable,
1129 .LiteralExtInstInteger => unreachable,1408 .LiteralExtInstInteger => unreachable,
1130 .LiteralSpecConstantOpInteger => unreachable,1409 .LiteralSpecConstantOpInteger => unreachable,
1131 .PairLiteralIntegerIdRef => unreachable,1410 .PairLiteralIntegerIdRef => unreachable,
1132 .PairIdRefLiteralInteger => unreachable,1411 .PairIdRefLiteralInteger => unreachable,
1133 .PairIdRefIdRef => unreachable,1412 .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 },
1134 };1582 };
1135 }1583 }
1136};1584};
...@@ -1479,12 +1927,16 @@ pub const Opcode = enum(u16) {...@@ -1479,12 +1927,16 @@ pub const Opcode = enum(u16) {
1479 OpPtrEqual = 401,1927 OpPtrEqual = 401,
1480 OpPtrNotEqual = 402,1928 OpPtrNotEqual = 402,
1481 OpPtrDiff = 403,1929 OpPtrDiff = 403,
1930 OpColorAttachmentReadEXT = 4160,
1931 OpDepthAttachmentReadEXT = 4161,
1932 OpStencilAttachmentReadEXT = 4162,
1482 OpTerminateInvocation = 4416,1933 OpTerminateInvocation = 4416,
1483 OpSubgroupBallotKHR = 4421,1934 OpSubgroupBallotKHR = 4421,
1484 OpSubgroupFirstInvocationKHR = 4422,1935 OpSubgroupFirstInvocationKHR = 4422,
1485 OpSubgroupAllKHR = 4428,1936 OpSubgroupAllKHR = 4428,
1486 OpSubgroupAnyKHR = 4429,1937 OpSubgroupAnyKHR = 4429,
1487 OpSubgroupAllEqualKHR = 4430,1938 OpSubgroupAllEqualKHR = 4430,
1939 OpGroupNonUniformRotateKHR = 4431,
1488 OpSubgroupReadInvocationKHR = 4432,1940 OpSubgroupReadInvocationKHR = 4432,
1489 OpTraceRayKHR = 4445,1941 OpTraceRayKHR = 4445,
1490 OpExecuteCallableKHR = 4446,1942 OpExecuteCallableKHR = 4446,
...@@ -1497,6 +1949,11 @@ pub const Opcode = enum(u16) {...@@ -1497,6 +1949,11 @@ pub const Opcode = enum(u16) {
1497 OpSDotAccSat = 4453,1949 OpSDotAccSat = 4453,
1498 OpUDotAccSat = 4454,1950 OpUDotAccSat = 4454,
1499 OpSUDotAccSat = 4455,1951 OpSUDotAccSat = 4455,
1952 OpTypeCooperativeMatrixKHR = 4456,
1953 OpCooperativeMatrixLoadKHR = 4457,
1954 OpCooperativeMatrixStoreKHR = 4458,
1955 OpCooperativeMatrixMulAddKHR = 4459,
1956 OpCooperativeMatrixLengthKHR = 4460,
1500 OpTypeRayQueryKHR = 4472,1957 OpTypeRayQueryKHR = 4472,
1501 OpRayQueryInitializeKHR = 4473,1958 OpRayQueryInitializeKHR = 4473,
1502 OpRayQueryTerminateKHR = 4474,1959 OpRayQueryTerminateKHR = 4474,
...@@ -1504,6 +1961,14 @@ pub const Opcode = enum(u16) {...@@ -1504,6 +1961,14 @@ pub const Opcode = enum(u16) {
1504 OpRayQueryConfirmIntersectionKHR = 4476,1961 OpRayQueryConfirmIntersectionKHR = 4476,
1505 OpRayQueryProceedKHR = 4477,1962 OpRayQueryProceedKHR = 4477,
1506 OpRayQueryGetIntersectionTypeKHR = 4479,1963 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,
1507 OpGroupIAddNonUniformAMD = 5000,1972 OpGroupIAddNonUniformAMD = 5000,
1508 OpGroupFAddNonUniformAMD = 5001,1973 OpGroupFAddNonUniformAMD = 5001,
1509 OpGroupFMinNonUniformAMD = 5002,1974 OpGroupFMinNonUniformAMD = 5002,
...@@ -1515,15 +1980,58 @@ pub const Opcode = enum(u16) {...@@ -1515,15 +1980,58 @@ pub const Opcode = enum(u16) {
1515 OpFragmentMaskFetchAMD = 5011,1980 OpFragmentMaskFetchAMD = 5011,
1516 OpFragmentFetchAMD = 5012,1981 OpFragmentFetchAMD = 5012,
1517 OpReadClockKHR = 5056,1982 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,
1518 OpImageSampleFootprintNV = 5283,2021 OpImageSampleFootprintNV = 5283,
2022 OpEmitMeshTasksEXT = 5294,
2023 OpSetMeshOutputsEXT = 5295,
1519 OpGroupNonUniformPartitionNV = 5296,2024 OpGroupNonUniformPartitionNV = 5296,
1520 OpWritePackedPrimitiveIndices4x8NV = 5299,2025 OpWritePackedPrimitiveIndices4x8NV = 5299,
2026 OpFetchMicroTriangleVertexPositionNV = 5300,
2027 OpFetchMicroTriangleVertexBarycentricNV = 5301,
1521 OpReportIntersectionKHR = 5334,2028 OpReportIntersectionKHR = 5334,
1522 OpIgnoreIntersectionNV = 5335,2029 OpIgnoreIntersectionNV = 5335,
1523 OpTerminateRayNV = 5336,2030 OpTerminateRayNV = 5336,
1524 OpTraceNV = 5337,2031 OpTraceNV = 5337,
1525 OpTraceMotionNV = 5338,2032 OpTraceMotionNV = 5338,
1526 OpTraceRayMotionNV = 5339,2033 OpTraceRayMotionNV = 5339,
2034 OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
1527 OpTypeAccelerationStructureKHR = 5341,2035 OpTypeAccelerationStructureKHR = 5341,
1528 OpExecuteCallableNV = 5344,2036 OpExecuteCallableNV = 5344,
1529 OpTypeCooperativeMatrixNV = 5358,2037 OpTypeCooperativeMatrixNV = 5358,
...@@ -1542,6 +2050,7 @@ pub const Opcode = enum(u16) {...@@ -1542,6 +2050,7 @@ pub const Opcode = enum(u16) {
1542 OpConvertUToSampledImageNV = 5395,2050 OpConvertUToSampledImageNV = 5395,
1543 OpConvertSampledImageToUNV = 5396,2051 OpConvertSampledImageToUNV = 5396,
1544 OpSamplerImageAddressingModeNV = 5397,2052 OpSamplerImageAddressingModeNV = 5397,
2053 OpRawAccessChainNV = 5398,
1545 OpSubgroupShuffleINTEL = 5571,2054 OpSubgroupShuffleINTEL = 5571,
1546 OpSubgroupShuffleDownINTEL = 5572,2055 OpSubgroupShuffleDownINTEL = 5572,
1547 OpSubgroupShuffleUpINTEL = 5573,2056 OpSubgroupShuffleUpINTEL = 5573,
...@@ -1598,7 +2107,21 @@ pub const Opcode = enum(u16) {...@@ -1598,7 +2107,21 @@ pub const Opcode = enum(u16) {
1598 OpTypeStructContinuedINTEL = 6090,2107 OpTypeStructContinuedINTEL = 6090,
1599 OpConstantCompositeContinuedINTEL = 6091,2108 OpConstantCompositeContinuedINTEL = 6091,
1600 OpSpecConstantCompositeContinuedINTEL = 6092,2109 OpSpecConstantCompositeContinuedINTEL = 6092,
16012110 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,
1602 pub const OpSDotKHR = Opcode.OpSDot;2125 pub const OpSDotKHR = Opcode.OpSDot;
1603 pub const OpUDotKHR = Opcode.OpUDot;2126 pub const OpUDotKHR = Opcode.OpUDot;
1604 pub const OpSUDotKHR = Opcode.OpSUDot;2127 pub const OpSUDotKHR = Opcode.OpSUDot;
...@@ -1957,12 +2480,16 @@ pub const Opcode = enum(u16) {...@@ -1957,12 +2480,16 @@ pub const Opcode = enum(u16) {
1957 .OpPtrEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },2480 .OpPtrEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
1958 .OpPtrNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },2481 .OpPtrNotEqual => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },
1959 .OpPtrDiff => struct { id_result_type: IdResultType, id_result: IdResult, operand_1: IdRef, operand_2: IdRef },2482 .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 },
1960 .OpTerminateInvocation => void,2486 .OpTerminateInvocation => void,
1961 .OpSubgroupBallotKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },2487 .OpSubgroupBallotKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
1962 .OpSubgroupFirstInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },2488 .OpSubgroupFirstInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
1963 .OpSubgroupAllKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },2489 .OpSubgroupAllKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
1964 .OpSubgroupAnyKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },2490 .OpSubgroupAnyKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },
1965 .OpSubgroupAllEqualKHR => struct { id_result_type: IdResultType, id_result: IdResult, predicate: IdRef },2491 .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 },
1966 .OpSubgroupReadInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef, index: IdRef },2493 .OpSubgroupReadInvocationKHR => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef, index: IdRef },
1967 .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 },2494 .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 },
1968 .OpExecuteCallableKHR => struct { sbt_index: IdRef, callable_data: IdRef },2495 .OpExecuteCallableKHR => struct { sbt_index: IdRef, callable_data: IdRef },
...@@ -1975,6 +2502,11 @@ pub const Opcode = enum(u16) {...@@ -1975,6 +2502,11 @@ pub const Opcode = enum(u16) {
1975 .OpSDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },2502 .OpSDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },
1976 .OpUDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },2503 .OpUDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },
1977 .OpSUDotAccSat => struct { id_result_type: IdResultType, id_result: IdResult, vector_1: IdRef, vector_2: IdRef, accumulator: IdRef, packed_vector_format: ?PackedVectorFormat = null },2504 .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 },
1978 .OpTypeRayQueryKHR => struct { id_result: IdResult },2510 .OpTypeRayQueryKHR => struct { id_result: IdResult },
1979 .OpRayQueryInitializeKHR => struct { rayquery: IdRef, accel: IdRef, rayflags: IdRef, cullmask: IdRef, rayorigin: IdRef, raytmin: IdRef, raydirection: IdRef, raytmax: IdRef },2511 .OpRayQueryInitializeKHR => struct { rayquery: IdRef, accel: IdRef, rayflags: IdRef, cullmask: IdRef, rayorigin: IdRef, raytmin: IdRef, raydirection: IdRef, raytmax: IdRef },
1980 .OpRayQueryTerminateKHR => struct { rayquery: IdRef },2512 .OpRayQueryTerminateKHR => struct { rayquery: IdRef },
...@@ -1982,6 +2514,14 @@ pub const Opcode = enum(u16) {...@@ -1982,6 +2514,14 @@ pub const Opcode = enum(u16) {
1982 .OpRayQueryConfirmIntersectionKHR => struct { rayquery: IdRef },2514 .OpRayQueryConfirmIntersectionKHR => struct { rayquery: IdRef },
1983 .OpRayQueryProceedKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },2515 .OpRayQueryProceedKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef },
1984 .OpRayQueryGetIntersectionTypeKHR => struct { id_result_type: IdResultType, id_result: IdResult, rayquery: IdRef, intersection: IdRef },2516 .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 },
1985 .OpGroupIAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },2525 .OpGroupIAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
1986 .OpGroupFAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },2526 .OpGroupFAddNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
1987 .OpGroupFMinNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },2527 .OpGroupFMinNonUniformAMD => struct { id_result_type: IdResultType, id_result: IdResult, execution: IdScope, operation: GroupOperation, x: IdRef },
...@@ -1993,15 +2533,58 @@ pub const Opcode = enum(u16) {...@@ -1993,15 +2533,58 @@ pub const Opcode = enum(u16) {
1993 .OpFragmentMaskFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef },2533 .OpFragmentMaskFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef },
1994 .OpFragmentFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, fragment_index: IdRef },2534 .OpFragmentFetchAMD => struct { id_result_type: IdResultType, id_result: IdResult, image: IdRef, coordinate: IdRef, fragment_index: IdRef },
1995 .OpReadClockKHR => struct { id_result_type: IdResultType, id_result: IdResult, scope: IdScope },2535 .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 },
1996 .OpImageSampleFootprintNV => struct { id_result_type: IdResultType, id_result: IdResult, sampled_image: IdRef, coordinate: IdRef, granularity: IdRef, coarse: IdRef, image_operands: ?ImageOperands.Extended = null },2574 .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 },
1997 .OpGroupNonUniformPartitionNV => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },2577 .OpGroupNonUniformPartitionNV => struct { id_result_type: IdResultType, id_result: IdResult, value: IdRef },
1998 .OpWritePackedPrimitiveIndices4x8NV => struct { index_offset: IdRef, packed_indices: IdRef },2578 .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 },
1999 .OpReportIntersectionKHR => struct { id_result_type: IdResultType, id_result: IdResult, hit: IdRef, hitkind: IdRef },2581 .OpReportIntersectionKHR => struct { id_result_type: IdResultType, id_result: IdResult, hit: IdRef, hitkind: IdRef },
2000 .OpIgnoreIntersectionNV => void,2582 .OpIgnoreIntersectionNV => void,
2001 .OpTerminateRayNV => void,2583 .OpTerminateRayNV => void,
2002 .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 },2584 .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 },
2003 .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 },2585 .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 },
2004 .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 },2586 .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 },
2005 .OpTypeAccelerationStructureKHR => struct { id_result: IdResult },2588 .OpTypeAccelerationStructureKHR => struct { id_result: IdResult },
2006 .OpExecuteCallableNV => struct { sbt_index: IdRef, callable_dataid: IdRef },2589 .OpExecuteCallableNV => struct { sbt_index: IdRef, callable_dataid: IdRef },
2007 .OpTypeCooperativeMatrixNV => struct { id_result: IdResult, component_type: IdRef, execution: IdScope, rows: IdRef, columns: IdRef },2590 .OpTypeCooperativeMatrixNV => struct { id_result: IdResult, component_type: IdRef, execution: IdScope, rows: IdRef, columns: IdRef },
...@@ -2020,6 +2603,7 @@ pub const Opcode = enum(u16) {...@@ -2020,6 +2603,7 @@ pub const Opcode = enum(u16) {
2020 .OpConvertUToSampledImageNV => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },2603 .OpConvertUToSampledImageNV => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
2021 .OpConvertSampledImageToUNV => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },2604 .OpConvertSampledImageToUNV => struct { id_result_type: IdResultType, id_result: IdResult, operand: IdRef },
2022 .OpSamplerImageAddressingModeNV => struct { bit_width: LiteralInteger },2605 .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 },
2023 .OpSubgroupShuffleINTEL => struct { id_result_type: IdResultType, id_result: IdResult, data: IdRef, invocationid: IdRef },2607 .OpSubgroupShuffleINTEL => struct { id_result_type: IdResultType, id_result: IdResult, data: IdRef, invocationid: IdRef },
2024 .OpSubgroupShuffleDownINTEL => struct { id_result_type: IdResultType, id_result: IdResult, current: IdRef, next: IdRef, delta: IdRef },2608 .OpSubgroupShuffleDownINTEL => struct { id_result_type: IdResultType, id_result: IdResult, current: IdRef, next: IdRef, delta: IdRef },
2025 .OpSubgroupShuffleUpINTEL => struct { id_result_type: IdResultType, id_result: IdResult, previous: IdRef, current: IdRef, delta: IdRef },2609 .OpSubgroupShuffleUpINTEL => struct { id_result_type: IdResultType, id_result: IdResult, previous: IdRef, current: IdRef, delta: IdRef },
...@@ -2076,2699 +2660,24 @@ pub const Opcode = enum(u16) {...@@ -2076,2699 +2660,24 @@ pub const Opcode = enum(u16) {
2076 .OpTypeStructContinuedINTEL => struct { id_ref: []const IdRef = &.{} },2660 .OpTypeStructContinuedINTEL => struct { id_ref: []const IdRef = &.{} },
2077 .OpConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },2661 .OpConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },
2078 .OpSpecConstantCompositeContinuedINTEL => struct { constituents: []const IdRef = &.{} },2662 .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 },
2079 };2678 };
2080 }2679 }
2081 pub fn operands(self: Opcode) []const Operand {2680 pub fn class(self: Opcode) Class {
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 {
4772 return switch (self) {2681 return switch (self) {
4773 .OpNop => .Miscellaneous,2682 .OpNop => .Miscellaneous,
4774 .OpUndef => .Miscellaneous,2683 .OpUndef => .Miscellaneous,
...@@ -5114,12 +3023,16 @@ pub const Opcode = enum(u16) {...@@ -5114,12 +3023,16 @@ pub const Opcode = enum(u16) {
5114 .OpPtrEqual => .Memory,3023 .OpPtrEqual => .Memory,
5115 .OpPtrNotEqual => .Memory,3024 .OpPtrNotEqual => .Memory,
5116 .OpPtrDiff => .Memory,3025 .OpPtrDiff => .Memory,
3026 .OpColorAttachmentReadEXT => .Image,
3027 .OpDepthAttachmentReadEXT => .Image,
3028 .OpStencilAttachmentReadEXT => .Image,
5117 .OpTerminateInvocation => .ControlFlow,3029 .OpTerminateInvocation => .ControlFlow,
5118 .OpSubgroupBallotKHR => .Group,3030 .OpSubgroupBallotKHR => .Group,
5119 .OpSubgroupFirstInvocationKHR => .Group,3031 .OpSubgroupFirstInvocationKHR => .Group,
5120 .OpSubgroupAllKHR => .Group,3032 .OpSubgroupAllKHR => .Group,
5121 .OpSubgroupAnyKHR => .Group,3033 .OpSubgroupAnyKHR => .Group,
5122 .OpSubgroupAllEqualKHR => .Group,3034 .OpSubgroupAllEqualKHR => .Group,
3035 .OpGroupNonUniformRotateKHR => .Group,
5123 .OpSubgroupReadInvocationKHR => .Group,3036 .OpSubgroupReadInvocationKHR => .Group,
5124 .OpTraceRayKHR => .Reserved,3037 .OpTraceRayKHR => .Reserved,
5125 .OpExecuteCallableKHR => .Reserved,3038 .OpExecuteCallableKHR => .Reserved,
...@@ -5132,13 +3045,26 @@ pub const Opcode = enum(u16) {...@@ -5132,13 +3045,26 @@ pub const Opcode = enum(u16) {
5132 .OpSDotAccSat => .Arithmetic,3045 .OpSDotAccSat => .Arithmetic,
5133 .OpUDotAccSat => .Arithmetic,3046 .OpUDotAccSat => .Arithmetic,
5134 .OpSUDotAccSat => .Arithmetic,3047 .OpSUDotAccSat => .Arithmetic,
5135 .OpTypeRayQueryKHR => .Reserved,3048 .OpTypeCooperativeMatrixKHR => .TypeDeclaration,
3049 .OpCooperativeMatrixLoadKHR => .Memory,
3050 .OpCooperativeMatrixStoreKHR => .Memory,
3051 .OpCooperativeMatrixMulAddKHR => .Arithmetic,
3052 .OpCooperativeMatrixLengthKHR => .Miscellaneous,
3053 .OpTypeRayQueryKHR => .TypeDeclaration,
5136 .OpRayQueryInitializeKHR => .Reserved,3054 .OpRayQueryInitializeKHR => .Reserved,
5137 .OpRayQueryTerminateKHR => .Reserved,3055 .OpRayQueryTerminateKHR => .Reserved,
5138 .OpRayQueryGenerateIntersectionKHR => .Reserved,3056 .OpRayQueryGenerateIntersectionKHR => .Reserved,
5139 .OpRayQueryConfirmIntersectionKHR => .Reserved,3057 .OpRayQueryConfirmIntersectionKHR => .Reserved,
5140 .OpRayQueryProceedKHR => .Reserved,3058 .OpRayQueryProceedKHR => .Reserved,
5141 .OpRayQueryGetIntersectionTypeKHR => .Reserved,3059 .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,
5142 .OpGroupIAddNonUniformAMD => .Group,3068 .OpGroupIAddNonUniformAMD => .Group,
5143 .OpGroupFAddNonUniformAMD => .Group,3069 .OpGroupFAddNonUniformAMD => .Group,
5144 .OpGroupFMinNonUniformAMD => .Group,3070 .OpGroupFMinNonUniformAMD => .Group,
...@@ -5150,18 +3076,61 @@ pub const Opcode = enum(u16) {...@@ -5150,18 +3076,61 @@ pub const Opcode = enum(u16) {
5150 .OpFragmentMaskFetchAMD => .Reserved,3076 .OpFragmentMaskFetchAMD => .Reserved,
5151 .OpFragmentFetchAMD => .Reserved,3077 .OpFragmentFetchAMD => .Reserved,
5152 .OpReadClockKHR => .Reserved,3078 .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,
5153 .OpImageSampleFootprintNV => .Image,3117 .OpImageSampleFootprintNV => .Image,
3118 .OpEmitMeshTasksEXT => .Reserved,
3119 .OpSetMeshOutputsEXT => .Reserved,
5154 .OpGroupNonUniformPartitionNV => .NonUniform,3120 .OpGroupNonUniformPartitionNV => .NonUniform,
5155 .OpWritePackedPrimitiveIndices4x8NV => .Reserved,3121 .OpWritePackedPrimitiveIndices4x8NV => .Reserved,
3122 .OpFetchMicroTriangleVertexPositionNV => .Reserved,
3123 .OpFetchMicroTriangleVertexBarycentricNV => .Reserved,
5156 .OpReportIntersectionKHR => .Reserved,3124 .OpReportIntersectionKHR => .Reserved,
5157 .OpIgnoreIntersectionNV => .Reserved,3125 .OpIgnoreIntersectionNV => .Reserved,
5158 .OpTerminateRayNV => .Reserved,3126 .OpTerminateRayNV => .Reserved,
5159 .OpTraceNV => .Reserved,3127 .OpTraceNV => .Reserved,
5160 .OpTraceMotionNV => .Reserved,3128 .OpTraceMotionNV => .Reserved,
5161 .OpTraceRayMotionNV => .Reserved,3129 .OpTraceRayMotionNV => .Reserved,
5162 .OpTypeAccelerationStructureKHR => .Reserved,3130 .OpRayQueryGetIntersectionTriangleVertexPositionsKHR => .Reserved,
3131 .OpTypeAccelerationStructureKHR => .TypeDeclaration,
5163 .OpExecuteCallableNV => .Reserved,3132 .OpExecuteCallableNV => .Reserved,
5164 .OpTypeCooperativeMatrixNV => .Reserved,3133 .OpTypeCooperativeMatrixNV => .TypeDeclaration,
5165 .OpCooperativeMatrixLoadNV => .Reserved,3134 .OpCooperativeMatrixLoadNV => .Reserved,
5166 .OpCooperativeMatrixStoreNV => .Reserved,3135 .OpCooperativeMatrixStoreNV => .Reserved,
5167 .OpCooperativeMatrixMulAddNV => .Reserved,3136 .OpCooperativeMatrixMulAddNV => .Reserved,
...@@ -5177,6 +3146,7 @@ pub const Opcode = enum(u16) {...@@ -5177,6 +3146,7 @@ pub const Opcode = enum(u16) {
5177 .OpConvertUToSampledImageNV => .Reserved,3146 .OpConvertUToSampledImageNV => .Reserved,
5178 .OpConvertSampledImageToUNV => .Reserved,3147 .OpConvertSampledImageToUNV => .Reserved,
5179 .OpSamplerImageAddressingModeNV => .Reserved,3148 .OpSamplerImageAddressingModeNV => .Reserved,
3149 .OpRawAccessChainNV => .Memory,
5180 .OpSubgroupShuffleINTEL => .Group,3150 .OpSubgroupShuffleINTEL => .Group,
5181 .OpSubgroupShuffleDownINTEL => .Group,3151 .OpSubgroupShuffleDownINTEL => .Group,
5182 .OpSubgroupShuffleUpINTEL => .Group,3152 .OpSubgroupShuffleUpINTEL => .Group,
...@@ -5233,6 +3203,21 @@ pub const Opcode = enum(u16) {...@@ -5233,6 +3203,21 @@ pub const Opcode = enum(u16) {
5233 .OpTypeStructContinuedINTEL => .TypeDeclaration,3203 .OpTypeStructContinuedINTEL => .TypeDeclaration,
5234 .OpConstantCompositeContinuedINTEL => .ConstantCreation,3204 .OpConstantCompositeContinuedINTEL => .ConstantCreation,
5235 .OpSpecConstantCompositeContinuedINTEL => .ConstantCreation,3205 .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,
5236 };3221 };
5237 }3222 }
5238};3223};
...@@ -5327,9 +3312,9 @@ pub const FPFastMathMode = packed struct {...@@ -5327,9 +3312,9 @@ pub const FPFastMathMode = packed struct {
5327 _reserved_bit_13: bool = false,3312 _reserved_bit_13: bool = false,
5328 _reserved_bit_14: bool = false,3313 _reserved_bit_14: bool = false,
5329 _reserved_bit_15: bool = false,3314 _reserved_bit_15: bool = false,
5330 AllowContractFastINTEL: bool = false,3315 AllowContract: bool = false,
5331 AllowReassocINTEL: bool = false,3316 AllowReassoc: bool = false,
5332 _reserved_bit_18: bool = false,3317 AllowTransform: bool = false,
5333 _reserved_bit_19: bool = false,3318 _reserved_bit_19: bool = false,
5334 _reserved_bit_20: bool = false,3319 _reserved_bit_20: bool = false,
5335 _reserved_bit_21: bool = false,3320 _reserved_bit_21: bool = false,
...@@ -5343,6 +3328,9 @@ pub const FPFastMathMode = packed struct {...@@ -5343,6 +3328,9 @@ pub const FPFastMathMode = packed struct {
5343 _reserved_bit_29: bool = false,3328 _reserved_bit_29: bool = false,
5344 _reserved_bit_30: bool = false,3329 _reserved_bit_30: bool = false,
5345 _reserved_bit_31: bool = false,3330 _reserved_bit_31: bool = false,
3331
3332 pub const AllowContractFastINTEL: FPFastMathMode = .{ .AllowContract = true };
3333 pub const AllowReassocINTEL: FPFastMathMode = .{ .AllowReassoc = true };
5346};3334};
5347pub const SelectionControl = packed struct {3335pub const SelectionControl = packed struct {
5348 Flatten: bool = false,3336 Flatten: bool = false,
...@@ -5403,8 +3391,8 @@ pub const LoopControl = packed struct {...@@ -5403,8 +3391,8 @@ pub const LoopControl = packed struct {
5403 MaxInterleavingINTEL: bool = false,3391 MaxInterleavingINTEL: bool = false,
5404 SpeculatedIterationsINTEL: bool = false,3392 SpeculatedIterationsINTEL: bool = false,
5405 NoFusionINTEL: bool = false,3393 NoFusionINTEL: bool = false,
5406 _reserved_bit_24: bool = false,3394 LoopCountINTEL: bool = false,
5407 _reserved_bit_25: bool = false,3395 MaxReinvocationDelayINTEL: bool = false,
5408 _reserved_bit_26: bool = false,3396 _reserved_bit_26: bool = false,
5409 _reserved_bit_27: bool = false,3397 _reserved_bit_27: bool = false,
5410 _reserved_bit_28: bool = false,3398 _reserved_bit_28: bool = false,
...@@ -5436,9 +3424,9 @@ pub const LoopControl = packed struct {...@@ -5436,9 +3424,9 @@ pub const LoopControl = packed struct {
5436 LoopCoalesceINTEL: ?struct { literal_integer: LiteralInteger } = null,3424 LoopCoalesceINTEL: ?struct { literal_integer: LiteralInteger } = null,
5437 MaxInterleavingINTEL: ?struct { literal_integer: LiteralInteger } = null,3425 MaxInterleavingINTEL: ?struct { literal_integer: LiteralInteger } = null,
5438 SpeculatedIterationsINTEL: ?struct { literal_integer: LiteralInteger } = null,3426 SpeculatedIterationsINTEL: ?struct { literal_integer: LiteralInteger } = null,
5439 NoFusionINTEL: ?struct { literal_integer: LiteralInteger } = null,3427 NoFusionINTEL: bool = false,
5440 _reserved_bit_24: bool = false,3428 LoopCountINTEL: ?struct { literal_integer: LiteralInteger } = null,
5441 _reserved_bit_25: bool = false,3429 MaxReinvocationDelayINTEL: ?struct { literal_integer: LiteralInteger } = null,
5442 _reserved_bit_26: bool = false,3430 _reserved_bit_26: bool = false,
5443 _reserved_bit_27: bool = false,3431 _reserved_bit_27: bool = false,
5444 _reserved_bit_28: bool = false,3432 _reserved_bit_28: bool = false,
...@@ -5536,8 +3524,8 @@ pub const MemoryAccess = packed struct {...@@ -5536,8 +3524,8 @@ pub const MemoryAccess = packed struct {
5536 _reserved_bit_13: bool = false,3524 _reserved_bit_13: bool = false,
5537 _reserved_bit_14: bool = false,3525 _reserved_bit_14: bool = false,
5538 _reserved_bit_15: bool = false,3526 _reserved_bit_15: bool = false,
5539 _reserved_bit_16: bool = false,3527 AliasScopeINTELMask: bool = false,
5540 _reserved_bit_17: bool = false,3528 NoAliasINTELMask: bool = false,
5541 _reserved_bit_18: bool = false,3529 _reserved_bit_18: bool = false,
5542 _reserved_bit_19: bool = false,3530 _reserved_bit_19: bool = false,
5543 _reserved_bit_20: bool = false,3531 _reserved_bit_20: bool = false,
...@@ -5574,8 +3562,8 @@ pub const MemoryAccess = packed struct {...@@ -5574,8 +3562,8 @@ pub const MemoryAccess = packed struct {
5574 _reserved_bit_13: bool = false,3562 _reserved_bit_13: bool = false,
5575 _reserved_bit_14: bool = false,3563 _reserved_bit_14: bool = false,
5576 _reserved_bit_15: bool = false,3564 _reserved_bit_15: bool = false,
5577 _reserved_bit_16: bool = false,3565 AliasScopeINTELMask: ?struct { id_ref: IdRef } = null,
5578 _reserved_bit_17: bool = false,3566 NoAliasINTELMask: ?struct { id_ref: IdRef } = null,
5579 _reserved_bit_18: bool = false,3567 _reserved_bit_18: bool = false,
5580 _reserved_bit_19: bool = false,3568 _reserved_bit_19: bool = false,
5581 _reserved_bit_20: bool = false,3569 _reserved_bit_20: bool = false,
...@@ -5637,7 +3625,7 @@ pub const RayFlags = packed struct {...@@ -5637,7 +3625,7 @@ pub const RayFlags = packed struct {
5637 CullNoOpaqueKHR: bool = false,3625 CullNoOpaqueKHR: bool = false,
5638 SkipTrianglesKHR: bool = false,3626 SkipTrianglesKHR: bool = false,
5639 SkipAABBsKHR: bool = false,3627 SkipAABBsKHR: bool = false,
5640 _reserved_bit_10: bool = false,3628 ForceOpacityMicromap2StateEXT: bool = false,
5641 _reserved_bit_11: bool = false,3629 _reserved_bit_11: bool = false,
5642 _reserved_bit_12: bool = false,3630 _reserved_bit_12: bool = false,
5643 _reserved_bit_13: bool = false,3631 _reserved_bit_13: bool = false,
...@@ -5694,6 +3682,40 @@ pub const FragmentShadingRate = packed struct {...@@ -5694,6 +3682,40 @@ pub const FragmentShadingRate = packed struct {
5694 _reserved_bit_30: bool = false,3682 _reserved_bit_30: bool = false,
5695 _reserved_bit_31: bool = false,3683 _reserved_bit_31: bool = false,
5696};3684};
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};
5697pub const SourceLanguage = enum(u32) {3719pub const SourceLanguage = enum(u32) {
5698 Unknown = 0,3720 Unknown = 0,
5699 ESSL = 1,3721 ESSL = 1,
...@@ -5702,6 +3724,12 @@ pub const SourceLanguage = enum(u32) {...@@ -5702,6 +3724,12 @@ pub const SourceLanguage = enum(u32) {
5702 OpenCL_CPP = 4,3724 OpenCL_CPP = 4,
5703 HLSL = 5,3725 HLSL = 5,
5704 CPP_for_OpenCL = 6,3726 CPP_for_OpenCL = 6,
3727 SYCL = 7,
3728 HERO_C = 8,
3729 NZSL = 9,
3730 WGSL = 10,
3731 Slang = 11,
3732 Zig = 12,
5705};3733};
5706pub const ExecutionModel = enum(u32) {3734pub const ExecutionModel = enum(u32) {
5707 Vertex = 0,3735 Vertex = 0,
...@@ -5719,6 +3747,8 @@ pub const ExecutionModel = enum(u32) {...@@ -5719,6 +3747,8 @@ pub const ExecutionModel = enum(u32) {
5719 ClosestHitKHR = 5316,3747 ClosestHitKHR = 5316,
5720 MissKHR = 5317,3748 MissKHR = 5317,
5721 CallableKHR = 5318,3749 CallableKHR = 5318,
3750 TaskEXT = 5364,
3751 MeshEXT = 5365,
57223752
5723 pub const RayGenerationNV = ExecutionModel.RayGenerationKHR;3753 pub const RayGenerationNV = ExecutionModel.RayGenerationKHR;
5724 pub const IntersectionNV = ExecutionModel.IntersectionKHR;3754 pub const IntersectionNV = ExecutionModel.IntersectionKHR;
...@@ -5782,6 +3812,9 @@ pub const ExecutionMode = enum(u32) {...@@ -5782,6 +3812,9 @@ pub const ExecutionMode = enum(u32) {
5782 SubgroupsPerWorkgroupId = 37,3812 SubgroupsPerWorkgroupId = 37,
5783 LocalSizeId = 38,3813 LocalSizeId = 38,
5784 LocalSizeHintId = 39,3814 LocalSizeHintId = 39,
3815 NonCoherentColorAttachmentReadEXT = 4169,
3816 NonCoherentDepthAttachmentReadEXT = 4170,
3817 NonCoherentStencilAttachmentReadEXT = 4171,
5785 SubgroupUniformControlFlowKHR = 4421,3818 SubgroupUniformControlFlowKHR = 4421,
5786 PostDepthCoverage = 4446,3819 PostDepthCoverage = 4446,
5787 DenormPreserve = 4459,3820 DenormPreserve = 4459,
...@@ -5789,12 +3822,26 @@ pub const ExecutionMode = enum(u32) {...@@ -5789,12 +3822,26 @@ pub const ExecutionMode = enum(u32) {
5789 SignedZeroInfNanPreserve = 4461,3822 SignedZeroInfNanPreserve = 4461,
5790 RoundingModeRTE = 4462,3823 RoundingModeRTE = 4462,
5791 RoundingModeRTZ = 4463,3824 RoundingModeRTZ = 4463,
3825 EarlyAndLateFragmentTestsAMD = 5017,
5792 StencilRefReplacingEXT = 5027,3826 StencilRefReplacingEXT = 5027,
5793 OutputLinesNV = 5269,3827 CoalescingAMDX = 5069,
5794 OutputPrimitivesNV = 5270,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,
5795 DerivativeGroupQuadsNV = 5289,3842 DerivativeGroupQuadsNV = 5289,
5796 DerivativeGroupLinearNV = 5290,3843 DerivativeGroupLinearNV = 5290,
5797 OutputTrianglesNV = 5298,3844 OutputTrianglesEXT = 5298,
5798 PixelInterlockOrderedEXT = 5366,3845 PixelInterlockOrderedEXT = 5366,
5799 PixelInterlockUnorderedEXT = 5367,3846 PixelInterlockUnorderedEXT = 5367,
5800 SampleInterlockOrderedEXT = 5368,3847 SampleInterlockOrderedEXT = 5368,
...@@ -5811,6 +3858,18 @@ pub const ExecutionMode = enum(u32) {...@@ -5811,6 +3858,18 @@ pub const ExecutionMode = enum(u32) {
5811 NoGlobalOffsetINTEL = 5895,3858 NoGlobalOffsetINTEL = 5895,
5812 NumSIMDWorkitemsINTEL = 5896,3859 NumSIMDWorkitemsINTEL = 5896,
5813 SchedulerTargetFmaxMhzINTEL = 5903,3860 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
5815 pub const Extended = union(ExecutionMode) {3874 pub const Extended = union(ExecutionMode) {
5816 Invocations: struct { literal_integer: LiteralInteger },3875 Invocations: struct { literal_integer: LiteralInteger },
...@@ -5851,6 +3910,9 @@ pub const ExecutionMode = enum(u32) {...@@ -5851,6 +3910,9 @@ pub const ExecutionMode = enum(u32) {
5851 SubgroupsPerWorkgroupId: struct { subgroups_per_workgroup: IdRef },3910 SubgroupsPerWorkgroupId: struct { subgroups_per_workgroup: IdRef },
5852 LocalSizeId: struct { x_size: IdRef, y_size: IdRef, z_size: IdRef },3911 LocalSizeId: struct { x_size: IdRef, y_size: IdRef, z_size: IdRef },
5853 LocalSizeHintId: struct { x_size_hint: IdRef, y_size_hint: IdRef, z_size_hint: IdRef },3912 LocalSizeHintId: struct { x_size_hint: IdRef, y_size_hint: IdRef, z_size_hint: IdRef },
3913 NonCoherentColorAttachmentReadEXT,
3914 NonCoherentDepthAttachmentReadEXT,
3915 NonCoherentStencilAttachmentReadEXT,
5854 SubgroupUniformControlFlowKHR,3916 SubgroupUniformControlFlowKHR,
5855 PostDepthCoverage,3917 PostDepthCoverage,
5856 DenormPreserve: struct { target_width: LiteralInteger },3918 DenormPreserve: struct { target_width: LiteralInteger },
...@@ -5858,12 +3920,26 @@ pub const ExecutionMode = enum(u32) {...@@ -5858,12 +3920,26 @@ pub const ExecutionMode = enum(u32) {
5858 SignedZeroInfNanPreserve: struct { target_width: LiteralInteger },3920 SignedZeroInfNanPreserve: struct { target_width: LiteralInteger },
5859 RoundingModeRTE: struct { target_width: LiteralInteger },3921 RoundingModeRTE: struct { target_width: LiteralInteger },
5860 RoundingModeRTZ: struct { target_width: LiteralInteger },3922 RoundingModeRTZ: struct { target_width: LiteralInteger },
3923 EarlyAndLateFragmentTestsAMD,
5861 StencilRefReplacingEXT,3924 StencilRefReplacingEXT,
5862 OutputLinesNV,3925 CoalescingAMDX,
5863 OutputPrimitivesNV: struct { primitive_count: LiteralInteger },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 },
5864 DerivativeGroupQuadsNV,3940 DerivativeGroupQuadsNV,
5865 DerivativeGroupLinearNV,3941 DerivativeGroupLinearNV,
5866 OutputTrianglesNV,3942 OutputTrianglesEXT,
5867 PixelInterlockOrderedEXT,3943 PixelInterlockOrderedEXT,
5868 PixelInterlockUnorderedEXT,3944 PixelInterlockUnorderedEXT,
5869 SampleInterlockOrderedEXT,3945 SampleInterlockOrderedEXT,
...@@ -5880,6 +3956,14 @@ pub const ExecutionMode = enum(u32) {...@@ -5880,6 +3956,14 @@ pub const ExecutionMode = enum(u32) {
5880 NoGlobalOffsetINTEL,3956 NoGlobalOffsetINTEL,
5881 NumSIMDWorkitemsINTEL: struct { literal_integer: LiteralInteger },3957 NumSIMDWorkitemsINTEL: struct { literal_integer: LiteralInteger },
5882 SchedulerTargetFmaxMhzINTEL: struct { literal_integer: LiteralInteger },3958 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 },
5883 };3967 };
5884};3968};
5885pub const StorageClass = enum(u32) {3969pub const StorageClass = enum(u32) {
...@@ -5896,6 +3980,9 @@ pub const StorageClass = enum(u32) {...@@ -5896,6 +3980,9 @@ pub const StorageClass = enum(u32) {
5896 AtomicCounter = 10,3980 AtomicCounter = 10,
5897 Image = 11,3981 Image = 11,
5898 StorageBuffer = 12,3982 StorageBuffer = 12,
3983 TileImageEXT = 4172,
3984 NodePayloadAMDX = 5068,
3985 NodeOutputPayloadAMDX = 5076,
5899 CallableDataKHR = 5328,3986 CallableDataKHR = 5328,
5900 IncomingCallableDataKHR = 5329,3987 IncomingCallableDataKHR = 5329,
5901 RayPayloadKHR = 5338,3988 RayPayloadKHR = 5338,
...@@ -5903,6 +3990,8 @@ pub const StorageClass = enum(u32) {...@@ -5903,6 +3990,8 @@ pub const StorageClass = enum(u32) {
5903 IncomingRayPayloadKHR = 5342,3990 IncomingRayPayloadKHR = 5342,
5904 ShaderRecordBufferKHR = 5343,3991 ShaderRecordBufferKHR = 5343,
5905 PhysicalStorageBuffer = 5349,3992 PhysicalStorageBuffer = 5349,
3993 HitObjectAttributeNV = 5385,
3994 TaskPayloadWorkgroupEXT = 5402,
5906 CodeSectionINTEL = 5605,3995 CodeSectionINTEL = 5605,
5907 DeviceOnlyINTEL = 5936,3996 DeviceOnlyINTEL = 5936,
5908 HostOnlyINTEL = 5937,3997 HostOnlyINTEL = 5937,
...@@ -5923,6 +4012,7 @@ pub const Dim = enum(u32) {...@@ -5923,6 +4012,7 @@ pub const Dim = enum(u32) {
5923 Rect = 4,4012 Rect = 4,
5924 Buffer = 5,4013 Buffer = 5,
5925 SubpassData = 6,4014 SubpassData = 6,
4015 TileImageDataEXT = 4173,
5926};4016};
5927pub const SamplerAddressingMode = enum(u32) {4017pub const SamplerAddressingMode = enum(u32) {
5928 None = 0,4018 None = 0,
...@@ -6019,6 +4109,8 @@ pub const ImageChannelDataType = enum(u32) {...@@ -6019,6 +4109,8 @@ pub const ImageChannelDataType = enum(u32) {
6019 Float = 14,4109 Float = 14,
6020 UnormInt24 = 15,4110 UnormInt24 = 15,
6021 UnormInt101010_2 = 16,4111 UnormInt101010_2 = 16,
4112 UnsignedIntRaw10EXT = 19,
4113 UnsignedIntRaw12EXT = 20,
6022};4114};
6023pub const FPRoundingMode = enum(u32) {4115pub const FPRoundingMode = enum(u32) {
6024 RTE = 0,4116 RTE = 0,
...@@ -6060,6 +4152,12 @@ pub const AccessQualifier = enum(u32) {...@@ -6060,6 +4152,12 @@ pub const AccessQualifier = enum(u32) {
6060 WriteOnly = 1,4152 WriteOnly = 1,
6061 ReadWrite = 2,4153 ReadWrite = 2,
6062};4154};
4155pub const HostAccessQualifier = enum(u32) {
4156 NoneINTEL = 0,
4157 ReadINTEL = 1,
4158 WriteINTEL = 2,
4159 ReadWriteINTEL = 3,
4160};
6063pub const FunctionParameterAttribute = enum(u32) {4161pub const FunctionParameterAttribute = enum(u32) {
6064 Zext = 0,4162 Zext = 0,
6065 Sext = 1,4163 Sext = 1,
...@@ -6069,6 +4167,7 @@ pub const FunctionParameterAttribute = enum(u32) {...@@ -6069,6 +4167,7 @@ pub const FunctionParameterAttribute = enum(u32) {
6069 NoCapture = 5,4167 NoCapture = 5,
6070 NoWrite = 6,4168 NoWrite = 6,
6071 NoReadWrite = 7,4169 NoReadWrite = 7,
4170 RuntimeAlignedINTEL = 5940,
6072};4171};
6073pub const Decoration = enum(u32) {4172pub const Decoration = enum(u32) {
6074 RelaxedPrecision = 0,4173 RelaxedPrecision = 0,
...@@ -6120,18 +4219,26 @@ pub const Decoration = enum(u32) {...@@ -6120,18 +4219,26 @@ pub const Decoration = enum(u32) {
6120 MaxByteOffsetId = 47,4219 MaxByteOffsetId = 47,
6121 NoSignedWrap = 4469,4220 NoSignedWrap = 4469,
6122 NoUnsignedWrap = 4470,4221 NoUnsignedWrap = 4470,
4222 WeightTextureQCOM = 4487,
4223 BlockMatchTextureQCOM = 4488,
4224 BlockMatchSamplerQCOM = 4499,
6123 ExplicitInterpAMD = 4999,4225 ExplicitInterpAMD = 4999,
4226 NodeSharesPayloadLimitsWithAMDX = 5019,
4227 NodeMaxPayloadsAMDX = 5020,
4228 TrackFinishWritingAMDX = 5078,
4229 PayloadNodeNameAMDX = 5091,
6124 OverrideCoverageNV = 5248,4230 OverrideCoverageNV = 5248,
6125 PassthroughNV = 5250,4231 PassthroughNV = 5250,
6126 ViewportRelativeNV = 5252,4232 ViewportRelativeNV = 5252,
6127 SecondaryViewportRelativeNV = 5256,4233 SecondaryViewportRelativeNV = 5256,
6128 PerPrimitiveNV = 5271,4234 PerPrimitiveEXT = 5271,
6129 PerViewNV = 5272,4235 PerViewNV = 5272,
6130 PerTaskNV = 5273,4236 PerTaskNV = 5273,
6131 PerVertexKHR = 5285,4237 PerVertexKHR = 5285,
6132 NonUniform = 5300,4238 NonUniform = 5300,
6133 RestrictPointer = 5355,4239 RestrictPointer = 5355,
6134 AliasedPointer = 5356,4240 AliasedPointer = 5356,
4241 HitObjectShaderRecordBufferNV = 5386,
6135 BindlessSamplerNV = 5398,4242 BindlessSamplerNV = 5398,
6136 BindlessImageNV = 5399,4243 BindlessImageNV = 5399,
6137 BoundSamplerNV = 5400,4244 BoundSamplerNV = 5400,
...@@ -6162,19 +4269,47 @@ pub const Decoration = enum(u32) {...@@ -6162,19 +4269,47 @@ pub const Decoration = enum(u32) {
6162 MergeINTEL = 5834,4269 MergeINTEL = 5834,
6163 BankBitsINTEL = 5835,4270 BankBitsINTEL = 5835,
6164 ForcePow2DepthINTEL = 5836,4271 ForcePow2DepthINTEL = 5836,
4272 StridesizeINTEL = 5883,
4273 WordsizeINTEL = 5884,
4274 TrueDualPortINTEL = 5885,
6165 BurstCoalesceINTEL = 5899,4275 BurstCoalesceINTEL = 5899,
6166 CacheSizeINTEL = 5900,4276 CacheSizeINTEL = 5900,
6167 DontStaticallyCoalesceINTEL = 5901,4277 DontStaticallyCoalesceINTEL = 5901,
6168 PrefetchINTEL = 5902,4278 PrefetchINTEL = 5902,
6169 StallEnableINTEL = 5905,4279 StallEnableINTEL = 5905,
6170 FuseLoopsInFunctionINTEL = 5907,4280 FuseLoopsInFunctionINTEL = 5907,
4281 MathOpDSPModeINTEL = 5909,
4282 AliasScopeINTEL = 5914,
4283 NoAliasINTEL = 5915,
4284 InitiationIntervalINTEL = 5917,
4285 MaxConcurrencyINTEL = 5918,
4286 PipelineEnableINTEL = 5919,
6171 BufferLocationINTEL = 5921,4287 BufferLocationINTEL = 5921,
6172 IOPipeStorageINTEL = 5944,4288 IOPipeStorageINTEL = 5944,
6173 FunctionFloatingPointModeINTEL = 6080,4289 FunctionFloatingPointModeINTEL = 6080,
6174 SingleElementVectorINTEL = 6085,4290 SingleElementVectorINTEL = 6085,
6175 VectorComputeCallableFunctionINTEL = 6087,4291 VectorComputeCallableFunctionINTEL = 6087,
6176 MediaBlockIOINTEL = 6140,4292 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;
6178 pub const PerVertexNV = Decoration.PerVertexKHR;4313 pub const PerVertexNV = Decoration.PerVertexKHR;
6179 pub const NonUniformEXT = Decoration.NonUniform;4314 pub const NonUniformEXT = Decoration.NonUniform;
6180 pub const RestrictPointerEXT = Decoration.RestrictPointer;4315 pub const RestrictPointerEXT = Decoration.RestrictPointer;
...@@ -6232,18 +4367,26 @@ pub const Decoration = enum(u32) {...@@ -6232,18 +4367,26 @@ pub const Decoration = enum(u32) {
6232 MaxByteOffsetId: struct { max_byte_offset: IdRef },4367 MaxByteOffsetId: struct { max_byte_offset: IdRef },
6233 NoSignedWrap,4368 NoSignedWrap,
6234 NoUnsignedWrap,4369 NoUnsignedWrap,
4370 WeightTextureQCOM,
4371 BlockMatchTextureQCOM,
4372 BlockMatchSamplerQCOM,
6235 ExplicitInterpAMD,4373 ExplicitInterpAMD,
4374 NodeSharesPayloadLimitsWithAMDX: struct { payload_array: IdRef },
4375 NodeMaxPayloadsAMDX: struct { max_number_of_payloads: IdRef },
4376 TrackFinishWritingAMDX,
4377 PayloadNodeNameAMDX: struct { node_name: LiteralString },
6236 OverrideCoverageNV,4378 OverrideCoverageNV,
6237 PassthroughNV,4379 PassthroughNV,
6238 ViewportRelativeNV,4380 ViewportRelativeNV,
6239 SecondaryViewportRelativeNV: struct { offset: LiteralInteger },4381 SecondaryViewportRelativeNV: struct { offset: LiteralInteger },
6240 PerPrimitiveNV,4382 PerPrimitiveEXT,
6241 PerViewNV,4383 PerViewNV,
6242 PerTaskNV,4384 PerTaskNV,
6243 PerVertexKHR,4385 PerVertexKHR,
6244 NonUniform,4386 NonUniform,
6245 RestrictPointer,4387 RestrictPointer,
6246 AliasedPointer,4388 AliasedPointer,
4389 HitObjectShaderRecordBufferNV,
6247 BindlessSamplerNV,4390 BindlessSamplerNV,
6248 BindlessImageNV,4391 BindlessImageNV,
6249 BoundSamplerNV,4392 BoundSamplerNV,
...@@ -6274,18 +4417,45 @@ pub const Decoration = enum(u32) {...@@ -6274,18 +4417,45 @@ pub const Decoration = enum(u32) {
6274 MergeINTEL: struct { merge_key: LiteralString, merge_type: LiteralString },4417 MergeINTEL: struct { merge_key: LiteralString, merge_type: LiteralString },
6275 BankBitsINTEL: struct { bank_bits: []const LiteralInteger = &.{} },4418 BankBitsINTEL: struct { bank_bits: []const LiteralInteger = &.{} },
6276 ForcePow2DepthINTEL: struct { force_key: LiteralInteger },4419 ForcePow2DepthINTEL: struct { force_key: LiteralInteger },
4420 StridesizeINTEL: struct { stride_size: LiteralInteger },
4421 WordsizeINTEL: struct { word_size: LiteralInteger },
4422 TrueDualPortINTEL,
6277 BurstCoalesceINTEL,4423 BurstCoalesceINTEL,
6278 CacheSizeINTEL: struct { cache_size_in_bytes: LiteralInteger },4424 CacheSizeINTEL: struct { cache_size_in_bytes: LiteralInteger },
6279 DontStaticallyCoalesceINTEL,4425 DontStaticallyCoalesceINTEL,
6280 PrefetchINTEL: struct { prefetcher_size_in_bytes: LiteralInteger },4426 PrefetchINTEL: struct { prefetcher_size_in_bytes: LiteralInteger },
6281 StallEnableINTEL,4427 StallEnableINTEL,
6282 FuseLoopsInFunctionINTEL,4428 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 },
6283 BufferLocationINTEL: struct { buffer_location_id: LiteralInteger },4435 BufferLocationINTEL: struct { buffer_location_id: LiteralInteger },
6284 IOPipeStorageINTEL: struct { io_pipe_id: LiteralInteger },4436 IOPipeStorageINTEL: struct { io_pipe_id: LiteralInteger },
6285 FunctionFloatingPointModeINTEL: struct { target_width: LiteralInteger, fp_operation_mode: FPOperationMode },4437 FunctionFloatingPointModeINTEL: struct { target_width: LiteralInteger, fp_operation_mode: FPOperationMode },
6286 SingleElementVectorINTEL,4438 SingleElementVectorINTEL,
6287 VectorComputeCallableFunctionINTEL,4439 VectorComputeCallableFunctionINTEL,
6288 MediaBlockIOINTEL,4440 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 },
6289 };4459 };
6290};4460};
6291pub const BuiltIn = enum(u32) {4461pub const BuiltIn = enum(u32) {
...@@ -6330,6 +4500,11 @@ pub const BuiltIn = enum(u32) {...@@ -6330,6 +4500,11 @@ pub const BuiltIn = enum(u32) {
6330 SubgroupLocalInvocationId = 41,4500 SubgroupLocalInvocationId = 41,
6331 VertexIndex = 42,4501 VertexIndex = 42,
6332 InstanceIndex = 43,4502 InstanceIndex = 43,
4503 CoreIDARM = 4160,
4504 CoreCountARM = 4161,
4505 CoreMaxIDARM = 4162,
4506 WarpIDARM = 4163,
4507 WarpMaxIDARM = 4164,
6333 SubgroupEqMask = 4416,4508 SubgroupEqMask = 4416,
6334 SubgroupGeMask = 4417,4509 SubgroupGeMask = 4417,
6335 SubgroupGtMask = 4418,4510 SubgroupGtMask = 4418,
...@@ -6350,6 +4525,8 @@ pub const BuiltIn = enum(u32) {...@@ -6350,6 +4525,8 @@ pub const BuiltIn = enum(u32) {
6350 BaryCoordSmoothSampleAMD = 4997,4525 BaryCoordSmoothSampleAMD = 4997,
6351 BaryCoordPullModelAMD = 4998,4526 BaryCoordPullModelAMD = 4998,
6352 FragStencilRefEXT = 5014,4527 FragStencilRefEXT = 5014,
4528 CoalescedInputCountAMDX = 5021,
4529 ShaderIndexAMDX = 5073,
6353 ViewportMaskNV = 5253,4530 ViewportMaskNV = 5253,
6354 SecondaryPositionNV = 5257,4531 SecondaryPositionNV = 5257,
6355 SecondaryViewportMaskNV = 5258,4532 SecondaryViewportMaskNV = 5258,
...@@ -6368,6 +4545,10 @@ pub const BuiltIn = enum(u32) {...@@ -6368,6 +4545,10 @@ pub const BuiltIn = enum(u32) {
6368 BaryCoordNoPerspKHR = 5287,4545 BaryCoordNoPerspKHR = 5287,
6369 FragSizeEXT = 5292,4546 FragSizeEXT = 5292,
6370 FragInvocationCountEXT = 5293,4547 FragInvocationCountEXT = 5293,
4548 PrimitivePointIndicesEXT = 5294,
4549 PrimitiveLineIndicesEXT = 5295,
4550 PrimitiveTriangleIndicesEXT = 5296,
4551 CullPrimitiveEXT = 5299,
6371 LaunchIdKHR = 5319,4552 LaunchIdKHR = 5319,
6372 LaunchSizeKHR = 5320,4553 LaunchSizeKHR = 5320,
6373 WorldRayOriginKHR = 5321,4554 WorldRayOriginKHR = 5321,
...@@ -6382,12 +4563,18 @@ pub const BuiltIn = enum(u32) {...@@ -6382,12 +4563,18 @@ pub const BuiltIn = enum(u32) {
6382 HitTNV = 5332,4563 HitTNV = 5332,
6383 HitKindKHR = 5333,4564 HitKindKHR = 5333,
6384 CurrentRayTimeNV = 5334,4565 CurrentRayTimeNV = 5334,
4566 HitTriangleVertexPositionsKHR = 5335,
4567 HitMicroTriangleVertexPositionsNV = 5337,
4568 HitMicroTriangleVertexBarycentricsNV = 5344,
6385 IncomingRayFlagsKHR = 5351,4569 IncomingRayFlagsKHR = 5351,
6386 RayGeometryIndexKHR = 5352,4570 RayGeometryIndexKHR = 5352,
6387 WarpsPerSMNV = 5374,4571 WarpsPerSMNV = 5374,
6388 SMCountNV = 5375,4572 SMCountNV = 5375,
6389 WarpIDNV = 5376,4573 WarpIDNV = 5376,
6390 SMIDNV = 5377,4574 SMIDNV = 5377,
4575 HitKindFrontFacingMicroTriangleNV = 5405,
4576 HitKindBackFacingMicroTriangleNV = 5406,
4577 CullMaskKHR = 6021,
63914578
6392 pub const SubgroupEqMaskKHR = BuiltIn.SubgroupEqMask;4579 pub const SubgroupEqMaskKHR = BuiltIn.SubgroupEqMask;
6393 pub const SubgroupGeMaskKHR = BuiltIn.SubgroupGeMask;4580 pub const SubgroupGeMaskKHR = BuiltIn.SubgroupGeMask;
...@@ -6508,6 +4695,10 @@ pub const Capability = enum(u32) {...@@ -6508,6 +4695,10 @@ pub const Capability = enum(u32) {
6508 ShaderLayer = 69,4695 ShaderLayer = 69,
6509 ShaderViewportIndex = 70,4696 ShaderViewportIndex = 70,
6510 UniformDecoration = 71,4697 UniformDecoration = 71,
4698 CoreBuiltinsARM = 4165,
4699 TileImageColorReadAccessEXT = 4166,
4700 TileImageDepthReadAccessEXT = 4167,
4701 TileImageStencilReadAccessEXT = 4168,
6511 FragmentShadingRateKHR = 4422,4702 FragmentShadingRateKHR = 4422,
6512 SubgroupBallotKHR = 4423,4703 SubgroupBallotKHR = 4423,
6513 DrawParameters = 4427,4704 DrawParameters = 4427,
...@@ -6537,6 +4728,10 @@ pub const Capability = enum(u32) {...@@ -6537,6 +4728,10 @@ pub const Capability = enum(u32) {
6537 RayQueryKHR = 4472,4728 RayQueryKHR = 4472,
6538 RayTraversalPrimitiveCullingKHR = 4478,4729 RayTraversalPrimitiveCullingKHR = 4478,
6539 RayTracingKHR = 4479,4730 RayTracingKHR = 4479,
4731 TextureSampleWeightedQCOM = 4484,
4732 TextureBoxFilterQCOM = 4485,
4733 TextureBlockMatchQCOM = 4486,
4734 TextureBlockMatch2QCOM = 4498,
6540 Float16ImageAMD = 5008,4735 Float16ImageAMD = 5008,
6541 ImageGatherBiasLodAMD = 5009,4736 ImageGatherBiasLodAMD = 5009,
6542 FragmentMaskAMD = 5010,4737 FragmentMaskAMD = 5010,
...@@ -6544,6 +4739,8 @@ pub const Capability = enum(u32) {...@@ -6544,6 +4739,8 @@ pub const Capability = enum(u32) {
6544 ImageReadWriteLodAMD = 5015,4739 ImageReadWriteLodAMD = 5015,
6545 Int64ImageEXT = 5016,4740 Int64ImageEXT = 5016,
6546 ShaderClockKHR = 5055,4741 ShaderClockKHR = 5055,
4742 ShaderEnqueueAMDX = 5067,
4743 QuadControlKHR = 5087,
6547 SampleMaskOverrideCoverageNV = 5249,4744 SampleMaskOverrideCoverageNV = 5249,
6548 GeometryShaderPassthroughNV = 5251,4745 GeometryShaderPassthroughNV = 5251,
6549 ShaderViewportIndexLayerEXT = 5254,4746 ShaderViewportIndexLayerEXT = 5254,
...@@ -6553,6 +4750,7 @@ pub const Capability = enum(u32) {...@@ -6553,6 +4750,7 @@ pub const Capability = enum(u32) {
6553 FragmentFullyCoveredEXT = 5265,4750 FragmentFullyCoveredEXT = 5265,
6554 MeshShadingNV = 5266,4751 MeshShadingNV = 5266,
6555 ImageFootprintNV = 5282,4752 ImageFootprintNV = 5282,
4753 MeshShadingEXT = 5283,
6556 FragmentBarycentricKHR = 5284,4754 FragmentBarycentricKHR = 5284,
6557 ComputeDerivativeGroupQuadsNV = 5288,4755 ComputeDerivativeGroupQuadsNV = 5288,
6558 FragmentDensityEXT = 5291,4756 FragmentDensityEXT = 5291,
...@@ -6569,6 +4767,7 @@ pub const Capability = enum(u32) {...@@ -6569,6 +4767,7 @@ pub const Capability = enum(u32) {
6569 InputAttachmentArrayNonUniformIndexing = 5310,4767 InputAttachmentArrayNonUniformIndexing = 5310,
6570 UniformTexelBufferArrayNonUniformIndexing = 5311,4768 UniformTexelBufferArrayNonUniformIndexing = 5311,
6571 StorageTexelBufferArrayNonUniformIndexing = 5312,4769 StorageTexelBufferArrayNonUniformIndexing = 5312,
4770 RayTracingPositionFetchKHR = 5336,
6572 RayTracingNV = 5340,4771 RayTracingNV = 5340,
6573 RayTracingMotionBlurNV = 5341,4772 RayTracingMotionBlurNV = 5341,
6574 VulkanMemoryModel = 5345,4773 VulkanMemoryModel = 5345,
...@@ -6582,7 +4781,14 @@ pub const Capability = enum(u32) {...@@ -6582,7 +4781,14 @@ pub const Capability = enum(u32) {
6582 ShaderSMBuiltinsNV = 5373,4781 ShaderSMBuiltinsNV = 5373,
6583 FragmentShaderPixelInterlockEXT = 5378,4782 FragmentShaderPixelInterlockEXT = 5378,
6584 DemoteToHelperInvocation = 5379,4783 DemoteToHelperInvocation = 5379,
4784 DisplacementMicromapNV = 5380,
4785 RayTracingOpacityMicromapEXT = 5381,
4786 ShaderInvocationReorderNV = 5383,
6585 BindlessTextureNV = 5390,4787 BindlessTextureNV = 5390,
4788 RayQueryPositionFetchKHR = 5391,
4789 AtomicFloat16VectorNV = 5404,
4790 RayTracingDisplacementMicromapNV = 5409,
4791 RawAccessChainsNV = 5414,
6586 SubgroupShuffleINTEL = 5568,4792 SubgroupShuffleINTEL = 5568,
6587 SubgroupBufferBlockIOINTEL = 5569,4793 SubgroupBufferBlockIOINTEL = 5569,
6588 SubgroupImageBlockIOINTEL = 5570,4794 SubgroupImageBlockIOINTEL = 5570,
...@@ -6615,9 +4821,13 @@ pub const Capability = enum(u32) {...@@ -6615,9 +4821,13 @@ pub const Capability = enum(u32) {
6615 FPGAMemoryAccessesINTEL = 5898,4821 FPGAMemoryAccessesINTEL = 5898,
6616 FPGAClusterAttributesINTEL = 5904,4822 FPGAClusterAttributesINTEL = 5904,
6617 LoopFuseINTEL = 5906,4823 LoopFuseINTEL = 5906,
4824 FPGADSPControlINTEL = 5908,
4825 MemoryAccessAliasingINTEL = 5910,
4826 FPGAInvocationPipeliningAttributesINTEL = 5916,
6618 FPGABufferLocationINTEL = 5920,4827 FPGABufferLocationINTEL = 5920,
6619 ArbitraryPrecisionFixedPointINTEL = 5922,4828 ArbitraryPrecisionFixedPointINTEL = 5922,
6620 USMStorageClassesINTEL = 5935,4829 USMStorageClassesINTEL = 5935,
4830 RuntimeAlignedAttributeINTEL = 5939,
6621 IOPipesINTEL = 5943,4831 IOPipesINTEL = 5943,
6622 BlockingPipesINTEL = 5945,4832 BlockingPipesINTEL = 5945,
6623 FPGARegINTEL = 5948,4833 FPGARegINTEL = 5948,
...@@ -6625,13 +4835,30 @@ pub const Capability = enum(u32) {...@@ -6625,13 +4835,30 @@ pub const Capability = enum(u32) {
6625 DotProductInput4x8Bit = 6017,4835 DotProductInput4x8Bit = 6017,
6626 DotProductInput4x8BitPacked = 6018,4836 DotProductInput4x8BitPacked = 6018,
6627 DotProduct = 6019,4837 DotProduct = 6019,
4838 RayCullMaskKHR = 6020,
4839 CooperativeMatrixKHR = 6022,
6628 BitInstructions = 6025,4840 BitInstructions = 6025,
4841 GroupNonUniformRotateKHR = 6026,
4842 FloatControls2 = 6029,
6629 AtomicFloat32AddEXT = 6033,4843 AtomicFloat32AddEXT = 6033,
6630 AtomicFloat64AddEXT = 6034,4844 AtomicFloat64AddEXT = 6034,
6631 LongConstantCompositeINTEL = 6089,4845 LongCompositesINTEL = 6089,
6632 OptNoneINTEL = 6094,4846 OptNoneINTEL = 6094,
6633 AtomicFloat16AddEXT = 6095,4847 AtomicFloat16AddEXT = 6095,
6634 DebugInfoModuleINTEL = 6114,4848 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
6636 pub const StorageUniformBufferBlock16 = Capability.StorageBuffer16BitAccess;4863 pub const StorageUniformBufferBlock16 = Capability.StorageBuffer16BitAccess;
6637 pub const StorageUniform16 = Capability.UniformAndStorageBuffer16BitAccess;4864 pub const StorageUniform16 = Capability.UniformAndStorageBuffer16BitAccess;
...@@ -6677,3 +4904,11634 @@ pub const PackedVectorFormat = enum(u32) {...@@ -6677,3 +4904,11634 @@ pub const PackedVectorFormat = enum(u32) {
66774904
6678 pub const PackedVectorFormat4x8BitKHR = PackedVectorFormat.PackedVectorFormat4x8Bit;4905 pub const PackedVectorFormat4x8BitKHR = PackedVectorFormat.PackedVectorFormat4x8Bit;
6679};4906};
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");...@@ -39,8 +39,12 @@ const Liveness = @import("../Liveness.zig");
39const Value = @import("../Value.zig");39const Value = @import("../Value.zig");
4040
41const SpvModule = @import("../codegen/spirv/Module.zig");41const SpvModule = @import("../codegen/spirv/Module.zig");
42const Section = @import("../codegen/spirv/Section.zig");
42const spec = @import("../codegen/spirv/spec.zig");43const spec = @import("../codegen/spirv/spec.zig");
43const IdResult = spec.IdResult;44const IdResult = spec.IdResult;
45const Word = spec.Word;
46
47const BinaryModule = @import("SpirV/BinaryModule.zig");
4448
45base: link.File,49base: link.File,
4650
...@@ -163,7 +167,8 @@ pub fn updateExports(...@@ -163,7 +167,8 @@ pub fn updateExports(
163 .Vertex => spec.ExecutionModel.Vertex,167 .Vertex => spec.ExecutionModel.Vertex,
164 .Fragment => spec.ExecutionModel.Fragment,168 .Fragment => spec.ExecutionModel.Fragment,
165 .Kernel => spec.ExecutionModel.Kernel,169 .Kernel => spec.ExecutionModel.Kernel,
166 else => return,170 .C => return, // TODO: What to do here?
171 else => unreachable,
167 };172 };
168 const is_vulkan = target.os.tag == .vulkan;173 const is_vulkan = target.os.tag == .vulkan;
169174
...@@ -197,8 +202,6 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node...@@ -197,8 +202,6 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node
197 @panic("Attempted to compile for architecture that was disabled by build configuration");202 @panic("Attempted to compile for architecture that was disabled by build configuration");
198 }203 }
199204
200 _ = arena; // Has the same lifetime as the call to Compilation.update.
201
202 const tracy = trace(@src());205 const tracy = trace(@src());
203 defer tracy.end();206 defer tracy.end();
204207
...@@ -223,9 +226,9 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node...@@ -223,9 +226,9 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node
223 defer error_info.deinit();226 defer error_info.deinit();
224227
225 try error_info.appendSlice("zig_errors");228 try error_info.appendSlice("zig_errors");
226 const module = self.base.comp.module.?;229 const mod = self.base.comp.module.?;
227 for (module.global_error_set.keys()) |name_nts| {230 for (mod.global_error_set.keys()) |name_nts| {
228 const name = module.intern_pool.stringToSlice(name_nts);231 const name = mod.intern_pool.stringToSlice(name_nts);
229 // Errors can contain pretty much any character - to encode them in a string we must escape232 // Errors can contain pretty much any character - to encode them in a string we must escape
230 // them somehow. Easiest here is to use some established scheme, one which also preseves the233 // them somehow. Easiest here is to use some established scheme, one which also preseves the
231 // name if it contains no strange characters is nice for debugging. URI encoding fits the bill.234 // 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...@@ -239,7 +242,34 @@ pub fn flushModule(self: *SpirV, arena: Allocator, prog_node: *std.Progress.Node
239 .extension = error_info.items,242 .extension = error_info.items,
240 });243 });
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);
243}273}
244274
245fn writeCapabilities(spv: *SpvModule, target: std.Target) !void {275fn 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" {...@@ -18,6 +18,7 @@ test "global variable alignment" {
18test "large alignment of local constant" {18test "large alignment of local constant" {
19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
20 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;20 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
21 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // flaky
2122
22 const x: f32 align(128) = 12.34;23 const x: f32 align(128) = 12.34;
23 try std.testing.expect(@intFromPtr(&x) % 128 == 0);24 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" {...@@ -757,6 +757,7 @@ test "extern variable with non-pointer opaque type" {
757 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO757 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
758 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO758 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
759 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;759 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
761 @export(var_to_export, .{ .name = "opaque_extern_var" });762 @export(var_to_export, .{ .name = "opaque_extern_var" });
762 try expect(@as(*align(1) u32, @ptrCast(&opaque_extern_var)).* == 42);763 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";...@@ -5,7 +5,6 @@ var result: []const u8 = "wrong";
55
6test "pass string literal byvalue to a generic var param" {6test "pass string literal byvalue to a generic var param" {
7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
98
10 start();9 start();
11 blowUpStack(10);10 blowUpStack(10);
test/behavior/cast.zig+2-1
...@@ -1252,7 +1252,6 @@ test "implicit cast from *T to ?*anyopaque" {...@@ -1252,7 +1252,6 @@ test "implicit cast from *T to ?*anyopaque" {
1252 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1252 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1253 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1253 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1254 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1254 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1255 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
12561255
1257 var a: u8 = 1;1256 var a: u8 = 1;
1258 incrementVoidPtrValue(&a);1257 incrementVoidPtrValue(&a);
...@@ -2035,6 +2034,8 @@ test "peer type resolution: tuple pointer and optional slice" {...@@ -2035,6 +2034,8 @@ test "peer type resolution: tuple pointer and optional slice" {
2035 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO2034 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
2036 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2035 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2037 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO2036 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
2039 var a: ?[:0]const u8 = null;2040 var a: ?[:0]const u8 = null;
2040 var b = &.{ @as(u8, 'x'), @as(u8, 'y'), @as(u8, 'z') };2041 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" {...@@ -124,7 +124,6 @@ test "debug info for optional error set" {
124124
125test "implicit cast to optional to error union to return result loc" {125test "implicit cast to optional to error union to return result loc" {
126 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO126 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
127 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
128127
129 const S = struct {128 const S = struct {
130 fn entry() !void {129 fn entry() !void {
...@@ -951,7 +950,6 @@ test "returning an error union containing a type with no runtime bits" {...@@ -951,7 +950,6 @@ test "returning an error union containing a type with no runtime bits" {
951test "try used in recursive function with inferred error set" {950test "try used in recursive function with inferred error set" {
952 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO951 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
953 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO952 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
954 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
955953
956 const Value = union(enum) {954 const Value = union(enum) {
957 values: []const @This(),955 values: []const @This(),
test/behavior/floatop.zig-2
...@@ -127,7 +127,6 @@ test "cmp f16" {...@@ -127,7 +127,6 @@ test "cmp f16" {
127test "cmp f32/f64" {127test "cmp f32/f64" {
128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
129 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;129 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
132 try testCmp(f32);131 try testCmp(f32);
133 try comptime testCmp(f32);132 try comptime testCmp(f32);
...@@ -979,7 +978,6 @@ test "@abs f32/f64" {...@@ -979,7 +978,6 @@ test "@abs f32/f64" {
979 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO978 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
980 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO979 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
981 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO980 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
982 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
983981
984 try testFabs(f32);982 try testFabs(f32);
985 try comptime testFabs(f32);983 try comptime testFabs(f32);
test/behavior/optional.zig-3
...@@ -28,7 +28,6 @@ pub const EmptyStruct = struct {};...@@ -28,7 +28,6 @@ pub const EmptyStruct = struct {};
2828
29test "optional pointer to size zero struct" {29test "optional pointer to size zero struct" {
30 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO30 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
31 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
3231
33 var e = EmptyStruct{};32 var e = EmptyStruct{};
34 const o: ?*EmptyStruct = &e;33 const o: ?*EmptyStruct = &e;
...@@ -36,8 +35,6 @@ test "optional pointer to size zero struct" {...@@ -36,8 +35,6 @@ test "optional pointer to size zero struct" {
36}35}
3736
38test "equality compare optional pointers" {37test "equality compare optional pointers" {
39 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
40
41 try testNullPtrsEql();38 try testNullPtrsEql();
42 try comptime testNullPtrsEql();39 try comptime testNullPtrsEql();
43}40}
test/behavior/pointers.zig-1
...@@ -216,7 +216,6 @@ test "assign null directly to C pointer and test null equality" {...@@ -216,7 +216,6 @@ test "assign null directly to C pointer and test null equality" {
216 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO216 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
217 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO217 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
218 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO218 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
219 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
220219
221 var x: [*c]i32 = null;220 var x: [*c]i32 = null;
222 _ = &x;221 _ = &x;
test/behavior/vector.zig-2
...@@ -372,7 +372,6 @@ test "load vector elements via comptime index" {...@@ -372,7 +372,6 @@ test "load vector elements via comptime index" {
372 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO372 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
373 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO373 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
374 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO374 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
375 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
376375
377 const S = struct {376 const S = struct {
378 fn doTheTest() !void {377 fn doTheTest() !void {
...@@ -394,7 +393,6 @@ test "store vector elements via comptime index" {...@@ -394,7 +393,6 @@ test "store vector elements via comptime index" {
394 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO393 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
395 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO394 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
396 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO395 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
397 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
398396
399 const S = struct {397 const S = struct {
400 fn doTheTest() !void {398 fn doTheTest() !void {
test/behavior/while.zig-2
...@@ -38,8 +38,6 @@ fn staticWhileLoop2() i32 {...@@ -38,8 +38,6 @@ fn staticWhileLoop2() i32 {
38}38}
3939
40test "while with continue expression" {40test "while with continue expression" {
41 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
42
43 var sum: i32 = 0;41 var sum: i32 = 0;
44 {42 {
45 var i: i32 = 0;43 var i: i32 = 0;
tools/gen_spirv_spec.zig+316-91
...@@ -1,45 +1,138 @@...@@ -1,45 +1,138 @@
1const std = @import("std");1const std = @import("std");
2const g = @import("spirv/grammar.zig");
3const Allocator = std.mem.Allocator;2const 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
5const ExtendedStructSet = std.StringHashMap(void);11const 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
7pub fn main() !void {65pub fn main() !void {
8 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);66 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
9 defer arena.deinit();67 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);99fn readExtRegistry(exts: *std.ArrayList(Extension), a: Allocator, dir: std.fs.Dir, sub_path: []const u8) !void {
13 if (args.len != 2) {100 const filename = std.fs.path.basename(sub_path);
14 usageAndExit(std.io.getStdErr(), args[0], 1);101 if (!std.mem.startsWith(u8, filename, "extinst.")) {
102 return;
15 }103 }
16104
17 const spec_path = args[1];105 std.debug.assert(std.mem.endsWith(u8, filename, ".grammar.json"));
18 const spec = try std.fs.cwd().readFileAlloc(allocator, spec_path, std.math.maxInt(usize));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));
20 // Required for json parsing.116 // Required for json parsing.
21 @setEvalBranchQuota(10000);117 @setEvalBranchQuota(10000);
22118
23 var scanner = std.json.Scanner.initCompleteInput(allocator, spec);119 var scanner = std.json.Scanner.initCompleteInput(a, spec);
24 var diagnostics = std.json.Diagnostics{};120 var diagnostics = std.json.Diagnostics{};
25 scanner.enableDiagnostics(&diagnostics);121 scanner.enableDiagnostics(&diagnostics);
26 const parsed = std.json.parseFromTokenSource(g.CoreRegistry, allocator, &scanner, .{}) catch |err| {122 const parsed = std.json.parseFromTokenSource(RegistryType, a, &scanner, .{}) catch |err| {
27 std.debug.print("line,col: {},{}\n", .{ diagnostics.getLine(), diagnostics.getColumn() });123 std.debug.print("{s}:{}:{}:\n", .{ path, diagnostics.getLine(), diagnostics.getColumn() });
28 return err;124 return err;
29 };125 };
30126 return parsed.value;
31 var bw = std.io.bufferedWriter(std.io.getStdOut().writer());
32 try render(bw.writer(), allocator, parsed.value);
33 try bw.flush();
34}127}
35128
36/// Returns a set with types that require an extra struct for the `Instruction` interface129/// Returns a set with types that require an extra struct for the `Instruction` interface
37/// to the spir-v spec, or whether the original type can be used.130/// to the spir-v spec, or whether the original type can be used.
38fn extendedStructs(131fn extendedStructs(
39 arena: Allocator,132 a: Allocator,
40 kinds: []const g.OperandKind,133 kinds: []const OperandKind,
41) !ExtendedStructSet {134) !ExtendedStructSet {
42 var map = ExtendedStructSet.init(arena);135 var map = ExtendedStructSet.init(a);
43 try map.ensureTotalCapacity(@as(u32, @intCast(kinds.len)));136 try map.ensureTotalCapacity(@as(u32, @intCast(kinds.len)));
44137
45 for (kinds) |kind| {138 for (kinds) |kind| {
...@@ -73,10 +166,12 @@ fn tagPriorityScore(tag: []const u8) usize {...@@ -73,10 +166,12 @@ fn tagPriorityScore(tag: []const u8) usize {
73 }166 }
74}167}
75168
76fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void {169fn render(writer: anytype, a: Allocator, registry: CoreRegistry, extensions: []const Extension) !void {
77 try writer.writeAll(170 try writer.writeAll(
78 \\//! This file is auto-generated by tools/gen_spirv_spec.zig.171 \\//! This file is auto-generated by tools/gen_spirv_spec.zig.
79 \\172 \\
173 \\const std = @import("std");
174 \\
80 \\pub const Version = packed struct(Word) {175 \\pub const Version = packed struct(Word) {
81 \\ padding: u8 = 0,176 \\ padding: u8 = 0,
82 \\ minor: u8,177 \\ minor: u8,
...@@ -89,8 +184,21 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void...@@ -89,8 +184,21 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
89 \\};184 \\};
90 \\185 \\
91 \\pub const Word = u32;186 \\pub const Word = u32;
92 \\pub const IdResult = struct{187 \\pub const IdResult = enum(Word) {
93 \\ id: 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 \\ }
94 \\};202 \\};
95 \\pub const IdResultType = IdResult;203 \\pub const IdResultType = IdResult;
96 \\pub const IdRef = IdResult;204 \\pub const IdRef = IdResult;
...@@ -99,6 +207,7 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void...@@ -99,6 +207,7 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
99 \\pub const IdScope = IdRef;207 \\pub const IdScope = IdRef;
100 \\208 \\
101 \\pub const LiteralInteger = Word;209 \\pub const LiteralInteger = Word;
210 \\pub const LiteralFloat = Word;
102 \\pub const LiteralString = []const u8;211 \\pub const LiteralString = []const u8;
103 \\pub const LiteralContextDependentNumber = union(enum) {212 \\pub const LiteralContextDependentNumber = union(enum) {
104 \\ int32: i32,213 \\ int32: i32,
...@@ -139,6 +248,13 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void...@@ -139,6 +248,13 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
139 \\ parameters: []const OperandKind,248 \\ parameters: []const OperandKind,
140 \\};249 \\};
141 \\250 \\
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;
142 \\258 \\
143 );259 );
144260
...@@ -151,15 +267,123 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void...@@ -151,15 +267,123 @@ fn render(writer: anytype, allocator: Allocator, registry: g.CoreRegistry) !void
151 .{ registry.major_version, registry.minor_version, registry.revision, registry.magic_number },267 .{ registry.major_version, registry.minor_version, registry.revision, registry.magic_number },
152 );268 );
153269
154 const extended_structs = try extendedStructs(allocator, registry.operand_kinds);270 // Merge the operand kinds from all extensions together.
155 try renderClass(writer, allocator, registry.instructions);271 // var all_operand_kinds = std.ArrayList(OperandKind).init(a);
156 try renderOperandKind(writer, registry.operand_kinds);272 // try all_operand_kinds.appendSlice(registry.operand_kinds);
157 try renderOpcodes(writer, allocator, registry.instructions, extended_structs);273 var all_operand_kinds = OperandKindMap.init(a);
158 try renderOperandKinds(writer, allocator, registry.operand_kinds, extended_structs);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 );
159}383}
160384
161fn renderClass(writer: anytype, allocator: Allocator, instructions: []const g.Instruction) !void {385fn renderClass(writer: anytype, a: Allocator, instructions: []const Instruction) !void {
162 var class_map = std.StringArrayHashMap(void).init(allocator);386 var class_map = std.StringArrayHashMap(void).init(a);
163387
164 for (instructions) |inst| {388 for (instructions) |inst| {
165 if (std.mem.eql(u8, inst.class.?, "@exclude")) {389 if (std.mem.eql(u8, inst.class.?, "@exclude")) {
...@@ -173,7 +397,7 @@ fn renderClass(writer: anytype, allocator: Allocator, instructions: []const g.In...@@ -173,7 +397,7 @@ fn renderClass(writer: anytype, allocator: Allocator, instructions: []const g.In
173 try renderInstructionClass(writer, class);397 try renderInstructionClass(writer, class);
174 try writer.writeAll(",\n");398 try writer.writeAll(",\n");
175 }399 }
176 try writer.writeAll("};\n");400 try writer.writeAll("};\n\n");
177}401}
178402
179fn renderInstructionClass(writer: anytype, class: []const u8) !void {403fn renderInstructionClass(writer: anytype, class: []const u8) !void {
...@@ -192,15 +416,20 @@ fn renderInstructionClass(writer: anytype, class: []const u8) !void {...@@ -192,15 +416,20 @@ fn renderInstructionClass(writer: anytype, class: []const u8) !void {
192 }416 }
193}417}
194418
195fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {419fn renderOperandKind(writer: anytype, operands: []const OperandKind) !void {
196 try writer.writeAll("pub const OperandKind = enum {\n");420 try writer.writeAll(
421 \\pub const OperandKind = enum {
422 \\ Opcode,
423 \\
424 );
197 for (operands) |operand| {425 for (operands) |operand| {
198 try writer.print("{},\n", .{std.zig.fmtId(operand.kind)});426 try writer.print("{},\n", .{std.zig.fmtId(operand.kind)});
199 }427 }
200 try writer.writeAll(428 try writer.writeAll(
201 \\429 \\
202 \\pub fn category(self: OperandKind) OperandCategory {430 \\pub fn category(self: OperandKind) OperandCategory {
203 \\return switch (self) {431 \\ return switch (self) {
432 \\ .Opcode => .literal,
204 \\433 \\
205 );434 );
206 for (operands) |operand| {435 for (operands) |operand| {
...@@ -214,10 +443,11 @@ fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {...@@ -214,10 +443,11 @@ fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {
214 try writer.print(".{} => .{s},\n", .{ std.zig.fmtId(operand.kind), cat });443 try writer.print(".{} => .{s},\n", .{ std.zig.fmtId(operand.kind), cat });
215 }444 }
216 try writer.writeAll(445 try writer.writeAll(
217 \\};446 \\ };
218 \\}447 \\}
219 \\pub fn enumerants(self: OperandKind) []const Enumerant {448 \\pub fn enumerants(self: OperandKind) []const Enumerant {
220 \\return switch (self) {449 \\ return switch (self) {
450 \\ .Opcode => unreachable,
221 \\451 \\
222 );452 );
223 for (operands) |operand| {453 for (operands) |operand| {
...@@ -242,7 +472,7 @@ fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {...@@ -242,7 +472,7 @@ fn renderOperandKind(writer: anytype, operands: []const g.OperandKind) !void {
242 try writer.writeAll("};\n}\n};\n");472 try writer.writeAll("};\n}\n};\n");
243}473}
244474
245fn renderEnumerant(writer: anytype, enumerant: g.Enumerant) !void {475fn renderEnumerant(writer: anytype, enumerant: Enumerant) !void {
246 try writer.print(".{{.name = \"{s}\", .value = ", .{enumerant.enumerant});476 try writer.print(".{{.name = \"{s}\", .value = ", .{enumerant.enumerant});
247 switch (enumerant.value) {477 switch (enumerant.value) {
248 .bitflag => |flag| try writer.writeAll(flag),478 .bitflag => |flag| try writer.writeAll(flag),
...@@ -260,14 +490,14 @@ fn renderEnumerant(writer: anytype, enumerant: g.Enumerant) !void {...@@ -260,14 +490,14 @@ fn renderEnumerant(writer: anytype, enumerant: g.Enumerant) !void {
260490
261fn renderOpcodes(491fn renderOpcodes(
262 writer: anytype,492 writer: anytype,
263 allocator: Allocator,493 a: Allocator,
264 instructions: []const g.Instruction,494 instructions: []const Instruction,
265 extended_structs: ExtendedStructSet,495 extended_structs: ExtendedStructSet,
266) !void {496) !void {
267 var inst_map = std.AutoArrayHashMap(u32, usize).init(allocator);497 var inst_map = std.AutoArrayHashMap(u32, usize).init(a);
268 try inst_map.ensureTotalCapacity(instructions.len);498 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);
271 try aliases.ensureTotalCapacity(instructions.len);501 try aliases.ensureTotalCapacity(instructions.len);
272502
273 for (instructions, 0..) |inst, i| {503 for (instructions, 0..) |inst, i| {
...@@ -302,7 +532,9 @@ fn renderOpcodes(...@@ -302,7 +532,9 @@ fn renderOpcodes(
302 try writer.print("{} = {},\n", .{ std.zig.fmtId(inst.opname), inst.opcode });532 try writer.print("{} = {},\n", .{ std.zig.fmtId(inst.opname), inst.opcode });
303 }533 }
304534
305 try writer.writeByte('\n');535 try writer.writeAll(
536 \\
537 );
306538
307 for (aliases.items) |alias| {539 for (aliases.items) |alias| {
308 try writer.print("pub const {} = Opcode.{};\n", .{540 try writer.print("pub const {} = Opcode.{};\n", .{
...@@ -314,7 +546,7 @@ fn renderOpcodes(...@@ -314,7 +546,7 @@ fn renderOpcodes(
314 try writer.writeAll(546 try writer.writeAll(
315 \\547 \\
316 \\pub fn Operands(comptime self: Opcode) type {548 \\pub fn Operands(comptime self: Opcode) type {
317 \\return switch (self) {549 \\ return switch (self) {
318 \\550 \\
319 );551 );
320552
...@@ -324,35 +556,10 @@ fn renderOpcodes(...@@ -324,35 +556,10 @@ fn renderOpcodes(
324 }556 }
325557
326 try writer.writeAll(558 try writer.writeAll(
327 \\};559 \\ };
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 \\};
353 \\}560 \\}
354 \\pub fn class(self: Opcode) Class {561 \\pub fn class(self: Opcode) Class {
355 \\return switch (self) {562 \\ return switch (self) {
356 \\563 \\
357 );564 );
358565
...@@ -363,19 +570,24 @@ fn renderOpcodes(...@@ -363,19 +570,24 @@ fn renderOpcodes(
363 try writer.writeAll(",\n");570 try writer.writeAll(",\n");
364 }571 }
365572
366 try writer.writeAll("};\n}\n};\n");573 try writer.writeAll(
574 \\ };
575 \\}
576 \\};
577 \\
578 );
367}579}
368580
369fn renderOperandKinds(581fn renderOperandKinds(
370 writer: anytype,582 writer: anytype,
371 allocator: Allocator,583 a: Allocator,
372 kinds: []const g.OperandKind,584 kinds: []const OperandKind,
373 extended_structs: ExtendedStructSet,585 extended_structs: ExtendedStructSet,
374) !void {586) !void {
375 for (kinds) |kind| {587 for (kinds) |kind| {
376 switch (kind.category) {588 switch (kind.category) {
377 .ValueEnum => try renderValueEnum(writer, allocator, kind, extended_structs),589 .ValueEnum => try renderValueEnum(writer, a, kind, extended_structs),
378 .BitEnum => try renderBitEnum(writer, allocator, kind, extended_structs),590 .BitEnum => try renderBitEnum(writer, a, kind, extended_structs),
379 else => {},591 else => {},
380 }592 }
381 }593 }
...@@ -383,20 +595,26 @@ fn renderOperandKinds(...@@ -383,20 +595,26 @@ fn renderOperandKinds(
383595
384fn renderValueEnum(596fn renderValueEnum(
385 writer: anytype,597 writer: anytype,
386 allocator: Allocator,598 a: Allocator,
387 enumeration: g.OperandKind,599 enumeration: OperandKind,
388 extended_structs: ExtendedStructSet,600 extended_structs: ExtendedStructSet,
389) !void {601) !void {
390 const enumerants = enumeration.enumerants orelse return error.InvalidRegistry;602 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);
393 try enum_map.ensureTotalCapacity(enumerants.len);605 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);
396 try aliases.ensureTotalCapacity(enumerants.len);608 try aliases.ensureTotalCapacity(enumerants.len);
397609
398 for (enumerants, 0..) |enumerant, i| {610 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);
400 if (!result.found_existing) {618 if (!result.found_existing) {
401 result.value_ptr.* = i;619 result.value_ptr.* = i;
402 continue;620 continue;
...@@ -422,9 +640,12 @@ fn renderValueEnum(...@@ -422,9 +640,12 @@ fn renderValueEnum(
422640
423 for (enum_indices) |i| {641 for (enum_indices) |i| {
424 const enumerant = enumerants[i];642 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 }
428 }649 }
429650
430 try writer.writeByte('\n');651 try writer.writeByte('\n');
...@@ -454,8 +675,8 @@ fn renderValueEnum(...@@ -454,8 +675,8 @@ fn renderValueEnum(
454675
455fn renderBitEnum(676fn renderBitEnum(
456 writer: anytype,677 writer: anytype,
457 allocator: Allocator,678 a: Allocator,
458 enumeration: g.OperandKind,679 enumeration: OperandKind,
459 extended_structs: ExtendedStructSet,680 extended_structs: ExtendedStructSet,
460) !void {681) !void {
461 try writer.print("pub const {s} = packed struct {{\n", .{std.zig.fmtId(enumeration.kind)});682 try writer.print("pub const {s} = packed struct {{\n", .{std.zig.fmtId(enumeration.kind)});
...@@ -463,7 +684,7 @@ fn renderBitEnum(...@@ -463,7 +684,7 @@ fn renderBitEnum(
463 var flags_by_bitpos = [_]?usize{null} ** 32;684 var flags_by_bitpos = [_]?usize{null} ** 32;
464 const enumerants = enumeration.enumerants orelse return error.InvalidRegistry;685 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);
467 try aliases.ensureTotalCapacity(enumerants.len);688 try aliases.ensureTotalCapacity(enumerants.len);
468689
469 for (enumerants, 0..) |enumerant, i| {690 for (enumerants, 0..) |enumerant, i| {
...@@ -471,6 +692,10 @@ fn renderBitEnum(...@@ -471,6 +692,10 @@ fn renderBitEnum(
471 const value = try parseHexInt(enumerant.value.bitflag);692 const value = try parseHexInt(enumerant.value.bitflag);
472 if (value == 0) {693 if (value == 0) {
473 continue; // Skip 'none' items694 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;
474 }699 }
475700
476 std.debug.assert(@popCount(value) == 1);701 std.debug.assert(@popCount(value) == 1);
...@@ -540,7 +765,7 @@ fn renderOperand(...@@ -540,7 +765,7 @@ fn renderOperand(
540 mask,765 mask,
541 },766 },
542 field_name: []const u8,767 field_name: []const u8,
543 parameters: []const g.Operand,768 parameters: []const Operand,
544 extended_structs: ExtendedStructSet,769 extended_structs: ExtendedStructSet,
545) !void {770) !void {
546 if (kind == .instruction) {771 if (kind == .instruction) {
...@@ -606,7 +831,7 @@ fn renderOperand(...@@ -606,7 +831,7 @@ fn renderOperand(
606 try writer.writeAll(",\n");831 try writer.writeAll(",\n");
607}832}
608833
609fn renderFieldName(writer: anytype, operands: []const g.Operand, field_index: usize) !void {834fn renderFieldName(writer: anytype, operands: []const Operand, field_index: usize) !void {
610 const operand = operands[field_index];835 const operand = operands[field_index];
611836
612 // Should be enough for all names - adjust as needed.837 // Should be enough for all names - adjust as needed.
...@@ -673,16 +898,16 @@ fn parseHexInt(text: []const u8) !u31 {...@@ -673,16 +898,16 @@ fn parseHexInt(text: []const u8) !u31 {
673 return try std.fmt.parseInt(u31, text[prefix.len..], 16);898 return try std.fmt.parseInt(u31, text[prefix.len..], 16);
674}899}
675900
676fn usageAndExit(file: std.fs.File, arg0: []const u8, code: u8) noreturn {901fn usageAndExit(arg0: []const u8, code: u8) noreturn {
677 file.writer().print(902 std.io.getStdErr().writer().print(
678 \\Usage: {s} <spirv json spec>903 \\Usage: {s} <SPIRV-Headers repository path> <path/to/zig/src/codegen/spirv/extinst.zig.grammar.json>
679 \\904 \\
680 \\Generates Zig bindings for a SPIR-V specification .json (either core or905 \\Generates Zig bindings for SPIR-V specifications found in the SPIRV-Headers
681 \\extinst versions). The result, printed to stdout, should be used to update906 \\repository. The result, printed to stdout, should be used to update
682 \\files in src/codegen/spirv. Don't forget to format the output.907 \\files in src/codegen/spirv. Don't forget to format the output.
683 \\908 \\
684 \\The relevant specifications can be obtained from the SPIR-V registry:909 \\<SPIRV-Headers repository path> should point to a clone of
685 \\https://github.com/KhronosGroup/SPIRV-Headers/blob/master/include/spirv/unified1/910 \\https://github.com/KhronosGroup/SPIRV-Headers/
686 \\911 \\
687 , .{arg0}) catch std.process.exit(1);912 , .{arg0}) catch std.process.exit(1);
688 std.process.exit(code);913 std.process.exit(code);
tools/spirv/grammar.zig+4-2
...@@ -22,8 +22,8 @@ pub const CoreRegistry = struct {...@@ -22,8 +22,8 @@ pub const CoreRegistry = struct {
22};22};
2323
24pub const ExtensionRegistry = struct {24pub const ExtensionRegistry = struct {
25 copyright: [][]const u8,25 copyright: ?[][]const u8 = null,
26 version: u32,26 version: ?u32 = null,
27 revision: u32,27 revision: u32,
28 instructions: []Instruction,28 instructions: []Instruction,
29 operand_kinds: []OperandKind = &[_]OperandKind{},29 operand_kinds: []OperandKind = &[_]OperandKind{},
...@@ -40,6 +40,8 @@ pub const Instruction = struct {...@@ -40,6 +40,8 @@ pub const Instruction = struct {
40 opcode: u32,40 opcode: u32,
41 operands: []Operand = &[_]Operand{},41 operands: []Operand = &[_]Operand{},
42 capabilities: [][]const u8 = &[_][]const u8{},42 capabilities: [][]const u8 = &[_][]const u8{},
43 // DebugModuleINTEL has this...
44 capability: ?[]const u8 = null,
43 extensions: [][]const u8 = &[_][]const u8{},45 extensions: [][]const u8 = &[_][]const u8{},
44 version: ?[]const u8 = null,46 version: ?[]const u8 = null,
4547