Pipelines und Shader mit Direct3D 12
Die programmierbare Direct3D 12-Pipeline erhöht die Renderingleistung im Vergleich zu Grafikprogrammierschnittstellen der vorherigen Generation erheblich.
Direct3D 12-Grafikpipeline
Das folgende Diagramm veranschaulicht die Direct3D 12-Grafikpipeline und den Zustand.
Eine Grafikpipeline ist der sequenzielle Fluss von Dateneingaben und -ausgaben, während die GPU Frames rendert. Angesichts des Pipelinezustands und der Eingaben führt die GPU eine Reihe von Vorgängen aus, um die resultierenden Bilder zu erstellen. Eine Grafikpipeline enthält Shader, die programmierbare Renderingeffekte und Berechnungen ausführen und feste Funktionsvorgänge ausführen.
Beachten Sie Folgendes beim Verweisen auf das Pipelinestatusdiagramm:
- Die Deskriptortabellen und Heaps können beliebig angeordnet werden: SRVs, CBVs und UAVs können in beliebiger Reihenfolge referenziert und zugewiesen werden.
- Einige Vorgänge der Pipeline sind konfigurierbar. Beispielsweise funktioniert die Ausgabezusammenführung in der Regel auf Lese-/Schreibzugriff mit den Renderziel- und Tiefenschablonenansichten. Die Pipeline kann jedoch so konfiguriert werden, dass eine dieser Ansichten schreibgeschützt oder schreibgeschützt ist.
- Statische Sampler sind nicht Teil der Stammargumente, da sie statisch sind.
Pipelinestatusobjekte
Direct3D 12 führt das Pipelinestatusobjekt (PSO) ein. Anstatt den Pipelinestatus über eine große Anzahl von Objekten auf hoher Ebene zu speichern und darzustellen, werden die Zustände von Pipelinekomponenten wie dem Eingabeassembler, Rasterizer, Pixelshader und Ausgabezusammenführung in einer PSO gespeichert. Ein PSO ist ein einheitliches Pipelinestatusobjekt, das nach der Erstellung unveränderlich ist. Die aktuell ausgewählte PSO kann schnell und dynamisch geändert werden, und die Hardware und Treiber können einen PSO direkt in systemeigene Hardwareanweisungen und -zustand konvertieren, soweit die GPU für die Grafikverarbeitung bereit ist. Um ein PSO anzuwenden, kopiert die Hardware einen minimalen Vorabzustand direkt in die Hardwareregister. Dadurch wird der aufwand für den Grafiktreiber verursacht, der den Hardwarezustand basierend auf allen aktuell anwendbaren Rendering- und Pipelineeinstellungen kontinuierlich neu komputiert. Das Ergebnis ist erheblich reduziert draw call overhead, erhöhte Leistung und mehr Draw-Aufrufe pro Frame.
Die aktuell angewendete PSO definiert und verbindet alle Shader, die in der Renderingpipeline verwendet werden. Microsoft High Level Shader Language (HLSL) wird vorab in Shaderobjekte kompiliert, die dann zur Laufzeit als Eingabe für Pipelinestatusobjekte verwendet werden. Weitere Informationen dazu, wie die PSO-Funktionen in der Grafikpipeline funktionieren, finden Sie unter Verwalten des Grafikpipelinezustands in Direct3D 12.
Direct3D 12-Computepipeline
Das folgende Diagramm veranschaulicht die Direct3D 12-Computepipeline und den Zustand.
In dieser Pipeline sind keine festen Funktionseinheiten vorhanden. Deskriptor-Heaps, Sampler-Heaps und statische Sampler sind jedoch weiterhin in der Berechnung verfügbar.
Verwandte Themen