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

Objets d’état de pipeline de nuanceurs de maillage

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

Nuanceurs de maillage

Les nuanceurs de maillage sont compilés avec l’outil en ligne de commande DXC ou la bibliothèque du compilateur à l’aide du nouveau profil de nuanceur de maillage « ms », par exemple ms_6_5. Le troisième exemple de code fournit un exemple d’implémentation d’un nuanceur de maillage de triangle dans l’espace écran; suivez en utilisant cet exemple de code comme référence. Voici un exemple de compilation d’un nuanceur de maillage en ligne de commande.
La fonction main du nuanceur est décorée d’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 thread familiers des nuanceurs de calcul. Toutes les autres données doivent être lues manuellement au moyen de vues de mémoire tampon constante (CBV), de vues de ressource de nuanceur (SRV) ou de vues d’accès non ordonné (UAV). Les sorties géométriques sont déclarées au moyen des 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 à partir du nuanceur. 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 pour le groupe de threads et seront lues à partir de la première voie. 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 respecter les limites déclarées par cet appel. L’exemple de code suivant montre un nuanceur de maillage qui effectue le rendu d’un seul triangle dans l’espace écran.

Nuanceurs d’amplification

Les nuanceurs d’amplification sont compilés avec l’outil en ligne de commande DXC ou la bibliothèque à l’aide du nouveau profil de nuanceur d’amplification « as », par exemple as_6_5. Voici un exemple de compilation d’un nuanceur d’amplification en ligne de commande.
Leur structure est identique à celle des nuanceurs de calcul, à l’exception de l’appel facultatif à la fonction intrinsèque DispatchMesh, qui répartit une grappe d’enfants de nuanceur de maillage. L’exemple de code suivant présente un nuanceur d’amplification très générique, simplement pour en montrer la structure globale. Pour une application complète des nuanceurs d’amplification, consultez Exemple d’élimination des meshlets. L’exemple de code suivant montre la structure générique d’un nuanceur d’amplification.

Voir aussi

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