summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edmundson <kde@davidedmundson.co.uk>2023-03-30 22:06:46 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-03-31 14:00:26 +0000
commit27ac0969ba34fcc2580c943ce404b1c1e71af936 (patch)
tree99aa8aec00eaad592316c0910534aea2a7a2806c
parente673426a998f562b09289d6c098c692d8a0ed0ad (diff)
downloadqtwayland-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.cpp17
-rw-r--r--src/client/qwaylandvulkanwindow_p.h1
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();