dont write default structure type if there is none

This commit is contained in:
Robin Voetter
2022-10-07 01:34:49 +02:00
parent 08a72b582d
commit a21db9e2b5

View File

@@ -181,6 +181,7 @@ fn Renderer(comptime WriterType: type) type {
registry: *const reg.Registry, registry: *const reg.Registry,
id_renderer: *IdRenderer, id_renderer: *IdRenderer,
declarations_by_name: std.StringHashMap(*const reg.DeclarationType), declarations_by_name: std.StringHashMap(*const reg.DeclarationType),
structure_types: std.StringHashMap(void),
fn init(writer: WriterType, allocator: Allocator, registry: *const reg.Registry, id_renderer: *IdRenderer) !Self { fn init(writer: WriterType, allocator: Allocator, registry: *const reg.Registry, id_renderer: *IdRenderer) !Self {
var declarations_by_name = std.StringHashMap(*const reg.DeclarationType).init(allocator); var declarations_by_name = std.StringHashMap(*const reg.DeclarationType).init(allocator);
@@ -195,12 +196,25 @@ fn Renderer(comptime WriterType: type) type {
result.value_ptr.* = &decl.decl_type; result.value_ptr.* = &decl.decl_type;
} }
const vk_structure_type_decl = declarations_by_name.get("VkStructureType") orelse return error.InvalidRegistry;
const vk_structure_type = switch (vk_structure_type_decl.*) {
.enumeration => |e| e,
else => return error.InvalidRegistry,
};
var structure_types = std.StringHashMap(void).init(allocator);
errdefer structure_types.deinit();
for (vk_structure_type.fields) |field| {
try structure_types.put(field.name, {});
}
return Self{ return Self{
.writer = writer, .writer = writer,
.allocator = allocator, .allocator = allocator,
.registry = registry, .registry = registry,
.id_renderer = id_renderer, .id_renderer = id_renderer,
.declarations_by_name = declarations_by_name, .declarations_by_name = declarations_by_name,
.structure_types = structure_types,
}; };
} }
@@ -748,6 +762,10 @@ fn Renderer(comptime WriterType: type) type {
return error.InvalidRegistry; return error.InvalidRegistry;
} }
// Some structures dont have a VK_STRUCTURE_TYPE for some reason apparently...
// See https://github.com/KhronosGroup/Vulkan-Docs/issues/1225
_ = self.structure_types.get(stype) orelse return;
try self.writer.writeAll(" = ."); try self.writer.writeAll(" = .");
try self.writeIdentifierWithCase(.snake, stype["VK_STRUCTURE_TYPE_".len..]); try self.writeIdentifierWithCase(.snake, stype["VK_STRUCTURE_TYPE_".len..]);
} else if (field.field_type == .name and !container.is_union and mem.eql(u8, "VkBool32", field.field_type.name) and isFeatureStruct(name, container.extends)) { } else if (field.field_type == .name and !container.is_union and mem.eql(u8, "VkBool32", field.field_type.name) and isFeatureStruct(name, container.extends)) {