targets/egl: Improve st_GL.so loading.
authorChia-I Wu <olv@lunarg.com>
Fri, 10 Dec 2010 02:44:03 +0000 (10:44 +0800)
committerChia-I Wu <olv@lunarg.com>
Fri, 10 Dec 2010 03:01:05 +0000 (11:01 +0800)
When the application is not linked to any libGL*.so, loading st_GL.so
would give

  /usr/local/lib/egl/st_GL.so: undefined symbol: _glapi_tls_Context

In that case, load libGL.so and try again.  This works because
util_dl_open loads with RTLD_GLOBAL.

Fix "clear" OpenGL ES 1.1 demo.

src/gallium/targets/egl/egl.c

index 19404c8ef6da98533423560532536071046ee084..bb182ba9845d5d70ba4234a7e60c8bb80ac0e3ac 100644 (file)
@@ -237,6 +237,21 @@ get_st_api_full(enum st_api_type api, enum st_profile_type profile)
          break;
    }
 
+   /* try again with libGL.so loaded */
+   if (!stmod->stapi && api == ST_API_OPENGL) {
+      struct util_dl_library *glapi = util_dl_open("libGL" UTIL_DL_EXT);
+
+      if (glapi) {
+         _eglLog(_EGL_DEBUG, "retry with libGL" UTIL_DL_EXT " loaded");
+         /* skip the last name (which is NULL) */
+         for (i = 0; i < count - 1; i++) {
+            if (load_st_module(stmod, names[i], symbol))
+               break;
+         }
+         util_dl_close(glapi);
+      }
+   }
+
    if (!stmod->stapi) {
       EGLint level = (egl_g3d_loader.profile_masks[api]) ?
          _EGL_WARNING : _EGL_DEBUG;