Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qwindowsvulkaninstance.cpp
Go to the documentation of this file.
1
// Copyright (C) 2017 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
include
"qwindowsvulkaninstance.h"
6
7
QT_BEGIN_NAMESPACE
8
9
QWindowsVulkanInstance::QWindowsVulkanInstance(QVulkanInstance *instance)
10
: m_instance(instance),
11
m_getPhysDevPresSupport(
nullptr
),
12
m_createSurface(
nullptr
)
13
{
14
loadVulkanLibrary(QStringLiteral(
"vulkan-1"
));
15
}
16
17
void
QWindowsVulkanInstance::createOrAdoptInstance()
18
{
19
initInstance(m_instance, QByteArrayList() << QByteArrayLiteral(
"VK_KHR_win32_surface"
));
20
21
if
(!m_vkInst)
22
return
;
23
24
m_getPhysDevPresSupport =
reinterpret_cast
<PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR>(
25
m_vkGetInstanceProcAddr(m_vkInst,
"vkGetPhysicalDeviceWin32PresentationSupportKHR"
));
26
if
(!m_getPhysDevPresSupport)
27
qWarning(
"Failed to find vkGetPhysicalDeviceWin32PresentationSupportKHR"
);
28
}
29
30
bool
QWindowsVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice,
31
uint32_t queueFamilyIndex,
32
QWindow *window)
33
{
34
if
(!m_getPhysDevPresSupport || !m_getPhysDevSurfaceSupport)
35
return
true
;
36
37
bool
ok = m_getPhysDevPresSupport(physicalDevice, queueFamilyIndex);
38
39
VkSurfaceKHR surface = QVulkanInstance::surfaceForWindow(window);
40
VkBool32 supported =
false
;
41
m_getPhysDevSurfaceSupport(physicalDevice, queueFamilyIndex, surface, &supported);
42
ok &=
bool
(supported);
43
44
return
ok;
45
}
46
47
VkSurfaceKHR QWindowsVulkanInstance::createSurface(HWND win)
48
{
49
VkSurfaceKHR surface = VK_NULL_HANDLE;
50
51
if
(!m_createSurface) {
52
m_createSurface =
reinterpret_cast
<PFN_vkCreateWin32SurfaceKHR>(
53
m_vkGetInstanceProcAddr(m_vkInst,
"vkCreateWin32SurfaceKHR"
));
54
}
55
if
(!m_createSurface) {
56
qWarning(
"Failed to find vkCreateWin32SurfaceKHR"
);
57
return
surface;
58
}
59
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);
68
69
return
surface;
70
}
71
72
QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtbase
src
plugins
platforms
windows
qwindowsvulkaninstance.cpp
Generated on
for Qt by
1.18.0