GraphicsResearch » History » Version 19

Denis 'GNUtoo' Carikli, 01/21/2019 05:57 PM

1 1 Wolfgang Wiedmeyer
h1. Research on free graphics-related software
3 12 Wolfgang Wiedmeyer
5 5 Wolfgang Wiedmeyer
On this page, information is collected that could help solving graphics issues in Replicant (see #1539). Besides evaluating free implementations that are relevant for currently supported devices, other implementations should also be listed if they are useful for potential future target devices.
6 1 Wolfgang Wiedmeyer
7 8 Wolfgang Wiedmeyer
external resources:
9 13 Wolfgang Wiedmeyer
"Debian Mobile":
10 8 Wolfgang Wiedmeyer
11 1 Wolfgang Wiedmeyer
h2. Software rendering
13 7 Wolfgang Wiedmeyer
Software rendering uses the CPU and not a dedicated graphics processor for graphics rendering. It is slower than per-GPU implementations and is usually used when it is not possible to make use of the GPU. An advantage is that the same software renderer can work across many different types of hardware, so working on improving a software renderer benefits many different devices, regardless of the SOC and graphics unit that is used. Furthermore, a software renderer doesn't require a kernel driver which makes it easier to work on mainline Linux kernel support for a device until the graphics driver is in mainline.
14 2 Wolfgang Wiedmeyer
15 1 Wolfgang Wiedmeyer
h3. Android software renderer
16 2 Wolfgang Wiedmeyer
17 14 Wolfgang Wiedmeyer
source code:
18 2 Wolfgang Wiedmeyer
The Android software renderer is currently used on all Replicant-supported devices and it is the fastest software renderer that is available for Replicant devices. It is a software renderer that was developed specifically for Android and it is part of the AOSP source code. The renderer includes optimizations for ARM. Development ceased in 2013 and no work was done to support newer GLES versions (which causes #705).
Until ca. 2011 (Android 4.0), another library with the name @libagl2@ existed and @surfaceflinger2@ was developed based on Mesa. The source code was later removed and no further development is known. At the time, the work was done to support a newer GLES version for the software renderer, but it was abandoned later. It is questionable if it is worth it to port the old @libagl2@ library to a recent Replicant version, also given that we would be the only ones using and maintaining the code.
22 1 Wolfgang Wiedmeyer
23 19 Denis 'GNUtoo' Carikli
h3. Mesa and llvmpipe
24 1 Wolfgang Wiedmeyer
25 19 Denis 'GNUtoo' Carikli
*source code in Replicant*:
*performance improvement documentation*:
28 3 Wolfgang Wiedmeyer
29 4 Wolfgang Wiedmeyer
For the needs in Replicant, llvmpipe has an EGL implementation that is complete enough. But some apps don't work due to minor bugs which seem fixable or which might already be fixed in more recent upstream versions. swrast is of no interest as it is slower than llvmpipe.
30 3 Wolfgang Wiedmeyer
The "Android-x86  project": is using llvmpipe and quite a few of their Android-specific frameworks patches are applied in Replicant 6.0. Their Mesa source code fork is also used in Replicant 6.0. A lot of porting work of llvmpipe to Android was done by Jide while Intel is contributing as well. So there is an interest from different parties to have llvmpipe working on Android. Android patches are upstreamed to mainline Mesa.
However, llvmpipe is still not ported to ARM which makes it slow. Also for Android, it is mostly used on the x86 platform in other projects. See #705 for more information. Optimizing llvmpipe for ARM seems currently the most promising approach to fix graphics-related issues with Replicant.
35 1 Wolfgang Wiedmeyer
h3. SwiftShader
36 3 Wolfgang Wiedmeyer
source code:
39 18 Joonas Kylmälä
"Google released SwiftShader as free software in mid 2016": It supports x86 (32 bit and 64 bit) and 32 bit ARM architectures with SDIV/UDIV support. It is used in the Chromium project but also with Android, for example in the Android-x86 project. Swiftshader doesn't seem to depend on any external libraries besides what are provided in its Git repository, therefore it is very easy to compile it and use it as a software renderer for Replicant. All the Android  build files are provided so you just need to the add the following packages to PRODUCT_PACKAGES in order to be able to use it:
 * libGLESv2_swiftshader
 * libEGL_swiftshader
43 1 Wolfgang Wiedmeyer
h2. Per-GPU implementations
46 9 Wolfgang Wiedmeyer
In the following, free software implementations are listed that should make it possible to use the respective GPU with free software.
47 1 Wolfgang Wiedmeyer
48 7 Wolfgang Wiedmeyer
h3. ARM Mali and Lima
50 1 Wolfgang Wiedmeyer
supported devices that use Mali 400: Galaxy S 2, Galaxy S 3, Galaxy S 3 4G, Galaxy Note, Galaxy Note 2
51 7 Wolfgang Wiedmeyer
project page:
Lima is not yet a working driver and cannot be used in Replicant. There was no significant development since 2014 and the original developers have stopped working on the project. "Luc's FOSDEM 2014 talk": provided the latest update on the project.
55 1 Wolfgang Wiedmeyer
56 17 Jeremy Rand
Phoronix "reports": that Qiang Yu from AMD has started a new free Mali-400 driver ("Mesa fork":, "Linux fork":  Development seems to be active as of November 2017.
57 16 Jeremy Rand
58 1 Wolfgang Wiedmeyer
h3. Imagination PowerVR
supported devices that use PowerVR SGX540: Nexus S, Galaxy S, Galaxy Nexus, Galaxy Tab 2 7.0, Galaxy Tab 2 10.1
61 5 Wolfgang Wiedmeyer
supported devices that use PowerVR SGX530: GTA04
62 8 Wolfgang Wiedmeyer
A reverse-engineering project exists:
64 10 Wolfgang Wiedmeyer
"mailing list":
66 8 Wolfgang Wiedmeyer
"Libreplanet group":
68 11 Wolfgang Wiedmeyer
Despite initial reverse-engineering progress until 2013, no further development updates seem to be available. The project website provides documentation.
69 1 Wolfgang Wiedmeyer
70 9 Wolfgang Wiedmeyer
h3. Qualcomm Adreno and freedreno
71 1 Wolfgang Wiedmeyer
not used by a supported device
73 9 Wolfgang Wiedmeyer
freedreno is actively developed. Linux kernel component is available in mainline since version 3.12. It needs to be investigated how well freedreno could work on potential target devices. However, even when using freedreno, non-free firmware is very likely still needed.
Generally speaking, Qualcomm devices have a lot of blobs and no modem isolation which is the reason why no Qualcomm-based device is yet supported by Replicant. See [[TargetsEvaluation]] for some analysis. We have not yet identified a Qualcomm-based device that would be a promising target for Replicant and where freedreno could be used on.
79 15 Wolfgang Wiedmeyer
h3. Vivante GCxxxx and Etnaviv
not used by a supported device
For some Vivante GCxxxx GPU variants, a free driver, Etnaviv, exists. See "wikipedia": for some details. It would be interesting to investigate devices using such a GPU if they would be good Replicant targets. It also needs to be checked if non-free firmware needs to be loaded to the GPU.