From 0fc2b5fa9c33d10ff10b28a3f6c53099cb36ed24 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Thu, 8 Mar 2018 11:15:05 -0600 Subject: [PATCH] gl_drm: Check EGL client extensions before using platform_base The comment here was right, we shouldn't just trust these without testing if we should trust these. --- src/modules/evas/engines/gl_drm/evas_outbuf.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c b/src/modules/evas/engines/gl_drm/evas_outbuf.c index a648b96..b28dd57 100755 --- a/src/modules/evas/engines/gl_drm/evas_outbuf.c +++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c @@ -144,15 +144,21 @@ static Eina_Bool _evas_outbuf_init(void) { static int _init = 0; + if (_init) return EINA_TRUE; #ifdef EGL_MESA_platform_gbm - /* FIXME: Pretty sure we should be checking if EGL_EXT_platform_base - * exists before looking these up and trusting them? - */ - dlsym_eglGetPlatformDisplayEXT = (PFNEGLGETPLATFORMDISPLAYEXTPROC) - eglGetProcAddress("eglGetPlatformDisplayEXT"); - dlsym_eglCreatePlatformWindowSurfaceEXT = (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) - eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"); + { + const char *exts; + + exts = eglQueryString(NULL, EGL_EXTENSIONS); + if (exts && strstr(exts, "EGL_EXT_platform_base")) + { + dlsym_eglGetPlatformDisplayEXT = (PFNEGLGETPLATFORMDISPLAYEXTPROC) + eglGetProcAddress("eglGetPlatformDisplayEXT"); + dlsym_eglCreatePlatformWindowSurfaceEXT = (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) + eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"); + } + } #endif _init = 1; return EINA_TRUE; -- 2.7.4