From e51a94b3e43c91e507e0aa57295007a810edf44d Mon Sep 17 00:00:00 2001 From: 0xShawn Date: Sat, 12 Jul 2025 13:57:59 -0700 Subject: [PATCH 1/2] Fix semaphore reuse validation error by waiting on all fences --- Walnut/src/Walnut/Application.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Walnut/src/Walnut/Application.cpp b/Walnut/src/Walnut/Application.cpp index 583b1066f..b2648b595 100644 --- a/Walnut/src/Walnut/Application.cpp +++ b/Walnut/src/Walnut/Application.cpp @@ -663,6 +663,17 @@ namespace Walnut { wd->ClearValue.color.float32[3] = clear_color.w; if (!main_is_minimized) FrameRender(wd, main_draw_data); + + + // Wait for all fences to avoid semaphore reuse issues in multi-viewport mode + for (uint32_t i = 0; i < g_MainWindowData.ImageCount; i++) + { + ImGui_ImplVulkanH_Frame* frame = &g_MainWindowData.Frames[i]; + if (frame->Fence != VK_NULL_HANDLE) + { + vkWaitForFences(g_Device, 1, &frame->Fence, VK_TRUE, UINT64_MAX); + } + } // Update and Render additional Platform Windows if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) From d43866814a5ce0e27e9efbb90a1142e81cbc97f5 Mon Sep 17 00:00:00 2001 From: 0xShawn Date: Sat, 12 Jul 2025 14:20:47 -0700 Subject: [PATCH 2/2] Added Error Checking as per CodeRabbit --- Walnut/src/Walnut/Application.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Walnut/src/Walnut/Application.cpp b/Walnut/src/Walnut/Application.cpp index b2648b595..0b793cc06 100644 --- a/Walnut/src/Walnut/Application.cpp +++ b/Walnut/src/Walnut/Application.cpp @@ -671,7 +671,8 @@ namespace Walnut { ImGui_ImplVulkanH_Frame* frame = &g_MainWindowData.Frames[i]; if (frame->Fence != VK_NULL_HANDLE) { - vkWaitForFences(g_Device, 1, &frame->Fence, VK_TRUE, UINT64_MAX); + VkResult err = vkWaitForFences(g_Device, 1, &frame->Fence, VK_TRUE, UINT64_MAX); + check_vk_result(err); } }