21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_X11
33 #if defined(__OpenBSD__)
34 #define DEFAULT_VULKAN "libvulkan.so"
36 #define DEFAULT_VULKAN "libvulkan.so.1"
44 int X11_Vulkan_LoadLibrary(
_THIS,
const char *
path)
61 path = DEFAULT_VULKAN;
76 extensions = SDL_Vulkan_CreateInstanceExtensionsList(
82 for(
i = 0;
i < extensionCount;
i++)
92 if(!hasSurfaceExtension)
98 if(hasXlibSurfaceExtension)
100 videoData->vulkan_xlib_xcb_library =
NULL;
102 else if(!hasXCBSurfaceExtension)
104 SDL_SetError(
"Installed Vulkan doesn't implement either the "
111 const char *libX11XCBLibraryName =
SDL_getenv(
"SDL_X11_XCB_LIBRARY");
112 if(!libX11XCBLibraryName)
113 libX11XCBLibraryName =
"libX11-xcb.so";
114 videoData->vulkan_xlib_xcb_library =
SDL_LoadObject(libX11XCBLibraryName);
115 if(!videoData->vulkan_xlib_xcb_library)
117 videoData->vulkan_XGetXCBConnection =
119 if(!videoData->vulkan_XGetXCBConnection)
133 void X11_Vulkan_UnloadLibrary(
_THIS)
138 if(videoData->vulkan_xlib_xcb_library)
156 if(videoData->vulkan_xlib_xcb_library)
158 static const char *
const extensionsForXCB[] = {
161 return SDL_Vulkan_GetInstanceExtensions_Helper(
166 static const char *
const extensionsForXlib[] = {
169 return SDL_Vulkan_GetInstanceExtensions_Helper(
188 if(videoData->vulkan_xlib_xcb_library)
192 "vkCreateXcbSurfaceKHR");
198 " extension is not enabled in the Vulkan instance.");
209 createInfo.
window = (xcb_window_t)windowData->xwindow;
223 "vkCreateXlibSurfaceKHR");
229 " extension is not enabled in the Vulkan instance.");
235 createInfo.
window = (xcb_window_t)windowData->xwindow;
240 SDL_SetError(
"vkCreateXlibSurfaceKHR failed: %s", SDL_Vulkan_GetResultString(
result));
void * SDL_LoadFunction(void *handle, const char *name)
GLuint GLuint GLsizei count
GLsizei const GLchar *const * path
#define SDL_arraysize(array)
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
struct wl_display * display
struct SDL_VideoDevice::@441 vulkan_config
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties
The type used to identify a window.
xcb_connection_t * connection
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName)
#define VK_KHR_SURFACE_EXTENSION_NAME
VkResult(VKAPI_PTR * PFN_vkEnumerateInstanceExtensionProperties)(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties)
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetInstanceProcAddr)(VkInstance instance, const char *pName)
@ VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR
@ VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR
#define VK_KHR_XCB_SURFACE_EXTENSION_NAME
VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
VkResult(VKAPI_PTR * PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME
VkResult(VKAPI_PTR * PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)