17void QWindowsVulkanInstance::createOrAdoptInstance()
19 initInstance(m_instance, QByteArrayList() << QByteArrayLiteral(
"VK_KHR_win32_surface"));
24 m_getPhysDevPresSupport =
reinterpret_cast<PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR>(
25 m_vkGetInstanceProcAddr(m_vkInst,
"vkGetPhysicalDeviceWin32PresentationSupportKHR"));
26 if (!m_getPhysDevPresSupport)
27 qWarning(
"Failed to find vkGetPhysicalDeviceWin32PresentationSupportKHR");
30bool QWindowsVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice,
31 uint32_t queueFamilyIndex,
34 if (!m_getPhysDevPresSupport || !m_getPhysDevSurfaceSupport)
37 bool ok = m_getPhysDevPresSupport(physicalDevice, queueFamilyIndex);
39 VkSurfaceKHR surface = QVulkanInstance::surfaceForWindow(window);
40 VkBool32 supported =
false;
41 m_getPhysDevSurfaceSupport(physicalDevice, queueFamilyIndex, surface, &supported);
42 ok &=
bool(supported);
47VkSurfaceKHR QWindowsVulkanInstance::createSurface(HWND win)
49 VkSurfaceKHR surface = VK_NULL_HANDLE;
51 if (!m_createSurface) {
52 m_createSurface =
reinterpret_cast<PFN_vkCreateWin32SurfaceKHR>(
53 m_vkGetInstanceProcAddr(m_vkInst,
"vkCreateWin32SurfaceKHR"));
55 if (!m_createSurface) {
56 qWarning(
"Failed to find vkCreateWin32SurfaceKHR");
60 VkWin32SurfaceCreateInfoKHR surfaceInfo;
61 memset(&surfaceInfo, 0,
sizeof(surfaceInfo));
62 surfaceInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
63 surfaceInfo.hinstance = GetModuleHandle(
nullptr);
64 surfaceInfo.hwnd = win;
65 VkResult err = m_createSurface(m_vkInst, &surfaceInfo,
nullptr, &surface);
66 if (err != VK_SUCCESS)
67 qWarning(
"Failed to create Vulkan surface: %d", err);