[PATCH weston] rpi: avoid vc_dispmanx_set_wl_buffer_in_use without EGL

ppaalanen at gmail.com ppaalanen at gmail.com
Fri Nov 22 07:30:39 PST 2013


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

The symbol is needed only for the EGL buffer path. If --disable-egl is
given to ./configure, there is no need for it, so fix it to actually not
look for that symbol needlessly.

This should fix the runtime error:

	Failed to load module: .../rpi-backend.so: undefined symbol:
	vc_dispmanx_set_wl_buffer_in_use

when you use --disable-egl and do not have a recent enough
libraspberrypi package (/opt/vc, a.k.a userland.git) that would provide
vc_dispmanx_set_wl_buffer_in_use. Apparently no released version of
userland yet provides this.

The calls are organized into two helper functions to avoid a boolean
argument, and put the #ifdefs away from the main parts of the code.

Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
Cc: Tomeu Vizoso <tomeu at tomeuvizoso.net>
---

Tomeu, would this be ok with you?
---
 src/rpi-renderer.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/rpi-renderer.c b/src/rpi-renderer.c
index 1940db7..2b6d12c 100644
--- a/src/rpi-renderer.c
+++ b/src/rpi-renderer.c
@@ -385,6 +385,22 @@ rpi_resource_update(struct rpi_resource *resource, struct weston_buffer *buffer,
 	return ret ? -1 : 0;
 }
 
+static inline void
+rpi_buffer_egl_lock(struct weston_buffer *buffer)
+{
+#ifdef ENABLE_EGL
+	vc_dispmanx_set_wl_buffer_in_use(buffer->resource, 1);
+#endif
+}
+
+static inline void
+rpi_buffer_egl_unlock(struct weston_buffer *buffer)
+{
+#ifdef ENABLE_EGL
+	vc_dispmanx_set_wl_buffer_in_use(buffer->resource, 0);
+#endif
+}
+
 static void
 rpir_egl_buffer_destroy(struct rpir_egl_buffer *egl_buffer)
 {
@@ -400,7 +416,7 @@ rpir_egl_buffer_destroy(struct rpir_egl_buffer *egl_buffer)
 		 */
 		vc_dispmanx_resource_delete(egl_buffer->resource_handle);
 	} else {
-		vc_dispmanx_set_wl_buffer_in_use(buffer->resource, 0);
+		rpi_buffer_egl_unlock(buffer);
 		weston_buffer_reference(&egl_buffer->buffer_ref, NULL);
 	}
 
@@ -1294,7 +1310,7 @@ rpi_renderer_repaint_output(struct weston_output *base,
 			struct weston_buffer *buffer;
 			buffer = view->surface->egl_front->buffer_ref.buffer;
 			if (buffer != NULL) {
-				vc_dispmanx_set_wl_buffer_in_use(buffer->resource, 1);
+				rpi_buffer_egl_lock(buffer);
 			} else {
 				weston_log("warning: client destroyed current front buffer\n");
 
-- 
1.8.1.5



More information about the wayland-devel mailing list