
Mesh Shaders
Les Mesh Shaders (MS) sont essentiellement des compute shaders dotés d’intrinsèques propres à l’étape pour exporter les sommets, les index et les données de primitives vers l’assembleur de primitives. Toutes les données doivent être explicitement lues à partir de vues de tampon constant (CBV) et de vues de ressource de shader (SRV) dans le code du shader. Cela signifie que les développeurs devront ajuster leur vision des appels de dessin pour l’aligner davantage sur le flux de travail des compute shaders. L’auteur du shader détermine la taille du groupe de threads et la façon dont chaque thread est utilisé pour accomplir la charge de travail. Il aura accès aux intrinsèques de wave du shader et à la mémoire groupshared pour partager des données et construire efficacement une liste de primitives à rastériser. Figure 2. Visualisation du travail GPU distribué par un appel DispatchMesh(4, 1, 1) avec un pipeline lié composé uniquement d’un Mesh Shader. Comme pour les compute shaders, DispatchMesh requiert des nombres de groupes de threads dans les dimensions x, y et z. Cela distribue le nombre spécifié de groupes de threads Mesh Shader pour exécution.
Amplification Shaders
L’Amplification Shader (AS) est une étape facultative qui précède l’étape Mesh Shader. Cette étape s’apparente également au calcul et peut distribuer dynamiquement un ensemble de groupes de threads Mesh Shader. Chaque groupe de threads calcule son propre nombre de groupes de threads Mesh Shader à distribuer. Chaque groupe de threads comprend également jusqu’à 16 Ko de données de charge utile personnalisées partagées à transmettre aux groupes de threads Mesh Shader qu’il engendre. Ces données peuvent être exportées directement depuis la mémoire groupshared. Les fonctionnalités des Amplification Shaders permettent aux programmes de shader de réduire ou d’amplifier dynamiquement leur charge de travail en fonction de critères personnalisés. Cela ouvre la possibilité d’une élimination efficace à granularité plus fine ou d’une tessellation personnalisée. Figure 3. Visualisation de la distribution d’un objet d’état de pipeline (PS) AS-MS. Certains groupes de threads AS choisiront de distribuer des groupes de threads MS. D’autres pourraient n’en distribuer aucun.
