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(
156 count, names,
SDL_arraysize(extensionsForXCB), extensionsForXCB);
160 static const char *
const extensionsForXlib[] = {
163 return SDL_Vulkan_GetInstanceExtensions_Helper(
164 count, names,
SDL_arraysize(extensionsForXlib), extensionsForXlib);
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,
208 SDL_SetError(
"vkCreateXcbSurfaceKHR failed: %s", SDL_Vulkan_GetResultString(result));
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));
#define VK_KHR_SURFACE_EXTENSION_NAME
struct SDL_VideoDevice::@35 vulkan_config
GLuint GLuint GLsizei count
struct wl_display * display
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName)
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetInstanceProcAddr)(VkInstance instance, const char *pName)
static SDL_VideoDevice * _this
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
EGLSurface EGLNativeWindowType * window
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties
The type used to identify a window.
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
#define SDL_arraysize(array)
GLsizei const GLchar *const * path
void * SDL_LoadFunction(void *handle, const char *name)
VkResult(VKAPI_PTR * PFN_vkEnumerateInstanceExtensionProperties)(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties)