25 initInstance(m_instance, QByteArrayList() << QByteArrayLiteral(
"VK_KHR_xcb_surface"));
30 m_getPhysDevPresSupport =
reinterpret_cast<PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR>(
31 m_vkGetInstanceProcAddr(m_vkInst,
"vkGetPhysicalDeviceXcbPresentationSupportKHR"));
32 if (!m_getPhysDevPresSupport)
33 qWarning(
"Failed to find vkGetPhysicalDeviceXcbPresentationSupportKHR");
37 uint32_t queueFamilyIndex,
40 if (!m_getPhysDevPresSupport || !m_getPhysDevSurfaceSupport)
43 QXcbWindow *w =
static_cast<QXcbWindow *>(window->handle());
45 qWarning(
"Attempted to call supportsPresent() without a valid platform window");
48 xcb_connection_t *connection = w->xcbScreen()->xcb_connection();
49 bool ok = m_getPhysDevPresSupport(physicalDevice, queueFamilyIndex, connection, w->visualId());
51 VkSurfaceKHR surface = QVulkanInstance::surfaceForWindow(window);
52 VkBool32 supported =
false;
53 m_getPhysDevSurfaceSupport(physicalDevice, queueFamilyIndex, surface, &supported);
54 ok &=
bool(supported);
61 VkSurfaceKHR surface = VK_NULL_HANDLE;
63 if (!m_createSurface) {
64 m_createSurface =
reinterpret_cast<PFN_vkCreateXcbSurfaceKHR>(
65 m_vkGetInstanceProcAddr(m_vkInst,
"vkCreateXcbSurfaceKHR"));
67 if (!m_createSurface) {
68 qWarning(
"Failed to find vkCreateXcbSurfaceKHR");
72 VkXcbSurfaceCreateInfoKHR surfaceInfo;
73 memset(&surfaceInfo, 0,
sizeof(surfaceInfo));
74 surfaceInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
75 surfaceInfo.connection = window->xcbScreen()->xcb_connection();
76 surfaceInfo.window = window->xcb_window();
77 VkResult err = m_createSurface(m_vkInst, &surfaceInfo,
nullptr, &surface);
78 if (err != VK_SUCCESS)
79 qWarning(
"Failed to create Vulkan surface: %d", err);