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