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
qcocoavulkaninstance.mm
Go to the documentation of this file.
1
// Copyright (C) 2018 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
<
AppKit
/
AppKit
.
h
>
6
#
import
<
QuartzCore
/
CAMetalLayer
.
h
>
7
8
#
include
"qcocoavulkaninstance.h"
9
#
include
"qcocoawindow.h"
10
11
QT_BEGIN_NAMESPACE
12
13
QCocoaVulkanInstance::QCocoaVulkanInstance(QVulkanInstance *instance)
14
: m_instance(instance)
15
{
16
loadVulkanLibrary(QStringLiteral(
"vulkan"
));
17
}
18
19
QCocoaVulkanInstance::~QCocoaVulkanInstance()
20
{
21
}
22
23
void
QCocoaVulkanInstance::createOrAdoptInstance()
24
{
25
initInstance(m_instance, QByteArrayList() << QByteArrayLiteral(
"VK_EXT_metal_surface"
) << QByteArrayLiteral(
"VK_MVK_macos_surface"
));
26
}
27
28
VkSurfaceKHR *QCocoaVulkanInstance::surface(QWindow *window)
29
{
30
QCocoaWindow
*cocoaWindow =
static_cast
<
QCocoaWindow
*>(window->handle());
31
if
(!cocoaWindow->m_vulkanSurface)
32
cocoaWindow->m_vulkanSurface = createSurface(cocoaWindow->contentLayer());
33
return
&cocoaWindow->m_vulkanSurface;
34
}
35
36
VkSurfaceKHR QCocoaVulkanInstance::createSurface(CALayer *layer)
37
{
38
VkSurfaceKHR surface =
nullptr
;
39
if
(!m_createMetalSurface) {
40
m_createMetalSurface =
reinterpret_cast
<PFN_vkCreateMetalSurfaceEXT>(
41
m_vkGetInstanceProcAddr(m_vkInst,
"vkCreateMetalSurfaceEXT"
));
42
}
43
if
(m_createMetalSurface) {
44
VkMetalSurfaceCreateInfoEXT info = {};
45
info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
46
info.pLayer = qt_objc_cast<CAMetalLayer*>(layer);
47
VkResult err = m_createMetalSurface(m_vkInst, &info,
nullptr
, &surface);
48
if
(err == VK_SUCCESS)
49
return
surface;
50
qWarning(
"Failed to create Vulkan surface from metal layer: %d"
, err);
51
}
52
if
(!m_createSurface) {
53
m_createSurface =
reinterpret_cast
<PFN_vkCreateMacOSSurfaceMVK>(
54
m_vkGetInstanceProcAddr(m_vkInst,
"vkCreateMacOSSurfaceMVK"
));
55
}
56
if
(!m_createSurface) {
57
qWarning(
"Failed to find vkCreateMacOSSurfaceMVK"
);
58
return
m_nullSurface;
59
}
60
61
VkMacOSSurfaceCreateInfoMVK surfaceInfo;
62
surfaceInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
63
surfaceInfo.pNext =
nullptr
;
64
surfaceInfo.flags = 0;
65
surfaceInfo.pView = layer;
66
67
VkResult err = m_createSurface(m_vkInst, &surfaceInfo,
nullptr
, &surface);
68
if
(err != VK_SUCCESS)
69
qWarning(
"Failed to create Vulkan surface: %d"
, err);
70
71
return
surface;
72
}
73
74
75
QT_END_NAMESPACE
QCocoaWindow
Definition
qcocoawindow.h:74
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtbase
src
plugins
platforms
cocoa
qcocoavulkaninstance.mm
Generated on
for Qt by
1.18.0