This page is about collecting information we find about the PowerVR architecture and the USSE opcodes. The long term goal is to write a free and open OpenGL driver for GNU/Linux based systems.
The project is considered to be high priority by the FSF: http://libreplanet.org/wiki/Group:PowerVR_drivers
PowerVR is a series of 3D GPUs developed by Imagination Technologies. The acronym “SGX” denotes the version PowerVR V5, hence SGX530, SGX540. For details about the history and the many variants see http://en.wikipedia.org/wiki/PowerVR. Currently the SGX5xx versions are wide spread and Series 6 (Rogue) is announced. Therefore this project focusses on the SGX5xx system.
PowerVR GPUs are widely used (http://en.wikipedia.org/wiki/List_of_PowerVR_products) but it needs a hackable device to learn more about it. The following devices are known to be hackable and easily available:
Note: The following binary releases of the SGX OpenGL ES libraries have debug information:
Generally a PowerVR GPU is a coprocessor reading from memory, processing data (images, icons, triangle coordinates) in a pipeline (or several parallel pipelines) and writing to some framebuffer memory. It is controlled through interface registers in the I/O address space of the CPU. Each pipeline is controlled by a shader program that is compiled into the “machine” language of the CPU shader cores. The OS kernel driver takes care of sending the compiled code to the GPU and starting processing. A “Microkernel” (uKernel, Firmware) is running on the GPU to manage memory, queues and tasks. Libraries like OpenGL (ES) use these “basic functions” to provide an abstract model for rendering complex 3D scenes.
This is depicted here for the TI OMAP SDK:
(picture embedded from http://omappedia.org/images/2/27/Sgx-software-components.jpg)
The “kernel services” and “display class modules” are open source. The uKernel is installed on the CPU through /usr/local/bin/pvrsrvinit (which is part of the misc. apps/tools). The “services client” seems to be implemented as libsrv_um.so. And, there is a libglslcompiler.so which is used to compile OpenGL to GPU machine code. Finally, e.g. libGLESv2.so implements the GLES2 component.
It may not be necessary to exactly follow this approach when writing a new free and open source driver for Mesa (http://www.mesa3d.org/).
But be aware that this does not go into deep and all details.
How to compile the binary drivers: http://listas.gnu.org.ve/pipermail/powervr-devel/2012-September/000036.html
USSE = Universal Scalable Shader Engine (USSE is a TM)
Some OpCodes have been reverse engineered:
#powervr on irc.freenode.net (use SSL if possible on TCP/7000)
Due to spamming, user registration on this wiki has been disabled. Please contact the wiki administrator, email@example.com, for access.