- Pile graphique Linux
-
Le but de cet article est de comprendre les différents composants de la pile graphique du système d'exploitation Linux. Il y a déjà au moins un article pour chaque composant, mais aucun qui explique leurs interactions.
Sommaire
Historique
Traditionnellement le serveur X.Org avait en charge notamment tout le travail graphique.
Il s'est avéré que, si le serveur X était un outil très puissant, ce n'était pas un outil très performant. Différentes méthodes ont été explorées pour pallier cette carence :
- court-circuiter le serveur X lorsqu'il n'était pas utile, pour supprimer un intermédiaire : ainsi DRI (pour Direct Rendering Interface) permet à Mesa d'adresser le matériel sans passer par le serveur X (Mesa ne peut s'adresser lui-même au matériel, étant en espace utilisateur) (voir le paragraphe Composition d'un pilote graphique libre sous Linux ci-après),
- des extensions ont été ajoutées au serveur X : XRender, XRandR, et Composite notamment.
Par ailleurs, un certain nombre de choses qui étaient gérées par X.Org ont été réaffectées au noyau (evdev, GEM et KMS) ou à des bibliothèques dédiées (Cairo, pixman, FreeType, Fontconfig, Pango etc.).
De X.Org à Wayland
Avec l'avènement des compositeurs (permettant des effets de transparence, d'ombre portée etc.), le fonctionnement de X.Org pour la gestion graphique ne semble plus optimal car il constitue une étape supplémentaire entre l'application et le compositeur ainsi qu'entre le compositeur et le matériel. Wayland a été proposé pour succéder à X.Org : un serveur Wayland joue à la fois le rôle de compositeur, de gestionnaire de fenêtres et de serveur d'affichage. Wayland s'appuie pour cela sur une partie de l'infrastructure existante : pilotes DRI, GEM et KMS.
Composition d'un pilote graphique libre sous Linux
Sous Linux, un pilote de carte graphique se décompose distinctement en trois parties :
- DDX, le pilote d'affichage du serveur X
- DRI, le pilote Mesa
- DRM, le pilote du noyau
Quand on parle couramment de pilote graphique libre sous Linux, on évoque généralement le pilote DDX (pour Device Dependent X). C'est un pilote spécifique à chaque matériel (nommé xf86-video-ati pour les cartes AMD, xf86-video-nouveau pour les cartes Nvidia et xf86-video-intel pour les puces graphiques Intel) utilisé par le serveur X pour gérer la 2D, c'est-à-dire essentiellement pour les effets de composition et l'accélération vidéo (via les procédés d'accélération 2D du serveur X comme EXA et ses dérivés (UXA, SNA) ou encore Xv).
Mesa est l'implémentation libre d'OpenGL pour Linux (OpenGL étant un procédé d'accélération 3D). Précisément, Mesa se décompose en deux parties : la bibliothèque Mesa 3D proprement dite, et les pilotes DRI chargés de traduire les fonctions gérées par la bibliothèque Mesa 3D en instructions compréhensibles par la carte graphique. Le résultat est envoyé à la carte graphique via DRM (pour Direct Rendering Manager), le pilote du noyau correspondant qui gère seul dorénavant les accès au matériel (DDX avait également accès au matériel avant que KMS ne permette de transférer la gestion des modes d'affichage au noyau ; aujourd'hui DDX passe par DRM pour accéder au noyau). L'accélération 3D requiert donc une prise en charge à la fois par Mesa et le noyau.
Mesa 3D ou Gallium3D
Gallium3D est présenté comme le successeur de Mesa 3D : il consiste à proposer un plus grand niveau d'abstraction du matériel afin de mutualiser au maximum les ressources au sein de cette bibliothèque et de simplifier corrélativement le développement des pilotes de cartes graphiques. Toutefois à la date du 8 octobre 2011 seuls les pilotes libres pour cartes Nvidia (projet Nouveau) et AMD l'utilisent[1] [2], tandis qu'Intel (qui développe lui-même les pilotes libres pour ses puces) n'a pas souhaité investir dans ce changement et continue de proposer des pilotes Mesa classiques[3]. Cependant Google développe actuellement une variante Gallium3D du pilote i915 d'Intel, nommée i915g[4].
Les pilotes graphiques par modèles
AMD
Pilotes Gallium3D : le pilotes r300g sert aux puces R300, R400, RS690 (chipset AMD 690) et R500 ; le pilote r600g sert aux puces plus récentes : R600, R700, Evergreen, Northern Islands[5]...
Nvidia
Pilotes Gallium3D : Issus du projet Nouveau, le pilotes nvfx sert aux puces NV30 (Geforce 5, GeForce FX) et NV40 (GeForce 6, GeForce 7) tandis que le pilote nvc0 (qui nécessite au minimum Mesa 7.11 et Linux 2.6.38) sert aux puces plus récentes[6].
Intel
Pilotes Mesa classiques[7] : le pilote 3D existe en deux versions :
- le pilote i915 concerne les puces Intel (à fonctions fixes) de troisième génération : 915G[M], 945G[M][E] et PineView.
- le pilote i965 concerne les puces Intel (programmables) de quatrième génération et postérieures (Ironlake, que l'on trouve dans les processeurs Clarkdale et Arrandale, représente la cinquième génération, et Sandy Bridge, la sixième génération) : X3000, X3100, X3500, 4500, X4500, X4500HD, 4500MHD, HD Graphics, HD Graphics 2000 et HD Graphics 3000...
Attention à ne pas confondre : le pilote 2D, commun à tous les circuits, est communément appelé i915.
Il existe un pilote Gallium3D développé indépendamment d'Intel, nommé i915g (cf ci-dessus).
Cas particulier des GMA x00
Pour accompagner ses processeurs Atom, Intel utilise le circuit graphique GMA 500 (nom de code : Poulsbo) ou son successeur : le GMA 600. Ces circuits n'ont pas été développés en interne mais sont basés sur le PowerVR SGX 535 d'Imagination Technologies. Ils nécessitent des pilotes spécifiques dont la version libre est peu avancée à la date du 28 octobre 2011.
Prochaine étape : accélération 2D via OpenGL ?
À terme la distinction entre accélération 2D et accélération 3D au sein de la pile graphique de Linux devrait s'effacer. Plusieurs initiatives parallèles et complémentaires sont en développement [8]:
Cairo-gl est un backend OpenGL pour Cairo introduit avec la version 1.10 de ce dernier[9] et initié par Eric Anholt[10][11].
Glamor est un procédé d'accélération 2D général basé sur OpenGL. Glamor se compose d'une bibliothèque générique pouvant s'interfacer avec le pilote DDX, et qui vise à convertir les opérations du serveur X en instructions OpenGL qui seront traitées par Mesa. Un pilote DDX modifié pour tirer partie de Glamor, EGL et KMS rend possible le démarrage d'un serveur X via Mesa/EGL sans système de fenêtrage natif[12]. Eric Anholt et Zhigang Gong, tous deux développeurs pour Intel, en sont les principaux développeurs initiaux. À noter que Gallium3D dispose de la même façon d'un backend permettant d'accélérer EXA via les fonctions 3D de la puce graphique.
Notes et références
- (en) ATI R300 Gallium3D DRI Support Is "Done" par Michael Larabel le 9 novembre 2009
- (en) Radeon "R600g" Gallium3D Driver Merged To Master par Michael Larabel le 27 mai 2010
- (en) Intel & The Shortcomings Of Gallium3D par Michael Larabel le 13 avril 2010
- (en) Intel i915 Gallium3D Driver Continues Advancing par Michael Larabel le 8 octobre 2011
- (en) RadeonFeature
- (en) nouveau: MesaDrivers
- (en) IntelGraphicsDriver
- (en) From Click to Pixel: A Tour of the Linux Graphics Stack par Carl Worth le 14 décembre 2009
- (en) cairo release 1.10.0 now available le 6 septembre 2010
- (en) FOSDEM 2010 le 7 février 2010
- (en) New OpenGL backend merged le 23 juillet 2009
- (en) Pull Request - Glamor: A 2D rendering acceleration implementation based on OpenGL le 27 septembre 2011
Liens internes
Liens externes
- (en) The (Re)Architecture of the X Window System par James Gettys et Keith Packard le 15 juin 2004
- (fr) Le point sur le traitement graphique sous Linux par Jon Smirl le 30 août 2005
- (en) 4 Years Later par Pavel Rojtberg le 1er juillet 2009
- (en) Linux Graphics Driver Stack Explained par Yang Zhao le 15 octobre 2009
Catégories :- 3D
- Bibliothèque logicielle graphique
Wikimedia Foundation. 2010.