backends/drm: don't scale infiniteRegion()

It can lead to weird issues, like the resulting region being entirely in negative coordinates

CCBUG: 494829


(cherry picked from commit 12e44324d5)

Co-authored-by: Xaver Hugl <xaver.hugl@gmail.com>
wilder/Plasma/6.2
Xaver Hugl 1 year ago
parent 8ff57a865f
commit d352a368e2
  1. 16
      src/backends/drm/drm_egl_layer_surface.cpp

@ -247,8 +247,12 @@ bool EglGbmLayerSurface::endRendering(const QRegion &damagedRegion, OutputFrame
m_surface->damageJournal.add(damagedRegion);
m_surface->shadowDamageJournal.add(damagedRegion);
QRegion repaint;
for (const QRect &rect : logicalRepaint) {
repaint |= scaledRect(rect, m_surface->scale).toAlignedRect() & QRect(QPoint(), m_surface->gbmSwapchain->size());
if (logicalRepaint == infiniteRegion()) {
repaint = QRect(QPoint(), m_surface->gbmSwapchain->size());
} else {
for (const QRect rect : logicalRepaint) {
repaint |= scaledRect(rect, m_surface->scale).toAlignedRect() & QRect(QPoint(), m_surface->gbmSwapchain->size());
}
}
GLFramebuffer *fbo = m_surface->currentSlot->framebuffer();
@ -664,8 +668,12 @@ std::shared_ptr<DrmFramebuffer> EglGbmLayerSurface::importWithEgl(Surface *surfa
}
QRegion deviceDamage;
for (const QRect &logical : damagedRegion) {
deviceDamage |= scaledRect(logical, surface->scale).toAlignedRect();
if (damagedRegion == infiniteRegion()) {
deviceDamage = QRect(QPoint(), surface->gbmSwapchain->size());
} else {
for (const QRect &logical : damagedRegion) {
deviceDamage |= scaledRect(logical, surface->scale).toAlignedRect();
}
}
const QRegion repaint = (deviceDamage | surface->importDamageJournal.accumulate(slot->age(), infiniteRegion())) & QRect(QPoint(), surface->gbmSwapchain->size());
surface->importDamageJournal.add(deviceDamage);

Loading…
Cancel
Save