[Mesa-dev] [PATCH 3/8] egl/gbm: Implement EGL_EXT_buffer_age

Eric Anholt eric at anholt.net
Fri Dec 14 16:54:32 PST 2012


Kristian Høgsberg <krh at bitplanet.net> writes:

> ---
>  src/egl/drivers/dri2/egl_dri2.h     |    1 +
>  src/egl/drivers/dri2/platform_drm.c |   23 +++++++++++++++++++++++
>  2 files changed, 24 insertions(+)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
> index be359d3..fa2a9f3 100644
> --- a/src/egl/drivers/dri2/egl_dri2.h
> +++ b/src/egl/drivers/dri2/egl_dri2.h
> @@ -189,6 +189,7 @@ struct dri2_egl_surface
>     struct {
>        struct gbm_bo       *bo;
>        int                  locked;
> +      int                  age;
>     } color_buffers[3], *back, *current;
>  #ifndef HAVE_WAYLAND_PLATFORM
>     __DRIbuffer           *dri_buffers[__DRI_BUFFER_COUNT];
> diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
> index 3e04a6c..1923033 100644
> --- a/src/egl/drivers/dri2/platform_drm.c
> +++ b/src/egl/drivers/dri2/platform_drm.c
> @@ -324,11 +324,16 @@ 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 i;
>  
>     if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
>        if (dri2_surf->current)
>  	 _eglError(EGL_BAD_SURFACE, "dri2_swap_buffers");
> +      for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++)
> +         if (dri2_surf->color_buffers[i].bo)
> +            dri2_surf->color_buffers[i].age++;
>        dri2_surf->current = dri2_surf->back;
> +      dri2_surf->current->age = 1;
>        dri2_surf->back = NULL;

OK, if I'm following this right, the ages of my buffers with this code are:

entering my first swap
buffers[0] = 0 <- front
buffers[1] = 0 <- back

after first swap:
buffers[0] = 1 <- back
buffers[1] = 1 <- front

after second swap:
buffers[0] = 1 <- front
buffers[1] = 2 <- back

But reading the spec, I think it's supposed to be:

entering my first swap
buffers[0] = 0 <- front
buffers[1] = 0 <- back

after first swap:
buffers[0] = 0 <- back
buffers[1] = 1 <- front

after second swap:
buffers[0] = 1 <- front
buffers[1] = 2 <- back

Note how after the first swap, my backbuffer should have an age of 0, for
"unknown junk".
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20121214/02bef3f9/attachment.pgp>


More information about the mesa-dev mailing list