comptime USE_DEBUG_LAYERS

This commit is contained in:
David Allemang
2024-03-21 11:49:21 -04:00
parent 85af42ffc1
commit 0d183d79a0

View File

@@ -5,6 +5,11 @@ const c = @import("c.zig");
const vk = @import("vk");
const builtin = @import("builtin");
const USE_DEBUG_LAYERS = switch (builtin.mode) {
.ReleaseSafe, .Debug => true,
.ReleaseSmall, .ReleaseFast => false,
};
const BaseDispatch = vk.BaseWrapper(.{
.createInstance = true,
.getInstanceProcAddr = true,
@@ -13,9 +18,9 @@ const BaseDispatch = vk.BaseWrapper(.{
});
const InstanceDispatch = vk.InstanceWrapper(.{
.destroyInstance = true,
.createDebugUtilsMessengerEXT = true,
.destroyDebugUtilsMessengerEXT = true,
.submitDebugUtilsMessageEXT = true,
.createDebugUtilsMessengerEXT = USE_DEBUG_LAYERS,
.destroyDebugUtilsMessengerEXT = USE_DEBUG_LAYERS,
.submitDebugUtilsMessageEXT = USE_DEBUG_LAYERS,
});
const DeviceDispatch = vk.DeviceWrapper(.{});
@@ -28,7 +33,7 @@ vkd: DeviceDispatch,
window: *c.GLFWwindow,
instance: vk.Instance,
messenger: vk.DebugUtilsMessengerEXT,
messenger: if (USE_DEBUG_LAYERS) vk.DebugUtilsMessengerEXT else void,
pub fn mainLoop(self: Self) void {
while (c.glfwWindowShouldClose(self.window) == 0) : (c.glfwPollEvents()) {
@@ -116,12 +121,9 @@ fn initVulkan(self: *Self) !void {
var layers = std.ArrayList([*:0]const u8).init(self.allocator);
defer layers.deinit();
switch (builtin.mode) {
.ReleaseSafe, .Debug => {
try layers.append("VK_LAYER_KHRONOS_validation");
try exts.append("VK_EXT_debug_utils");
},
.ReleaseSmall, .ReleaseFast => {},
if (USE_DEBUG_LAYERS) {
try layers.append("VK_LAYER_KHRONOS_validation");
try exts.append("VK_EXT_debug_utils");
}
var glfw_ext_count: u32 = 0;
@@ -194,19 +196,31 @@ fn initVulkan(self: *Self) !void {
.pp_enabled_extension_names = exts.items.ptr,
.enabled_layer_count = @intCast(layers.items.len),
.pp_enabled_layer_names = layers.items.ptr,
.p_next = &debug_create_info,
.p_next = if (USE_DEBUG_LAYERS) &debug_create_info else null,
};
self.instance = try self.vkb.createInstance(&create_info, null);
self.vki = try InstanceDispatch.load(self.instance, self.vkb.dispatch.vkGetInstanceProcAddr);
errdefer self.vki.destroyInstance(self.instance, null);
self.messenger = try self.vki.createDebugUtilsMessengerEXT(self.instance, &debug_create_info, null);
errdefer self.vki.destroyDebugUtilsMessengerEXT(self.instance, self.messenger, null);
if (USE_DEBUG_LAYERS) self.messenger = try self.vki.createDebugUtilsMessengerEXT(
self.instance,
&debug_create_info,
null,
);
errdefer if (USE_DEBUG_LAYERS) self.vki.destroyDebugUtilsMessengerEXT(
self.instance,
self.messenger,
null,
);
}
fn deinitVulkan(self: Self) void {
self.vki.destroyDebugUtilsMessengerEXT(self.instance, self.messenger, null);
if (USE_DEBUG_LAYERS) self.vki.destroyDebugUtilsMessengerEXT(
self.instance,
self.messenger,
null,
);
self.vki.destroyInstance(self.instance, null);
}