egl/dri/wl: Move swrast damage region from put to swap

Pass application provided damage region to the compositor instead
of damaging the entire display. This also gives us the possibility
in the future to have put image only copy the parts of the framebuffer
that were modified.

Fixes: fa465e34ca
Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31210>
This commit is contained in:
Lucas Fryzek
2024-09-17 15:15:56 +01:00
committed by Marge Bot
parent 755e795e4c
commit 32af15384d
+7 -6
View File
@@ -2627,12 +2627,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);
@@ -2720,6 +2714,13 @@ dri2_wl_swrast_swap_buffers_with_damage(_EGLDisplay *disp, _EGLSurface *draw,
dri2_surf->back->wl_buffer, dri2_surf->dx,
dri2_surf->dy);
/* 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);