Vulkan 1.2.175 compatibility

This commit is contained in:
Robin Voetter
2021-04-13 19:52:06 +02:00
parent efb63a5cac
commit 34d30d0e64
4 changed files with 23 additions and 19 deletions

View File

@@ -107,9 +107,9 @@ pub const GraphicsContext = struct {
const app_info = vk.ApplicationInfo{ const app_info = vk.ApplicationInfo{
.p_application_name = app_name, .p_application_name = app_name,
.application_version = vk.makeVersion(0, 0, 0), .application_version = vk.makeApiVersion(0, 0, 0, 0),
.p_engine_name = app_name, .p_engine_name = app_name,
.engine_version = vk.makeVersion(0, 0, 0), .engine_version = vk.makeApiVersion(0, 0, 0, 0),
.api_version = vk.API_VERSION_1_2, .api_version = vk.API_VERSION_1_2,
}; };

View File

@@ -510,7 +510,7 @@ fn parseArrayDeclarator(xctok: *XmlCTokenizer) !?ArraySize {
return size; return size;
} }
pub fn parseVersion(xctok: *XmlCTokenizer) ![3][]const u8 { pub fn parseVersion(xctok: *XmlCTokenizer) ![4][]const u8 {
_ = try xctok.expect(.hash); _ = try xctok.expect(.hash);
const define = try xctok.expect(.id); const define = try xctok.expect(.id);
if (!mem.eql(u8, define.text, "define")) { if (!mem.eql(u8, define.text, "define")) {
@@ -519,12 +519,12 @@ pub fn parseVersion(xctok: *XmlCTokenizer) ![3][]const u8 {
const name = try xctok.expect(.name); const name = try xctok.expect(.name);
const vk_make_version = try xctok.expect(.type_name); const vk_make_version = try xctok.expect(.type_name);
if (!mem.eql(u8, vk_make_version.text, "VK_MAKE_VERSION")) { if (!mem.eql(u8, vk_make_version.text, "VK_MAKE_API_VERSION")) {
return error.NotVersion; return error.NotVersion;
} }
_ = try xctok.expect(.lparen); _ = try xctok.expect(.lparen);
var version: [3][]const u8 = undefined; var version: [4][]const u8 = undefined;
for (version) |*part, i| { for (version) |*part, i| {
if (i != 0) { if (i != 0) {
_ = try xctok.expect(.comma); _ = try xctok.expect(.comma);

View File

@@ -37,7 +37,7 @@ pub const Alias = struct {
pub const ApiConstant = struct { pub const ApiConstant = struct {
pub const Value = union(enum) { pub const Value = union(enum) {
expr: []const u8, expr: []const u8,
version: [3][]const u8, version: [4][]const u8,
}; };
name: []const u8, name: []const u8,

View File

@@ -50,16 +50,19 @@ const preamble =
\\ } \\ }
\\ }; \\ };
\\} \\}
\\pub fn makeVersion(major: u10, minor: u10, patch: u12) u32 { \\pub fn makeApiVersion(variant: u3, major: u7, minor: u10, patch: u12) u32 {
\\ return (@as(u32, major) << 22) | (@as(u32, minor) << 12) | patch; \\ return (@as(u32, variant) << 29) | (@as(u32, major) << 22) | (@as(u32, minor) << 12) | patch;
\\} \\}
\\pub fn versionMajor(version: u32) u10 { \\pub fn apiVersionVariant(version: u32) u3 {
\\ return @truncate(u10, version >> 22); \\ return @truncate(u3, version >> 29);
\\} \\}
\\pub fn versionMinor(version: u32) u10 { \\pub fn apiVersionMajor(version: u32) u7 {
\\ return @truncate(u7, version >> 22);
\\}
\\pub fn apiVersionMinor(version: u32) u10 {
\\ return @truncate(u10, version >> 12); \\ return @truncate(u10, version >> 12);
\\} \\}
\\pub fn versionPatch(version: u32) u12 { \\pub fn apiVersionPatch(version: u32) u12 {
\\ return @truncate(u12, version); \\ return @truncate(u12, version);
\\} \\}
\\ \\
@@ -74,6 +77,8 @@ const builtin_types = std.ComptimeStringMap([]const u8, .{
.{"uint16_t", @typeName(u16)}, .{"uint16_t", @typeName(u16)},
.{"uint32_t", @typeName(u32)}, .{"uint32_t", @typeName(u32)},
.{"uint64_t", @typeName(u64)}, .{"uint64_t", @typeName(u64)},
.{"int8_t", @typeName(i8)},
.{"int16_t", @typeName(i16)},
.{"int32_t", @typeName(i32)}, .{"int32_t", @typeName(i32)},
.{"int64_t", @typeName(i64)}, .{"int64_t", @typeName(i64)},
.{"size_t", @typeName(usize)}, .{"size_t", @typeName(usize)},
@@ -98,6 +103,8 @@ const foreign_types = std.ComptimeStringMap([]const u8, .{
.{"xcb_visualid_t", @typeName(u32)}, .{"xcb_visualid_t", @typeName(u32)},
.{"xcb_window_t", @typeName(u32)}, .{"xcb_window_t", @typeName(u32)},
.{"zx_handle_t", @typeName(u32)}, .{"zx_handle_t", @typeName(u32)},
.{"_screen_context", "opaque {}"},
.{"_screen_window", "opaque {}"},
}); });
fn eqlIgnoreCase(lhs: []const u8, rhs: []const u8) bool { fn eqlIgnoreCase(lhs: []const u8, rhs: []const u8) bool {
@@ -261,11 +268,8 @@ fn Renderer(comptime WriterType: type) type {
const tag = self.id_renderer.getAuthorTag(name); const tag = self.id_renderer.getAuthorTag(name);
const tagless_name = if (tag) |tag_name| name[0 .. name.len - tag_name.len] else name; const tagless_name = if (tag) |tag_name| name[0 .. name.len - tag_name.len] else name;
const maybe_last_number = mem.lastIndexOfAny(u8, tagless_name, "0123456789"); // Strip out the "version" number of a bitflag, like VkAccessFlagBits2KHR.
const base_name = if (maybe_last_number) |last_number| const base_name = std.mem.trimRight(u8, tagless_name, "0123456789");
tagless_name[0 .. last_number]
else
tagless_name;
const maybe_flag_bits_index = mem.lastIndexOf(u8, base_name, "FlagBits"); const maybe_flag_bits_index = mem.lastIndexOf(u8, base_name, "FlagBits");
if (maybe_flag_bits_index == null) { if (maybe_flag_bits_index == null) {
@@ -279,7 +283,7 @@ fn Renderer(comptime WriterType: type) type {
return BitflagName{ return BitflagName{
.base_name = base_name[0 .. base_name.len - "FlagBits".len], .base_name = base_name[0 .. base_name.len - "FlagBits".len],
.revision = if (maybe_last_number) |last_number| tagless_name[last_number..] else null, .revision = if (base_name.len != tagless_name.len) tagless_name[base_name.len..] else null,
.tag = tag, .tag = tag,
}; };
} }
@@ -447,7 +451,7 @@ fn Renderer(comptime WriterType: type) type {
switch (api_constant.value) { switch (api_constant.value) {
.expr => |expr| try self.renderApiConstantExpr(expr), .expr => |expr| try self.renderApiConstantExpr(expr),
.version => |version| { .version => |version| {
try self.writer.writeAll("makeVersion("); try self.writer.writeAll("makeApiVersion(");
for (version) |part, i| { for (version) |part, i| {
if (i != 0) { if (i != 0) {
try self.writer.writeAll(", "); try self.writer.writeAll(", ");