mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
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:fa465e34caAcked-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> (cherry picked from commit32af15384d)
This commit is contained in:
parent
36fb8e658a
commit
3799f13b32
2 changed files with 8 additions and 7 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue