From 6d47d8dff12ac20cffa530c74595c70e9acc38fc Mon Sep 17 00:00:00 2001 From: Adrian <60794154+addrianyy@users.noreply.github.com> Date: Sun, 5 Oct 2025 18:59:24 +0200 Subject: [PATCH] Always convert window to Vulkan window on SDL_Vulkan_CreateSurface (#14143) --- src/video/SDL_video.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 6f6f8f9ef9..03318420c9 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -2674,7 +2674,7 @@ static bool SDL_ReconfigureWindowInternal(SDL_Window *window, SDL_WindowFlags fl return false; } } else if (graphics_flags & SDL_WINDOW_VULKAN) { - loaded_vulkan = SDL_GL_LoadLibrary(NULL); + loaded_vulkan = SDL_Vulkan_LoadLibrary(NULL); if (!loaded_vulkan) { return false; } @@ -6176,8 +6176,9 @@ bool SDL_Vulkan_CreateSurface(SDL_Window *window, { CHECK_WINDOW_MAGIC(window, false); - if (!(window->flags & SDL_WINDOW_VULKAN)) { - return SDL_SetError(NOT_A_VULKAN_WINDOW); + if (!_this->Vulkan_CreateSurface) { + SDL_Unsupported(); + return false; } CHECK_PARAM(!instance) { @@ -6188,6 +6189,23 @@ bool SDL_Vulkan_CreateSurface(SDL_Window *window, return SDL_InvalidParamError("surface"); } + if (!(window->flags & SDL_WINDOW_VULKAN)) { + // No problem, we can convert to Vulkan + if (window->flags & SDL_WINDOW_OPENGL) { + window->flags &= ~SDL_WINDOW_OPENGL; + SDL_GL_UnloadLibrary(); + } + if (window->flags & SDL_WINDOW_METAL) { + window->flags &= ~SDL_WINDOW_METAL; + // Nothing more to do for Metal. + } + if (SDL_Vulkan_LoadLibrary(NULL)) { + window->flags |= SDL_WINDOW_VULKAN; + } else { + return SDL_SetError("failed to load Vulkan library"); + } + } + return _this->Vulkan_CreateSurface(_this, window, instance, allocator, surface); }