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 <jsg@jsg.id.au> Cc: Jon Turney <jon.turney@dronecode.org.uk> Cc: Julien Isorce <julien.isorce@gmail.com> Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com> (v1) Tested-by: Tomasz Figa <tfiga@chromium.org> (v1) Tested-by: Rob Herring <robh@kernel.org>
This commit is contained in:
parent
21e271024d
commit
d884d8d007
|
@ -53,6 +53,7 @@ LOCAL_STATIC_LIBRARIES := \
|
|||
|
||||
LOCAL_SHARED_LIBRARIES := \
|
||||
libdl \
|
||||
libglapi \
|
||||
libhardware \
|
||||
liblog \
|
||||
libcutils \
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -83,8 +83,6 @@ struct dri2_egl_driver
|
|||
{
|
||||
_EGLDriver base;
|
||||
|
||||
void *handle;
|
||||
_EGLProc (*get_proc_address)(const char *procname);
|
||||
void (*glFlush)(void);
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue