Feature #1539: Graphics acceleration
Select libagl/llvmpipe per app
It would be useful to be able to select libagl or llvmpipe renderer on a per-app basis. This would allow apps that need llvmpipe to work, while apps that don't need llvmpipe can run faster with libagl.
Updated by Jeremy Rand over 1 year ago
- % Done changed from 0 to 10
Experimental branch at https://notabug.org/JeremyRand/frameworks_native (specifically the replicant-6.0-egl branch). I haven't verified whether it builds without errors. If anyone would like to build it and post binaries (if it doesn't error), that would be welcome. (Make sure you verify the OpenPGP signature on the tip of the branch, it should be signed by my key.)
Updated by Jeremy Rand 10 months ago
Some notes about the patch I linked above:
Requires ro.zygote.disable_gl_preload to be set. You can check for this by typing the following in an adb shell:
It should say "true".
You can create an EGL override by running the following in a root adb shell:
su -c "mkdir -m 770 /data/data/org.mozilla.fennec_fdroid/os_override" $(stat -c "%U" /data/data/org.mozilla.fennec_fdroid/) su -c "ln -s /system/lib/egl/libGLES_mesa.so /data/data/org.mozilla.fennec_fdroid/os_override/libGLES_impl.so" $(stat -c "%U" /data/data/org.mozilla.fennec_fdroid/)
The above example enables llvmpipe for the app "org.mozilla.fennec_fdroid".
You can access debug output by grepping logcat for "libEGL".
Docs for old patch by Jookia, which may still be useful: https://lists.osuosl.org/pipermail/replicant/Week-of-Mon-20171204/001457.html
Updated by Kurtis Hanna 6 months ago
I think that these are the patches that adjtm put on top of Jookia and Jeremey's patches for this:
Updated by Kurtis Hanna 4 months ago
adjtm recently sent a set of 8 patches to the mailing list for review that, if ACKed, I believe will allow us to close this ticket: https://lists.osuosl.org/pipermail/replicant/2019-August/002054.html
Updated by Kurtis Hanna 3 months ago
A review of this patch set in the #replicant irc pointed out that this patch removes the ability to set libagl as the default renderer.
"Previously, you could switch between libagl and llvmpipe as the default, and this would apply to any app that didn't have an override set; this was a useful feature. Am I reading the patch correctly? If so, can that functionality be restored? (One way to do it would be to access() an extra file that's not a function of the app name, so that that extra file can control the default renderer if the app-specific override isn't set)
Actually it's simpler than that. No need to deal with an extra access() if you don't want to. Just revert the final 2-line diff in the 2nd commit (the part that includes the log no EGL override found, default libGLES_mesa.so). Then the standard method of choosing the default that's covered in the wiki should work.
That said, if you want to access() an extra file, that would be an improvement over the previous behavior, since the previous behavior required doing a weird sed trick on the system partition to choose the default renderer, and touching a file (potentially on the data partition) is a lot better UX. So by all means feel free to use access(); it would be better."