Aller au contenu
Mesh shaders et VRS : à quoi servent ces techniques GPU ?

Mesh shaders et VRS : à quoi servent ces techniques GPU ?

Par Thomas R.

13 min de lecture
Lien copié dans le presse-papiers
Thomas R.

65 536. C'est le nombre maximal d'enfants qu'un seul task shader peut générer sur la première génération de matériel compatible, d'après le billet publié par NVIDIA le 17 septembre 2018 pour présenter les mesh shaders de son architecture Turing (le texte original écrit « 64K »). Ce chiffre de plomberie dit l'essentiel : le GPU décide lui-même, par paquets, de la géométrie qu'il produit. Mesh shaders et Variable Rate Shading, ou VRS, arrivent dans la même vague, mais ils n'interviennent pas au même étage du rendu.

Les deux définitions, sans détour : les mesh shaders remplacent l'ancienne chaîne vertex, tessellation et geometry shader par des groupes de threads qui traitent chacun une partie d'un maillage. Le VRS laisse le moteur fixer, par objet dessiné ou par zone d'écran, combien de pixels partagent un même calcul de shading : de 1x1 à 2x2 sur tout matériel VRS, jusqu'à 4x4 sur option.

Quelles dates retenir, de Turing à Vulkan ?#

Trois spécifications primaires structurent le sujet : le billet DirectX sur les mesh shaders, la spécification DirectX du VRS et l'extension Vulkan de Khronos. Autour d'elles, les constructeurs et un studio ont publié leurs propres documents. Dans l'ordre :

DateÉtapeSource
17 septembre 2018NVIDIA présente les mesh shaders et task shaders de l'architecture TuringNVIDIA Developer Blog
8 novembre 2019Microsoft annonce les mesh shaders et amplification shaders pour DirectX 12DirectX Developer Blog
19 mars 2020Annonce de DirectX 12 Ultimate : DXR 1.1, VRS, mesh shaders et sampler feedbackDirectX Developer Blog
31 août 2022Khronos publie l'extension Vulkan VK_EXT_mesh_shaderKhronos Group
6 novembre 2023Remedy décrit l'usage des mesh shaders dans Alan Wake 2Remedy, moteur Northlight
19 décembre 2023AMD publie sur GPUOpen un guide consacré au passage du vertex shader au mesh shaderAMD GPUOpen

Entre la première et l'avant-dernière ligne, la fonction est passée de la fiche technique d'un constructeur à un jeu qui la revendique par écrit. C'est cette ligne-là qui compte pour un joueur.

Mesh shaders : qu'ont-ils remplacé, exactement ?#

Le pipeline géométrique classique enchaîne des étapes spécialisées. NVIDIA, dans son billet de 2018, présente les mesh shaders comme leur remplaçant : le nouveau pipeline à deux étages « replaces fixed-function vertex, tessellation, and geometry processing with flexible, developer-controlled work generation and primitive output ». Le même texte règle son compte aux geometry shaders, à qui il reproche un « inefficient threading, unfriendly programming model ». Pour un document de constructeur, la franchise est rare.

Le principe tient en deux étages. Le premier, appelé task shader chez NVIDIA, est défini comme « a programmable unit that operates in workgroups and allows each to emit (or not) mesh shader workgroups ». Il décide, groupe par groupe, s'il lance du travail en aval ou non. Le second, le mesh shader, travaille lui aussi en workgroups et génère des primitives, les formes géométriques de base du rendu. La limite de 65 536 enfants par tâche citée plus haut concerne ce premier étage, sur la première génération de matériel.

Microsoft reprend ce découpage dans DirectX 12, dans un billet du 8 novembre 2019, avec d'autres noms. Le premier étage y devient l'amplification shader, dont le rôle tient en une ligne : « What it does is simple: dispatch threadgroups of Mesh Shaders. » Chaque mesh shader lancé accède aux données de l'amplification shader parent et ne renvoie rien. Quant au mesh shader lui-même, Microsoft le résume ainsi : « A Mesh Shader begins its work by dispatching a set of threadgroups, each of which processes a subset of the larger mesh. »

Le maillage complet est donc découpé, et chaque groupe de threads en traite un morceau. Quiconque a suivi un pipeline de modélisation 3D pour le jeu vidéo mesure le changement : le modèle livré par l'artiste n'est plus digéré d'un seul bloc par des étapes fixes.

AMD, dans son guide GPUOpen du 19 décembre 2023, liste les étapes remplacées avec son propre vocabulaire : « the traditional geometry pipeline of vertex-, hull-, domain-, and geometry-shader ». NVIDIA parlait de tessellation, AMD nomme hull et domain. Deux vocabulaires, une même cible : le pipeline géométrique traditionnel.

Que fait le Variable Rate Shading, tier par tier ?#

Là où les mesh shaders travaillent sur la géométrie, le VRS travaille sur les pixels, au moment où leur couleur est calculée à partir des matériaux, ceux que détaille notre lexique des textures PBR. La spécification DirectX-Specs de Microsoft définit des taux de shading : 1x1, 1x2, 2x1 et 2x2 sont disponibles sur tous les tiers. Trois taux supplémentaires, 2x4, 4x2 et 4x4, ne sont accessibles que si le matériel annonce la capacité AdditionalShadingRatesSupported.

La spécification le formule ainsi : « a group of pixels can be shaded as a single unit ». En 1x1, chaque pixel reçoit son propre calcul ; en 2x2, un seul calcul couvre un bloc de deux pixels sur deux.

La spécification distingue deux familles de matériel, les « tiers » :

  • Tier 1 : le taux se choisit uniquement par draw call, c'est-à-dire pour chaque appel de dessin, et reste uniforme sur tout ce que cet appel produit.
  • Tier 2 : en plus du réglage par draw call, le taux varie à l'intérieur d'un même dessin, soit via une image de taux en espace écran, soit primitive par primitive.

L'image de taux du Tier 2 est une texture 8 bits à canal unique, au format DXGI_FORMAT_R8_UINT, découpée en tuiles de 8x8 ou 16x16 pixels. La spécification lui réserve un état de ressource dédié, D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE. Le moteur dispose ainsi d'une carte grossière de l'écran où chaque tuile porte son propre taux.

Qu'a changé DirectX 12 Ultimate le 19 mars 2020 ?#

Ce jour-là, Microsoft annonce DirectX 12 Ultimate, une marque qui regroupe quatre fonctions : DirectX Raytracing 1.1, Variable Rate Shading, mesh shaders et sampler feedback. Le premier des quatre a son propre dossier chez nous, entre ray tracing et path tracing.

L'engagement tient dans une phrase du billet d'annonce. Le matériel PC portant le logo DX12 Ultimate, ou une Xbox Series X, est « guaranteed to support ALL next generation graphics hardware features, including DirectX Raytracing, Variable Rate Shading, Mesh Shaders and Sampler Feedback ». Pour une fois, un logo sur une boîte engage sur une liste de fonctions précise. Adolescent, entre deux réglages d'overclocking sur un Core 2 Duo, j'avais pris l'habitude de lire une boîte de carte graphique en commençant par les petits caractères : celle-ci aurait mérité qu'on lise les gros.

Mettre le VRS, qui règle une densité de calcul, sur la même ligne que le ray tracing dans un argumentaire de vente : je ne sais pas encore dire si c'est de la pédagogie ou de l'emballage.

Quels GPU et quelles consoles gèrent mesh shaders et VRS ?#

NVIDIA, AMD et Microsoft documentent leur propre matériel ; pour les deux PS5, le tableau s'appuie sur la presse technique. Mis bout à bout, ces documents donnent le tableau suivant.

PlateformeCe que la source établitSource
NVIDIA TuringMesh shaders et task shaders, jusqu'à 65 536 enfants par tâche sur cette première générationNVIDIA Developer Blog, 17 septembre 2018
AMD RDNA 2Support complet de DirectX 12 Ultimate : VRS, DirectX Raytracing 1.1, mesh shading et sampler feedbackAMD GPUOpen
Xbox Series XSupport garanti de DirectX Raytracing, VRS, mesh shaders et sampler feedbackDirectX Developer Blog, 19 mars 2020
PS5 (2020)Geometry Engine propriétaire à base de primitive shaders, ni mesh shaders ni VRS au sens standard DirectX ou VulkanTom's Hardware, compte rendu de « Road to PS5 », 18 mars 2020 ; TechSpot, 9 mai 2024
PS5 Pro (2024)Prise en charge matérielle des mesh shaders et du VRSTechSpot, 9 mai 2024, d'après des documents Sony obtenus par Eurogamer

Côté AMD, la page GPUOpen consacrée à DirectX 12 Ultimate l'écrit en toutes lettres : « The AMD RDNA 2 architecture has full support for DirectX 12 Ultimate ». Pour comparer les cartes actuelles des deux camps, notre comparatif RTX 50 et RX 9000 reprend les modèles un par un.

Une affirmation fréquente dans la presse généraliste veut que la PS5 gère mesh shaders et VRS comme les autres consoles de sa génération. Le compte rendu de la présentation « Road to PS5 » de Mark Cerny, publié par Tom's Hardware le 18 mars 2020, décrit autre chose : un Geometry Engine qui « allows for primitive shaders to "synthesize geometry on the side" ». Une solution GPU propriétaire, distincte des mesh shaders et du VRS au sens standard DirectX ou Vulkan. En mai 2024, TechSpot, qui s'appuie sur des documents du portail développeurs de Sony obtenus par Eurogamer, présente la prise en charge matérielle du VRS et des mesh shaders comme une nouveauté de la PS5 Pro, deux techniques jusque-là peu exploitées dans les jeux « partially due to lack of full support from the PS5 ». Le reste de la fiche technique des consoles figure dans notre comparatif PS5, Xbox Series X et Switch 2.

Et Vulkan, il a suivi ?#

Le 31 août 2022, le Khronos Group publie l'extension VK_EXT_mesh_shader. Son communiqué ne parle pas de remplacement : le nouveau pipeline, avec ses étages task et mesh, « provides an alternative to the traditional vertex, tessellation, or geometry shader stages that feed into rasterization ». NVIDIA disait « replaces », Khronos dit « alternative ». Le fabricant de puces vend une rupture, l'organisme de normalisation décrit une option de plus.

Au lancement, NVIDIA proposait l'extension dans des pilotes Vulkan bêta, tandis qu'AMD et Intel la prenaient en charge à titre expérimental, via les pilotes open source RADV et ANV.

Le VRS passe, côté Vulkan, par une extension distincte des mesh shaders : VK_KHR_fragment_shading_rate. Selon sa page de référence dans le registre Khronos, elle combine trois méthodes : un taux par pipeline, donc par dessin, un taux par primitive, et un taux par région du framebuffer fourni via une pièce jointe (attachment).

Un jeu s'en sert-il vraiment ?#

Oui, et c'est le studio qui le dit. Dans un article du 6 novembre 2023 sur son moteur Northlight, Remedy écrit à propos d'Alan Wake 2 : « GPU-driven rendering using mesh shaders, we can now do occlusion culling down to a single-pixel precision ». Le rendu est piloté par le GPU, et l'élimination des objets masqués descend à la précision d'un pixel.

Je recommande une seule vérification avant d'acheter une carte graphique pour ces deux techniques : le logo DirectX 12 Ultimate, que Microsoft associe par écrit à la prise en charge des mesh shaders comme du VRS.

FAQ#

Quelle différence entre un mesh shader et un vertex shader ?#

Le vertex shader fait partie de l'ancien pipeline géométrique que les mesh shaders remplacent, avec la tessellation et le geometry shader selon NVIDIA, ou avec les étapes hull, domain et geometry selon AMD. Le mesh shader travaille par groupes de threads : chacun traite une partie du maillage et génère ses propres primitives, sous le contrôle d'un étage amont appelé task shader chez NVIDIA et amplification shader chez Microsoft.

Quelle est la différence entre le VRS Tier 1 et le VRS Tier 2 ?#

Selon la spécification DirectX de Microsoft, le Tier 1 ne permet de choisir le taux de shading que par draw call, avec un taux uniforme sur tout le dessin. Le Tier 2 ajoute un réglage à l'intérieur d'un même dessin, via une image de taux en espace écran découpée en tuiles de 8x8 ou 16x16 pixels, ou primitive par primitive. Les taux 1x1, 1x2, 2x1 et 2x2 existent sur tous les tiers.

La PS5 gère-t-elle les mesh shaders et le VRS ?#

Pas au sens standard DirectX ou Vulkan, selon la presse technique. D'après le compte rendu de la présentation « Road to PS5 » de Mark Cerny publié par Tom's Hardware (mars 2020), la PS5 originale utilise un Geometry Engine propriétaire à base de primitive shaders. La prise en charge matérielle des mesh shaders et du VRS arrive avec la PS5 Pro (2024), selon des documents Sony relayés par TechSpot en mai 2024. La Xbox Series X, elle, est garantie compatible par Microsoft via DirectX 12 Ultimate.

Vulkan gère-t-il les mesh shaders ?#

Oui, depuis l'extension VK_EXT_mesh_shader publiée par le Khronos Group le 31 août 2022. Au lancement, NVIDIA la proposait en pilotes Vulkan bêta, AMD et Intel en support expérimental via les pilotes open source RADV et ANV. Le VRS passe par une extension distincte, VK_KHR_fragment_shading_rate, qui combine selon le registre Khronos un taux par pipeline, par primitive et par région du framebuffer.

Comment savoir si une carte graphique gère mesh shaders et VRS ?#

Le repère le plus simple est le logo DirectX 12 Ultimate. Dans son annonce du 19 mars 2020, Microsoft écrit que le matériel qui le porte est garanti compatible avec DirectX Raytracing, Variable Rate Shading, mesh shaders et sampler feedback. Côté AMD, l'architecture RDNA 2 gère DirectX 12 Ultimate en totalité, selon AMD GPUOpen. Côté NVIDIA, les mesh shaders sont décrits dès septembre 2018 sur l'architecture Turing.

Sources#

Lien copié dans le presse-papiers

À lire aussi