Im DirectX Developer Blog stellte Microsoft am 8. November 2019 Mesh Shader und Amplification Shader für Direct3D 12 vor. Die beiden Shader-Stufen ersetzen den vorderen Teil der klassischen Geometrie-Pipeline und geben Entwicklern mehr Kontrolle über die Verarbeitung von Dreiecken.
Mesh Shader ersetzt mehrere feste Pipeline-Stufen
Die bisherige Geometrie-Pipeline besteht aus Input Assembler, Vertex Shader, Hull Shader, Domain Shader und Geometry Shader. Mesh Shader und Amplification Shader übernehmen diesen Abschnitt in einem flexibleren Programmiermodell. Rasterisierung und die nachfolgenden Stufen bleiben unverändert.
Der Mesh Shader arbeitet ähnlich wie ein Compute Shader mit Threadgroups und groupshared memory. Er erzeugt Attribute pro Vertex und Primitive und verarbeitet dafür sogenannte Meshlets. Das sind vorab gebildete Teilmengen einer größeren Geometrie, die gemeinsam mit den übrigen Modelldaten abgelegt werden.
Amplification Shader steuert das Culling
Der Amplification Shader kann dem Mesh Shader vorgeschaltet werden. Über DispatchMesh() verteilt er Threadgroups und kann früh entscheiden, welche Geometrie überhaupt verarbeitet werden muss. Microsoft nennt unter anderem Culling pro Instanz als möglichen Einsatzbereich. Nicht sichtbare Geometrie wird damit vor der eigentlichen Mesh-Shader-Verarbeitung entfernt.
Für die Nutzung waren eine Windows-10-Insider-Preview aus dem 20H1-Zweig, eine aktuelle Version des DirectX Shader Compilers und geeignete GPU-Hardware erforderlich. Die Unterstützung lässt sich über D3D12_FEATURE_DATA_D3D12_OPTIONS7 abfragen. Einen historischen Überblick über die Low-Level-API bietet auch unser Beitrag zu DirectX 12.

