From e11a6a0e68fcddeaffb9133645508d33da95b428 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 29 Nov 2016 14:47:59 +0100 Subject: [PATCH] x11: Call gdk_display_sync() when creating Vulkan surfaces The Vulkan driver wants to operate on an X Window that it is sure does exist. --- gdk/x11/gdkvulkancontext-x11.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gdk/x11/gdkvulkancontext-x11.c b/gdk/x11/gdkvulkancontext-x11.c index 71f27e3365..0d1038fd38 100644 --- a/gdk/x11/gdkvulkancontext-x11.c +++ b/gdk/x11/gdkvulkancontext-x11.c @@ -39,6 +39,13 @@ gdk_x11_vulkan_context_create_surface (GdkVulkanContext *context, GdkWindow *window = gdk_draw_context_get_window (GDK_DRAW_CONTEXT (context)); GdkDisplay *display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context)); + /* This is necessary so that Vulkan sees the Window. + * Usually, vkCreateXlibSurfaceKHR() will not cause a problem to happen as + * it just creates resources, but futher calls with the resulting surface + * do cause issues. + */ + gdk_display_sync (display); + return GDK_VK_CHECK (vkCreateXlibSurfaceKHR, gdk_vulkan_context_get_instance (context), &(VkXlibSurfaceCreateInfoKHR) { VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,