authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-09-16 00:58:22+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-09-23 12:36:44-07:00
logaeaaa953a04c42fb2068be559155e237f7e931d2
tree6645d5da02da790afa79400f009d16e2eef7fc30
parentece52640ebeac867e0f69116f99bc14f5590bb9a

spirv: assign type names to (error) unions


2 files changed, 14 insertions(+), 5 deletions(-)

src/codegen/spirv.zig+12-3
...@@ -1178,6 +1178,14 @@ pub const DeclGen = struct {...@@ -1178,6 +1178,14 @@ pub const DeclGen = struct {
1178 }1178 }
1179 }1179 }
11801180
1181 // Turn a Zig type's name into a cache reference.
1182 fn resolveTypeName(self: *DeclGen, ty: Type) !CacheString {
1183 var name = std.ArrayList(u8).init(self.gpa);
1184 defer name.deinit();
1185 try ty.print(name.writer(), self.module);
1186 return try self.spv.resolveString(name.items);
1187 }
1188
1181 /// Turn a Zig type into a SPIR-V Type, and return its type result-id.1189 /// Turn a Zig type into a SPIR-V Type, and return its type result-id.
1182 fn resolveTypeId(self: *DeclGen, ty: Type) !IdResultType {1190 fn resolveTypeId(self: *DeclGen, ty: Type) !IdResultType {
1183 const type_ref = try self.resolveType(ty, .direct);1191 const type_ref = try self.resolveType(ty, .direct);
...@@ -1289,6 +1297,7 @@ pub const DeclGen = struct {...@@ -1289,6 +1297,7 @@ pub const DeclGen = struct {
1289 }1297 }
12901298
1291 const ty_ref = try self.spv.resolve(.{ .struct_type = .{1299 const ty_ref = try self.spv.resolve(.{ .struct_type = .{
1300 .name = try self.resolveTypeName(ty),
1292 .member_types = member_types.slice(),1301 .member_types = member_types.slice(),
1293 .member_names = member_names.slice(),1302 .member_names = member_names.slice(),
1294 } });1303 } });
...@@ -1443,6 +1452,7 @@ pub const DeclGen = struct {...@@ -1443,6 +1452,7 @@ pub const DeclGen = struct {
1443 }1452 }
14441453
1445 const ty_ref = try self.spv.resolve(.{ .struct_type = .{1454 const ty_ref = try self.spv.resolve(.{ .struct_type = .{
1455 .name = try self.resolveTypeName(ty),
1446 .member_types = member_types[0..member_index],1456 .member_types = member_types[0..member_index],
1447 } });1457 } });
14481458
...@@ -1472,10 +1482,8 @@ pub const DeclGen = struct {...@@ -1472,10 +1482,8 @@ pub const DeclGen = struct {
1472 try member_names.append(try self.spv.resolveString(field_name));1482 try member_names.append(try self.spv.resolveString(field_name));
1473 }1483 }
14741484
1475 const name = ip.stringToSlice(try mod.declPtr(struct_type.decl.unwrap().?).getFullyQualifiedName(mod));
1476
1477 const ty_ref = try self.spv.resolve(.{ .struct_type = .{1485 const ty_ref = try self.spv.resolve(.{ .struct_type = .{
1478 .name = try self.spv.resolveString(name),1486 .name = try self.resolveTypeName(ty),
1479 .member_types = member_types.items,1487 .member_types = member_types.items,
1480 .member_names = member_names.items,1488 .member_names = member_names.items,
1481 } });1489 } });
...@@ -1555,6 +1563,7 @@ pub const DeclGen = struct {...@@ -1555,6 +1563,7 @@ pub const DeclGen = struct {
1555 }1563 }
15561564
1557 const ty_ref = try self.spv.resolve(.{ .struct_type = .{1565 const ty_ref = try self.spv.resolve(.{ .struct_type = .{
1566 .name = try self.resolveTypeName(ty),
1558 .member_types = &member_types,1567 .member_types = &member_types,
1559 .member_names = &member_names,1568 .member_names = &member_names,
1560 } });1569 } });
src/link/SpirV.zig+2-2
...@@ -111,7 +111,7 @@ pub fn updateFunc(self: *SpirV, module: *Module, func_index: InternPool.Index, a...@@ -111,7 +111,7 @@ pub fn updateFunc(self: *SpirV, module: *Module, func_index: InternPool.Index, a
111111
112 const func = module.funcInfo(func_index);112 const func = module.funcInfo(func_index);
113 const decl = module.declPtr(func.owner_decl);113 const decl = module.declPtr(func.owner_decl);
114 log.debug("lowering function {s}", .{ module.intern_pool.stringToSlice(decl.name) });114 log.debug("lowering function {s}", .{module.intern_pool.stringToSlice(decl.name)});
115115
116 var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link);116 var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link);
117 defer decl_gen.deinit();117 defer decl_gen.deinit();
...@@ -127,7 +127,7 @@ pub fn updateDecl(self: *SpirV, module: *Module, decl_index: Module.Decl.Index)...@@ -127,7 +127,7 @@ pub fn updateDecl(self: *SpirV, module: *Module, decl_index: Module.Decl.Index)
127 }127 }
128128
129 const decl = module.declPtr(decl_index);129 const decl = module.declPtr(decl_index);
130 log.debug("lowering declaration {s}", .{ module.intern_pool.stringToSlice(decl.name) });130 log.debug("lowering declaration {s}", .{module.intern_pool.stringToSlice(decl.name)});
131131
132 var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link);132 var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link);
133 defer decl_gen.deinit();133 defer decl_gen.deinit();