compat: support latest zig, vulkan-zig

This commit is contained in:
David Allemang
2024-06-05 16:04:50 -04:00
parent f3c94fbdfa
commit f58107ad77
7 changed files with 42 additions and 114 deletions

View File

@@ -3,8 +3,7 @@ const builtin = @import("builtin");
const vk = @import("vk");
const c = @import("../c.zig");
const Base = @import("Base.zig");
const gfx = @import("../gfx.zig");
const Self = @This();
@@ -16,26 +15,21 @@ const app_info: vk.ApplicationInfo = .{
.api_version = vk.API_VERSION_1_3,
};
pub const use_debug_messenger = switch (builtin.mode) {
.Debug, .ReleaseSafe => true,
.ReleaseSmall, .ReleaseFast => false,
};
ref: vk.Instance,
vki: Wrapper,
base: *const Base,
base: *const gfx.Base,
messenger: if (use_debug_messenger) vk.DebugUtilsMessengerEXT else void,
messenger: if (gfx.use_debug_messenger) vk.DebugUtilsMessengerEXT else void,
pub fn init(
base: *const Base,
base: *const gfx.Base,
) !Self {
var exts: std.BoundedArray([*:0]const u8, 32) = .{};
var layers: std.BoundedArray([*:0]const u8, 32) = .{};
if (use_debug_messenger) {
if (gfx.use_debug_messenger) {
try exts.appendSlice(&.{
vk.extension_info.ext_debug_utils.name,
vk.extensions.ext_debug_utils.name,
});
try layers.appendSlice(&.{
@@ -71,18 +65,18 @@ pub fn init(
.pp_enabled_extension_names = &exts.buffer,
.enabled_layer_count = @intCast(layers.len),
.pp_enabled_layer_names = &layers.buffer,
.p_next = if (use_debug_messenger) &mci else null,
.p_next = if (gfx.use_debug_messenger) &mci else null,
}, null);
const vki = try Wrapper.load(ref, base.vkb.dispatch.vkGetInstanceProcAddr);
errdefer vki.destroyInstance(ref, null);
const messenger = if (use_debug_messenger)
const messenger = if (gfx.use_debug_messenger)
try vki.createDebugUtilsMessengerEXT(ref, &mci, null)
else
void{};
errdefer if (use_debug_messenger)
errdefer if (gfx.use_debug_messenger)
vki.destroyDebugUtilsMessengerEXT(ref, messenger, null);
return .{
@@ -94,28 +88,12 @@ pub fn init(
}
pub fn deinit(self: Self) void {
if (use_debug_messenger)
if (gfx.use_debug_messenger)
self.vki.destroyDebugUtilsMessengerEXT(self.ref, self.messenger, null);
self.vki.destroyInstance(self.ref, null);
}
pub const Wrapper = vk.InstanceWrapper(.{
.destroyInstance = true,
.createDevice = true,
.destroySurfaceKHR = true,
.enumeratePhysicalDevices = true,
.getPhysicalDeviceProperties = true,
.enumerateDeviceExtensionProperties = true,
.getPhysicalDeviceSurfaceFormatsKHR = true,
.getPhysicalDeviceSurfacePresentModesKHR = true,
.getPhysicalDeviceSurfaceCapabilitiesKHR = true,
.getPhysicalDeviceQueueFamilyProperties = true,
.getPhysicalDeviceSurfaceSupportKHR = true,
.getPhysicalDeviceMemoryProperties = true,
.getDeviceProcAddr = true,
.createDebugUtilsMessengerEXT = use_debug_messenger,
.destroyDebugUtilsMessengerEXT = use_debug_messenger,
});
pub const Wrapper = vk.InstanceWrapper(gfx.apis);
pub fn debug_callback(
msg_severity: vk.DebugUtilsMessageSeverityFlagsEXT,
@@ -154,8 +132,8 @@ pub fn debug_callback(
var bw = std.io.bufferedWriter(stderr);
const writer = bw.writer();
std.debug.getStderrMutex().lock();
defer std.debug.getStderrMutex().unlock();
std.debug.lockStdErr();
defer std.debug.unlockStdErr();
nosuspend {
writer.print("vk-{s}{s} {s}\n", .{ severity_prefix, type_prefix, message }) catch return vk.FALSE;
bw.flush() catch return vk.FALSE;