Project

General

Profile

Graphics » History » Version 24

dl lud, 01/24/2020 05:27 AM
Add steps to restart app or system component.

1 1 Wolfgang Wiedmeyer
h1. Graphics
2
3 21 dl lud
Replicant relies on the CPU for graphics rendering, a technique known as software rendering. Using the dedicated graphics processor (GPU) currently requires non-free software on all of the supported devices. As free-software replacements are not yet available, the GPU cannot be used with Replicant for the moment (see [[GraphicsResearch]]). Software rendering is the reason why Replicant devices appear slow at times and is responsible for a lot of crashes that can happen during usage.
4 11 Fil Bergamo
5 21 dl lud
Until [[Images#Replicant-60-0003-images|version 6.0 0003]], Replicant used the [[GraphicsResearch#Android-software-renderer|Android software renderer]], also known as libagl. libagl is fast, but [[Graphics#Known-issues-with-libagl|caused several issues]] due to lack of OpenGL ES (GLES) 2.0 support.
6 1 Wolfgang Wiedmeyer
7 18 dl lud
As of "Replicant 6.0 0004 rc1":https://ftp.osuosl.org/pub/replicant/images/replicant-6.0/0004-rc1/, [[GraphicsResearch#Mesas-llvmpipe|llvmpipe]] is used as the default software renderer. llvmpipe has a more complete GLES implementation than libagl (see #705), so more apps work with it, like Firefox-based browsers or more recent WebViews (see #1780). Unfortunately, llvmpipe is too slow for certain system components, which may also be true for some apps. Furthermore, certain apps still crash with llvmpipe, although less frequently. Usually the screen stays black if an app does not work with llvmpipe.
8 16 doak complex
9 18 dl lud
To cater for these issues, Replicant 6.0 0004 includes a "mechanism to choose between llvmpipe and ligagl, on a per process basis":https://lists.osuosl.org/pipermail/replicant/2019-August/002054.html. Such mechanism is "actually used":https://lists.osuosl.org/pipermail/replicant/2020-January/002421.html on the Replicant 6.0 0004 images to force some system components (bootanimation, SurfaceFlinger and system_server) to use libagl.
10 16 doak complex
11 19 dl lud
h2. Methods to choose the software renderer
12 17 dl lud
13 22 dl lud
For all the methods bellow you must have [[ADB]] installed on your computer. Make sure that it can access the device's [[ADB#Accessing-root-shell|root shell]] and that the [[ADB#Modifying-the-system-partition|system partition is mounted as writable]].
14 1 Wolfgang Wiedmeyer
15 19 dl lud
h3. Choosing the default software renderer
16
17 17 dl lud
The following command switches between llvmpipe and libagl:
18 1 Wolfgang Wiedmeyer
<pre>
19
adb shell "grep -q "ro.libagl=1" /system/build.prop && sed "s/ro.libagl=1/ro.libagl=0/" -i /system/build.prop || sed "s/ro.libagl=0/ro.libagl=1/" -i /system/build.prop" 
20
</pre>
21 17 dl lud
22 1 Wolfgang Wiedmeyer
Then reboot the device. To switch back to previous renderer, run the above command again and reboot the device.
23 20 dl lud
24
This method works on both Replicant 6.0 0003 and 0004. Do note that: on 0003 you will start with libagl by default, whereas on 0004 the default is llvmpipe.
25 18 dl lud
26 19 dl lud
h3. Choosing the software renderer for a specific app
27 18 dl lud
28
# Find out the app ID. Example: @org.gnu.icecat@
29 19 dl lud
# Force the app to always use libagl by creating empty file named @libGLES_android@ on it's data directory (e.g. @/data/data/org.gnu.icecat/@). Example command:
30 18 dl lud
<pre>
31 1 Wolfgang Wiedmeyer
adb shell touch /data/data/org.gnu.icecat/libGLES_android
32 18 dl lud
</pre>
33 19 dl lud
To force llvmpipe instead, use a file named @libGLES_mesa@.
34 24 dl lud
# Restart the app. For instance: kill it and open again.
35 19 dl lud
# Get back to the default renderer by removing the file. Example command:
36 1 Wolfgang Wiedmeyer
<pre>
37
adb shell rm /data/data/org.gnu.icecat/libGLES_android
38
</pre>
39
40
This method only works for Replicant 6.0 0004.
41
42 19 dl lud
h3. Choosing the software renderer for a system component
43 1 Wolfgang Wiedmeyer
44 19 dl lud
System components usually lack a directory in the data partition. Thus, another method must be used to switch their software renderer.
45 1 Wolfgang Wiedmeyer
46 19 dl lud
# Find out the full path of the executable. You can use @which@ for that:
47
<pre>
48
root@i9300:/ # which surfaceflinger
49
/system/bin/surfaceflinger
50
</pre>
51 23 dl lud
# Force the component to always use libagl by creating an empty file at @/system/etc/libGLES_android/<executable_full_path>@. Example commands:
52 19 dl lud
<pre>
53
adb shell mkdir -p /system/etc/libGLES_android/system/bin
54
adb shell touch /system/etc/libGLES_android/system/bin/surfaceflinger
55
</pre>
56
To force llvmpipe instead, create the file under @/system/etc/libGLES_mesa/@.
57 24 dl lud
# Reboot your device, or restart the specific system component individualy (if possible).
58 19 dl lud
# Get back to the default renderer by removing the file. Example command:
59
<pre>
60
adb shell rm /system/etc/libGLES_android/system/bin/surfaceflinger
61
</pre>
62
63
This method only works for Replicant 6.0 0004.
64
65 1 Wolfgang Wiedmeyer
h2. Known issues with libagl
66 16 doak complex
67 14 doak complex
* Selecting the third option besides photo and video (Panorama mode) will crash the Camera app.
68
* Video playback in the browser does not work. (issue #1533)
69
* Screenshots do not work. (see [[Screenshots]] for a workaround)
70 1 Wolfgang Wiedmeyer
* Selecting wallpapers from storage does not work.
71
* Screen content is sometimes shortly visible before unlocking. (issue #1275, happens with llvmpipe as well)
72
* Previews of the windows in the tasks switcher are missing.
73
* Switching between apps, apps and the launcher or different views inside an app is sometimes slow and the device may seem unresponsive.
74
* There are issues with using folders with the Trebuchet launcher. (issue #1790, happens with llvmpipe as well)
75 14 doak complex
76 19 dl lud
h3. Popular apps from F-Droid that do not work with libagl
77 14 doak complex
78 16 doak complex
* All Firefox-based browsers like "IceCatMobile":https://f-droid.org/repository/browse/?fdfilter=icecat&fdid=org.gnu.icecat and Orfox
79 1 Wolfgang Wiedmeyer
* "Document Viewer":https://f-droid.org/repository/browse/?fdfilter=document+viewer&fdid=org.sufficientlysecure.viewer
80
* "LibreOffice Viewer":https://f-droid.org/repository/browse/?fdfilter=libreoffice&fdid=org.documentfoundation.libreoffice
81 16 doak complex
* "RedReader":https://f-droid.org/repository/browse/?fdfilter=redreader&fdid=org.quantumbadger.redreader cannot display images ("upstream bug":https://github.com/QuantumBadger/RedReader/issues/279)
82 2 Wolfgang Wiedmeyer
83 19 dl lud
h2. Known issues with llvmpipe
84
85
* Too slow to use in SurfaceFlinger (screen compositor).
86
* If SurfaceFlinger uses llvmpipe, Gallery and Orbot render some GUI elements are visible while the main screen is black. The GUI of Simple File Manager works as long as no image is viewed in fullscreen.
87
88 8 Denis 'GNUtoo' Carikli
h2. See also
89 9 Denis 'GNUtoo' Carikli
90 19 dl lud
There is a page about [[GraphicsResearch]] that gathers information to improve graphics support.