Pile graphique Linux
La pile graphique Linux () désigne, dans une distribution GNU/Linux, l’ensemble des composants logiciels qui interviennent dans le processus d’affichage.

Historique

Le serveur X 
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. XFree86 était le serveur X libre le plus utilisé par les distributions GNU/Linux. Mais en 2004, en raison d'un problème de licence, un fork est créé: X.Org. En 2013, ce dernier est le plus répandu parmi les distributions GNU/Linux. 

Le serveur X était un outil très puissant, mais n’était pas un outil très performant. Différentes méthodes ont été explorées pour pallier cette carence :
 contourner le serveur X lorsqu’il n’était pas utile, pour supprimer un intermédiaire : ainsi, DRI (pour Direct Rendering Interface) permet à Mesa d’interagir avec le matériel sans passer par le serveur X (Mesa ne peut s’adresser lui‐même au matériel, vivant en espace utilisateur. Voir à ce propos le paragraphe Composition d’un pilote graphique libre sous GNU/Linux ci‐après) ;
 des extensions ont été ajoutées au serveur X : XRender, XRandR, et Composite notamment.

Par ailleurs, un certain nombre de tâches 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 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 à X11 : un serveur Wayland joue à la fois le rôle de compositeur (gestionnaire de fenêtres) et de serveur d’affichage. Wayland s’appuie pour cela sur une partie de l’infrastructure existante : pilotes DRI en Mesa 3D, GEM et KMS. Wayland 1.0 est sorti le  et poursuit depuis son développement. GNOME 3.22 devrait pleinement fonctionner avec Wayland et Fedora 25 devrait proposer Wayland par défaut.

En complément, XWayland permet d'avoir un serveur X tournant au-dessus de Wayland afin de pouvoir faire fonctionner les applications initialement conçues pour X.Org et qui n'auront pas été adaptées.

Canonical développe de son côté un serveur graphique concurrent pour Ubuntu : Mir.

Composition d’un pilote graphique libre sous GNU/Linux 

Sous GNU/Linux, un pilote de carte graphique se décompose en trois parties distinctes :
 Device dependent X driver (DDX), le pilote d’affichage du serveur X ;
 Direct rendering infrastructure (DRI), le pilote en Mesa 3D ;
 Direct Rendering Manager (DRM), le pilote du noyau Linux.

Le pilote DDX (pour Device Dependent X) 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 GLAMOR ou EXA – et ses dérivés UXA, SNA – ou encore ).

Mesa est l’implémentation libre d’OpenGL pour GNU/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 :

Avec X.Org :

Avec un compositeur Wayland :

Gallium3D : optimisation de la pile  

Gallium3D est présenté tout d'abord comme le successeur de Mesa 3D : il consiste à proposer un plus grand niveau d’abstraction du matériel afin d'unifier l'interface, dans la continuation de la modularisation de X.org, de réduire et simplifier également les tâches des développeurs à l'essentiel et de mieux séparer les différentes couches.

Implémentation libre d'OpenGL : Mesa 3D ou Gallium3D  
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.

Implémentation libre d'OpenCL : Gallium3D ou Beignet  
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. Ce backend pour Gallium3D sera utilisé par les pilotes libres pour cartes NVIDIA (nv50, nvc0…) et AMD (Evergreen, Northern Islands…).

LLVMpipe pour le rendu logiciel accéléré 
Le pilote LLVMpipe, basé sur le compilateur JIT LLVM et sur Gallium3D et l'infrastructure DRM/DRI a permis de multiplier la vitesse exécution d'Open GL sans accélération matérielle. Cette implémentation a inspiré l'API  d'ATI qui à a son tour été utilisée pour Vulkan.

Les pilotes graphiques ou vidéo libres par modèles

Puces graphiques à destination des ordinateurs personnels 

Les ordinateurs personnels embarquent généralement une puce graphique émanant d'un des trois concepteurs suivants : AMD, NVIDIA et Intel.

AMD Radeon et FirePro 

Radeon et FirePro forment l'offre de cœurs et cartes graphiques d'AMD.

Pilotes Gallium3D : issus du projet radeon, il existe différents pilotes (R300g, R600g, RadeonSI) correspondant à 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). À noter également que, à partir de la famille de puces GCN (Graphics Core Next) de  "GCN 1.2" (famille de puces postérieure à Sea Islands), le pilote Gallium3D RadeonSI est basé sur le pilote noyau commun aux pilotes libre et propriétaire AMDGPU.

NVIDIA GeForce et Quadro 

GeForce et Quadro forment l'offre de cartes graphiques de NVIDIA.

Pilotes Gallium3D : issus du projet Nouveau, il existe différents pilotes (nv30, nv50, nvc0…) correspondant à différentes générations de puces graphiques NVIDIA.

Intel GMA et HD Graphics 

HD Graphics (et précédemment GMA) constitue l'offre de cœurs graphiques d'Intel pour ses propres microprocesseurs.

Pilotes Mesa classique officiels 
Ce pilote 3D, développé à l'initiative d'Intel, est le pilote par défaut de la pile graphique de GNU/Linux pour ces puces. Il 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 : 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 
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.

Cas particulier des GMA 500/600 
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 a lancés à partir de fin 2013 (Valley View et suivants) marquent l’abandon du PowerVR au profit de la solution maison, refermant ainsi cette parenthèse.

Cœurs graphiques équipant les systèmes sur une puce 
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 fabricants 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 Mer.

Cœurs graphiques pour accélérer la 3D 

Les SoC embarquent généralement un cœur graphique émanant d'un des six concepteurs suivants : ARM, Qualcomm, NVIDIA, Vivante, Broadcom, et Imagination Technologies.

ARM Mali 
Les cœurs graphiques Mali sont conçus par ARM.

ARM ne fournit pas de pilote libre. Un pilote libre, qui avait pour plan de supporter Mesa 3D, était jusqu'à début 2013 développé par rétro-ingénierie à l'initiative de Luc Verhaegen alias libv, rejoint par Connor Abbott alias cwabbott : Lima. Le projet semblait bien avancer, le pilote permettant par exemple de faire tourner Quake 3 Arena. Le , Luc a expliqué sur son blogue les déboires que lui avaient causé ce projet, notamment parce qu'il aurait déplu à ARM, et la démotivation qui en découlait et qui le conduisait à mettre le projet de côté. Toutefois un appel à contribution est apparu sur le site du projet le  et quelques contributions au code sont apparues sur une branche parallèle, nommée ng. Le développement est à nouveau très actif depuis 2018. Un autre pilote libre, Panfrost a également été créé permettant de gérer les nouvelles générations de processeurs Mali (Txxx et Gxx). Ces deux pilotes supportent OpenGL (version bureau) contrairement au pilote officiel et sont tous deux intégrés à la partie Gallium3D des pilotes de Mesa.

Qualcomm Adreno 
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.

Le pilote DRM, nommé msm, prenant en charge KMS et fonctionnant tant avec X.org (via xf86-video-freedreno) qu'avec Wayland/Weston, a intégré la version 3.12 du noyau Linux tandis que freedreno, le pilote Gallium3D, a intégré la version 9.2 de Mesa. Il s'agit donc du premier pilote libre 2D/3D disponible pour un SoC ARM. Ce pilote permet aux puces a3xx et a4xx de prendre en charge OpenGL ES 3.0 (depuis Mesa 3D 11.0) et OpenGL 3.1 (depuis Mesa 3D 11.1).

Depuis , Qualcomm aide au développement de ce pilote libre communautaire, en fournissant patches et documentation.

NVIDIA GeForce ULP 
Le GeForce ULP (pour Ultra Low Power) est conçu par NVIDIA dont il équipe les SoC ARM Tegra.

Avec l'aide de NVIDIA, un pilote libre 2D pour Tegra 2/3 a été introduit dans la version 3.8 du noyau Linux et complété dans la version 3.10 du noyau Linux. À compter de la version 3.13 du noyau Linux, le pilote DRM est composé de deux parties : host1x et tegra et la prise en charge de Tegra 4 est ajoutée.

Un pilote libre 3D est en cours de développement par rétro-ingénierie à l'initiative de Erik Faye-Lund alias kusma (et précédemment de Thierry Reding) : grate.

Vivante Corporation Vivante 
Le cœur graphique Vivante est conçu par Vivante Corporation et équipe divers SoC (série i.MX6 de Freescale, gamme Armada de Marvell, RK2918 de Rockchip).

En 2015/2016, un pilote libre 2D/3D etnaviv est activement développé par Lucas Stach pour le compte de la société allemande Pengutronix, Christian Gmeiner et Russell King. Comme résultat de ce travail, le pilote DRM, basé sur le code de freedreno (le pilote libre pour les processeurs graphiques Qualcomm Adreno inclus dans les SoC Snapdragon), a intégré la version 4.5 du noyau Linux.
Parallèlement, le développement du pilote Gallium3D, qui a été commencé par rétro-ingénierie par Wladimir J. van der Laan alias wumpus, se poursuit.

Broadcom VideoCore 
Le VideoCore est conçu par Broadcom.

Malgré l'architecture alambiquée de la puce, une initiative indépendante de pilote libre avait été commencée par Herman H Hermitage : videocoreiv.

Après le faux-départ de fin 2012, Broadcom a finalement levé le secret sur certaines parties de ses puces début 2014.

Finalement, en , Broadcom a recruté Eric Anholt, ancien principal développeur des pilotes libres Mesa pour les processeurs graphiques d'Intel, pour créer un pilote 3D libre à destination du VideoCore 4 (qui équipe notamment les Raspberry Pi et Pi 2) : vc4. Une ébauche est entrée dans Mesa 3D le , utilisant l'architecture Gallium3D, qui reste à compléter à la date du .

Parallèlement, une mouture préliminaire du pilote noyau a été intégrée dans la version 4.4 de Linux, qui a été complétée dans la version 4.5 afin de pouvoir prendre en charge la 3D en conjonction avec le pilote Gallium3D.

Le pilote 2D/3D peut être testé à partir de l'image Raspbian publiée le .

Imagination Technologies PowerVR 
Les PowerVR (modèles Series 5 et postérieurs) 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.

Intel HD Graphics 
Intel a lancé fin 2013 Valley View, un premier 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.

Intel a annoncé mi- qu'il se retirait du segment des smartphones et tablettes.

Cœurs graphiques pour accélérer la vidéo

Allwinner CedarX 
Allwinner ne fournissait pas de pilote libre pour le CedarX et un pilote libre a commencé à être développé par rétro-ingénierie (projet Cedrus) ; AllWinner a ensuite réalisé un pilote libre mais incomplet.

Broadcom

Rockchip 
Les processeurs de décodage vidéo de Rockchip ont des pilotes libres présent dans la pile vidéo standard Linux. Rockchip fourni sous licence libre les bibliothèques depuis 2016.

Prochaine étape : accélération 2D via les fonctions 3D de la puce graphique  
Les procédés d’accélération 2D actuels (EXA/XAA/UXA) ayant montré leurs limites, c'est pourquoi les développeurs sont à pied d’œuvre pour en développer de nouveaux. Plusieurs initiatives parallèles sont en cours.

Rendu 2D via OpenGL 
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. 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) ainsi que pour XWayland.

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 
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

Annexes

Articles connexes

Liens externes

Base de données 

 État de la prise en charge des extensions OpenGL et de OpenGL ES par la pile graphique de Linux, glxinfo

Articles 
  The (Re)Architecture of the X Window System, par James Gettys et Keith Packard le 
  Le point sur le traitement graphique sous Linux par Jon Smirl, le 
  4 Years Later par Pavel Rojtberg, le 
  Linux Graphics Driver Stack Explained par Yang Zhao, le 
  The Linux Graphics Stack par Jasper St. Pierre, le 
  Pourquoi Wayland veut remplacer X, LinuxFr.org, le 
  X.Org est mort, vive Wayland !, LinuxFr.org, le 
  The SoC GPU driver interview, blog.emmanueldeloget.com, le 
  Xwayland par Jasper St. Pierre, le 
  From pre-history to beyond the global thermonuclear war par Pekka Paalanen, le 
  Explaining X11 for the rest of us par Jasper St. Pierre
  Layered compositing par Martin Gräßlin, le 

3D
Bibliothèque logicielle graphique