21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_X11
38 int X11_Vulkan_LoadLibrary(
_THIS,
const char *
path)
55 path =
"libvulkan.so.1";
70 extensions = SDL_Vulkan_CreateInstanceExtensionsList(
76 for(
i = 0;
i < extensionCount;
i++)
80 else if(
SDL_strcmp(VK_KHR_XCB_SURFACE_EXTENSION_NAME, extensions[
i].extensionName) == 0)
82 else if(
SDL_strcmp(VK_KHR_XLIB_SURFACE_EXTENSION_NAME, extensions[
i].extensionName) == 0)
86 if(!hasSurfaceExtension)
92 if(hasXlibSurfaceExtension)
94 videoData->vulkan_xlib_xcb_library =
NULL;
96 else if(!hasXCBSurfaceExtension)
98 SDL_SetError(
"Installed Vulkan doesn't implement either the "
99 VK_KHR_XCB_SURFACE_EXTENSION_NAME
"extension or the "
100 VK_KHR_XLIB_SURFACE_EXTENSION_NAME
" extension");
105 const char *libX11XCBLibraryName =
SDL_getenv(
"SDL_X11_XCB_LIBRARY");
106 if(!libX11XCBLibraryName)
107 libX11XCBLibraryName =
"libX11-xcb.so";
108 videoData->vulkan_xlib_xcb_library =
SDL_LoadObject(libX11XCBLibraryName);
109 if(!videoData->vulkan_xlib_xcb_library)
111 videoData->vulkan_XGetXCBConnection =
113 if(!videoData->vulkan_XGetXCBConnection)
127 void X11_Vulkan_UnloadLibrary(
_THIS)
132 if(videoData->vulkan_xlib_xcb_library)
150 if(videoData->vulkan_xlib_xcb_library)
152 static const char *
const extensionsForXCB[] = {
155 return SDL_Vulkan_GetInstanceExtensions_Helper(
160 static const char *
const extensionsForXlib[] = {
163 return SDL_Vulkan_GetInstanceExtensions_Helper(
182 if(videoData->vulkan_xlib_xcb_library)
184 PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR =
186 "vkCreateXcbSurfaceKHR");
187 VkXcbSurfaceCreateInfoKHR createInfo;
189 if(!vkCreateXcbSurfaceKHR)
192 " extension is not enabled in the Vulkan instance.");
197 createInfo.connection = videoData->vulkan_XGetXCBConnection(videoData->
display);
198 if(!createInfo.connection)
203 createInfo.window = (xcb_window_t)windowData->xwindow;
204 result = vkCreateXcbSurfaceKHR(instance, &createInfo,
215 PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR =
217 "vkCreateXlibSurfaceKHR");
218 VkXlibSurfaceCreateInfoKHR createInfo;
220 if(!vkCreateXlibSurfaceKHR)
223 " extension is not enabled in the Vulkan instance.");
228 createInfo.dpy = videoData->
display;
229 createInfo.window = (xcb_window_t)windowData->xwindow;
230 result = vkCreateXlibSurfaceKHR(instance, &createInfo,
234 SDL_SetError(
"vkCreateXlibSurfaceKHR failed: %s", SDL_Vulkan_GetResultString(
result));