Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a14c642 authored by Peiyong Lin's avatar Peiyong Lin
Browse files

Make sure the correct ANGLE binary is used.

Previously when eglGetDisplay is called, the code would attempt to
initialize ANGLE platform methods and acquire pointers to reset the
ANGLE platform. However, without this patch we continue using
ro.hardware.egl to form the ANGLE binary name, which is now wrong. Not
being able to correctly load the ANGLE binaries means platform methods
are not initialize. This currently doesn't have known side effect except
that we are observing a bunch of error messages that don't make sense
that point to the native OpenGL ES driver loading failure. This patch
makes sure ANGLE binary is used when initialize ANGLE platform.

Bug: b/293503000
Test: atest CtsAngleIntegrationHostTestCases -c
Change-Id: I5189042efc41fa7bef06d20f43ed4da3b1271dab
parent d6d63fd0
Loading
Loading
Loading
Loading
+4 −13
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@

namespace angle {

constexpr char kAngleEs2Lib[] = "libGLESv2_angle.so";
constexpr int kAngleDlFlags = RTLD_LOCAL | RTLD_NOW;

static GetDisplayPlatformFunc angleGetDisplayPlatform = nullptr;
@@ -115,8 +116,6 @@ 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,
@@ -130,19 +129,11 @@ bool initializeAnglePlatform(EGLDisplay dpy) {
        }
    } else {
        // If we are here, ANGLE is loaded as built-in gl driver in the sphal.
        // 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);
        so = android_load_sphal_library(kAngleEs2Lib, kAngleDlFlags);
        if (so) {
            ALOGD("dlopen (%s) success at %p", angleEs2LibName.c_str(), so);
            ALOGD("dlopen (%s) success at %p", kAngleEs2Lib, so);
        } else {
            ALOGE("%s failed to dlopen %s!", __FUNCTION__, angleEs2LibName.c_str());
            ALOGE("%s failed to dlopen %s: %s!", __FUNCTION__, kAngleEs2Lib, dlerror());
            return false;
        }
    }