diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index 60cfdc6e99..c7bf2928d8 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -66,6 +66,12 @@ typedef struct gfx_ctx_vulkan_data #ifdef _WIN32 PFN_vkCreateWin32SurfaceKHR fpCreateWin32SurfaceKHR; #endif +#ifdef HAVE_XCB + PFN_vkCreateXcbSurfaceKHR fpCreateXcbSurfaceKHR; +#endif +#ifdef HAVE_XLIB + PFN_vkCreateXlibSurfaceKHR fpCreateXlibSurfaceKHR; +#endif #ifdef ANDROID PFN_vkCreateAndroidSurfaceKHR fpCreateAndroidSurfaceKHR; #endif @@ -798,6 +804,18 @@ static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk, #ifdef _WIN32 VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateWin32SurfaceKHR); +#endif + break; + case VULKAN_WSI_XLIB: +#ifdef HAVE_XLIB + VK_GET_INSTANCE_PROC_ADDR(vk, + vk->context.instance, CreateXlibSurfaceKHR); +#endif + break; + case VULKAN_WSI_XCB: +#ifdef HAVE_XCB + VK_GET_INSTANCE_PROC_ADDR(vk, + vk->context.instance, CreateXcbSurfaceKHR); #endif break; case VULKAN_WSI_NONE: @@ -1160,6 +1178,44 @@ static bool vulkan_surface_create(gfx_ctx_vulkan_data_t *vk, &surf_info, NULL, &vk->vk_surface) != VK_SUCCESS) return false; } +#endif + break; + case VULKAN_WSI_XLIB: +#ifdef HAVE_XLIB + { + VkXlibSurfaceCreateInfoKHR surf_info; + + memset(&surf_info, 0, sizeof(VkXlibSurfaceCreateInfoKHR)); + + surf_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; + surf_info.flags = 0; + surf_info.dpy = display; + surf_info.window = surface; + + if (vktsCreateXlibSurfaceKHR(vk->context.instance, + &surf_info, NULL, &vk->vk_surface) + != VK_SUCCESS) + return false; + } +#endif + break; + case VULKAN_WSI_XCB: +#ifdef HAVE_XCB + { + VkXcbSurfaceCreateInfoKHR surf_info; + + memset(&surf_info, 0, sizeof(VkXcbSurfaceCreateInfoKHR)); + + surf_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; + surf_info.flags = 0; + surf_info.connection = XGetXCBConnection(display); + surf_info.window = (xcb_window_t)surface; + + if (vktsCreateXcbSurfaceKHR(vk->context.instance, + &surf_info, NULL, &vk->vk_surface) + != VK_SUCCESS) + return false; + } #endif break; case VULKAN_WSI_NONE: