diff options
author | Yiwei Zhang <zzyiwei@google.com> | 2020-08-14 11:55:18 -0700 |
---|---|---|
committer | Yiwei Zhang <zzyiwei@google.com> | 2020-08-14 23:31:57 -0700 |
commit | b4d93521892c7075a39db3d78fee58b6ffebc96e (patch) | |
tree | 2e17d5b1bee5685806726f5039926d741df795d1 /opengl/libs/EGL/egl_angle_platform.cpp | |
parent | 0d906906c305f258b06f041e05ea423d6f5eed86 (diff) |
OpenGL: fix initializeAnglePlatform with built-in ANGLE driver
When ANGLE namespace doesn't exist and initializeAnglePlatform is
called, ANGLE driver is loaded as built-in gl driver in sphal namespace.
This change fixes the fallback path here.
Bug: 154237217
Test: atest CtsAngleIntegrationHostTestCases
Change-Id: I0e4ecf65fac0d91b5542d475439e1e6f9541b629
Diffstat (limited to 'opengl/libs/EGL/egl_angle_platform.cpp')
-rw-r--r-- | opengl/libs/EGL/egl_angle_platform.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/opengl/libs/EGL/egl_angle_platform.cpp b/opengl/libs/EGL/egl_angle_platform.cpp index 4250daa5cb..dc8e5871ae 100644 --- a/opengl/libs/EGL/egl_angle_platform.cpp +++ b/opengl/libs/EGL/egl_angle_platform.cpp @@ -27,11 +27,15 @@ #include <graphicsenv/GraphicsEnv.h> #include <log/log.h> #include <time.h> +#include <vndksupport/linker.h> #include "Loader.h" namespace angle { +constexpr char kAngleEs2Lib[] = "libGLESv2_angle.so"; +constexpr int kAngleDlFlags = RTLD_LOCAL | RTLD_NOW; + static GetDisplayPlatformFunc angleGetDisplayPlatform = nullptr; static ResetDisplayPlatformFunc angleResetDisplayPlatform = nullptr; @@ -101,11 +105,22 @@ static void assignAnglePlatformMethods(PlatformMethods* platformMethods) { bool initializeAnglePlatform(EGLDisplay dpy) { // Since we're inside libEGL, use dlsym to lookup fptr for ANGLEGetDisplayPlatform android_namespace_t* ns = android::GraphicsEnv::getInstance().getAngleNamespace(); - const android_dlextinfo dlextinfo = { - .flags = ANDROID_DLEXT_USE_NAMESPACE, - .library_namespace = ns, - }; - void* so = android_dlopen_ext("libGLESv2_angle.so", RTLD_LOCAL | RTLD_NOW, &dlextinfo); + void* so = nullptr; + if (ns) { + const android_dlextinfo dlextinfo = { + .flags = ANDROID_DLEXT_USE_NAMESPACE, + .library_namespace = ns, + }; + so = android_dlopen_ext(kAngleEs2Lib, kAngleDlFlags, &dlextinfo); + } 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; + } + angleGetDisplayPlatform = reinterpret_cast<GetDisplayPlatformFunc>(dlsym(so, "ANGLEGetDisplayPlatform")); |