forked from mirror/vulkan-zig
Parse & render sType from spec (fixes #3)
This commit is contained in:
@@ -171,9 +171,16 @@ fn parseContainer(allocator: *Allocator, ty: *xml.Element, is_union: bool) !regi
|
|||||||
|
|
||||||
var i: usize = 0;
|
var i: usize = 0;
|
||||||
var it = ty.findChildrenByTag("member");
|
var it = ty.findChildrenByTag("member");
|
||||||
|
var maybe_stype: ?[]const u8 = null;
|
||||||
while (it.next()) |member| {
|
while (it.next()) |member| {
|
||||||
var xctok = cparse.XmlCTokenizer.init(member);
|
var xctok = cparse.XmlCTokenizer.init(member);
|
||||||
members[i] = try cparse.parseMember(allocator, &xctok);
|
members[i] = try cparse.parseMember(allocator, &xctok);
|
||||||
|
if (mem.eql(u8, members[i].name, "sType")) {
|
||||||
|
if (member.getAttribute("values")) |stype| {
|
||||||
|
maybe_stype = stype;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,6 +201,7 @@ fn parseContainer(allocator: *Allocator, ty: *xml.Element, is_union: bool) !regi
|
|||||||
.name = name,
|
.name = name,
|
||||||
.decl_type = .{
|
.decl_type = .{
|
||||||
.container = .{
|
.container = .{
|
||||||
|
.stype = maybe_stype,
|
||||||
.fields = members,
|
.fields = members,
|
||||||
.is_union = is_union,
|
.is_union = is_union,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ pub const Container = struct {
|
|||||||
is_buffer_len: bool,
|
is_buffer_len: bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
stype: ?[]const u8,
|
||||||
fields: []Field,
|
fields: []Field,
|
||||||
is_union: bool,
|
is_union: bool,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -638,7 +638,7 @@ fn Renderer(comptime WriterType: type) type {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try self.renderTypeInfo(field.field_type);
|
try self.renderTypeInfo(field.field_type);
|
||||||
try self.renderContainerDefaultField(name, field);
|
try self.renderContainerDefaultField(container, field);
|
||||||
try self.writer.writeAll(", ");
|
try self.writer.writeAll(", ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -646,12 +646,21 @@ fn Renderer(comptime WriterType: type) type {
|
|||||||
try self.writer.writeAll("};\n");
|
try self.writer.writeAll("};\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn renderContainerDefaultField(self: *Self, name: []const u8, field: reg.Container.Field) !void {
|
fn renderContainerDefaultField(self: *Self, container: reg.Container, field: reg.Container.Field) !void {
|
||||||
if (mem.eql(u8, field.name, "pNext")) {
|
if (mem.eql(u8, field.name, "pNext")) {
|
||||||
try self.writer.writeAll(" = null");
|
try self.writer.writeAll(" = null");
|
||||||
} else if (mem.eql(u8, field.name, "sType")) {
|
} else if (mem.eql(u8, field.name, "sType")) {
|
||||||
|
if (container.stype == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const stype = container.stype.?;
|
||||||
|
if (!mem.startsWith(u8, stype, "VK_STRUCTURE_TYPE_")) {
|
||||||
|
return error.InvalidRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
try self.writer.writeAll(" = .");
|
try self.writer.writeAll(" = .");
|
||||||
try self.writeIdentifierWithCase(.snake, trimVkNamespace(name));
|
try self.writeIdentifierWithCase(.snake, stype["VK_STRUCTURE_TYPE_".len ..]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user