As I previously wrote, FOSDEM organizers are slowly uploading FOSDEM 2013 videos. One of the most interesting talk “Open ARM GPU Drivers” is now available. I’ve also uploaded it to YouTube (embedded below) to give it more exposure. Luc Verhaegen has also written a recent blog post entitled “Hey ARM!” where he announces the release of the modified source for Quake 3 Arena demo, and asks ARM to join them in making an open source driver.
This session covers the following key points:
- Problem – Binary drivers are mainly designed to run in Android, and it’s very difficult to have proper GPU drivers for Linux, and companies are not interested to release open source drivers or even just documentation, as they are not convinced it will benefit them in any way.
- Legal – This is actually the main issue, as open sourcing existing driver is a legal nightmare, and may cost a lot of money.
- ARM Mali Overview – Mali-200/400, 450 & T6xx
- Lima Project Status – No big secrets left in command-stream, compiler is tough due to Mali architecture, and actual driver work will start after FOSDEM. Full GNU/linux systems available.
- Qualcomm Adreno Overview – Adreno 2xx/3xx
- Freedreno Project Status – WIP driver. Command-stream and Shader architecture is mostly known. WIP xf86 (exa), mesa (gallium) drivers available. No proper GNU/linux available (The developer is currently using Android)
- Nvidia Geforce ULP (Tegra) Overview
- Tegra-re Project Status – Early research, early shader disassembler and early command stream capture. Limited availability of GNU/linux systems (AC-100, Trimslice).
- Vivante GCxxxx Overview
- Etnaviv project Status – Early research: Slowly prying apart command stream, full command stream capture and replay, and shader disassembler and assembler.
- Broadcom Videocore Overview
- The Raspberry Pi is a closed platform – “Open source” driver release by the Raspberry Pi foundation is just a shim (message-passing interface between ARM and the GPU), and the GPU itself runs a RTOS that handles the real processing.
- Videocore Project Status – Research stage: documentation, assembler/disassembler., compiler work started,
scalar processor fully reverse engineered, and some some “Hello World” code is available for booting the Raspberry Pi. 9 people are currently working on this project.
- Imagination PowerVR SGX Overview – PowerVR SGX (5xx), and Rogue (6xx) in the future
- Open Source Project Status (from the slides):
- Lima driver demos on Mele A1000 – Cube demos and Quake 3 Arena timedemo.
You can also download the presentation slides for his sessions
As I just mentioned, part of the session was a demo of Quake 3 Arena running on top of Lima drivers in Mele A1000 set-top box running Linux. Luc has now made the source code available on github, and you can get it as follows:
git clone git://github.com/libv/ioquake3-mali_fb.git
You can them compile it natively in any AllWinner A10 device:
You’ll also need to get a full Quake 3 Arena version first as the binary data files (paks files) must be copied to ~/ioquake3/baseq3 (NB: Those files can not be redistributed, as they belong to ID Software), and edit demofour.cfg as follows:
set demodone "quit"
set demoloop1 "demo four; set nextdemo vstr demodone"
You can now run the game demo with (I haven’t tried, so I’m not sure of the quake binary name):
ioquake3.arm +exec demofour.cfg
The full games is not playable yet, and Luc welcomes fixes for input support, sound, or even for the missing GLES2 shaders.
Luc Verhaegen claims “Absolutely nothing stops us now from delivering an open source driver that broadly matches the binary driver in performance! And this is exactly what we will be doing next!”, and calls upon ARM to join them:
We are not going away, we are here to stay. We cannot be silenced or stopped anymore, and we are becoming harder and harder to ignore.
It is only a matter of time before we produce an open source graphics driver stack which rivals your binary in performance. And that time is measured in weeks and months now. The requests from your own customers, for support for this open source stack, will only grow louder and louder.
So please, stop fighting us. Embrace us. Work with us. Your customers and shareholders will love you for it.
Open source developers are not the only ones to ask for this, if you’ve ever wanted to use Linux with proper 2D/3D GPU drivers on ARM, you are in the same boat, and even Linaro engineers complain about this (Linaro is an organization working on open source software for ARM SoCs, and ARM is obviously a core member), because those need to be updated for each kernel version, and it’s a nightmare as they have to go through the GPU company’s FAE which talks to the engineer and back. This wastes a lot of time (and money), as a task that could be done within a few hours/days with open source drivers, may instead take days or weeks because of binary blobs. An example is Linux Mali-400 support on Hardkernel ODROID-X/U2, they announced their intention to provide hardware GPU acceleration months ago, last month they released an Ubuntu image which can support GPU drivers (but not the driver), and they could only release the drivers yesterday (I’ll have to try that). The point is that it could have taken a much shorter time with open source drivers.
I understand there must be complicated legal issues, but there must certainly be a way to provide open source drivers, as it would just benefit everyone (from end users to engineers to SoC companies). Since Lima developers have now proven they can match the performance binary drivers for their “research” driver, and seem to be committed to deliver a proper open source driver for Mali-400, that should be a sufficient reason for ARM to cooperate with open source developers, even if it is only by releasing the GPU documentation.