use KHR_xcb_surface, because KHR_xlib_surface creation hangs...
[vkray] / src / vk.c
index e07dbf9..101eaa8 100644 (file)
--- a/src/vk.c
+++ b/src/vk.c
@@ -8,7 +8,9 @@
 #ifdef __WIN32__
 #include <vulkan/vulkan_win32.h>
 #else
-#include <vulkan/vulkan_xlib.h>
+/*#include <vulkan/vulkan_xlib.h>*/
+#include <X11/Xlib-xcb.h>
+#include <vulkan/vulkan_xcb.h>
 #endif
 
 static int create_instance(void);
@@ -87,7 +89,8 @@ static struct {
 #ifdef __WIN32__
        {"VK_KHR_win32_surface", 1},
 #else
-       {"VK_KHR_xlib_surface", 1},
+       /*{"VK_KHR_xlib_surface", 1},*/
+       {"VK_KHR_xcb_surface", 1},
 #endif
        {"VK_KHR_debug_report", 0}
 };
@@ -162,6 +165,9 @@ static int create_instance(void)
 
 static int create_surface(void)
 {
+       int res;
+
+       /*
        VkXlibSurfaceCreateInfoKHR xinf = {0};
        xinf.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
        xinf.dpy = dpy;
@@ -171,6 +177,16 @@ static int create_surface(void)
                fprintf(stderr, "failed to create Xlib window surface\n");
                return -1;
        }
+       */
+       VkXcbSurfaceCreateInfoKHR xinf = {0};
+       xinf.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
+       xinf.connection = XGetXCBConnection(dpy);
+       xinf.window = (xcb_window_t)win;
+
+       if((res = vkCreateXcbSurfaceKHR(vk, &xinf, 0, &vksurf)) != 0) {
+               fprintf(stderr, "failed to create XCB window surface (%d)\n", res);
+               return -1;
+       }
        return 0;
 }