[Mesa-dev] [PATCH v2 3/3] egl/wayland: Implement EGL_EXT_buffer_age

Kristian Høgsberg hoegsberg at gmail.com
Mon Jan 14 13:34:37 PST 2013


On Mon, Jan 14, 2013 at 03:50:22PM +0200, Ander Conselvan de Oliveira wrote:
> On 01/09/2013 04:45 PM, Kristian Høgsberg wrote:
> >---
> >  src/egl/drivers/dri2/platform_wayland.c |   25 ++++++++++++++++++++++++-
> >  1 file changed, 24 insertions(+), 1 deletion(-)
> >
> >diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
> >index 5b5c849..e9a66af 100644
> >--- a/src/egl/drivers/dri2/platform_wayland.c
> >+++ b/src/egl/drivers/dri2/platform_wayland.c
> >@@ -286,6 +286,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf, __DRIbuffer *buffer)
> >                                          __DRI_BUFFER_BACK_LEFT, 32,
> >                                          dri2_surf->base.Width,
> >                                          dri2_surf->base.Height);
> >+      dri2_surf->back->age = 0;
> >     }
> >     if (dri2_surf->back->dri_buffer == NULL)
> >        return -1;
> >@@ -445,7 +446,7 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
> >  {
> >     struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> >     struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
> >-   int ret = 0;
> >+   int i, ret = 0;
> >
> >     while (dri2_surf->frame_callback && ret != -1)
> >        ret = wl_display_dispatch_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue);
> >@@ -458,6 +459,11 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
> >     wl_proxy_set_queue((struct wl_proxy *) dri2_surf->frame_callback,
> >                        dri2_dpy->wl_queue);
> >
> >+   for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++)
> >+      if (dri2_surf->color_buffers[i].age > 0)
> >+         dri2_surf->color_buffers[i].age++;
> >+
> >+   dri2_surf->back->age = 1;
> >     dri2_surf->current = dri2_surf->back;
> >     dri2_surf->back = NULL;
> >
> >@@ -496,6 +502,21 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
> >     return EGL_TRUE;
> >  }
> >
> >+static EGLint
> >+dri2_query_buffer_age(_EGLDriver *drv,
> >+                      _EGLDisplay *disp, _EGLSurface *surface)
> >+{
> >+   struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface);
> >+   __DRIbuffer buffer;
> >+
> >+   if (get_back_bo(dri2_surf, &buffer) < 0) {
> >+      _eglError(EGL_BAD_ALLOC, "dri2_query_buffer_age");
> >+      return 0;
> >+   }
> >+
> >+   return dri2_surf->back->age;
> >+}
> >+
> >  static int
> >  dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
> >  {
> >@@ -633,6 +654,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
> >     drv->API.DestroySurface = dri2_destroy_surface;
> >     drv->API.SwapBuffers = dri2_swap_buffers;
> >     drv->API.Terminate = dri2_terminate;
> >+   drv->API.QueryBufferAge = dri2_query_buffer_age;
> >
> >     dri2_dpy = calloc(1, sizeof *dri2_dpy);
> >     if (!dri2_dpy)
> >@@ -697,6 +719,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
> >     }
> >
> >     disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
> >+   disp->Extensions.EXT_buffer_age = EGL_TRUE;
> >     dri2_dpy->authenticate = dri2_wayland_authenticate;
> >
> >     /* we're supporting EGL 1.4 */
> >
> 
> 
> Reviewed-by: Ander Conselvan de Oliveira <conselvan2 at gmail.com>

Thanks Ander, both patches now committed.

Kristian


More information about the mesa-dev mailing list