From c913a33d6a63a89d69b77659ac9ce2a9c7a10321 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Thu, 12 Dec 2024 21:38:39 +0100 Subject: [PATCH 1/3] cogl: Stop storing XDisplay on the Renderer Instead, only store it in the XlibRenderer data and drop the code related to connecting to XDisplay as MetaX11Display handles that already. Part-of: --- cogl/cogl/cogl-renderer-private.h | 4 ---- cogl/cogl/cogl-renderer.c | 6 ++++-- cogl/cogl/cogl-xlib-renderer.c | 34 +------------------------------ 3 files changed, 5 insertions(+), 39 deletions(-) diff --git a/cogl/cogl/cogl-renderer-private.h b/cogl/cogl/cogl-renderer-private.h index efe0eb0cbd4..26de4fcf4ec 100644 --- a/cogl/cogl/cogl-renderer-private.h +++ b/cogl/cogl/cogl-renderer-private.h @@ -56,10 +56,6 @@ struct _CoglRenderer CoglList idle_closures; -#ifdef HAVE_X11 - Display *foreign_xdpy; -#endif - CoglDriverId driver_id; unsigned long private_features [COGL_FLAGS_N_LONGS_FOR_SIZE (COGL_N_PRIVATE_FEATURES)]; diff --git a/cogl/cogl/cogl-renderer.c b/cogl/cogl/cogl-renderer.c index 9daba770fe4..bc41fb89f8d 100644 --- a/cogl/cogl/cogl-renderer.c +++ b/cogl/cogl/cogl-renderer.c @@ -65,6 +65,7 @@ #ifdef HAVE_X11 #include "cogl/cogl-xlib-renderer.h" +#include "cogl/cogl-xlib-renderer-private.h" #endif @@ -200,13 +201,14 @@ void cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer, Display *xdisplay) { + CoglXlibRenderer *xlib_renderer; g_return_if_fail (COGL_IS_RENDERER (renderer)); /* NB: Renderers are considered immutable once connected */ g_return_if_fail (!renderer->connected); - renderer->foreign_xdpy = xdisplay; - + xlib_renderer = _cogl_xlib_renderer_get_data (renderer); + xlib_renderer->xdpy = xdisplay; } #endif /* HAVE_X11 */ diff --git a/cogl/cogl/cogl-xlib-renderer.c b/cogl/cogl/cogl-xlib-renderer.c index ba76a79c4c5..19860450fbe 100644 --- a/cogl/cogl/cogl-xlib-renderer.c +++ b/cogl/cogl/cogl-xlib-renderer.c @@ -46,7 +46,6 @@ #include #include -static char *_cogl_x11_display_name = NULL; static GList *_cogl_xlib_renderers = NULL; static void @@ -88,33 +87,6 @@ unregister_xlib_renderer (CoglRenderer *renderer) _cogl_xlib_renderers = g_list_remove (_cogl_xlib_renderers, renderer); } -static Display * -assert_xlib_display (CoglRenderer *renderer, GError **error) -{ - Display *xdpy = renderer->foreign_xdpy; - CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer); - - /* A foreign display may have already been set... */ - if (xdpy) - { - xlib_renderer->xdpy = xdpy; - return xdpy; - } - - xdpy = XOpenDisplay (_cogl_x11_display_name); - if (xdpy == NULL) - { - g_set_error (error, - COGL_RENDERER_ERROR, - COGL_RENDERER_ERROR_XLIB_DISPLAY_OPEN, - "Failed to open X Display %s", _cogl_x11_display_name); - return NULL; - } - - xlib_renderer->xdpy = xdpy; - return xdpy; -} - static void free_xlib_output (CoglXlibOutput *output) { @@ -402,8 +374,7 @@ _cogl_xlib_renderer_connect (CoglRenderer *renderer, GError **error) int damage_error; int randr_error; - if (!assert_xlib_display (renderer, error)) - return FALSE; + g_return_val_if_fail (xlib_renderer->xdpy != NULL, FALSE); if (getenv ("COGL_X11_SYNC")) XSynchronize (xlib_renderer->xdpy, TRUE); @@ -445,9 +416,6 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer) g_list_free_full (xlib_renderer->outputs, (GDestroyNotify) free_xlib_output); xlib_renderer->outputs = NULL; - if (!renderer->foreign_xdpy && xlib_renderer->xdpy) - XCloseDisplay (xlib_renderer->xdpy); - g_clear_pointer (&renderer->custom_winsys_user_data, _xlib_renderer_data_free); unregister_xlib_renderer (renderer); -- GitLab From 903b94387519bcad62de7c26a1f1c52405f98b67 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Thu, 12 Dec 2024 21:42:17 +0100 Subject: [PATCH 2/3] cogl/xlib-renderer: Stop keeping track of the list of renderers As we can only have one renderer, if the connect phase fails, we would dispose it and there is no reason to manually register/unregister them. Part-of: --- cogl/cogl/cogl-xlib-renderer.c | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/cogl/cogl/cogl-xlib-renderer.c b/cogl/cogl/cogl-xlib-renderer.c index 19860450fbe..faa0bb9cc63 100644 --- a/cogl/cogl/cogl-xlib-renderer.c +++ b/cogl/cogl/cogl-xlib-renderer.c @@ -46,8 +46,6 @@ #include #include -static GList *_cogl_xlib_renderers = NULL; - static void _xlib_renderer_data_free (CoglXlibRenderer *data) { @@ -69,24 +67,6 @@ _cogl_xlib_renderer_get_data (CoglRenderer *renderer) return renderer->custom_winsys_user_data; } -static void -register_xlib_renderer (CoglRenderer *renderer) -{ - GList *l; - - for (l = _cogl_xlib_renderers; l; l = l->next) - if (l->data == renderer) - return; - - _cogl_xlib_renderers = g_list_prepend (_cogl_xlib_renderers, renderer); -} - -static void -unregister_xlib_renderer (CoglRenderer *renderer) -{ - _cogl_xlib_renderers = g_list_remove (_cogl_xlib_renderers, renderer); -} - static void free_xlib_output (CoglXlibOutput *output) { @@ -398,8 +378,6 @@ _cogl_xlib_renderer_connect (CoglRenderer *renderer, GError **error) | RROutputPropertyNotifyMask); update_outputs (renderer, FALSE); - register_xlib_renderer (renderer); - _cogl_renderer_add_native_filter (renderer, (CoglNativeFilterFunc)randr_filter, renderer); @@ -417,8 +395,6 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer) xlib_renderer->outputs = NULL; g_clear_pointer (&renderer->custom_winsys_user_data, _xlib_renderer_data_free); - - unregister_xlib_renderer (renderer); } Display * -- GitLab From 1e65e1106f1c15582c1d80580f8f33e088ed26dc Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Fri, 13 Dec 2024 14:42:23 +0100 Subject: [PATCH 3/3] cogl: Drop COGL_X11_SYNC env variable We already have a MUTTER_SYNC one. No need for doing the same thing twice. Part-of: --- cogl/cogl/cogl-xlib-renderer.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/cogl/cogl/cogl-xlib-renderer.c b/cogl/cogl/cogl-xlib-renderer.c index faa0bb9cc63..785a5ede2fb 100644 --- a/cogl/cogl/cogl-xlib-renderer.c +++ b/cogl/cogl/cogl-xlib-renderer.c @@ -356,9 +356,6 @@ _cogl_xlib_renderer_connect (CoglRenderer *renderer, GError **error) g_return_val_if_fail (xlib_renderer->xdpy != NULL, FALSE); - if (getenv ("COGL_X11_SYNC")) - XSynchronize (xlib_renderer->xdpy, TRUE); - /* Check whether damage events are supported on this display */ if (!XDamageQueryExtension (xlib_renderer->xdpy, &x11_renderer->damage_base, -- GitLab