Start implementing xlib/xcb bits (for when these context drivers

get added)
This commit is contained in:
twinaphex 2016-02-19 12:46:42 +01:00
parent 14d39be698
commit eb1fe0476d

View File

@ -66,6 +66,12 @@ typedef struct gfx_ctx_vulkan_data
#ifdef _WIN32 #ifdef _WIN32
PFN_vkCreateWin32SurfaceKHR fpCreateWin32SurfaceKHR; PFN_vkCreateWin32SurfaceKHR fpCreateWin32SurfaceKHR;
#endif #endif
#ifdef HAVE_XCB
PFN_vkCreateXcbSurfaceKHR fpCreateXcbSurfaceKHR;
#endif
#ifdef HAVE_XLIB
PFN_vkCreateXlibSurfaceKHR fpCreateXlibSurfaceKHR;
#endif
#ifdef ANDROID #ifdef ANDROID
PFN_vkCreateAndroidSurfaceKHR fpCreateAndroidSurfaceKHR; PFN_vkCreateAndroidSurfaceKHR fpCreateAndroidSurfaceKHR;
#endif #endif
@ -798,6 +804,18 @@ static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk,
#ifdef _WIN32 #ifdef _WIN32
VK_GET_INSTANCE_PROC_ADDR(vk, VK_GET_INSTANCE_PROC_ADDR(vk,
vk->context.instance, CreateWin32SurfaceKHR); 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 #endif
break; break;
case VULKAN_WSI_NONE: 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) &surf_info, NULL, &vk->vk_surface) != VK_SUCCESS)
return false; 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 #endif
break; break;
case VULKAN_WSI_NONE: case VULKAN_WSI_NONE: