This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch fix-release-build
in repository efl.

View the commit online.

commit 1e1b94d11aacbb923f1d44515e688cac3cc8212d
Author: Cedric BAIL <[email protected]>
AuthorDate: Thu Aug 6 22:40:32 2026 -0600

    ecore_evas/drm: don't require libglapi for the gl_drm engine
    
    Mesa 25.1 folded libglapi into libgallium and stopped shipping
    libglapi.so.0.  We dlopen()ed it and bailed out when dlerror() was set,
    so on every mesa >= 25.1 system ecore_evas_gl_drm_new() returned NULL -
    with nothing logged at all.  Enlightenment then quietly fell back to the
    software drm engine and spun forever in evas_render_rendering_wait().
    
    The dlopen() was only there so the GL dispatch symbols were visible to
    the dlsym(RTLD_DEFAULT, "gl*") lookups in gl_common; libEGL pulls the
    dispatch in either way, so the library going missing is harmless.  Keep
    trying it for older stacks where it really is a separate object, but
    never treat its absence as fatal.
    
    dlerror() was the wrong test regardless - it also reports errors left
    over from unrelated earlier dlopen()s.  Check the handle instead.
    
    While here, log the engine lookup failure in _ecore_evas_new_internal()
    rather than returning NULL mutely, since callers read that as "use the
    software engine instead" and the reason was getting lost.
    
    Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
---
 .../ecore_evas/engines/drm/ecore_evas_drm.c        | 28 ++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
index c024e6322c..a1ece1305a 100644
--- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
@@ -1003,7 +1003,13 @@ _ecore_evas_new_internal(const char *device, int x, int y, int w, int h, Eina_Bo
    else
      method = evas_render_method_lookup("drm");
 
-   if (!method) return NULL;
+   /* Callers treat NULL as "try the software engine instead", so failing
+    * mutely here just moves the confusion downstream - say why. */
+   if (!method)
+     {
+        ERR("Evas engine '%s' is unavailable", gl ? "gl_drm" : "drm");
+        return NULL;
+     }
 
    ee = calloc(1, sizeof(Ecore_Evas));
    if (!ee) return NULL;
@@ -1147,10 +1153,24 @@ ecore_evas_drm_new_internal(const char *device, unsigned int parent EINA_UNUSED,
 EMODAPI Ecore_Evas *
 ecore_evas_gl_drm_new_internal(const char *device, unsigned int parent EINA_UNUSED, int x, int y, int w, int h)
 {
-   static void *libglapi = NULL;
+   static Eina_Bool tried = EINA_FALSE;
 
-   if (!libglapi) libglapi = dlopen("libglapi.so.0", RTLD_LAZY | RTLD_GLOBAL);
-   if (dlerror()) return NULL;
+   /* We used to force-load libglapi so the GL dispatch symbols were visible
+    * to the dlsym(RTLD_DEFAULT, "gl*") lookups gl_common does.  Mesa 25.1
+    * folded libglapi into libgallium and stopped shipping it, so it being
+    * missing is now the normal case and must not be fatal - libEGL brings
+    * the dispatch in either way.  Still try it for older stacks where it
+    * really is a separate object.
+    * NB: dlerror() is not a reliable failure test here.  It also reports
+    * errors left over from unrelated earlier dlopen()s, which is how this
+    * turned into a silent "no GL for you" on every mesa >= 25.1 system. */
+   if (!tried)
+     {
+        tried = EINA_TRUE;
+        if (!dlopen("libglapi.so.0", RTLD_LAZY | RTLD_GLOBAL))
+          DBG("libglapi.so.0 unavailable (expected on mesa >= 25.1): %s",
+              dlerror());
+     }
 
    return _ecore_evas_new_internal(device, x, y, w, h, EINA_TRUE);
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to