From 54d08798efca8f8929744a238e2b8b2851083317 Mon Sep 17 00:00:00 2001 From: Brendan King Date: Wed, 8 Nov 2017 15:15:20 +0000 Subject: [PATCH 20/67] egl/wayland: post maximum damage when blitting When blitting, as part of the "is_different_gpu" case when swapping buffers, the blit is done using the full surface dimensions, ignoring the damage region. This results in corruption of the non damaged region on screen. Workaround this by posting maximum damage when blitting. A better fix would be to limit the blit to the damaged region, at least when the number of damage rectangles is 1. --- src/egl/drivers/dri2/platform_wayland.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index c18edc0de4e..c2e428769fe 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -1112,7 +1112,8 @@ dri2_wl_swap_buffers_with_damage(_EGLDisplay *disp, /* If the compositor doesn't support damage_buffer, we deliberately * ignore the damage region and post maximum damage, due to * https://bugs.freedesktop.org/78190 */ - if (!n_rects || !try_damage_buffer(dri2_surf, rects, n_rects)) + if (dri2_dpy->is_different_gpu || + !n_rects || !try_damage_buffer(dri2_surf, rects, n_rects)) wl_surface_damage(dri2_surf->wl_surface_wrapper, 0, 0, INT32_MAX, INT32_MAX); -- 2.25.1