forked from mirror/vulkan-zig
implements default for feature structs
This commit is contained in:
@@ -205,6 +205,18 @@ fn parseContainer(allocator: *Allocator, ty: *xml.Element, is_union: bool) !regi
|
|||||||
|
|
||||||
members = allocator.shrink(members, i);
|
members = allocator.shrink(members, i);
|
||||||
|
|
||||||
|
var maybe_extends: ?[][]const u8 = null;
|
||||||
|
if (ty.getAttribute("structextends")) |extends| {
|
||||||
|
const n_structs = std.mem.count(u8, extends, ",") + 1;
|
||||||
|
maybe_extends = try allocator.alloc([]const u8, n_structs);
|
||||||
|
var struct_extends = std.mem.split(extends, ",");
|
||||||
|
var j: usize = 0;
|
||||||
|
while (struct_extends.next()) |struct_extend| {
|
||||||
|
maybe_extends.?[j] = struct_extend;
|
||||||
|
j += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
it = ty.findChildrenByTag("member");
|
it = ty.findChildrenByTag("member");
|
||||||
for (members) |*member| {
|
for (members) |*member| {
|
||||||
const member_elem = it.next().?;
|
const member_elem = it.next().?;
|
||||||
@@ -218,6 +230,7 @@ fn parseContainer(allocator: *Allocator, ty: *xml.Element, is_union: bool) !regi
|
|||||||
.stype = maybe_stype,
|
.stype = maybe_stype,
|
||||||
.fields = members,
|
.fields = members,
|
||||||
.is_union = is_union,
|
.is_union = is_union,
|
||||||
|
.extends = maybe_extends,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ pub const Container = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
stype: ?[]const u8,
|
stype: ?[]const u8,
|
||||||
|
extends: ?[]const []const u8,
|
||||||
fields: []Field,
|
fields: []Field,
|
||||||
is_union: bool,
|
is_union: bool,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -728,9 +728,20 @@ fn Renderer(comptime WriterType: type) type {
|
|||||||
|
|
||||||
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(container.extends)) {
|
||||||
|
try self.writer.writeAll(" = FALSE");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn isFeatureStruct(maybe_extends: ?[]const []const u8) bool {
|
||||||
|
if (maybe_extends) |extends| {
|
||||||
|
return for (extends) |extend| {
|
||||||
|
if (mem.eql(u8, extend, "VkDeviceCreateInfo")) break true;
|
||||||
|
} else false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
fn renderEnumFieldName(self: *Self, name: []const u8, field_name: []const u8) !void {
|
fn renderEnumFieldName(self: *Self, name: []const u8, field_name: []const u8) !void {
|
||||||
try self.writeIdentifierWithCase(.snake, try self.extractEnumFieldName(name, field_name));
|
try self.writeIdentifierWithCase(.snake, try self.extractEnumFieldName(name, field_name));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user