summaryrefslogtreecommitdiffstats
path: root/meta-raspberrypi/recipes-graphics/userland/userland/0016-Allow-multiple-wayland-compositor-state-data-per-pro.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-raspberrypi/recipes-graphics/userland/userland/0016-Allow-multiple-wayland-compositor-state-data-per-pro.patch')
-rw-r--r--meta-raspberrypi/recipes-graphics/userland/userland/0016-Allow-multiple-wayland-compositor-state-data-per-pro.patch145
1 files changed, 0 insertions, 145 deletions
diff --git a/meta-raspberrypi/recipes-graphics/userland/userland/0016-Allow-multiple-wayland-compositor-state-data-per-pro.patch b/meta-raspberrypi/recipes-graphics/userland/userland/0016-Allow-multiple-wayland-compositor-state-data-per-pro.patch
deleted file mode 100644
index d20ec829f..000000000
--- a/meta-raspberrypi/recipes-graphics/userland/userland/0016-Allow-multiple-wayland-compositor-state-data-per-pro.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From 6b4c4d469d435bfcfb464356b6ccc9421c6b8fd5 Mon Sep 17 00:00:00 2001
-From: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
-Date: Sat, 27 Jan 2018 12:28:31 -0500
-Subject: [PATCH 16/16] Allow multiple wayland compositor state data per
- process
-
-When eglBindWaylandDisplayWL is called store the wl_global
-created in a list associated with the wayland display.
-This allows multiple wayland compositor instances to be
-created and used per process. This scenario is common for
-applications integrating externl process UI elements
-via embedded composition e.g. westeros
-
-Signed-off-by: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- interface/khronos/common/khrn_client.c | 2 +-
- interface/khronos/common/khrn_client.h | 11 +++++++-
- interface/khronos/ext/egl_wayland.c | 50 ++++++++++++++++++++++++++++++----
- 3 files changed, 55 insertions(+), 8 deletions(-)
-
-diff --git a/interface/khronos/common/khrn_client.c b/interface/khronos/common/khrn_client.c
-index d7e798e..60bdb63 100644
---- a/interface/khronos/common/khrn_client.c
-+++ b/interface/khronos/common/khrn_client.c
-@@ -147,7 +147,7 @@ bool client_process_state_init(CLIENT_PROCESS_STATE_T *process)
- {
- if (!process->inited) {
- #ifdef BUILD_WAYLAND
-- process->wl_global = NULL;
-+ process->wlStateMap = NULL;
- #endif
-
- if (!khrn_pointer_map_init(&process->contexts, 64))
-diff --git a/interface/khronos/common/khrn_client.h b/interface/khronos/common/khrn_client.h
-index 615f7b4..4fa86f7 100644
---- a/interface/khronos/common/khrn_client.h
-+++ b/interface/khronos/common/khrn_client.h
-@@ -170,6 +170,15 @@ static INLINE CLIENT_THREAD_STATE_T *CLIENT_GET_CHECK_THREAD_STATE(void)
- return (CLIENT_THREAD_STATE_T *)platform_tls_get_check(client_tls);
- }
-
-+#ifdef BUILD_WAYLAND
-+typedef struct WAYLAND_STATE
-+{
-+ struct WAYLAND_STATE *next;
-+ struct wl_display *display;
-+ struct wl_global *wl_global;
-+} WAYLAND_STATE_T;
-+#endif
-+
- /*
- per-process state
-
-@@ -318,7 +327,7 @@ struct CLIENT_PROCESS_STATE {
- struct wl_event_queue *wl_queue;
-
- /* Compositor-side Wayland state */
-- struct wl_global *wl_global;
-+ WAYLAND_STATE_T *wlStateMap;
- #endif
- };
-
-diff --git a/interface/khronos/ext/egl_wayland.c b/interface/khronos/ext/egl_wayland.c
-index 9ef89cd..abd5ab3 100644
---- a/interface/khronos/ext/egl_wayland.c
-+++ b/interface/khronos/ext/egl_wayland.c
-@@ -208,17 +208,38 @@ eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
- {
- CLIENT_THREAD_STATE_T *thread;
- CLIENT_PROCESS_STATE_T *process;
-+ WAYLAND_STATE_T *stateIter;
-+ WAYLAND_STATE_T *stateNew;
-+ struct wl_global *wl_global;
-
- if (!CLIENT_LOCK_AND_GET_STATES(dpy, &thread, &process))
- return EGL_FALSE;
-
-- if (process->wl_global != NULL)
-+ stateIter= process->wlStateMap;
-+ while( stateIter )
-+ {
-+ if ( stateIter->display == display )
-+ goto error;
-+ stateIter= stateIter->next;
-+ }
-+
-+ wl_global = wl_global_create(display, &wl_dispmanx_interface, 1,
-+ NULL, bind_dispmanx);
-+ if (wl_global == NULL)
- goto error;
-
-- process->wl_global = wl_global_create(display, &wl_dispmanx_interface, 1,
-- NULL, bind_dispmanx);
-- if (process->wl_global == NULL)
-+ stateNew= (WAYLAND_STATE_T*)calloc( 1, sizeof(WAYLAND_STATE_T));
-+ if (stateNew == NULL )
-+ {
-+ wl_global_destroy(wl_global);
- goto error;
-+ }
-+
-+ stateNew->next= process->wlStateMap;
-+ stateNew->display= display;
-+ stateNew->wl_global= wl_global;
-+ process->wlStateMap= stateNew;
-+ CLIENT_UNLOCK();
-
- return EGL_TRUE;
-
-@@ -232,12 +253,29 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
- {
- CLIENT_THREAD_STATE_T *thread;
- CLIENT_PROCESS_STATE_T *process;
-+ WAYLAND_STATE_T *stateIter;
-+ WAYLAND_STATE_T *statePrev;
-
- if (!CLIENT_LOCK_AND_GET_STATES(dpy, &thread, &process))
- return EGL_FALSE;
-
-- wl_global_destroy(process->wl_global);
-- process->wl_global = NULL;
-+ statePrev= NULL;
-+ stateIter= process->wlStateMap;
-+ while( stateIter )
-+ {
-+ if ( stateIter->display == display )
-+ {
-+ wl_global_destroy(stateIter->wl_global);
-+ if ( statePrev )
-+ statePrev->next= stateIter->next;
-+ else
-+ process->wlStateMap= stateIter->next;
-+ free( stateIter );
-+ break;
-+ }
-+ statePrev= stateIter;
-+ stateIter= stateIter->next;
-+ }
-
- CLIENT_UNLOCK();
-
---
-2.16.1
-
OpenPOWER on IntegriCloud