About

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

What is PowerVR and SGX?

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.

Hackable Hardware

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:

Architectural Overview

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/).

Background information

How to access the SGX within a TI OMAP SoC

See chapter 8 in the DM3730 Technical Reference Manual (http://www.ti.com/lit/ug/sprugn4q/sprugn4q.pdf) 1) for an overview description of the SGX530 integrated in the OMAP3 SoC. Similarly, see chapter 12 in the AM572x Technical Reference Manual (http://www.ti.com/lit/spruhz6) for the SGX544.

But be aware that this does not go into deep and all details.

See also:

http://e2e.ti.com/support/dsp/omap_applications_processors/f/447/t/30406.aspx

How to compile the Kernel drivers?

What is a Shader?

What is USSE?

USSE = Universal Scalable Shader Engine (USSE is a TM)

Some OpCodes have been reverse engineered:

http://lkcl.net/powervr/sgx/

See also: http://forum.beyond3d.com/showthread.php?t=46603

Mailing List

IRC Channel

#powervr on irc.freenode.net (use SSL if possible on TCP/7000)

Wiki

Due to spamming, user registration on this wiki has been disabled. Please contact the wiki administrator, powervr@gnu.org.ve, for access.

1) this file will be deleted by TI from time to time if a new revision appears, so you may have to locate the most recent version through http://www.ti.com/product/dm3730
start.txt · Last modified: 2014-11-08 21:15 by af
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki