12 janv. 2013
Open source drivers for SoC GPUs
More and more ARM SoCs are targetted by OSS developpers in order to free their GPU from proprietary blobs. While the current free drivers are not fully functionnal, their development pace is quit fast and most of them should already be labeled "worth a look".
Let's dive in this world for a short while...
Known GPUs and drivers for ARM SoCs
The ARM SoC world is full of GPUs which are unknown to the public. They emmerge because of the success of the current generation of mobile platform. Let's cite a few to begin with :
- SGX 5xx series, by Imagination : used within the OMAP4 line of processors as well as in other products (including some Intel APUs). No spec, no driver source, binary blob only. The same goes for other Imagination GPU - including the recent 543 MP4+ (PS Vita). No good news for the 6xx series. Texas Instrument was trying to negotiate with Imagination to release some source code but that discussion most likely failed (TI annouced they will not make any other CPU, meaning that Imagination has no incentive to free their source code).
- VideoCore, by Broadcom : used (for example) by the Rapsberry Pi. An earlier announce said that the Rapsberry Pi foundation released a source version of the driver. This is not exactly true: the whole 3D logic is still hidden in closed binaries.
- GeForce ULP, by NVIDIA : this GPU can be found in the Tegra line of SoCs. NVIDIA didn't release any source version of the driver but Erik Faye-Lund is doing a reverse engineering of the existing binary driver. So far, the results are good. See github.
- MALI, by ARM : MALI cores are found in a large number of SoCs, including the Exynos 4 line by Samsung. This is a powerfull GPU and while ARM haven't released any source version of the driver, it has been reverse engineered and works quite well (nearly full 3D support with OpenGL ES 2.0 shaders). The open source driver has been code-named Limadriver. It's not yet production ready but it can probably be used on several baord - including the ODROID-U2.
- Adreno, by Qualcomm : this GPU is found in the Snapdragon line of product. The vendor distributes binary blobs but Rob Clark (from TI) works on a reverse engineered open source version of the driver - named freedreno. The Adreno is based upon the Radeon architecture (hence the name, which is an anagram of Radeon).
- Vivante, by Vivante Corp : the GPU is widely available. You can (for example) find them on a large number of Marvell SoCs. Again, Vivante Corp released a source version of the driver - and the community (lead by Wladimir J. van der Laan) is studying this. See github.
I migh have missed a few esoteric GPU here and there. Some of the listed drivers are restricted to only one SoC vendor (NVIDIA bundles the GeForce ULP with the Tegra SoCs; Broadcom ties the VideoCore GPUs with their own SoCs - both ARM and MIPS; Adreno is own by Qualcomm following the sell of the product line by ATI a few years ago). Others are sold to CPU founders as an IP block.
Conclusion: which GPU should I choose?
Assuming the question is solely based upon the availabilty of open source drivers, I would go with some Vivante GPU. The fact that the company released their GPU driver source code is of interest. The fact that the community is working hard to get these drivers to a good quality level is quite important too. The CuBox dev board uses a Marvell SoC that integrates a Vivante GPU.
After that, I would propose you to try any recent MALI GPU (the MALI 400 is ubuquitous in Cortex A9 processors). It's a very powerfull processor and the limadriver is in very good shape. Their is stille some work to do but the development is going fast. The ODROID-U2 is using an overclocked MALI 400 GPU.
I would place the Adreno and the GeForce ULP on par. Their drivers are quite good - a bit lighter than the limadriver. The problem lies in the fact that these processors are not that easy to find on low cost development boards. The OUYA console will ship with a Tegra 3 and should be easily rootable so the GeForce ULP might win.
Finaly, I would not use any SGX or VideoCore GPU unless I have no other choice. The SGX can be found on many low-cost dev board (Pandaboard, Beagleboard), and the Rapsberry Pi is powered by a VideoCore. I would treat these as bad news since there is no free (as in speech) 2D/3D driver for them. TI releases new binary blobs for the SGX540 - these might be used on other platforms but these blobs are inherently limited (want a specific hardware+software setup? too bad...).
 too bad I don't own one...