Aller au contenu

Mesa 3D

Un article de Wikipédia, l'encyclopédie libre.
Mesa 3D

Informations
Créateur Brian PaulVoir et modifier les données sur Wikidata
Développé par Brian Paul, Tungsten Graphics, Inc. (rachetée par VMware), Intel, Linaro et al.
Première version [1]Voir et modifier les données sur Wikidata
Dernière version 24.3.1 ()[2]Voir et modifier les données sur Wikidata
Version avancée 24.3.0-rc2 ()[3]Voir et modifier les données sur Wikidata
Dépôt gitlab.freedesktop.org/mesa/mesaVoir et modifier les données sur Wikidata
Assurance qualité Intégration continueVoir et modifier les données sur Wikidata
Écrit en C++, C et assembleurVoir et modifier les données sur Wikidata
Système d'exploitation Linux, FreeBSD, NetBSD, OpenBSD, Haiku et Microsoft WindowsVoir et modifier les données sur Wikidata
Type Bibliothèque graphique
Bibliothèque logicielle
Bibliothèque C (d)Voir et modifier les données sur Wikidata
Licence Licence MITVoir et modifier les données sur Wikidata
Site web www.mesa3d.orgVoir et modifier les données sur Wikidata

La pile graphique de Linux comprend Mesa 3D
L’implémentation de EGL plus libwayland-EGL in Mesa 3D et Wayland

Mesa 3D est une bibliothèque graphique libre, initialement développée par Brian Paul, à partir d', qui fournit une implémentation générique d'OpenGL pour réaliser des rendus graphiques tridimensionnels en temps réel, et ce sur de multiples plates-formes. Bien que Mesa 3D ne soit pas une implémentation officielle d'OpenGL, les structures, syntaxe et sémantique de son API sont celles d'OpenGL.

En , Mesa 3D était la seule implémentation d'OpenGL complètement open source[4]. Elle est principalement utilisée par l'implémentation X.Org du système de fenêtrage X, qui l'utilise pour le rendu OpenGL pour les pilotes open-source DRI X.Org/OpenGL. X.Org fournit les fonctionnalités essentielles à la plupart des applications graphiques fonctionnant sous les plates-formes de type Unix, comme GNU/Linux.

Une mise à jour importante a été faite en avec l'incorporation du travail réalisé sur Gallium3D, développé principalement par la société Tungsten Graphics (rachetée par VMware) et initialement prévu pour remplacer Mesa 3D. Cette nouvelle version simplifie le développement des pilotes graphiques en proposant un niveau d'abstraction unique sollicité par les pilotes graphiques et qui peut lui-même recourir à différents procédés d'accélération basés sur OpenGL, OpenGL ES, OpenCL[5] voire Direct3D (auquel Wine pourrait avoir recours). D'une manière générale, elle doit permettre une meilleure exploitation des capacités des processeurs graphiques actuels et peut fournir un procédé de décodage vidéo universel[6]. Enfin, Gallium3D rend possible l'utilisation du processeur graphique (GPU) pour des tâches de calcul, autrefois dévolues au processeur central (CPU) (on parle alors de General-Purpose computation on GPUs ou GPGPU).

Support des différentes architectures

[modifier | modifier le code]

Sur l'architecture x86, les pilotes libres pour processeurs graphiques AMD (pilotes R300, R600, Radeon et RadeonSI) et Nvidia (pilote Nouveau) utilisent Gallium3D. Chez Intel en revanche seuls les processeurs de la génération i915 utilisent Gallium[7] les processeurs plus récents (architecture/pilote i965), continue de recourir à Mesa pour les pilotes libres. Du code assembleur pour l'accélération des calculs via SIMD x86 et x86_64 (AMD64) est également présent.

Sur l'architecture ARM, du code assembleur pour l’accélération SIMD (NEON) a été intégré à partir de 2012.

Des pilotes libres, utilisant Gallium, sont disponibles dans le mainline de Mesa, pour différentes architectures :

  • etna_viv, pour les processeurs graphiques de la société Vivante[8]
  • Freedreno, pour les processeurs graphiques Adreno (a2xx, a3xx, a4xx et a5xx) de Qualcomm[9]
  • Lima pour les processeurs graphiques ARM Mali Utgard (200, 400, 450) ;
  • Panfrost pour les processeurs graphiques ARM Mali Mitgard (T-6xx, T-7xx, T-8xx) et BitFrost (Gxx) ;
  • Tegra pour les processeurs Tegra d'Nvidia[10].
  • vc4 et vc5, pour les processeurs VideoCore de Broadcom, utilisés notamment dans les Raspberry Pi[11],[12],[13]

Du côté des processeurs graphiques Mali d'ARM, une première version du pilote Lima, pour les Mali-400, dont le développeur préférait rester en dehors de Mesa, a stagné à partir de 2012, puis été abandonné en 2013. Une nouvelle version a été entreprise en , gère les processeurs de série Mali-400 et 450 de l'architecture Utgard, et devrait être intégré à Mesa dans le courant 2018. 2 autres pilotes, Chai pour l'architecture Midgard (Mail-Txxx) pour l'architecture Bitfrost (Mail-Gxx), commencent à peu près en même temps, et sont unifié à partir de début 2018, sous le nom de Panfrost. Le pilote commun supporte début 2021 OpenGL 3.1 (bureau) et OpenGL ES 3.0[14].

L’accélérateur de rendu purement logiciel LLVMpipe, du projet Gallium3D a été adapté à l'architecture x86 et à l'architecture ARM. Il est lié à Mesa 3D par défaut, depuis la version 10.2, sortie en . Les auteurs du pilote Panfrost, prévoient de l'utiliser afin, de permettre un rendu sur les fonctions non implémentées pendant la phase de développement.

Fonctionnalités

[modifier | modifier le code]

Mesa 3D implémente les Interfaces de programmation graphiques suivantes :

  • OpenGL, rendu 3D temps réel
  • OpenGL ES, rendu 3D temps réel pour système embarqué, également utilisé par WebGL.
  • EGL, lien entre les API de rendu et le système de fenêtrage.
  • GLX, lien entre OpenGL et le serveur X.
  • OpenCL interface dédiée au calcul numérique, via le state tracker Clover de Gallium.
  • Vulkan commence à être implémenté à partir de Mesa 12 sur le pilote Intel pour les systèmes récents (Ivy Bridge et supérieur) depuis Mesa 3D version 12[15]. Différentes wrappers, permettent de transformer des appels OpenGL, OpenGL ES et Direct3D, voir ci-dessous.
  • NIR (New Intermediate Representation) est un langage de représentation de shaders intermédiaire unifié, qui a pour but de simplifier et d'optimiser la compilation dans les langages des différentes unités matérielles de shaders[16].

et pilotes pour matériel graphique.

  • Direct3D 9, via le state tracker Nine pour Gallium (également apellé Gallium Nine)[17] ou via la conversion vers Vulkan avec D9VK (voir plus bas)
  • Direct3D 10/11 avec les processeurs graphiques supportant Vulkan, via le state tracker DXVK (voir plus bas)
  • Dans sa forme actuelle, Mesa 3D est disponible et peut être virtuellement compilée sur toutes les plates-formes modernes.
  • Bien que n'étant pas une implémentation officielle d'OpenGL pour des raisons de licence, les auteurs de Mesa 3D ont travaillé à garder l'API conforme aux standards d'OpenGL et ses tests de conformité, comme définis par l'OpenGL Architecture Review Board (ARB).
  • Bien que Mesa 3D supporte l'accélération graphique de plusieurs cartes, elle peut aussi être compilée comme un moteur de rendu uniquement logiciel. Comme son code source est également disponible, il est possible d'en étudier le fonctionnement interne pour réaliser un rendu de type OpenGL.
  • Il est parfois possible de trouver des bogues dans les applications OpenGL en liant l'application avec Mesa 3D et en utilisant un débogueur pour pister les problèmes au niveau des couches internes de la bibliothèque.
  • Il a géré le rendu vectoriel 2D, OpenVG 1.1[18], utilisé principalement dans les interfaces embarquées à partir de la fin des années 2000, cette API a finalement été abandonnée et retirée en , lors de la sortie de Mesa 10.6.0[19].
  • Depuis la version 10.1, Mesa 3D implémente la version 3.3 d'OpenGL. À noter que Mesa doit être compilé avec le paramètre --enable-texture-float pour pouvoir bénéficier des floating-point texture compte tenu d'une revendication de brevets faite par Silicon Graphics[20].

Wrappers vers Vulkan

[modifier | modifier le code]

Les pilotes suivant permettant de convertir différentes API 3D vers Vulkan, et de bénéficier ainsi de ses performances et plus faible consommation énergétique avec des applications qui ne sont pas conçu pour cette API :

  • DXVK, convertit les appels Direct3D versions 9, 10 et 11 vers des appels Vulkan[21] ;
  • Zink, convertit les appels OpenGL 2.1 et OpenGL ES 2.0 (au moment de son intégration à Mesa)[22] vers des appels Vulkan. Il commence à être intégré au dépôt git principal de Mesa, le et utilisant le sous-système Gallium de Mesa[23].

Initialement, Mesa 3D réalisait tout le rendu des graphismes 3D au niveau du processeur central (CPU), mais l'architecture de Mesa 3D s'est ouverte pour implémenter le rendu en accélération matérielle au niveau du processeur graphique (GPU) afin de décharger le processeur central de cette tâche. Un des premiers pilotes à supporter l'accélération matérielle a été le pilote 3dfx pour l'API Glide pour les cartes graphiques très populaires Voodoo I/II et autres. Tout le rendu était fait de manière indirecte dans le serveur X, ce qui n'était pas optimal en termes de vitesse de rendu.

Le Direct Rendering Infrastructure (DRI) a finalement succédé à l'ancienne architecture au sein de Mesa 3D en fournissant une interface de rendu 3D direct pour les applications OpenGL.

La version 7.4 a permis aux matériels supportés (Intel d'abord, ATI et NVidia ultérieurement) de tirer profit des évolutions du système graphique de Linux que sont le Graphics Execution Manager (GEM) et DRI2, puis le code de Gallium3D a été intégré dans la version 7.5[24].

La version 7.5 sortie le implémente la version 2.1 d'OpenGL[25].

La version 7.6, sortie le , inclut le support OpenVG et une implémentation alpha de llvmpipe (Low-Level Virtual Machine) développée par José Fonseca et Zack Rusin pour VMware[26], permettant d'accélérer certaines parties du code lors d'interprétation purement logicielle en pré-compilant le code.

La version 7.7, sortie le , ajoute le pilote Gallium « SVGA » de VMware, permettant de faire bénéficier de l'accélération 3D les systèmes invités dans le cadre de la virtualisation.

La version 8.0 sortie le implémente la version 3.0 d'OpenGL.

La version 9.0, sortie le , apporte le support d'OpenGL 3.1. S'agissant spécifiquement des pilotes libres basés sur Gallium3D, cette version ajoute le support d'OpenCL pour les puces Nvidia et AMD (le pilote R600g semblant toutefois le plus avancé des pilotes libres en la matière)[27], et celui de VDPAU (pour le moment limité à MPEG1 et MPEG2).

La version 9.1, sortie le , apporte le support d'OpenGL ES 3.0.

La version 9.2, sortie le , intègre le pilote Gallium3D des puces Adreno, conçues par Qualcomm pour équiper les SoC ARM Snapdragon.

La version 10.0, sortie le , intègre DRI3 et offre la prise en charge d'OpenGL 3.2 et 3.3.

La version 10.1, sortie le , améliore le support OpenGL 3.3 en y ajoutant certaines puces nVidia et ATI.

La version 10.2, sortie le , est la première à être liée à llvmpipe par défaut. Cela améliore grandement le rendu logiciel (sans accélération par une puce graphique).

La version 10.3, sortie le , améliore le support OpenGL 4.x en y ajoutant des fonctions de cette API.

La version 10.4 est sortie le .

La version 11.0, sortie le implémente OpenGL 4.1[28].

La version 12.0, sortie le implémente OpenGL 4.3, ajoute un support partiel de Vulkan[29].

La version 13.0 sortie le implémente OpenGL 4.4[30].

La version 17.0 sortie le implémente OpenGL 4.5[31].

La version 17.1 sortie le implémente les shaders géométriques dans le rasteriseur logiciel, OpenGL 4.2 sur les architectures Intel i965[32].

La version 17.2 sortie le apporte quelques fonctions en plus en fonction des architectures[33].

La version 17.3 sortie le ajoute libtxc_dxtn, active par défaut les compressions de texture GL_EXT_texture_compression_s3tc et GL_ANGLE_texture_compression_dxt, sur les architectures le supportant[34].

La version 18.0 sortie le implémente OpenGL 4.5[35].

La version 19.0 sortie le implémente OpenGL 4.5[36].

La version 19.1 sortie le implémente OpenGL 4.5[37].

La version 19.2 sortie le , implémente le support de Vulkan 1.1[38], améliore le pilote Panfrost pour les processeur graphiques ARM Mali, des familles Midgard et, qui associé avec la sortie du noyau Linux 5.2, rendant utilisable X11 avec ce pilote.

La version 20.3, sortie le , implémente GL 4.5 pour llvmpipe, ajoute le pilote Lavapipe, son équivalent pour Vulkan, Zink, qui mappe de l'OpenGL sur du Vulkan, supporte OpenGL 3.3. Le nouveau pilotes V3DK (Vulkan pour Broadcom BCM2711). Enfin, des nouveaux GPU sont supporté dont les GPU ARM Mali Bifrost via Panfrost, les GPU Intel Gen12 Alder Lake ainsi qu'AMD Dimgrey Cavefish et VanGogh graphics[39].

Notes et références

[modifier | modifier le code]
  1. « http://www.mesa3d.org/intro.html »
  2. « [ANNOUNCE] mesa 24.3.1 », (consulté le )
  3. « [ANNOUNCE] mesa 24.3.0-rc2 », (consulté le )
  4. (en) « Is OpenGL Open Source? », sur OpenGL (consulté le )
  5. (en) Page GalliumCompute sur le wiki dri.freedesktop.org
  6. (en) "The State Of Gallium3D Video Decoding" par Michael Larabel, Phoronix,
  7. (en) « Mesa - root/src/gallium/drivers/i915 », sur cgit.Freedesktop.org
  8. « Mesa - path: root/src/gallium/drivers/etnaviv »
  9. (en) « Mesa - root/src/gallium/drivers/freedreno »
  10. (en) « Mesa - root/src/gallium/drivers/regra »
  11. (en) « VC4 », sur Compte Github de Eric Anholt
  12. (en) « Mesa - root/src/gallium/drivers/vc4 »
  13. (en) « Mesa - root/src/gallium/drivers/vc5 »
  14. (en) Alyssa Rosenzweig, « Desktop OpenGL 3.1 on Mali GPUs with Panfrost », sur Collabora.com,
  15. (en) Michael Larabel, « Mesa 12.0 Released With OpenGL 4.3 Support, Intel Vulkan & Many Other Features », sur Phoronix.com,
  16. (en) Jason Ekstrand, « NIR: A new compiler IR for Mesa », sur jlekstrand.net
  17. (en) « root/src/gallium/state_trackers/nine/README », sur git de Freedesktop
  18. (en) « OpenVG State Tracker »
  19. (en) « Mesa 10.6.0 Release Notes / June 14, 2015 »
  20. (en) ARB_texture_float sur http://cgit.freedesktop.org/mesa
  21. (en) « DXVK, Vulkan-based D3D11 and D3D10 implementation for Linux / Wine », sur compte Github de doitsujin
  22. (en) Erik Faye-Lund, « Zink: Fall Update », sur Collabora (en),
  23. (en) « zink: introduce opengl over vulkan », sur cgit.freedesktop.org,
  24. (en) "Mesa 7.5 Finally Released w/ New Features" par Michael Larabel, Phoronix,
  25. (en) "Mesa 7.5 Release Notes"
  26. (en) Mesa 7.6 Release Notes, 28 September 2009
  27. (en) "OpenCL/Clover Is Closer To Mesa Merging" par Michael Larabel, Phoronix,
  28. « Mesa 11.0.0 Release Notes / September 12, 2015 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  29. « Mesa 12.0.0 Release Notes / July 8, 2016 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  30. « Mesa 13.0.0 Release Notes / November 1, 2016 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  31. « Mesa 17.0.0 Release Notes / February 13, 2017 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  32. « Mesa 17.1.0 Release Notes / May 10, 2017 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  33. « Mesa 17.2.0 Release Notes / September 4, 2017 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  34. « Mesa 17.3.0 Release Notes / December 8. 2017 — The Mesa 3D Graphics Library latest documentation », sur mesa3d.org (consulté le ).
  35. (en) « Mesa 18.0.0 Release Notes / March 27 2018 », sur Mesa3d.org
  36. (en) « Mesa 19.0.0 Release Notes / TBD », sur Mesa3d.org
  37. (en) « Mesa 19.1.0 Release Notes / June 11, 2019 », sur Mesa3d.org
  38. (en) « Mesa 19.2.0 Release Notes / 2019.09.25 », sur Mesa3d.org
  39. (en) « 20.3.0 », sur Meda3D.org

Articles connexes

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]