summaryrefslogtreecommitdiff
path: root/opengl
diff options
context:
space:
mode:
authorTim Van Patten <timvp@google.com>2021-03-02 19:24:29 -0700
committerTim Van Patten <timvp@google.com>2021-03-04 10:43:29 -0700
commit0222871bc87d9e844315d8a40df4a84f36665ca2 (patch)
treef7460e935a221cf5a77d523fd7d83acd685c1f61 /opengl
parent7a2cfcbcb48f8d2115a9695e5f492b873daa288f (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.cpp31
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 =