From b92c7d65f1d70aa70773bca32d0f675b4af167dd Mon Sep 17 00:00:00 2001 From: patchzyy <64382339+patchzyy@users.noreply.github.com> Date: Sun, 18 Oct 2026 11:59:07 +0200 Subject: [PATCH] Synchronize surface release with GPU idle --- aurora-main/lib/webgpu/gpu.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/aurora-main/lib/webgpu/gpu.cpp b/aurora-main/lib/webgpu/gpu.cpp index 37515f2..2e01e39 100644 --- a/aurora-main/lib/webgpu/gpu.cpp +++ b/aurora-main/lib/webgpu/gpu.cpp @@ -893,9 +893,14 @@ void release_surface() noexcept { } g_surface = {}; if (hadSurface && g_instance && g_device && g_queue) { + // Retired swapchain is freed after a later submission completes and the device ticks. + submit_staging_commands(g_device.CreateCommandEncoder().Finish()); const auto future = g_queue.OnSubmittedWorkDone( wgpu::CallbackMode::WaitAnyOnly, [](wgpu::QueueWorkDoneStatus, wgpu::StringView) {}); - g_instance.WaitAny(future, 1000000000); + if (const auto status = g_instance.WaitAny(future, 1000000000); status != wgpu::WaitStatus::Success) { + Log.warn("Timed out waiting for queue idle on surface release: {}", magic_enum::enum_name(status)); + } + g_device.Tick(); } }