diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index 67707925fc..1ebc09d315 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -1178,6 +1178,14 @@ pub const DeclGen = struct { } } + // Turn a Zig type's name into a cache reference. + fn resolveTypeName(self: *DeclGen, ty: Type) !CacheString { + var name = std.ArrayList(u8).init(self.gpa); + defer name.deinit(); + try ty.print(name.writer(), self.module); + return try self.spv.resolveString(name.items); + } + /// Turn a Zig type into a SPIR-V Type, and return its type result-id. fn resolveTypeId(self: *DeclGen, ty: Type) !IdResultType { const type_ref = try self.resolveType(ty, .direct); @@ -1289,6 +1297,7 @@ pub const DeclGen = struct { } const ty_ref = try self.spv.resolve(.{ .struct_type = .{ + .name = try self.resolveTypeName(ty), .member_types = member_types.slice(), .member_names = member_names.slice(), } }); @@ -1443,6 +1452,7 @@ pub const DeclGen = struct { } const ty_ref = try self.spv.resolve(.{ .struct_type = .{ + .name = try self.resolveTypeName(ty), .member_types = member_types[0..member_index], } }); @@ -1472,10 +1482,8 @@ pub const DeclGen = struct { try member_names.append(try self.spv.resolveString(field_name)); } - const name = ip.stringToSlice(try mod.declPtr(struct_type.decl.unwrap().?).getFullyQualifiedName(mod)); - const ty_ref = try self.spv.resolve(.{ .struct_type = .{ - .name = try self.spv.resolveString(name), + .name = try self.resolveTypeName(ty), .member_types = member_types.items, .member_names = member_names.items, } }); @@ -1555,6 +1563,7 @@ pub const DeclGen = struct { } const ty_ref = try self.spv.resolve(.{ .struct_type = .{ + .name = try self.resolveTypeName(ty), .member_types = &member_types, .member_names = &member_names, } }); diff --git a/src/link/SpirV.zig b/src/link/SpirV.zig index bf133bbb16..7ad4c846d4 100644 --- a/src/link/SpirV.zig +++ b/src/link/SpirV.zig @@ -111,7 +111,7 @@ pub fn updateFunc(self: *SpirV, module: *Module, func_index: InternPool.Index, a const func = module.funcInfo(func_index); const decl = module.declPtr(func.owner_decl); - log.debug("lowering function {s}", .{ module.intern_pool.stringToSlice(decl.name) }); + log.debug("lowering function {s}", .{module.intern_pool.stringToSlice(decl.name)}); var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link); defer decl_gen.deinit(); @@ -127,7 +127,7 @@ pub fn updateDecl(self: *SpirV, module: *Module, decl_index: Module.Decl.Index) } const decl = module.declPtr(decl_index); - log.debug("lowering declaration {s}", .{ module.intern_pool.stringToSlice(decl.name) }); + log.debug("lowering declaration {s}", .{module.intern_pool.stringToSlice(decl.name)}); var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link); defer decl_gen.deinit();