summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2017-07-19 12:02:03 -0500
committerDerek Foreman <derekf@osg.samsung.com>2017-07-19 12:02:03 -0500
commiteda81c6dffd84fdf7640ea1ba3a783535544b0f7 (patch)
treefe009b2c916f83d15dc5f5f3e90aa6879d82997a
parentc7fe083a57c7047b2752592545e419e60b1adfd9 (diff)
downloadefl-eda81c6dffd84fdf7640ea1ba3a783535544b0f7.tar.gz
gl_drm: Defer gl symbol lookups until they're possible
See previous commit for details.
-rw-r--r--src/modules/evas/engines/gl_drm/evas_engine.c22
-rw-r--r--src/modules/evas/engines/gl_drm/evas_engine.h2
-rw-r--r--src/modules/evas/engines/gl_drm/evas_outbuf.c2
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;