diff --git a/present/present_wnmd.c b/present/present_wnmd.c index 7d1000a019a2db6bbe80b08a3d660663a02c8751..aed10dae3f76a9234fb7cc437b9ee02b4f22488e 100644 --- a/present/present_wnmd.c +++ b/present/present_wnmd.c @@ -459,10 +459,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 */ @@ -484,6 +487,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; }