From d884d8d0077c16d459b11699c552184dfec581b2 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Wed, 27 Sep 2017 17:36:29 +0100 Subject: [PATCH] egl/dri: link directly to libglapi.so Shared glapi (libglapi.so) has been a requirement for years, in order to build EGL. Remove the no longer necessary dlopen/dlsym dance and link to the library directly. This allows us to remove a handful of platform specific workarounds, due to the different name of the library. v2: - Android: export the include dir (RobH) - Drop unused local variable (Eric) Cc: Jonathan Gray Cc: Jon Turney Cc: Julien Isorce Signed-off-by: Emil Velikov Reviewed-by: Eric Engestrom (v1) Tested-by: Tomasz Figa (v1) Tested-by: Rob Herring --- src/egl/Android.mk | 1 + src/egl/Makefile.am | 2 ++ src/egl/drivers/dri2/egl_dri2.c | 42 ++++----------------------------- src/egl/drivers/dri2/egl_dri2.h | 2 -- src/mapi/Android.mk | 3 +++ 5 files changed, 10 insertions(+), 40 deletions(-) diff --git a/src/egl/Android.mk b/src/egl/Android.mk index d7a6e88918f..2de842ca417 100644 --- a/src/egl/Android.mk +++ b/src/egl/Android.mk @@ -53,6 +53,7 @@ LOCAL_STATIC_LIBRARIES := \ LOCAL_SHARED_LIBRARIES := \ libdl \ + libglapi \ libhardware \ liblog \ libcutils \ diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am index f140f5d6412..eeb745f973a 100644 --- a/src/egl/Makefile.am +++ b/src/egl/Makefile.am @@ -27,6 +27,7 @@ BUILT_SOURCES = AM_CFLAGS = \ -I$(top_srcdir)/include \ + -I$(top_srcdir)/src/mapi \ -I$(top_srcdir)/src/egl/main \ -I$(top_srcdir)/src/gbm/main \ -I$(top_srcdir)/src \ @@ -45,6 +46,7 @@ libEGL_common_la_SOURCES = \ $(LIBEGL_C_FILES) libEGL_common_la_LIBADD = \ + $(top_builddir)/src/mapi/shared-glapi/libglapi.la \ $(top_builddir)/src/util/libmesautil.la \ $(EGL_LIB_DEPS) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index adcaae0bab7..c2b16d11732 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -62,6 +62,7 @@ #include "loader/loader.h" #include "util/u_atomic.h" #include "util/u_vector.h" +#include "mapi/glapi/glapi.h" /* The kernel header drm_fourcc.h defines the DRM formats below. We duplicate * some of the definitions here so that building Mesa won't bleeding-edge @@ -1564,9 +1565,7 @@ dri2_surface_get_dri_drawable(_EGLSurface *surf) static _EGLProc dri2_get_proc_address(_EGLDriver *drv, const char *procname) { - struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv); - - return dri2_drv->get_proc_address(procname); + return _glapi_get_proc_address(procname); } static _EGLSurface* @@ -3169,7 +3168,6 @@ dri2_unload(_EGLDriver *drv) { struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv); - dlclose(dri2_drv->handle); free(dri2_drv); } @@ -3177,49 +3175,17 @@ static EGLBoolean dri2_load(_EGLDriver *drv) { struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv); -#ifdef HAVE_ANDROID_PLATFORM - const char *libname = "libglapi.so"; -#elif defined(__APPLE__) - const char *libname = "libglapi.0.dylib"; -#elif defined(__CYGWIN__) - const char *libname = "cygglapi-0.dll"; -#else - const char *libname = "libglapi.so.0"; -#endif - void *handle; - - /* RTLD_GLOBAL to make sure glapi symbols are visible to DRI drivers */ - handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL); - if (!handle) { - _eglLog(_EGL_WARNING, "DRI2: failed to open glapi provider"); - goto no_handle; - } - - dri2_drv->get_proc_address = (_EGLProc (*)(const char *)) - dlsym(handle, "_glapi_get_proc_address"); - - /* if glapi is not available, loading DRI drivers will fail */ - if (!dri2_drv->get_proc_address) { - _eglLog(_EGL_WARNING, "DRI2: failed to find _glapi_get_proc_address"); - goto no_symbol; - } dri2_drv->glFlush = (void (*)(void)) - dri2_drv->get_proc_address("glFlush"); + _glapi_get_proc_address("glFlush"); /* if glFlush is not available things are horribly broken */ if (!dri2_drv->glFlush) { _eglLog(_EGL_WARNING, "DRI2: failed to find glFlush entry point"); - goto no_symbol; + return EGL_FALSE; } - dri2_drv->handle = handle; return EGL_TRUE; - -no_symbol: - dlclose(handle); -no_handle: - return EGL_FALSE; } /** diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 10a41518172..c70a84bb917 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -83,8 +83,6 @@ struct dri2_egl_driver { _EGLDriver base; - void *handle; - _EGLProc (*get_proc_address)(const char *procname); void (*glFlush)(void); }; diff --git a/src/mapi/Android.mk b/src/mapi/Android.mk index 552bab69625..06a76470099 100644 --- a/src/mapi/Android.mk +++ b/src/mapi/Android.mk @@ -50,6 +50,9 @@ LOCAL_CFLAGS := \ LOCAL_C_INCLUDES := \ $(MESA_TOP)/src/mapi +LOCAL_EXPORT_C_INCLUDES := \ + $(MESA_TOP)/src/mapi + LOCAL_MODULE := libglapi LOCAL_MODULE_CLASS := SHARED_LIBRARIES -- 2.30.2