From 440ed5948ba5818abf5ea5fdc5a9d98514658fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 1 Dec 2020 11:25:31 +0100 Subject: [PATCH] present/wnmd: Translate update region to screen space The region as passed in is in the source pixmap's coordinate space, so intersecting it with the clipList (which is in screen space) resulted in disappointment. Fixes Firefox popups such as the hamburger menu when using the EGL backend. v2: * Drop vblank->x/y_off from RegionTranslate call, since they're always 0 here (present_wnmd_check_flip rejects flips for x/y_off != 0). Reported-by: Robert Mader Tested-by: Robert Mader Reviewed-by: Olivier Fourdan Tested-by: Joakim Tjernlund # v1 (cherry picked from commit 466b8b43fb355c6040cee45406860b8b8c04e948) --- present/present_wnmd.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/present/present_wnmd.c b/present/present_wnmd.c index 8c31619a2..a2e00cebb 100644 --- a/present/present_wnmd.c +++ b/present/present_wnmd.c @@ -473,10 +473,13 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) /* Set update region as damaged */ if (vblank->update) { - damage = vblank->update; + damage = RegionDuplicate(vblank->update); + /* Translate update region to screen space */ + assert(vblank->x_off == 0 && vblank->y_off == 0); + RegionTranslate(damage, window->drawable.x, window->drawable.y); RegionIntersect(damage, damage, &window->clipList); } else - damage = &window->clipList; + damage = RegionDuplicate(&window->clipList); /* Try to flip - the vblank is now pending */ @@ -498,6 +501,7 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) /* Report damage */ DamageDamageRegion(&vblank->window->drawable, damage); + RegionDestroy(damage); return; }