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