Mesa (master): egl/wayland: Dispatch the event queue before get_buffers
Kristian Høgsberg
krh at kemper.freedesktop.org
Fri Nov 30 22:04:52 UTC 2012
Module: Mesa
Branch: master
Commit: 60a11e295b86475ff334291a5b483e422371b21c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=60a11e295b86475ff334291a5b483e422371b21c
Author: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
Date: Thu Nov 22 15:34:49 2012 +0200
egl/wayland: Dispatch the event queue before get_buffers
When a client frame callback is executed and the client starts rendering
again, the egl event queue might not have been dispatched so that the
buffer release event for the previous frame hasn't been processed. In
that case a third buffer is allocated, even though it would be possible
to reuse the buffer that was just released.
The wl_display_dispatch_queue_pending() entry point is available from
wayland-client 1.0.2, so require that in configure.ac. Also, just
let the pkg-config macro throw its own error, which will show what version
we were looking for and failed to find.
Note: This is a candidate for stable branches.
Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
---
configure.ac | 3 +--
src/egl/drivers/dri2/platform_wayland.c | 3 +++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index fc554dd..803c256 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1530,8 +1530,7 @@ for plat in $egl_platforms; do
;;
wayland)
- PKG_CHECK_MODULES([WAYLAND], [wayland-client >= 0.99.0 wayland-server >= 0.99.0],, \
- [AC_MSG_ERROR([cannot find libwayland-client])])
+ PKG_CHECK_MODULES([WAYLAND], [wayland-client >= 1.0.2 wayland-server >= 1.0.2])
GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
WAYLAND_PREFIX=`$PKG_CONFIG --variable=prefix wayland-client`
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 7c1aa94..ba54286 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -420,6 +420,9 @@ dri2_get_buffers_with_format(__DRIdrawable * driDrawable,
dri2_egl_display(dri2_surf->base.Resource.Display);
int i;
+ /* There might be a buffer release already queued that wasn't processed */
+ wl_display_dispatch_queue_pending(dri2_dpy->wl_dpy, dri2_dpy->wl_queue);
+
if (dri2_surf->base.Type == EGL_WINDOW_BIT &&
(dri2_surf->base.Width != dri2_surf->wl_win->width ||
dri2_surf->base.Height != dri2_surf->wl_win->height)) {
More information about the mesa-commit
mailing list