Group:PowerVR drivers

From LibrePlanet

Jump to: navigation, search

Contents

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

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


Personal tools
Namespaces
Variants
Actions
Navigation
Important Teams
Community Norms
Toolbox
Extra