From a343af674becfc3df10febffc9e4660716cbfcea Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Fri, 22 Apr 2022 18:06:10 +0200 Subject: [PATCH] backends/drm: fix damage tracking for virtual outputs --- src/backends/drm/virtual_egl_gbm_layer.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/backends/drm/virtual_egl_gbm_layer.cpp b/src/backends/drm/virtual_egl_gbm_layer.cpp index 5553a93cf4..b2c48ca949 100644 --- a/src/backends/drm/virtual_egl_gbm_layer.cpp +++ b/src/backends/drm/virtual_egl_gbm_layer.cpp @@ -86,8 +86,9 @@ OutputLayerBeginFrameInfo VirtualEglGbmLayer::beginFrame() void VirtualEglGbmLayer::endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) { + Q_UNUSED(renderedRegion); GLFramebuffer::popFramebuffer(); - const auto buffer = m_gbmSurface->swapBuffers(damagedRegion.intersected(m_output->geometry())); + const auto buffer = m_gbmSurface->swapBuffers(damagedRegion); if (buffer) { m_currentBuffer = buffer; m_currentDamage = damagedRegion; @@ -170,21 +171,10 @@ bool VirtualEglGbmLayer::scanout(SurfaceItem *surfaceItem) return false; } // damage tracking for screen casting - QRegion damage; - if (m_scanoutSurface == item->surface()) { - QRegion trackedDamage = surfaceItem->damage(); - surfaceItem->resetDamage(); - for (const auto &rect : trackedDamage) { - auto damageRect = QRect(rect); - damageRect.translate(m_output->geometry().topLeft()); - damage |= damageRect; - } - } else { - damage = m_output->geometry(); - } + m_currentDamage = m_scanoutSurface == item->surface() ? surfaceItem->damage() : infiniteRegion(); + surfaceItem->resetDamage(); m_scanoutSurface = item->surface(); m_currentBuffer = scanoutBuffer; - m_currentDamage = damage; return true; }