From 2b9e4f6a2490864ead44e88a68da78be5cb3da22 Mon Sep 17 00:00:00 2001 From: Brian Swetland Date: Mon, 20 Sep 2010 12:58:15 -0700 Subject: [PATCH] support loading EGL libraries from /vendor/lib/egl as well as /system/lib/egl Change-Id: Idd9ca85ce3ba6c92234375071b53e5365e689062 --- opengl/libs/EGL/Loader.cpp | 28 +++++++++++++++------------- opengl/libs/EGL/Loader.h | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp index 5d6ac26a99..747c829eda 100644 --- a/opengl/libs/EGL/Loader.cpp +++ b/opengl/libs/EGL/Loader.cpp @@ -136,30 +136,24 @@ void* Loader::open(EGLNativeDisplayType display, int impl, egl_connection_t* cnx */ void* dso; - char path[PATH_MAX]; int index = int(display); driver_t* hnd = 0; - const char* const format = "/system/lib/egl/lib%s_%s.so"; char const* tag = getTag(index, impl); if (tag) { - snprintf(path, PATH_MAX, format, "GLES", tag); - dso = load_driver(path, cnx, EGL | GLESv1_CM | GLESv2); + dso = load_driver("GLES", tag, cnx, EGL | GLESv1_CM | GLESv2); if (dso) { hnd = new driver_t(dso); } else { // Always load EGL first - snprintf(path, PATH_MAX, format, "EGL", tag); - dso = load_driver(path, cnx, EGL); + dso = load_driver("EGL", tag, cnx, EGL); if (dso) { hnd = new driver_t(dso); // TODO: make this more automated - snprintf(path, PATH_MAX, format, "GLESv1_CM", tag); - hnd->set( load_driver(path, cnx, GLESv1_CM), GLESv1_CM ); + hnd->set( load_driver("GLESv1_CM", tag, cnx, GLESv1_CM), GLESv1_CM ); - snprintf(path, PATH_MAX, format, "GLESv2", tag); - hnd->set( load_driver(path, cnx, GLESv2), GLESv2 ); + hnd->set( load_driver("GLESv2", tag, cnx, GLESv2), GLESv2 ); } } } @@ -222,12 +216,20 @@ void Loader::init_api(void* dso, } } -void *Loader::load_driver(const char* driver_absolute_path, +void *Loader::load_driver(const char* kind, const char *tag, egl_connection_t* cnx, uint32_t mask) { + char driver_absolute_path[PATH_MAX]; + const char* const search1 = "/vendor/lib/egl/lib%s_%s.so"; + const char* const search2 = "/system/lib/egl/lib%s_%s.so"; + + snprintf(driver_absolute_path, PATH_MAX, search1, kind, tag); if (access(driver_absolute_path, R_OK)) { - // this happens often, we don't want to log an error - return 0; + snprintf(driver_absolute_path, PATH_MAX, search2, kind, tag); + if (access(driver_absolute_path, R_OK)) { + // this happens often, we don't want to log an error + return 0; + } } void* dso = dlopen(driver_absolute_path, RTLD_NOW | RTLD_LOCAL); diff --git a/opengl/libs/EGL/Loader.h b/opengl/libs/EGL/Loader.h index 8659b0b69b..580d6e4c39 100644 --- a/opengl/libs/EGL/Loader.h +++ b/opengl/libs/EGL/Loader.h @@ -74,7 +74,7 @@ public: private: Loader(); - void *load_driver(const char* driver, egl_connection_t* cnx, uint32_t mask); + void *load_driver(const char* kind, const char *tag, egl_connection_t* cnx, uint32_t mask); static __attribute__((noinline)) void init_api(void* dso, -- 2.11.0