# Gallium3D

Gallium3D est un projet de logiciel libre d'accélération 3D, commencé en 2007. Il a pour but de remplacer, au sein de Mesa 3D, les anciens pilotes trop complexes en amenant une compatibilité avec les versions plus récentes d'OpenGL, une architecture plus adaptée aux cartes 3D modernes, en simplifiant le développement des pilotes de périphériques et enfin, en apportant un contrôle plus direct entre l'application et le matériel et une architecture plus indépendante du système, des pilotes se chargeant de s'adapter au système hôte (typiquement winsys et screen).
Il devait initialement remplacer à terme Mesa 3D, mais en reste un sous-ensemble décliné en plusieurs architectures, afin de conserver l'ensemble des pilotes déjà disponibles et non portés.

## Principes

Gallium 3D utilise un ensemble de modules interagissant entre eux et avec l'écosystème qui l'entoure. Ces modules sont divisés en trois catégories, les State trackers (suivi d'état), modules auxiliaires et pilotes.

### State Tracker

Les « State Trackers » font la liaison entre Mesa et Gallium3D en convertissant les états (mode de mixage, état des textures, etc.) et appels de fonction (glDrawArrays, glDrawPixels, etc.) de Mesa en opération et objet du « pipe » de Gallium3D. LLVMpipe est présenté dès 2007 dans le but d’accélérer efficacement le calcul sur une architecture sans accélération matérielle 3D.
Si des fonctions d'anciennes versions d'OpenGL (1 & 2) sont utilisées, tentant d'accéder directement au rendu, elles sont d'abord converties en shaders, afin de décharger ensuite le travail aux accélérateurs dédiés.

### Modules auxiliaires

* Module Draw (tracé), permet d’appeler des fonctions de tracés sur les puces graphiques n'ayant pas les fonctions modernes de shaders.
* Module TGSI, représentation interne et intermédiaire du langage d'ombrage (shader).
* Module RTASM, module de conversion en assembleur Just-in-Time.
* Module CSO, pour « Constant State Objects » (objet à état constant), permet de filtrer les objets ne changeant pas d'état et d'éviter ainsi de les retransmettre au processeur graphique. C'est un des points qui aura révolutionné l'industrie graphique, montrant qu'il est possible d'économiser CPU et bande passante, et inspiré OpenGL Next.
* Module util' (utilitaire), permet de déboguer, des manipulations d'image et différentes fonctions d'aide fréquentes.

### Pilotes

Les pilotes sont chargés de communiquer avec le matériel. Il peut s'agir de matériel dédié à l'accélération graphique, du type GPU, ou bien du microprocesseur principal et de ses SIMD, comme dans le cas de LLVMpipe.

## Équivalence Mesa3D et Gallium3d

Les principales équivalences entre les pilotes Mesa « Classique » (classic Mesa) et Gallium3D à l'automne 2014 en fonction des systèmes choisis :
| Gallium 3D | Mesa3D classique |
| xorg + exa | DDX + Xv |
| dri + mesa | GL + GLSL |
| dri | DRI2 |
| KMS + Gallium3D | DRM + DRI + DDX |

## Historique

Ce projet a débuté en 2007 ; il est intégré au Git de Mesa 3D.
En janvier 2008, les pilotes pour les chipsets Intel i915 étaient pratiquement complets, les pilotes pour les chipsets Intel i965 commençaient, et la première version du pilote pour le processeur Cell (utilisé entre autres dans la console Sony PlayStation 3) permettait déjà de faire des rendus simples.
Le projet Gallium3D est principalement géré par la société Tungsten Graphics (rachetée par VMware en novembre 2008) qui avait déjà développé les pilotes pour les cartes ATI à architecture R200 pour Mesa 3D.
En février 2008, le passage à DRI2 de Mesa est accompli avec la gestion de la mémoire autrefois gérée par le pilote DRI du serveur X gérée dorénavant par le pilote noyau DRM (Direct Rendering Manager). Les différentes cartes gérées dans Mesa sont rapidement portées vers la nouvelle architecture apportant plus de stabilité et de sécurité à la gestion de la 3D.
Le même mois, ATI dévoile enfin les spécifications d'une grande partie de ses puces graphiques, comme promis quelques mois auparavant par AMD, permettant une avancée majeure sur les pilotes r300 (architectures R300 à R520) dans l'accélération 3D.
En 2014, le projet LLVMpipe, qui offre une nouvelle approche en compilant à la volée, via LLVM, les langages des shaders pour un rendu logiciel, est activé par défaut dans Mesa 3D et améliore nettement ses performances.