diff --git a/src/backends/drm/drm_egl_backend.cpp b/src/backends/drm/drm_egl_backend.cpp index b170ed82ce..41d82f3008 100644 --- a/src/backends/drm/drm_egl_backend.cpp +++ b/src/backends/drm/drm_egl_backend.cpp @@ -15,6 +15,7 @@ #include "drm_egl_layer.h" #include "drm_gpu.h" #include "drm_logging.h" +#include "drm_output.h" #include "drm_pipeline.h" #include "drm_virtual_egl_layer.h" #include "kwineglutils_p.h" @@ -41,6 +42,12 @@ EglGbmBackend::EglGbmBackend(DrmBackend *drmBackend) EglGbmBackend::~EglGbmBackend() { m_backend->releaseBuffers(); + const auto outputs = m_backend->outputs(); + for (const auto output : outputs) { + if (auto drmOutput = dynamic_cast(output)) { + drmOutput->pipeline()->setLayers(nullptr, nullptr); + } + } m_contexts.clear(); cleanup(); m_backend->setRenderBackend(nullptr); diff --git a/src/backends/drm/drm_egl_layer_surface.cpp b/src/backends/drm/drm_egl_layer_surface.cpp index d858653623..5a868fc315 100644 --- a/src/backends/drm/drm_egl_layer_surface.cpp +++ b/src/backends/drm/drm_egl_layer_surface.cpp @@ -52,6 +52,7 @@ EglGbmLayerSurface::~EglGbmLayerSurface() void EglGbmLayerSurface::destroyResources() { + m_eglBackend->makeCurrent(); m_surface = {}; m_oldSurface = {}; }