On Thu, Apr 25, 2013 at 6:18 PM, Robert Bragg <rob...@sixbynine.org> wrote: > I've updated this patch to handle the case where 0 rectangles have been given > and updated the eglSwapBuffers shim to rely on that. Thanks to Eric for > noticing this.
The entire series looks good to me: Reviewed-by: Kristian Høgsberg <k...@bitplanet.net> > -- >8 -- > > Reviewed-by: Eric Anholt <e...@anholt.net> > > --- > src/egl/drivers/dri2/platform_wayland.c | 29 ++++++++++++++++++++++++++--- > 1 file changed, 26 insertions(+), 3 deletions(-) > > diff --git a/src/egl/drivers/dri2/platform_wayland.c > b/src/egl/drivers/dri2/platform_wayland.c > index e9a66af..f7c43e1 100644 > --- a/src/egl/drivers/dri2/platform_wayland.c > +++ b/src/egl/drivers/dri2/platform_wayland.c > @@ -442,7 +442,11 @@ static const struct wl_callback_listener frame_listener > = { > * Called via eglSwapBuffers(), drv->API.SwapBuffers(). > */ > static EGLBoolean > -dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) > +dri2_swap_buffers_with_damage(_EGLDriver *drv, > + _EGLDisplay *disp, > + _EGLSurface *draw, > + const EGLint *rects, > + EGLint n_rects) > { > struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); > struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw); > @@ -491,8 +495,18 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, > _EGLSurface *draw) > dri2_surf->dx = 0; > dri2_surf->dy = 0; > > - wl_surface_damage(dri2_surf->wl_win->surface, 0, 0, > - dri2_surf->base.Width, dri2_surf->base.Height); > + if (n_rects == 0) { > + wl_surface_damage(dri2_surf->wl_win->surface, 0, 0, > + dri2_surf->base.Width, dri2_surf->base.Height); > + } else { > + for (i = 0; i < n_rects; i++) { > + const int *rect = &rects[i * 4]; > + wl_surface_damage(dri2_surf->wl_win->surface, > + rect[0], > + dri2_surf->base.Height - rect[1] - rect[3], > + rect[2], rect[3]); > + } > + } > > wl_surface_commit(dri2_surf->wl_win->surface); > > @@ -517,6 +531,12 @@ dri2_query_buffer_age(_EGLDriver *drv, > return dri2_surf->back->age; > } > > +static EGLBoolean > +dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) > +{ > + return dri2_swap_buffers_with_damage (drv, disp, draw, NULL, 0); > +} > + > static int > dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id) > { > @@ -653,6 +673,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay > *disp) > drv->API.CreateWindowSurface = dri2_create_window_surface; > drv->API.DestroySurface = dri2_destroy_surface; > drv->API.SwapBuffers = dri2_swap_buffers; > + drv->API.SwapBuffersWithDamageEXT = dri2_swap_buffers_with_damage; > drv->API.Terminate = dri2_terminate; > drv->API.QueryBufferAge = dri2_query_buffer_age; > > @@ -722,6 +743,8 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay > *disp) > disp->Extensions.EXT_buffer_age = EGL_TRUE; > dri2_dpy->authenticate = dri2_wayland_authenticate; > > + disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE; > + > /* we're supporting EGL 1.4 */ > disp->VersionMajor = 1; > disp->VersionMinor = 4; > -- > 1.8.2.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev