On Feb 15, 2016 3:24 AM, "Pekka Paalanen" <ppaala...@gmail.com> wrote: > > 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?
That's a very good idea. I would love to see this back ported a release or two. But we need to move quickly. 11.0 is about to be EOL. > > Thanks, > pq > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev