Pile graphique Linux
|
|
Cet article n’est pas rédigé dans un style encyclopédique.
Vous pouvez améliorer sa rédaction !
|
La pile graphique Linux (Linux graphics stack) désigne l’ensemble des composants logiciels qui interviennent dans le processus d’affichage d’un système basé sur le noyau Linux.
Historique[modifier]
Traditionnellement, dans les systèmes d’exploitation de type Unix, l’affichage graphique est assuré par un serveur X. Le même type d’architecture logicielle s’est donc retrouvé dans les systèmes GNU/Linux (dans les versions récentes de GNU/LinuxLinux, c’est X.Org qui joue généralement le rôle du serveur 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[modifier]
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. Wayland 1.0 est sorti le 22 octobre 2012 et poursuit son développement. GNOME 3.12 devrait pleinement fonctionner avec Wayland[1].
Canonical développe de son côté un serveur graphique concurrent pour Ubuntu : Mir.
Composition d’un pilote graphique libre sous Linux[modifier]
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 X video extension (en)).
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.
Depuis la création de KMS, tout passe donc par DRM :
|
|
|
|
|
Application X11 |
|
Application OpenGL |
|
Application Framebuffer |
|
|
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
Compositeur |
|
X.Org |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
Pilote 2D |
|
Pilote OpenGL DRI |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
DRM |
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
Puce graphique |
|
|
|
|
|
|
|
|||||||||||||||||||||||
Gallium3D : tentative de mutualiser les moyens[modifier]
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.
Implémentation libre d'OpenGL : Mesa 3D ou Gallium3D[modifier]
Si les pilotes libres pour cartes Nvidia (projet Nouveau) et AMD (projet radeon) se basent dorénavant sur Gallium3D, Intel (qui développe lui‐même les pilotes libres pour ses puces) ne souhaite pas s'engager dans ce changement et continue de proposer des pilotes Mesa classiques dans lesquels il estime avoir beaucoup investi[2].
Implémentation libre d'OpenCL : Gallium3D ou Beignet[modifier]
En revanche cet argument chronologique ne peut servir dans le cas d'OpenCL dont Intel a décidé de lancer sa propre implémentation libre (sous le nom de Beignet) bien après la mise en place d'un backend OpenCL pour Gallium3D.[3],[4] Ce backend pour Gallium3D sera utilisé par les pilotes libres pour cartes NVIDIA (nv50, nvc0...) et AMD (Evergreen, Northern Islands...).[5]
Les pilotes graphiques ou vidéo libres par modèles[modifier]
Puces graphiques à destination des ordinateurs personnels[modifier]
Les ordinateurs personnels embarquent généralement l'une des puces graphiques suivantes :
AMD Radeon[modifier]
Pilotes Gallium3D : Issus du projet radeon, il existes différents pilotes (R300g, R600g, RadeonSI) correspondants à différentes générations de puces graphiques AMD. À noter qu'avec RadeonSI, la 2D est dorénavant gérée par glamor, un procédé d’accélération 2D général basé sur OpenGL (lire ci-après).
NVIDIA GeForce[modifier]
Pilotes Gallium3D : Issus du projet Nouveau, il existes différents pilotes (nv30, nv50, nvc0...)[6] correspondants à différentes générations de puces graphiques NVIDIA[7].
Intel GMA et HD Graphics[modifier]
Pilotes Mesa classique officiels[modifier]
Ce pilote 3D, développé à l'initiative d'Intel, est le pilote par défaut de la pile graphique de Linux pour ces puces. Il existe en deux versions [8]:
- 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 : GMA X3000, X3100, X3500, 4500, X4500, X4500HD, 4500MHD et HD Graphics que l'on trouve dans les processeurs de génération Ironlake (Clarkdale et Arrandale) et les suivantes (Sandy Bridge, Haswell...).
Attention à ne pas confondre : le pilote 2D, commun à tous les circuits, est communément appelé i915.
Pilotes alternatifs Gallium3D[modifier]
i915g est un pilote Gallium3D développé indépendamment d'Intel, à l'initiative de VMware puis de Google, pour les puces de troisième génération[9],[10].
ilo est un projet de pilote Gallium3D développé indépendamment d'Intel, avec le soutien de la société LunarG, pour les puces de sixième génération et suivantes[11].
Cas particulier des GMA 500/600[modifier]
Pour accompagner ses processeurs Atom, Intel utilise le circuit graphique GMA 500 (nom de code : Poulsbo) ou son successeur : le GMA 600 (Cedarview). Ces circuits n’ont pas été entièrement développés en interne et sont basés sur le PowerVR SGX 535 d’Imagination Technologies pour la 3D et le rendu vidéo. Ils nécessitent donc des pilotes spécifiques.
Depuis sa version 3.3, le noyau Linux inclut un pilote libre gma500_gfx pour ces puces (apparu pour la première fois dans la branche -staging de la version 2.6.39 du noyau) ; cependant celui-ci est limité à l'affichage 2D (pas d'accélération vidéo ni 3D).
Les modèles qu’Intel lancera fin 2013 (Valley View) devraient marquer l’abandon du PowerVR au profit de la solution maison, refermant ainsi cette parenthèse[12].
Cœurs graphiques équipant les systèmes sur une puce[modifier]
Les SoC embarquent généralement l'un des cœurs graphiques ci-après pour la 3D. Ils sont couplés à différents autres cœurs pour l'affichage et la 2D, voire la vidéo, suivant les SoC.
En général les fabriquants de SoC proposent un pilote fermé (en espace utilisateur) pour Android pour ces cœurs graphiques ; ce pilote ne peut être utilisé en l'état par une distribution GNU/Linux sauf à utiliser la bibliothèque logicielle libre Libhybris conçue initialement pour le projet projet Mer[13],[14],[15].
ARM Mali[modifier]
Les cœurs graphiques Mali sont conçus par ARM.
ARM ne fournit pas de pilote libre mais un pilote 2D/3D libre Gallium3D est développé par rétro-ingénierie sous l’impulsion de la société Codethink (au sein de laquelle principalement Luc Verhaegen alias libv) : Lima.
Qualcomm Adreno[modifier]
Adreno est conçu par Qualcomm dont il équipe les SoC ARM Snapdragon. La technologie employée dérive des puces Radeon d'AMD (dont Adreno est une anagramme).
Qualcomm ne fournit pas de pilote libre mais un pilote 2D/3D libre Gallium3D est activement développé par rétro-ingénierie notamment par Rob Clark sur son temps libre : freedreno.
À noter que, dans la mesure où les modèles A3xx et suivants n'ont pas de cœur 2D, un backend XA pour Gallium3D est utilisé pour gérer la 2D[16].
NVIDIA GeForce ULP[modifier]
Le GeForce ULP (pour Ultra Low Power) est conçu par NVIDIA dont il équipe les SoC ARM Tegra.
Un pilote libre 2D/3D est en cours de développement par rétro-ingénierie à l'initiative de Erik Faye-Lund alias kusma avec l'aide de NVIDIA : grate.
Vivante Corporation Vivante[modifier]
Le cœur graphique Vivante est conçu par Vivante Corporation.
Vivante Corporation a publié un pilote libre partiel (la partie noyau seulement, sous la licence libre GPL, mais rien concernant le pilote en espace utilisateur) qui est actuellement complété à l'initiative de Wladimir J. van der Laan qui travaille sur un pilote Gallium3D : etna_viv.
Broadcom VideoCore[modifier]
Le VideoCore est conçu par Broadcom.
Malgré l'annonce qui en a été faite[17], Broadcom ne propose pas de pilote libre[18],[19],[20]. Cependant, et malgré l'architecture alambiquée de la puce, une initiative de pilote libre est actuellement menée notamment par Herman H Hermitage : videocoreiv.
Imagination Technologies PowerVR Series 5 (SGX)[modifier]
Les PowerVR Series 5 (SGX) sont conçus par Imagination Technologies.
Imagination Technologies ne fournit pas de pilote libre. Compte tenu de l'architecture alambiquée de la puce, il est peu probable qu'un pilote libre voie le jour et ce, malgré le souhait de la Free Software Foundation[21].
Intel HD Graphics[modifier]
Intel prévoit de lancer fin 2013 Valley View, un SoC regroupant un processeur Atom (architecture x86) et un cœur HD Graphics de septième génération pour lequel le fondeur fournit directement un pilote libre.
Prochaine étape : accélération 2D via les fonctions 3D de la puce graphique[modifier]
Les procédés d’accélération 2D actuels (EXA/XAA/UXA) ont montré leur insuffisance c'est pourquoi les développeurs sont à pied d’œuvre pour en développer de nouveaux. Plusieurs initiatives parallèles sont en développement [22],[23],[24]:
Rendu 2D via OpenGL[modifier]
Cairo-gl est un backend OpenGL pour Cairo.
glamor est un procédé d’accélération 2D général basé sur OpenGL. Il 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 parti de glamor, EGL et KMS rend possible le démarrage d’un serveur X via Mesa/EGL sans système de fenêtrage natif[25]. Eric Anholt et Zhigang Gong, tous deux développeurs pour Intel, en sont les principaux développeurs initiaux. glamor est utilisé par le pilote RadeonSI pour les cartes AMD Radeon les plus récentes (lire ci-avant).
Ces deux projets ont pour avantage une simplification à terme de la pile graphique (un seul pilote restant à maintenir : le pilote 3D) mais pour inconvénient de vouloir faire rentrer un pied dans une chaussure à coup de marteau : OpenGL n'est pas conçu pour accélérer les fonctions 2D, et ré-exprimer les primitives 2D en commandes 3D au niveau de l'API 3D n'est pas optimal.
Rendu 2D direct[modifier]
Il s'agit de permettre à une application 2D d'adresser directement le matériel comme peut le faire une application 3D. Mais au lieu de prendre un biais en passant par OpenGL, on essaye d'exposer directement les primitives adaptées à l'accélération 2D.
Des projets comme cairo-drm ou pixman-drm ont cet objectif.
Également, Gallium3D dispose de backends permettant d’accélérer EXA via les fonctions 3D de la puce graphique : st/xorg, st/xa. Mais aucun des deux n'est activement maintenu.
Cette approche aboutit cependant à une complexification des pilotes.
Notes et références[modifier]
- (en) working on a bigger proposal, par Matthias Clasen, sur la liste de diffusion GNOME release team, le 12 mars 2013
- (en) Intel & The Shortcomings Of Gallium3D par Michael Larabel, phoronix, le 13 avril 2010
- (en) [Intel Makes First Release Of Linux OpenCL Project par Michael Larabel, phoronix, le 15 avril 2013
- (en) [More Criticism Comes Towards Intel's Beignet OpenCL par Michael Larabel, phoronix, le 16 avril 2013
- (en) GalliumCompute, sur le wiki de dri.freedesktop.org
- (en) nouveau: MesaDrivers, sur le wiki de nouveau.freedesktop.org
- (en) nouveau: CodeNames, sur le wiki de nouveau.freedesktop.org
- (en) IntelGraphicsDriver, sur le wiki de la X.org Foundation
- (en) Google's Into Intel Gallium3D For Chromium OS? par Michael Larabel, phoronix, le 23 juin 2011
- (en) Intel i915 Gallium3D Driver Might Become The Default par Michael Larabel, phoronix, le 17 avril 2013
- (en) Gallium3D Driver Comes For Intel Sandy/Ivy Bridge par Michael Larabel, phoronix, le 13 décembre 2012
- (en) Intel Is Planning To Drop PowerVR Graphics par Michael Larabel, phoronix, le 7 février 2012
- (en) Libhybris Let You Use Android Drivers & HW Libraries in Linux, CNXSoft, le 8 avril 2013
- (en) Wayland utilizing Android GPU drivers on glibc based systems, Part 1 par Carsten Munk, le 11 avril 2013
- (en) Wayland utilizing Android GPU drivers on glibc based systems, Part 2 par Carsten Munk, le 8 mai 2013
- (en) Freedreno Gallium3D Gets XA Acceleration Support par Michael Larabel, phoronix, le 28 mai 2013
- (en) Open Source ARM userland par Alex Bradbury, le 24 octobre 2012
- (en) Commentaire de Luc Verhaegen sous le billet d'annonce par Alex Bradbury, en date du 24 octobre 2012
- (en) rasberry pi drivers are NOT useful par Dave Airlie, le 25 octobre 2012
- (en) L'avis de Theo de Raadt donné sur la liste de diffusion OpenBSD, le 24 octobre 2012
- (en) page wiki correspondante sur gnu.org
- (en) The Battle for 2D Acceleration par Chris Wilson, le 25 septembre 2009
- (en) From Click to Pixel: A Tour of the Linux Graphics Stack par Carl Worth, le 14 décembre 2009
- (en) Making the GPU do its job par Carl Worth, le 22 janvier 2010
- (en) Pull Request - Glamor: A 2D rendering acceleration implementation based on OpenGL, par zhigang gong, sur la liste de diffusion X.org, le 27 septembre 2011
Articles connexes[modifier]
- Compositeur
- DirectFB
- Mesa 3D/Gallium3D
- Nouveau, pilote libre pour cartes graphiques NVIDIA
- radeon, pilote libre pour cartes graphiques AMD Radeon
- X.Org
- Wayland
- Mir
- Graphics hardware and FOSS (en)
- General Graphics Interface (en)
Liens externes[modifier]
- (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
- (en) The Linux Graphics Stack par Jasper St. Pierre, le 16 juin 2012
- (fr) Pourquoi Wayland veut remplacer X, LinuxFr.org, le 21 février 2012
- (fr) X.Org est mort, vive Wayland !, LinuxFr.org, le 23 octobre 2012
- (en) The SoC GPU driver interview, blog.emmanueldeloget.com, le 25 avril 2013