From 3a858da28e0517a862e40ea992f8bb0f2988dc33 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 18 Oct 2024 17:19:14 +0200 Subject: [PATCH 1/2] cogl/egl: Choose config only if needed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In try_create_context(), if COGL_EGL_WINSYS_FEATURE_NO_CONFIG_CONTEXT is set, don't try to choose an egl config. Signed-off-by: Jocelyn Falempe Signed-off-by: Jonas Ã…dahl Part-of: (cherry picked from commit 18085b0e402ba5a7fe9c6a06a8cbb0bfcaabebf7) --- cogl/cogl/winsys/cogl-winsys-egl-private.h | 2 ++ cogl/cogl/winsys/cogl-winsys-egl-x11.c | 1 + cogl/cogl/winsys/cogl-winsys-egl.c | 27 +++++++++++++--------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/cogl/cogl/winsys/cogl-winsys-egl-private.h b/cogl/cogl/winsys/cogl-winsys-egl-private.h index 6a31d1ab2d..30821cc22f 100644 --- a/cogl/cogl/winsys/cogl-winsys-egl-private.h +++ b/cogl/cogl/winsys/cogl-winsys-egl-private.h @@ -120,6 +120,8 @@ typedef struct _CoglRendererEGL /* vtable for platform specific parts */ const CoglWinsysEGLVtable *platform_vtable; + gboolean needs_config; + /* Sync for latest submitted work */ EGLSyncKHR sync; diff --git a/cogl/cogl/winsys/cogl-winsys-egl-x11.c b/cogl/cogl/winsys/cogl-winsys-egl-x11.c index 7393f79f6a..d61e82f4de 100644 --- a/cogl/cogl/winsys/cogl-winsys-egl-x11.c +++ b/cogl/cogl/winsys/cogl-winsys-egl-x11.c @@ -244,6 +244,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer, egl_renderer->platform_vtable = &_cogl_winsys_egl_vtable; egl_renderer->sync = EGL_NO_SYNC_KHR; + egl_renderer->needs_config = TRUE; if (!_cogl_xlib_renderer_connect (renderer, error)) goto error; diff --git a/cogl/cogl/winsys/cogl-winsys-egl.c b/cogl/cogl/winsys/cogl-winsys-egl.c index b37ba15316..54a402aee2 100644 --- a/cogl/cogl/winsys/cogl-winsys-egl.c +++ b/cogl/cogl/winsys/cogl-winsys-egl.c @@ -329,19 +329,24 @@ try_create_context (CoglDisplay *display, edpy = egl_renderer->edpy; - if (!egl_renderer->platform_vtable->choose_config (display, - cfg_attribs, - &config, - &config_error)) + if (!(egl_renderer->private_features & + COGL_EGL_WINSYS_FEATURE_NO_CONFIG_CONTEXT) || + egl_renderer->needs_config) { - g_set_error (error, COGL_WINSYS_ERROR, - COGL_WINSYS_ERROR_CREATE_CONTEXT, - "Couldn't choose config: %s", config_error->message); - g_error_free (config_error); - goto err; - } + if (!egl_renderer->platform_vtable->choose_config (display, + cfg_attribs, + &config, + &config_error)) + { + g_set_error (error, COGL_WINSYS_ERROR, + COGL_WINSYS_ERROR_CREATE_CONTEXT, + "Couldn't choose config: %s", config_error->message); + g_error_free (config_error); + goto err; + } - egl_display->egl_config = config; + egl_display->egl_config = config; + } if (display->renderer->driver == COGL_DRIVER_GL3) { -- 2.44.0.501.g19981daefd.dirty