summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2020-03-02 09:58:50 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2020-03-03 18:25:56 +0100
commit7b8616859adcb0c8b38591b0e9c1165c986bad92 (patch)
tree5cde18c31231a5a5fa5c6c99e30c9e080cca337b /src/plugins/platforms
parent23fd7bdf01ae81ca6ae0bd741bb4d82784e762d0 (diff)
Do not constantly create new surfaces with MoltenVK on macOS
Querying the VkSurfaceKHR for a window is expected to create the surface once and then return the same value afterwards. Task-number: QTBUG-82600 Change-Id: Ib3e99dfca4d940de1a14348eb1909d372a7dde04 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoavulkaninstance.h6
-rw-r--r--src/plugins/platforms/cocoa/qcocoavulkaninstance.mm7
3 files changed, 8 insertions, 7 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
index d0e69bdca5..450329f569 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
@@ -107,7 +107,7 @@ void *QCocoaNativeInterface::nativeResourceForWindow(const QByteArray &resourceS
#if QT_CONFIG(vulkan)
} else if (resourceString == "vkSurface") {
if (QVulkanInstance *instance = window->vulkanInstance())
- return static_cast<QCocoaVulkanInstance *>(instance->handle())->createSurface(window);
+ return static_cast<QCocoaVulkanInstance *>(instance->handle())->surface(window);
#endif
}
return nullptr;
diff --git a/src/plugins/platforms/cocoa/qcocoavulkaninstance.h b/src/plugins/platforms/cocoa/qcocoavulkaninstance.h
index 5fe6a612af..2a8d04757e 100644
--- a/src/plugins/platforms/cocoa/qcocoavulkaninstance.h
+++ b/src/plugins/platforms/cocoa/qcocoavulkaninstance.h
@@ -61,9 +61,11 @@ public:
void createOrAdoptInstance() override;
- VkSurfaceKHR *createSurface(QWindow *window);
- VkSurfaceKHR createSurface(NSView *view);
+ VkSurfaceKHR *surface(QWindow *window);
+
private:
+ VkSurfaceKHR createSurface(NSView *view);
+
QVulkanInstance *m_instance = nullptr;
QLibrary m_lib;
VkSurfaceKHR m_nullSurface = nullptr;
diff --git a/src/plugins/platforms/cocoa/qcocoavulkaninstance.mm b/src/plugins/platforms/cocoa/qcocoavulkaninstance.mm
index 94c0a11b84..9e714859f2 100644
--- a/src/plugins/platforms/cocoa/qcocoavulkaninstance.mm
+++ b/src/plugins/platforms/cocoa/qcocoavulkaninstance.mm
@@ -57,12 +57,11 @@ void QCocoaVulkanInstance::createOrAdoptInstance()
initInstance(m_instance, QByteArrayList() << QByteArrayLiteral("VK_MVK_macos_surface"));
}
-VkSurfaceKHR *QCocoaVulkanInstance::createSurface(QWindow *window)
+VkSurfaceKHR *QCocoaVulkanInstance::surface(QWindow *window)
{
QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window->handle());
- if (cocoaWindow->m_vulkanSurface)
- destroySurface(cocoaWindow->m_vulkanSurface);
- cocoaWindow->m_vulkanSurface = createSurface(cocoaWindow->m_view);
+ if (!cocoaWindow->m_vulkanSurface)
+ cocoaWindow->m_vulkanSurface = createSurface(cocoaWindow->m_view);
return &cocoaWindow->m_vulkanSurface;
}