From a7733136d6857a68ba7be39c46e087ed366d3d49 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Fri, 14 Aug 2020 11:55:18 -0700 Subject: 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 Merged-In: I0e4ecf65fac0d91b5542d475439e1e6f9541b629 --- opengl/libs/EGL/egl_angle_platform.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/opengl/libs/EGL/egl_angle_platform.cpp b/opengl/libs/EGL/egl_angle_platform.cpp index 97dc0f1370..f82c2a4ee7 100644 --- a/opengl/libs/EGL/egl_angle_platform.cpp +++ b/opengl/libs/EGL/egl_angle_platform.cpp @@ -29,9 +29,13 @@ #include #include #include +#include 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(dlsym(so, "ANGLEGetDisplayPlatform")); -- cgit v1.2.3-59-g8ed1b