|  |  |  | @ -2123,19 +2123,19 @@ char** _glfwPlatformGetRequiredInstanceExtensions(int* count) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     *count = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (!_glfw.vk.KHR_xlib_surface) | 
			
		
	
		
			
				
					|  |  |  |  |     if (!_glfw.vk.KHR_xcb_surface || !_glfw.x11.x11xcb.handle) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         if (!_glfw.vk.KHR_xcb_surface || !_glfw.x11.x11xcb.handle) | 
			
		
	
		
			
				
					|  |  |  |  |         if (!_glfw.vk.KHR_xlib_surface) | 
			
		
	
		
			
				
					|  |  |  |  |             return NULL; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     extensions = calloc(2, sizeof(char*)); | 
			
		
	
		
			
				
					|  |  |  |  |     extensions[0] = strdup("VK_KHR_surface"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (_glfw.vk.KHR_xlib_surface) | 
			
		
	
		
			
				
					|  |  |  |  |         extensions[1] = strdup("VK_KHR_xlib_surface"); | 
			
		
	
		
			
				
					|  |  |  |  |     else | 
			
		
	
		
			
				
					|  |  |  |  |     if (_glfw.vk.KHR_xcb_surface) | 
			
		
	
		
			
				
					|  |  |  |  |         extensions[1] = strdup("VK_KHR_xcb_surface"); | 
			
		
	
		
			
				
					|  |  |  |  |     else | 
			
		
	
		
			
				
					|  |  |  |  |         extensions[1] = strdup("VK_KHR_xlib_surface"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     *count = 2; | 
			
		
	
		
			
				
					|  |  |  |  |     return extensions; | 
			
		
	
	
		
			
				
					|  |  |  | @ -2148,24 +2148,7 @@ int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, | 
			
		
	
		
			
				
					|  |  |  |  |     VisualID visualID = XVisualIDFromVisual(DefaultVisual(_glfw.x11.display, | 
			
		
	
		
			
				
					|  |  |  |  |                                                           _glfw.x11.screen)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if (_glfw.vk.KHR_xlib_surface) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = | 
			
		
	
		
			
				
					|  |  |  |  |             (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR) | 
			
		
	
		
			
				
					|  |  |  |  |             vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!vkGetPhysicalDeviceXlibPresentationSupportKHR) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_API_UNAVAILABLE, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Vulkan instance missing VK_KHR_xlib_surface extension"); | 
			
		
	
		
			
				
					|  |  |  |  |             return GLFW_FALSE; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         return vkGetPhysicalDeviceXlibPresentationSupportKHR(device, | 
			
		
	
		
			
				
					|  |  |  |  |                                                              queuefamily, | 
			
		
	
		
			
				
					|  |  |  |  |                                                              _glfw.x11.display, | 
			
		
	
		
			
				
					|  |  |  |  |                                                              visualID); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     else | 
			
		
	
		
			
				
					|  |  |  |  |     if (_glfw.vk.KHR_xcb_surface) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = | 
			
		
	
		
			
				
					|  |  |  |  |             (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR) | 
			
		
	
	
		
			
				
					|  |  |  | @ -2191,6 +2174,23 @@ int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, | 
			
		
	
		
			
				
					|  |  |  |  |                                                             connection, | 
			
		
	
		
			
				
					|  |  |  |  |                                                             visualID); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     else | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = | 
			
		
	
		
			
				
					|  |  |  |  |             (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR) | 
			
		
	
		
			
				
					|  |  |  |  |             vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!vkGetPhysicalDeviceXlibPresentationSupportKHR) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_API_UNAVAILABLE, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Vulkan instance missing VK_KHR_xlib_surface extension"); | 
			
		
	
		
			
				
					|  |  |  |  |             return GLFW_FALSE; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         return vkGetPhysicalDeviceXlibPresentationSupportKHR(device, | 
			
		
	
		
			
				
					|  |  |  |  |                                                              queuefamily, | 
			
		
	
		
			
				
					|  |  |  |  |                                                              _glfw.x11.display, | 
			
		
	
		
			
				
					|  |  |  |  |                                                              visualID); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, | 
			
		
	
	
		
			
				
					|  |  |  | @ -2198,31 +2198,40 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, | 
			
		
	
		
			
				
					|  |  |  |  |                                           const VkAllocationCallbacks* allocator, | 
			
		
	
		
			
				
					|  |  |  |  |                                           VkSurfaceKHR* surface) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     if (_glfw.vk.KHR_xlib_surface) | 
			
		
	
		
			
				
					|  |  |  |  |     if (_glfw.vk.KHR_xcb_surface) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         VkResult err; | 
			
		
	
		
			
				
					|  |  |  |  |         VkXlibSurfaceCreateInfoKHR sci; | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; | 
			
		
	
		
			
				
					|  |  |  |  |         VkXcbSurfaceCreateInfoKHR sci; | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |             vkGetInstanceProcAddr(instance, "vkCreateXlibSurfaceKHR"); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!vkCreateXlibSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |         xcb_connection_t* connection = | 
			
		
	
		
			
				
					|  |  |  |  |             _glfw.x11.x11xcb.XGetXCBConnection(_glfw.x11.display); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!connection) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_PLATFORM_ERROR, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Failed to retrieve XCB connection"); | 
			
		
	
		
			
				
					|  |  |  |  |             return VK_ERROR_EXTENSION_NOT_PRESENT; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |             vkGetInstanceProcAddr(instance, "vkCreateXcbSurfaceKHR"); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!vkCreateXcbSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_API_UNAVAILABLE, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Vulkan instance missing VK_KHR_xlib_surface extension"); | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Vulkan instance missing VK_KHR_xcb_surface extension"); | 
			
		
	
		
			
				
					|  |  |  |  |             return VK_ERROR_EXTENSION_NOT_PRESENT; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         memset(&sci, 0, sizeof(sci)); | 
			
		
	
		
			
				
					|  |  |  |  |         sci.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.dpy = _glfw.x11.display; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.connection = connection; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.window = window->x11.handle; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         err = vkCreateXlibSurfaceKHR(instance, &sci, allocator, surface); | 
			
		
	
		
			
				
					|  |  |  |  |         err = vkCreateXcbSurfaceKHR(instance, &sci, allocator, surface); | 
			
		
	
		
			
				
					|  |  |  |  |         if (err) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_PLATFORM_ERROR, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Failed to create Vulkan X11 surface: %s", | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Failed to create Vulkan XCB surface: %s", | 
			
		
	
		
			
				
					|  |  |  |  |                             _glfwGetVulkanResultString(err)); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -2231,37 +2240,28 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, | 
			
		
	
		
			
				
					|  |  |  |  |     else | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         VkResult err; | 
			
		
	
		
			
				
					|  |  |  |  |         VkXcbSurfaceCreateInfoKHR sci; | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         xcb_connection_t* connection = | 
			
		
	
		
			
				
					|  |  |  |  |             _glfw.x11.x11xcb.XGetXCBConnection(_glfw.x11.display); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!connection) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_PLATFORM_ERROR, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Failed to retrieve XCB connection"); | 
			
		
	
		
			
				
					|  |  |  |  |             return VK_ERROR_EXTENSION_NOT_PRESENT; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         VkXlibSurfaceCreateInfoKHR sci; | 
			
		
	
		
			
				
					|  |  |  |  |         PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |             vkGetInstanceProcAddr(instance, "vkCreateXcbSurfaceKHR"); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!vkCreateXcbSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |         vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |             vkGetInstanceProcAddr(instance, "vkCreateXlibSurfaceKHR"); | 
			
		
	
		
			
				
					|  |  |  |  |         if (!vkCreateXlibSurfaceKHR) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_API_UNAVAILABLE, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Vulkan instance missing VK_KHR_xcb_surface extension"); | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Vulkan instance missing VK_KHR_xlib_surface extension"); | 
			
		
	
		
			
				
					|  |  |  |  |             return VK_ERROR_EXTENSION_NOT_PRESENT; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         memset(&sci, 0, sizeof(sci)); | 
			
		
	
		
			
				
					|  |  |  |  |         sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.connection = connection; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.dpy = _glfw.x11.display; | 
			
		
	
		
			
				
					|  |  |  |  |         sci.window = window->x11.handle; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         err = vkCreateXcbSurfaceKHR(instance, &sci, allocator, surface); | 
			
		
	
		
			
				
					|  |  |  |  |         err = vkCreateXlibSurfaceKHR(instance, &sci, allocator, surface); | 
			
		
	
		
			
				
					|  |  |  |  |         if (err) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             _glfwInputError(GLFW_PLATFORM_ERROR, | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Failed to create Vulkan XCB surface: %s", | 
			
		
	
		
			
				
					|  |  |  |  |                             "X11: Failed to create Vulkan X11 surface: %s", | 
			
		
	
		
			
				
					|  |  |  |  |                             _glfwGetVulkanResultString(err)); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |