Как правильно проинициализировать vulkan surface в Linux с использованием Qt
Создание vulkan surface в windows с использованием Qt очень простое:
VkWin32SurfaceCreateInfoKHR surfaceCreateInfo{};
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
surfaceCreateInfo.hwnd = (HWND)winId(); // Запрашиваем дескриптор окна средствами Qt
surfaceCreateInfo.hinstance = GetModuleHandle(nullptr);
vkCreateWin32SurfaceKHR(VkInstance, &surfaceCreateInfo, nullptr, &surface);
В линуксе всё значительно сложнее, с использованием библиотеки xcb. По найденным мною куцым туториалам получается что-то вроде:
VkXcbSurfaceCreateInfoKHR surfaceCreateInfo{};
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
xcb_connection_t* m_pXCBConnect = xcb_connect(NULL, NULL);
if(xcb_connection_has_error(m_pXCBConnect))
return false;
surfaceCreateInfo.connection = m_pXCBConnect;
surfaceCreateInfo.window = xcb_generate_id(m_pXCBConnect);
vkCreateXcbSurfaceKHR(VkInstance, &surfaceCreateInfo, nullptr, &surface);
Как ни странно, это даже проходит без ошибок - vkCreateXcbSurfaceKHR возвращает VK_SUCCESS, однако буквально через пару шагов вулкан валится с ошибкой vk_error_initialization_failed при вызове vkGetPhysicalDeviceSurfaceFormatsKHR(...).
Собственно, вопрос: как правильно в линуксе запросить у Qt виджета данные окна для создания surface, по аналогии с тем, как это делается в windows?