From da7040f077e85a7e3aa1ee0c600489bb41a3e81b Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Fri, 19 Jun 2026 13:29:13 -0400 Subject: [PATCH] gpu/vulkan renderer: Reconfigure the window on renderer creation if it has the OpenGL flag In some cases, conflicts can occur at the platform or driver level if a window initially configured for OpenGL is then used with a Vulkan-based renderer. Try to reconfigure or recreate the window in the unlikely event that it has the OpenGL flag set when initializing the Vulkan or GPU renderer to remove any platform or driver-specific OpenGL objects and properties. --- src/render/gpu/SDL_render_gpu.c | 8 ++++++++ src/render/vulkan/SDL_render_vulkan.c | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/src/render/gpu/SDL_render_gpu.c b/src/render/gpu/SDL_render_gpu.c index a2e5035d0c2fb..c98c3c1098aa3 100644 --- a/src/render/gpu/SDL_render_gpu.c +++ b/src/render/gpu/SDL_render_gpu.c @@ -24,6 +24,7 @@ #include "../../events/SDL_windowevents_c.h" #include "../../video/SDL_pixels_c.h" +#include "../../video/SDL_sysvideo.h" #include "../SDL_d3dmath.h" #include "../SDL_sysrender.h" #include "SDL_gpu_util.h" @@ -1687,6 +1688,13 @@ static bool GPU_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P { GPU_RenderData *data = NULL; + // Clear any OpenGL properties on the window to avoid potential driver conflicts. + SDL_WindowFlags flags = SDL_GetWindowFlags(window); + if (flags & SDL_WINDOW_OPENGL) { + flags &= ~SDL_WINDOW_OPENGL; + SDL_ReconfigureWindow(window, flags); + } + SDL_SetupRendererColorspace(renderer, create_props); if (renderer->output_colorspace != SDL_COLORSPACE_SRGB && diff --git a/src/render/vulkan/SDL_render_vulkan.c b/src/render/vulkan/SDL_render_vulkan.c index ad434ff6727af..8f9ffe0f4d7da 100644 --- a/src/render/vulkan/SDL_render_vulkan.c +++ b/src/render/vulkan/SDL_render_vulkan.c @@ -4518,6 +4518,13 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD { VULKAN_RenderData *rendererData; + // Clear any OpenGL properties on the window to avoid potential driver conflicts. + SDL_WindowFlags flags = SDL_GetWindowFlags(window); + if (flags & SDL_WINDOW_OPENGL) { + flags &= ~SDL_WINDOW_OPENGL; + SDL_ReconfigureWindow(window, flags); + } + SDL_SetupRendererColorspace(renderer, create_props); if (renderer->output_colorspace != SDL_COLORSPACE_SRGB &&