gl_drm: Check EGL client extensions before using platform_base
authorDerek Foreman <derekf@osg.samsung.com>
Thu, 8 Mar 2018 17:15:05 +0000 (11:15 -0600)
committerWonki Kim <wonki_.kim@samsung.com>
Tue, 10 Apr 2018 11:10:50 +0000 (20:10 +0900)
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

index a648b96..b28dd57 100755 (executable)
@@ -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;