Group: PowerVR drivers

From LibrePlanet
Jump to: navigation, search

Introduction

PowerVR is a popular 3D Graphic engine found in phones, netbooks, and laptops, for which we currently have no free software driver capable of doing 3D graphics acceleration.

Writing such drivers is a project on the FSF's high priority list. The current home page for this project is hosted at gnu.org.ve.

Background

A hardware-accelerated OpenGL 3D userspace library is typically implemented as a proprietary library, as its inner workings are considered to be a "closely guarded secret" by their creators. Typically, the library communicates with the hardware via a "shim" kernel-space driver. In the case of the Linux Kernel, that "shim" code is GPLv2 licensed, and is already publicly available for many top-of-the-range embedded CPUs that contain PowerVR technology.

It is worth pointing out that that GPL-licensed Kernel Driver is pretty much useless as far as contributing to a fully Free Software compliant 3D userspace library: the Kernel-space Driver is merely a communications channel. This state of affairs (GPL kernel driver plus proprietary userspace library) is common amongst pretty much every single embedded 3D engine, and contributes greatly to the confused and erroneous belief that there already exists Free Software compliant OpenGL libraries for embedded CPUs.

Modification of the Linux Kernel driver is at least possible, and will allow print-outs to be taken of the data passing through it. (As there is no encryption, this is perfectly possible and reasonable). From these print-outs, it will be possible to write simple OpenGL applications that perform simple 3D operations, one by one, and the results observed, recorded and then, ultimately, replayed. This well-known method has already been utilised to great effect, to reverse-engineer the majority of Samsung's FIMD-3D engine present in the S3C6410 and the S5PC100.

Goals

  • To create a Gallium3D-compliant PowerVR library (G3D-SGX)
  • To port the OpenGL 3 MesaGL library to G3D-SGX
  • To investigate compiling the results through LLVM, in order to take advantage of Multi-Core SoC (Cortex A9 etc.) features as well as any Vector Processing Units or other Co-processors (DSPs, NEON etc.)
  • (low-priority) To investigate the creation of a DirectX accelerator for use under Wine (Gallium3D is a low-level 3D API)

Status

The USSE opcodes have been reverse-engineered, as well as the assembly language decoded. This is an important step forward because this information cannot easily be decoded from simple observation of the data passing through the Linux Kernel Driver.

Questions

  • How can I contact people working on this project?
  • Who should be contacted in order to get more info about this project?
  • How can we collaborate with code/reverse engineering documentation?
  • Is there a code repository for this project?