Today I hit an important milestone for etnaviv – an open source user-space driver for the Vivante GCxxx series of embedded GPUs.
I finally got GC2000 support to a level that it seems to work. It took me some months to get there.
At the beginning it sounds easy to rebuild a ‘driver’ if you get readable command buffer dumps. I did start with working on a simple replay program to render a cube in the same was as the binary blob does it.
But what should I say… it is quite boring to do everything by hand and not taking advantage of libetnaviv
and the ‘driver’ at all. So I decided to go the hard way and try to fix/add all missing bits until it renders something.
The good thing is that I have now some knowledge about the structure of libetnaviv, the
dirver and mesa in general. It helps a lot if you know why stuff is done that way.
Also this is my first reverse engineering project I contributed to and even I have never done any graphics related stuff – okay I did
some OpenGL stuff during my studies.
I try to find some more time to help to create a fully open source graphics stack for Vivante GPUs.
If have not seen it yet: Here is a short video showing the current state of etnaviv on a iMX6q (Sabre Lite).
Video in Google+ post