On Thu, 11 Feb 2016 10:34:10 -0600 Derek Foreman <der...@osg.samsung.com> wrote:
> Since commit d1314de293e9e4a63c35f094c3893aaaed8580b4 we ignore > damage passed to SwapBuffersWithDamage. > > Wayland 1.10 now has functionality that allows us to properly > process those damage rectangles, and a way to query if it's > available. > > Now we can use wl_surface.damage_buffer and interpret the incoming > damage as being in buffer co-ordinates. > > Signed-off-by: Derek Foreman <der...@osg.samsung.com> > --- > src/egl/drivers/dri2/platform_wayland.c | 32 +++++++++++++++++++++++++++++--- > 1 file changed, 29 insertions(+), 3 deletions(-) > > diff --git a/src/egl/drivers/dri2/platform_wayland.c > b/src/egl/drivers/dri2/platform_wayland.c > index c2438f7..b5a5b59 100644 > --- a/src/egl/drivers/dri2/platform_wayland.c > +++ b/src/egl/drivers/dri2/platform_wayland.c > @@ -653,6 +653,30 @@ create_wl_buffer(struct dri2_egl_surface *dri2_surf) > &wl_buffer_listener, dri2_surf); > } > > +static EGLBoolean > +try_damage_buffer(struct dri2_egl_surface *dri2_surf, > + const EGLint *rects, > + EGLint n_rects) > +{ > +#ifdef WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION > + int i; > + > + if (wl_proxy_get_version((struct wl_proxy *) dri2_surf->wl_win->surface) > + < WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION) > + return EGL_FALSE; > + > + for (i = 0; i < n_rects; i++) { > + const int *rect = &rects[i * 4]; > + > + wl_surface_damage_buffer(dri2_surf->wl_win->surface, > + rect[0], > + dri2_surf->base.Height - rect[1] - rect[3], > + rect[2], rect[3]); > + } > + return EGL_TRUE; > +#endif > + return EGL_FALSE; > +} > /** > * Called via eglSwapBuffers(), drv->API.SwapBuffers(). > */ > @@ -703,10 +727,12 @@ dri2_wl_swap_buffers_with_damage(_EGLDriver *drv, > dri2_surf->dx = 0; > dri2_surf->dy = 0; > > - /* We deliberately ignore the damage region and post maximum damage, due > to > + /* 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 */ > - wl_surface_damage(dri2_surf->wl_win->surface, > - 0, 0, INT32_MAX, INT32_MAX); > + if (!n_rects || !try_damage_buffer(dri2_surf, rects, n_rects)) > + wl_surface_damage(dri2_surf->wl_win->surface, > + 0, 0, INT32_MAX, INT32_MAX); > > if (dri2_dpy->is_different_gpu) { > _EGLContext *ctx = _eglGetCurrentContext(); Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> But I also agree with Emil that having a comment on #ifdef WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION usage is good to add. Bumping the wayland-client requirement to >= 1.10 would be nice, but currently the requirement seems to be 1.2 so I wonder if there are other things to be cleaned up too. OTOH, with the #ifdef this patch could go to stable branches, couldn't it? How about landing this is as is, tagged for stable, and a follow-up if wanted to bump the wayland-client dependency on master? Would that be appropriate? Thanks, pq
pgph0hauASsPL.pgp
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev