forked from mirror/vulkan-zig
Fix another vk.xml moment
This commit is contained in:
@@ -42,7 +42,7 @@ pub const ResourceGenStep = struct {
|
|||||||
switch (std.fs.path.sep) {
|
switch (std.fs.path.sep) {
|
||||||
std.fs.path.sep_windows => writer.writeAll("\\\\") catch unreachable,
|
std.fs.path.sep_windows => writer.writeAll("\\\\") catch unreachable,
|
||||||
std.fs.path.sep_posix => writer.writeByte(std.fs.path.sep_posix) catch unreachable,
|
std.fs.path.sep_posix => writer.writeByte(std.fs.path.sep_posix) catch unreachable,
|
||||||
else => unreachable
|
else => unreachable,
|
||||||
}
|
}
|
||||||
|
|
||||||
i = j + 1;
|
i = j + 1;
|
||||||
|
|||||||
@@ -147,10 +147,37 @@ pub const Generator = struct {
|
|||||||
try merger.merge();
|
try merger.merge();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fixupTags(self: *Generator) !void {
|
// https://github.com/KhronosGroup/Vulkan-Docs/pull/1556
|
||||||
var fixer_upper = TagFixerUpper.init(self.gpa, &self.registry, &self.id_renderer);
|
fn fixupBitFlags(self: *Generator) !void {
|
||||||
defer fixer_upper.deinit();
|
var seen_bits = std.StringArrayHashMap(void).init(&self.reg_arena.allocator);
|
||||||
try fixer_upper.fixup();
|
defer seen_bits.deinit();
|
||||||
|
|
||||||
|
for (self.registry.decls) |decl| {
|
||||||
|
const bitmask = switch (decl.decl_type) {
|
||||||
|
.bitmask => |bm| bm,
|
||||||
|
else => continue,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (bitmask.bits_enum) |bits_enum| {
|
||||||
|
try seen_bits.put(bits_enum, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var i: usize = 0;
|
||||||
|
|
||||||
|
for (self.registry.decls) |decl| {
|
||||||
|
switch (decl.decl_type) {
|
||||||
|
.enumeration => |e| {
|
||||||
|
if (e.is_bitmask and seen_bits.get(decl.name) == null)
|
||||||
|
continue;
|
||||||
|
},
|
||||||
|
else => {}
|
||||||
|
}
|
||||||
|
self.registry.decls[i] = decl;
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.registry.decls.len = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render(self: *Generator, writer: anytype) !void {
|
fn render(self: *Generator, writer: anytype) !void {
|
||||||
@@ -170,5 +197,6 @@ pub fn generate(allocator: *Allocator, spec_xml: []const u8, writer: anytype) !v
|
|||||||
defer gen.deinit();
|
defer gen.deinit();
|
||||||
|
|
||||||
try gen.mergeEnumFields();
|
try gen.mergeEnumFields();
|
||||||
|
try gen.fixupBitFlags();
|
||||||
try gen.render(writer);
|
try gen.render(writer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,12 +70,15 @@ pub const Container = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const Enum = struct {
|
pub const Enum = struct {
|
||||||
pub const Value = union(enum) { bitpos: u6, // 1 << bitpos
|
pub const Value = union(enum) {
|
||||||
|
bitpos: u6, // 1 << bitpos
|
||||||
bit_vector: i32, // Combined flags & some vendor IDs
|
bit_vector: i32, // Combined flags & some vendor IDs
|
||||||
int: i32, alias: struct {
|
int: i32,
|
||||||
|
alias: struct {
|
||||||
name: []const u8,
|
name: []const u8,
|
||||||
is_compat_alias: bool,
|
is_compat_alias: bool,
|
||||||
} };
|
},
|
||||||
|
};
|
||||||
|
|
||||||
pub const Field = struct {
|
pub const Field = struct {
|
||||||
name: []const u8,
|
name: []const u8,
|
||||||
|
|||||||
Reference in New Issue
Block a user