diff --git a/examples/swapchain.zig b/examples/swapchain.zig index e9be500..6c2dd9b 100644 --- a/examples/swapchain.zig +++ b/examples/swapchain.zig @@ -89,14 +89,13 @@ pub const Swapchain = struct { }; } - fn deinitExceptSwapchain(self: Swapchain) !void { - _ = try self.gc.vkd.queueWaitIdle(self.gc.present_queue.handle); + fn deinitExceptSwapchain(self: Swapchain) void { for (self.swap_images) |si| si.deinit(self.gc); self.gc.vkd.destroySemaphore(self.gc.dev, self.next_image_acquired, null); } pub fn deinit(self: Swapchain) void { - self.deinitExceptSwapchain() catch return; + self.deinitExceptSwapchain(); self.gc.vkd.destroySwapchainKHR(self.gc.dev, self.handle, null); } @@ -104,7 +103,7 @@ pub const Swapchain = struct { const gc = self.gc; const allocator = self.allocator; const old_handle = self.handle; - try self.deinitExceptSwapchain(); + self.deinitExceptSwapchain(); self.* = try initRecycle(gc, allocator, new_extent, old_handle); } @@ -225,6 +224,10 @@ const SwapImage = struct { } fn deinit(self: SwapImage, gc: *const GraphicsContext) void { + // Ignore any error (and the result), and still try to delete the other resources. + // If this errors, the error is likely to be triggered elsewhere anyway. + const result = gc.vkd.waitForFences(gc.dev, 1, @ptrCast([*]const vk.Fence, &self.frame_fence), vk.TRUE, std.math.maxInt(u64)); + gc.vkd.destroyImageView(gc.dev, self.view, null); gc.vkd.destroySemaphore(gc.dev, self.image_acquired, null); gc.vkd.destroySemaphore(gc.dev, self.render_finished, null);