diff --git a/src/Window.zig b/src/Window.zig index 58864a1..f4d6039 100644 --- a/src/Window.zig +++ b/src/Window.zig @@ -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); }