Passer au contenu principal
L’utilisation du pipeline Mesh Shader dans Direct3D 12 se résume aux étapes familières suivantes.
  1. Écrire et compiler un Mesh Shader et (facultativement) un Amplification Shader à l’aide de DXC.
  2. Créer un objet d’état de pipeline Mesh Shader à l’aide du bytecode du shader compilé.
  3. Enregistrer la distribution de l’objet d’état de pipeline Mesh Shader à l’aide d’une liste de commandes.
  4. Exécuter la liste de commandes sur une file d’attente de commandes.

Objets d’état de pipeline Mesh Shader

Direct3D 12 expose le pipeline Mesh Shader par le biais des API familières d’objets d’état de pipeline graphique. La création de l’objet d’état de pipeline Mesh Shader utilise les API de flux d’état de pipeline, comme illustré dans les deux exemples de code suivants. Les API ID3D12Device et ID3D12GraphicsCommandList permettent de vérifier la prise en charge matérielle et de distribuer les charges de travail du pipeline Mesh Shader (deuxième exemple de code). Notez qu’il n’est pas nécessaire de vérifier la prise en charge matérielle sur XBOX Series X|S. L’exemple de code suivant montre une description de flux de pipeline Mesh Shader à fournir aux API de création de flux de pipeline.
L’exemple de code suivant montre la création et l’utilisation d’un état de pipeline Mesh Shader.

Mesh Shaders

Les Mesh Shaders sont compilés avec l’outil en ligne de commande DXC ou avec la bibliothèque du compilateur, en utilisant le nouveau profil de shader Mesh Shader « ms », par exemple ms_6_5. Le troisième exemple de code fournit un exemple d’implémentation d’un Mesh Shader de triangle en espace écran ; suivez les explications en utilisant cet exemple de code comme référence. Voici un exemple de compilation d’un Mesh Shader en ligne de commande.
La fonction main du shader est décorée avec des attributs de métadonnées.
  • NumThreads déclare la dimensionnalité du groupe de threads
  • OutputTopology déclare le type de primitive
Les seules entrées sont les ID de threads familiers des compute shaders. Toutes les autres données doivent être lues manuellement via des vues de tampon constant (CBV), des vues de ressource de shader (SRV) ou des vues d’accès non ordonné (UAV). Les sorties géométriques sont déclarées via les paramètres out en tant que tableaux de sortie partagés. Il s’agit de paramètres de tableau en écriture seule dont les types déclarent les types de sommets et de primitives définis par l’utilisateur à exporter depuis le shader. Les modificateurs vertices, indices et primitives désignent chaque paramètre comme l’une des trois sorties géométriques distinctes. La longueur de ces tableaux doit être une constante de compilation et définit le nombre maximal de sommets et de primitives pouvant être exportés. La fonction intrinsèque SetMeshOutputCounts déclare le nombre réel de sommets et de primitives exportés pour le groupe de threads. Cet appel est facultatif : la valeur par défaut est zéro pour numVerts et numPrims. Ces valeurs doivent être inférieures ou égales aux longueurs des tableaux de sortie. Cet appel peut avoir lieu à tout moment avant les écritures dans les tableaux de sortie partagés. Les valeurs fournies sont censées être constantes au sein du groupe de threads et seront lues à partir de la première voie (lane). Les sommets et les primitives sont ensuite transformés par le groupe de threads et écrits dans les tableaux de sortie partagés. L’appel à SetMeshOutputCounts() doit être effectué avant toute écriture, et les écritures doivent rester dans les limites déclarées par cet appel. L’exemple de code suivant montre un Mesh Shader qui effectue le rendu d’un seul triangle en espace écran.

Amplification Shaders

Les Amplification Shaders sont compilés avec l’outil en ligne de commande DXC ou avec la bibliothèque, en utilisant le nouveau profil de shader Amplification Shader « as », par exemple as_6_5. Voici un exemple de compilation d’un Amplification Shader en ligne de commande.
Leur structure est identique à celle des compute shaders, à l’exception de l’appel facultatif à la fonction intrinsèque DispatchMesh, qui distribue un ensemble de Mesh Shaders enfants. L’exemple de code suivant présente un Amplification Shader très générique, simplement pour montrer la structure globale. Pour une application complète des Amplification Shaders, consultez Exemple d’élimination des meshlets. L’exemple de code suivant montre la structure générique d’un Amplification Shader.

Voir aussi

Vue d’ensemble du pipeline Mesh Shader Pourquoi les Mesh Shaders Vue d’ensemble de l’API Mesh Shader Meshlets Exemple d’élimination des meshlets
Dernière modification le 6 octobre 2026