From 0bf8ccfb60b828ec6e3451efbf307c45336000da Mon Sep 17 00:00:00 2001 From: Ethan Lee Date: Tue, 8 Feb 2022 22:15:11 -0500 Subject: [PATCH] video: Add a hint to allow Vulkan surfaces on foreign windows --- include/SDL_hints.h | 11 +++++++++++ src/video/SDL_video.c | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 384320e06..ec228fb27 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -1453,6 +1453,17 @@ extern "C" { */ #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with Vulkan. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" + /** * \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries * diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 2648c44c6..6fd668c8d 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1703,6 +1703,16 @@ SDL_CreateWindowFrom(const void *data) } _this->windows = window; +#if SDL_VIDEO_VULKAN + if (SDL_GetHintBoolean(SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN, SDL_FALSE)) { + window->flags |= SDL_WINDOW_VULKAN; + if (SDL_Vulkan_LoadLibrary(NULL) < 0) { + SDL_DestroyWindow(window); + return NULL; + } + } +#endif + if (_this->CreateSDLWindowFrom(_this, window, data) < 0) { SDL_DestroyWindow(window); return NULL;