diff options
author | Peiyong Lin <lpy@google.com> | 2023-07-13 05:31:43 +0000 |
---|---|---|
committer | Peiyong Lin <lpy@google.com> | 2023-07-25 17:41:09 +0000 |
commit | 8968823ade16061d589c1f9f7562a1de653be2b1 (patch) | |
tree | fd8d35573db1ee7a671dacc62c8ca5468d2b75bc /opengl | |
parent | 4e876bf7d2378fbf6cec9117d50a3fd51ad99589 (diff) | |
download | native-8968823ade16061d589c1f9f7562a1de653be2b1.tar.gz |
Revert "Revert "Load native GLES driver when specified.""
This reverts commit 1d6261388df9c5f6866bd4f2b296ad685c79badc.
Reason for revert: Revert the revert to reland the patch. Original patch
was reverted due to rss memory regression. Attempt to reland the patch
with a fix, the original regression seems to be caused by usage of enum.
Original commit message:
"""
Load native GLES driver when specified.
Since ANGLE and native GLES drivers can coexist, when native is
specified, the loader must load the native GLES drivers specified in
ro.hardware.egl. This patch adds the support to load native GLES drivers
when specified.
Bug: b/283858001
Test: atest CtsAngleDeveloperOptionHostTest -c with ANGLE being default
Test: atest CtsAngleDeveloperOptionHostTest -c with native being default
"""
Bug: b/283858001
Test: atest CtsAngleDeveloperOptionHostTest -c with ANGLE being default
Test: atest CtsAngleDeveloperOptionHostTest -c with native being default
Change-Id: I6a2e716d340d9be3610c31abbcbe7984bf472f9f
Diffstat (limited to 'opengl')
-rw-r--r-- | opengl/libs/EGL/Loader.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp index 8d0eb590bf..654e5b7c03 100644 --- a/opengl/libs/EGL/Loader.cpp +++ b/opengl/libs/EGL/Loader.cpp @@ -169,6 +169,11 @@ static bool should_unload_system_driver(egl_connection_t* cnx) { } } + // Return true if native GLES drivers should be used and ANGLE is already loaded. + if (android::GraphicsEnv::getInstance().shouldUseNativeDriver() && cnx->angleLoaded) { + return true; + } + // Return true if updated driver namespace is set. ns = android::GraphicsEnv::getInstance().getDriverNamespace(); if (ns) { @@ -240,16 +245,28 @@ void* Loader::open(egl_connection_t* cnx) { if (!hnd) { // Secondly, try to load from driver apk. hnd = attempt_to_load_updated_driver(cnx); + + // If updated driver apk is set but fail to load, abort here. + LOG_ALWAYS_FATAL_IF(android::GraphicsEnv::getInstance().getDriverNamespace(), + "couldn't find an OpenGL ES implementation from %s", + android::GraphicsEnv::getInstance().getDriverPath().c_str()); } + // Attempt to load native GLES drivers specified by ro.hardware.egl if native is selected. + // If native is selected but fail to load, abort. + if (!hnd && android::GraphicsEnv::getInstance().shouldUseNativeDriver()) { + auto driverSuffix = base::GetProperty(RO_DRIVER_SUFFIX_PROPERTY, ""); + LOG_ALWAYS_FATAL_IF(driverSuffix.empty(), + "Native GLES driver is selected but not specified in %s", + RO_DRIVER_SUFFIX_PROPERTY); + hnd = attempt_to_load_system_driver(cnx, driverSuffix.c_str(), true); + LOG_ALWAYS_FATAL_IF(!hnd, "Native GLES driver is selected but failed to load. %s=%s", + RO_DRIVER_SUFFIX_PROPERTY, driverSuffix.c_str()); + } + + // Finally, try to load default driver. bool failToLoadFromDriverSuffixProperty = false; if (!hnd) { - // If updated driver apk is set but fail to load, abort here. - if (android::GraphicsEnv::getInstance().getDriverNamespace()) { - LOG_ALWAYS_FATAL("couldn't find an OpenGL ES implementation from %s", - android::GraphicsEnv::getInstance().getDriverPath().c_str()); - } - // Finally, try to load system driver. // Start by searching for the library name appended by the system // properties of the GLES userspace driver in both locations. // i.e.: |