diff options
author | Tim Van Patten <timvp@google.com> | 2021-03-02 19:24:29 -0700 |
---|---|---|
committer | Tim Van Patten <timvp@google.com> | 2021-03-04 10:43:29 -0700 |
commit | 0222871bc87d9e844315d8a40df4a84f36665ca2 (patch) | |
tree | f7460e935a221cf5a77d523fd7d83acd685c1f61 /opengl | |
parent | 7a2cfcbcb48f8d2115a9695e5f492b873daa288f (diff) |
Read ro.hardware.egl for ANGLE's filename
The ANGLE shared object filename is currently hardcoded to
libGLESv2_angle.so, which prevents OEMs from specifying their own
filename when using ANGLE as the default OpenGL ES driver.
This CL updates initializeAnglePlatform() to build the ANGLE library
filename using the suffix specified by ro.hardware.egl when loading
ANGLE as the default OpenGL ES driver.
The filename when loading ANGLE from an APK will remain
libGLESv2_angle.so, for compatibilty reasons. This enforces naming
conventions when loading ANGLE APKs on to the device, regardless of the
name of the built-in version of ANGLE.
Bug: 178871212
Test: Build and launch CF
Change-Id: I462e076fc500d84fa2a27abfa491f82db4a9df80
Diffstat (limited to 'opengl')
-rw-r--r-- | opengl/libs/EGL/egl_angle_platform.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/opengl/libs/EGL/egl_angle_platform.cpp b/opengl/libs/EGL/egl_angle_platform.cpp index c29181d715..d38f2eff01 100644 --- a/opengl/libs/EGL/egl_angle_platform.cpp +++ b/opengl/libs/EGL/egl_angle_platform.cpp @@ -22,6 +22,8 @@ #pragma GCC diagnostic ignored "-Wunused-parameter" #include <EGL/Platform.h> #pragma GCC diagnostic pop + +#include <android-base/properties.h> #include <android/dlext.h> #include <dlfcn.h> #include <graphicsenv/GraphicsEnv.h> @@ -33,7 +35,6 @@ namespace angle { -constexpr char kAngleEs2Lib[] = "libGLESv2_angle.so"; constexpr int kAngleDlFlags = RTLD_LOCAL | RTLD_NOW; static GetDisplayPlatformFunc angleGetDisplayPlatform = nullptr; @@ -107,18 +108,36 @@ bool initializeAnglePlatform(EGLDisplay dpy) { android_namespace_t* ns = android::GraphicsEnv::getInstance().getAngleNamespace(); void* so = nullptr; if (ns) { + // Loading from an APK, so hard-code the suffix to "_angle". + constexpr char kAngleEs2Lib[] = "libGLESv2_angle.so"; const android_dlextinfo dlextinfo = { .flags = ANDROID_DLEXT_USE_NAMESPACE, .library_namespace = ns, }; so = android_dlopen_ext(kAngleEs2Lib, kAngleDlFlags, &dlextinfo); + if (so) { + ALOGD("dlopen_ext from APK (%s) success at %p", kAngleEs2Lib, so); + } else { + ALOGE("dlopen_ext(\"%s\") failed: %s", kAngleEs2Lib, dlerror()); + return false; + } } else { // If we are here, ANGLE is loaded as built-in gl driver in the sphal. - so = android_load_sphal_library(kAngleEs2Lib, kAngleDlFlags); - } - if (!so) { - ALOGE("%s failed to dlopen %s!", __FUNCTION__, kAngleEs2Lib); - return false; + // Get the specified ANGLE library filename suffix. + std::string angleEs2LibSuffix = android::base::GetProperty("ro.hardware.egl", ""); + if (angleEs2LibSuffix.empty()) { + ALOGE("%s failed to get valid ANGLE library filename suffix!", __FUNCTION__); + return false; + } + + std::string angleEs2LibName = "libGLESv2_" + angleEs2LibSuffix + ".so"; + so = android_load_sphal_library(angleEs2LibName.c_str(), kAngleDlFlags); + if (so) { + ALOGD("dlopen (%s) success at %p", angleEs2LibName.c_str(), so); + } else { + ALOGE("%s failed to dlopen %s!", __FUNCTION__, angleEs2LibName.c_str()); + return false; + } } angleGetDisplayPlatform = |