Actual deleak, debug object names
This commit is contained in:
@@ -447,6 +447,65 @@ pub fn allocate(self: *const Engine, memory_requirements: vk.MemoryRequirements,
|
||||
return error.NoSuitableMemoryType;
|
||||
}
|
||||
|
||||
pub fn setObjectName(self: *const Engine, handle: anytype, comptime fmt: []const u8, args: anytype) void {
|
||||
if (debug) {
|
||||
const HandleType = @TypeOf(handle);
|
||||
const type_name = @typeName(HandleType);
|
||||
|
||||
if (@as(std.builtin.TypeId, @typeInfo(HandleType)) != .@"enum") {
|
||||
@compileError("Cannot set object name for a handle of type " ++ type_name ++ ", which is not an enum.");
|
||||
}
|
||||
|
||||
const object_type: vk.ObjectType = switch (HandleType) {
|
||||
vk.Instance => .instance,
|
||||
vk.PhysicalDevice => .physical_device,
|
||||
vk.Device => .device,
|
||||
vk.Queue => .queue,
|
||||
vk.Semaphore => .semaphore,
|
||||
vk.CommandBuffer => .command_buffer,
|
||||
vk.Fence => .fence,
|
||||
vk.DeviceMemory => .device_memory,
|
||||
vk.Buffer => .buffer,
|
||||
vk.Image => .image,
|
||||
vk.Event => .event,
|
||||
vk.QueryPool => .query_pool,
|
||||
vk.BufferView => .buffer_view,
|
||||
vk.ImageView => .image_view,
|
||||
vk.ShaderModule => .shader_module,
|
||||
vk.PipelineCache => .pipeline_cache,
|
||||
vk.PipelineLayout => .pipeline_layout,
|
||||
vk.RenderPass => .render_pass,
|
||||
vk.Pipeline => .pipeline,
|
||||
vk.DescriptorSetLayout => .descriptor_set_layout,
|
||||
vk.Sampler => .sampler,
|
||||
vk.DescriptorPool => .descriptor_pool,
|
||||
vk.DescriptorSet => .descriptor_set,
|
||||
vk.Framebuffer => .framebuffer,
|
||||
vk.CommandPool => .command_pool,
|
||||
vk.SurfaceKHR => .surface_khr,
|
||||
vk.SwapchainKHR => .swapchain_khr,
|
||||
else => @compileError("Unsupported type " ++ type_name ++ " for setting and object name"),
|
||||
};
|
||||
|
||||
const handle_value: u64 = @intFromEnum(handle);
|
||||
|
||||
var buf: [256]u8 = undefined;
|
||||
const name = std.fmt.bufPrintZ(&buf, fmt, args) catch |err| {
|
||||
std.log.debug("Failed to set object name for {s}#{X}: {s}", .{ type_name, handle_value, @errorName(err) });
|
||||
return;
|
||||
};
|
||||
|
||||
self.device.setDebugUtilsObjectNameEXT(&.{
|
||||
.object_type = object_type,
|
||||
.object_handle = handle_value,
|
||||
.p_object_name = name.ptr,
|
||||
}) catch |err| {
|
||||
std.log.debug("Failed to set object name for {s}#{X}: {s}", .{ type_name, handle_value, @errorName(err) });
|
||||
return;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
fn debugUtilsMessengerCallback(
|
||||
severity: vk.DebugUtilsMessageSeverityFlagsEXT,
|
||||
message_type: vk.DebugUtilsMessageTypeFlagsEXT,
|
||||
|
||||
Reference in New Issue
Block a user