VkResult bionic_vkCreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { GdkDisplay *display = gtk_widget_get_display(pCreateInfo->window->surface_view_widget); if (GDK_IS_WAYLAND_DISPLAY (display)) { VkWaylandSurfaceCreateInfoKHR wayland_create_info = { .sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, .display = pCreateInfo->window->wayland_display, .surface = pCreateInfo->window->wayland_surface, }; return vkCreateWaylandSurfaceKHR(instance, &wayland_create_info, pAllocator, pSurface); } else if (GDK_IS_X11_DISPLAY (display)) { VkXlibSurfaceCreateInfoKHR x11_create_info = { .sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR, .dpy = pCreateInfo->window->x11_display, .window = (uintptr_t)pCreateInfo->window->egl_window, }; return vkCreateXlibSurfaceKHR(instance, &x11_create_info, pAllocator, pSurface); } else { fprintf(stderr, "bionic_vkCreateAndroidSurfaceKHR: the GDK backend is neither Wayland nor X11, no SurfaceView for you"); return VK_ERROR_UNKNOWN; } }