diff --git a/.pick_status.json b/.pick_status.json index d29714768f3..57fab57448c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4154,7 +4154,7 @@ "description": "egl/dri/wl: Move swrast damage region from put to swap", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "fa465e34cadacb7d29a664006b5d73bc2a8d9cf3", "notes": null diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 18817ad73d1..723be82a0b1 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -2660,12 +2660,6 @@ dri2_wl_swrast_put_image2(__DRIdrawable *draw, int op, int x, int y, int w, char *src, *dst; assert(copy_width <= stride); - if (wl_proxy_get_version((struct wl_proxy *)dri2_surf->wl_surface_wrapper) < - WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION) - wl_surface_damage(dri2_surf->wl_surface_wrapper, 0, 0, INT32_MAX, INT32_MAX); - else - wl_surface_damage_buffer(dri2_surf->wl_surface_wrapper, - x, y, w, h); dst = dri2_wl_swrast_get_backbuffer_data(dri2_surf); @@ -2747,6 +2741,13 @@ dri2_wl_swrast_swap_buffers_with_damage(_EGLDisplay *disp, _EGLSurface *draw, dri2_wl_swrast_attach_backbuffer(dri2_surf); + /* 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)) + wl_surface_damage(dri2_surf->wl_surface_wrapper, 0, 0, INT32_MAX, + INT32_MAX); + /* guarantee full copy for partial update */ int w = n_rects == 1 ? (rects[2] - rects[0]) : 0; int copy_width = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, w);