derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=eda81c6dffd84fdf7640ea1ba3a783535544b0f7

commit eda81c6dffd84fdf7640ea1ba3a783535544b0f7
Author: Derek Foreman <der...@osg.samsung.com>
Date:   Wed Jul 19 12:02:03 2017 -0500

    gl_drm: Defer gl symbol lookups until they're possible
    
    See previous commit for details.
---
 src/modules/evas/engines/gl_drm/evas_engine.c | 22 ++++++++++++++--------
 src/modules/evas/engines/gl_drm/evas_engine.h |  2 ++
 src/modules/evas/engines/gl_drm/evas_outbuf.c |  2 ++
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/modules/evas/engines/gl_drm/evas_engine.c 
b/src/modules/evas/engines/gl_drm/evas_engine.c
index b15293ae45..f5109a3875 100644
--- a/src/modules/evas/engines/gl_drm/evas_engine.c
+++ b/src/modules/evas/engines/gl_drm/evas_engine.c
@@ -80,7 +80,6 @@ unsigned int (*glsym_eglQueryWaylandBufferWL)(EGLDisplay a, 
void *b, EGLint c, E
 unsigned int (*glsym_eglSetDamageRegionKHR)(EGLDisplay a, EGLSurface b, EGLint 
*c, EGLint d) = NULL;
 
 /* local function prototypes */
-static void gl_symbols(void);
 static void gl_extn_veto(Render_Engine *re);
 
 static void *evgl_eng_display_get(void *data);
@@ -148,12 +147,10 @@ eng_gbm_shutdown(Evas_Engine_Info_GL_Drm *info)
    return EINA_TRUE;
 }
 
-/* local functions */
 static void
-gl_symbols(void)
+symbols(void)
 {
    static Eina_Bool done = EINA_FALSE;
-   const char *exts = NULL;
 
    if (done) return;
 
@@ -188,12 +185,21 @@ gl_symbols(void)
    LINK2GENERIC(evas_gl_common_eglCreateImage);
    LINK2GENERIC(evas_gl_common_eglDestroyImage);
 
+   done = EINA_TRUE;
+}
+
+void
+eng_gl_symbols(EGLDisplay edsp)
+{
+   static Eina_Bool done = EINA_FALSE;
+   const char *exts = NULL;
+
+   if (done) return;
+
 #define FINDSYM(dst, sym, typ) \
    if (!dst) dst = (typ)glsym_eglGetProcAddress(sym);
 
-   // Find EGL extensions
-   // FIXME: whgen above eglGetDisplay() is fixed... fix the below...
-//   exts = eglQueryString(ob->egl_disp, EGL_EXTENSIONS);
+   exts = eglQueryString(edsp, EGL_EXTENSIONS);
    glsym_evas_gl_symbols(glsym_eglGetProcAddress, exts);
 
    FINDSYM(glsym_glEGLImageTargetTexture2DOES,
@@ -1518,7 +1524,7 @@ module_open(Evas_Module *em)
     * implicit env set (EGL_PLATFORM=drm) prevent that. */
    setenv("EGL_PLATFORM", "drm", 1);
 
-   gl_symbols();
+   symbols();
 
    /* now advertise out own api */
    em->functions = (void *)(&func);
diff --git a/src/modules/evas/engines/gl_drm/evas_engine.h 
b/src/modules/evas/engines/gl_drm/evas_engine.h
index 78ff7b7418..107c9387b1 100644
--- a/src/modules/evas/engines/gl_drm/evas_engine.h
+++ b/src/modules/evas/engines/gl_drm/evas_engine.h
@@ -137,6 +137,8 @@ void *evas_outbuf_egl_display_get(Outbuf *ob);
 Context_3D *evas_outbuf_gl_context_new(Outbuf *ob);
 void evas_outbuf_gl_context_use(Context_3D *ctx);
 
+void eng_gl_symbols(EGLDisplay edsp);
+
 static inline Eina_Bool
 _re_wincheck(Outbuf *ob)
 {
diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c 
b/src/modules/evas/engines/gl_drm/evas_outbuf.c
index 69fe64cb1f..642ac7ad0a 100644
--- a/src/modules/evas/engines/gl_drm/evas_outbuf.c
+++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c
@@ -356,6 +356,8 @@ _evas_outbuf_egl_setup(Outbuf *ob)
         goto err;
      }
 
+   eng_gl_symbols(ob->egl.disp);
+
    ob->gl_context = glsym_evas_gl_common_context_new();
    if (!ob->gl_context) goto err;
 

-- 


Reply via email to