[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