aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/spirv.zig15
1 files changed, 12 insertions, 3 deletions
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,
} });