diff options
author | David Edmundson <kde@davidedmundson.co.uk> | 2023-03-30 22:06:46 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-03-31 14:00:26 +0000 |
commit | 27ac0969ba34fcc2580c943ce404b1c1e71af936 (patch) | |
tree | 99aa8aec00eaad592316c0910534aea2a7a2806c | |
parent | e673426a998f562b09289d6c098c692d8a0ed0ad (diff) | |
download | qtwayland-27ac0969ba34fcc2580c943ce404b1c1e71af936.tar.gz |
Client: Cleanup vulkan surfaces on hide
Otherwise a hide/show combination will result in use of wl_surface after
it has been destroyed by QWaylandWindow.
This closely matches what the pattern we use for QWaylandEGLWindow.
Change-Id: Ic23f947046ce521125dfa8a3c22f5529dfcbece2
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit d78e8c02846a3634445a808d9845be8613bb1bfe)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/client/qwaylandvulkanwindow.cpp | 17 | ||||
-rw-r--r-- | src/client/qwaylandvulkanwindow_p.h | 1 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/client/qwaylandvulkanwindow.cpp b/src/client/qwaylandvulkanwindow.cpp index db25a271..6a284658 100644 --- a/src/client/qwaylandvulkanwindow.cpp +++ b/src/client/qwaylandvulkanwindow.cpp @@ -14,11 +14,7 @@ QWaylandVulkanWindow::QWaylandVulkanWindow(QWindow *window, QWaylandDisplay *dis QWaylandVulkanWindow::~QWaylandVulkanWindow() { - if (m_surface) { - QVulkanInstance *inst = window()->vulkanInstance(); - if (inst) - static_cast<QWaylandVulkanInstance *>(inst->handle())->destroySurface(m_surface); - } + invalidateSurface(); } QWaylandWindow::WindowType QWaylandVulkanWindow::windowType() const @@ -26,6 +22,17 @@ QWaylandWindow::WindowType QWaylandVulkanWindow::windowType() const return QWaylandWindow::Vulkan; } +void QWaylandVulkanWindow::invalidateSurface() +{ + if (m_surface) { + QVulkanInstance *inst = window()->vulkanInstance(); + if (inst) + static_cast<QWaylandVulkanInstance *>(inst->handle())->destroySurface(m_surface); + } + m_surface = nullptr; + QWaylandWindow::invalidateSurface(); +} + VkSurfaceKHR *QWaylandVulkanWindow::vkSurface() { if (m_surface) diff --git a/src/client/qwaylandvulkanwindow_p.h b/src/client/qwaylandvulkanwindow_p.h index df24e5db..c5692bc7 100644 --- a/src/client/qwaylandvulkanwindow_p.h +++ b/src/client/qwaylandvulkanwindow_p.h @@ -29,6 +29,7 @@ public: ~QWaylandVulkanWindow() override; WindowType windowType() const override; + void invalidateSurface() override; VkSurfaceKHR *vkSurface(); |