From cb4f33b6448d07b06c1185a526cd161333853017 Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Tue, 30 Dec 2025 21:45:16 -0500 Subject: [PATCH] gpu: Use the window event watcher list for Vulkan and D3D12 Events won't be delivered to the regular event watcher list callbacks if a client event filter discards events. Use the special window event watcher list to watch for resizes in the GPU renderers, as events are delivered to this list before a client can potentially discard them. --- src/gpu/d3d12/SDL_gpu_d3d12.c | 5 +++-- src/gpu/vulkan/SDL_gpu_vulkan.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gpu/d3d12/SDL_gpu_d3d12.c b/src/gpu/d3d12/SDL_gpu_d3d12.c index 1deff7d7b4..08438776ef 100644 --- a/src/gpu/d3d12/SDL_gpu_d3d12.c +++ b/src/gpu/d3d12/SDL_gpu_d3d12.c @@ -23,6 +23,7 @@ #ifdef SDL_GPU_D3D12 +#include "../../events/SDL_windowevents_c.h" #include "../../core/windows/SDL_windows.h" #include "../../video/directx/SDL_d3d12.h" #include "../SDL_sysgpu.h" @@ -7097,7 +7098,7 @@ static bool D3D12_ClaimWindow( renderer->claimedWindowCount += 1; SDL_UnlockMutex(renderer->windowLock); - SDL_AddEventWatch(D3D12_INTERNAL_OnWindowResize, window); + SDL_AddWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, D3D12_INTERNAL_OnWindowResize, window); return true; } else { @@ -7145,7 +7146,7 @@ static void D3D12_ReleaseWindow( SDL_free(windowData); SDL_ClearProperty(SDL_GetWindowProperties(window), WINDOW_PROPERTY_DATA); - SDL_RemoveEventWatch(D3D12_INTERNAL_OnWindowResize, window); + SDL_RemoveWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, D3D12_INTERNAL_OnWindowResize, window); } static bool D3D12_SetSwapchainParameters( diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index de6b3c2bea..2ce0f7a503 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -32,6 +32,7 @@ #include #include "../SDL_sysgpu.h" +#include "../../events/SDL_windowevents_c.h" // Global Vulkan Loader Entry Points @@ -9815,7 +9816,7 @@ static bool VULKAN_ClaimWindow( renderer->claimedWindowCount += 1; SDL_UnlockMutex(renderer->windowLock); - SDL_AddEventWatch(VULKAN_INTERNAL_OnWindowResize, window); + SDL_AddWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, VULKAN_INTERNAL_OnWindowResize, window); return true; } else if (createSwapchainResult == VULKAN_INTERNAL_TRY_AGAIN) { @@ -9880,7 +9881,7 @@ static void VULKAN_ReleaseWindow( SDL_free(windowData); SDL_ClearProperty(SDL_GetWindowProperties(window), WINDOW_PROPERTY_DATA); - SDL_RemoveEventWatch(VULKAN_INTERNAL_OnWindowResize, window); + SDL_RemoveWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, VULKAN_INTERNAL_OnWindowResize, window); } static Uint32 VULKAN_INTERNAL_RecreateSwapchain(