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 Images zu erstellen. Eine Grafikpipeline enthält Shader, die programmierbare Renderingeffekte und Berechnungen sowie feste Funktionsvorgänge ausführen.
Beachten Sie Folgendes, wenn Sie auf das Pipelinezustandsdiagramm verweisen:
- Die Deskriptortabellen und Heaps können beliebig angeordnet werden: SRVs, CBVs und UAVs können referenziert und in beliebiger Reihenfolge zugeordnet werden.
- Einige Vorgänge der Pipeline sind konfigurierbar. Beispielsweise erfolgt die Ausgabezusammenführung in der Regel auf Lese-,Änderungs-/Schreibbasis 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 Pipelinezustandsobjekt (Pipeline State Object, PSO) ein. Anstatt den Pipelinestatus für eine große Anzahl von Objekten auf hoher Ebene zu speichern und darzustellen, werden die Zustände von Pipelinekomponenten wie eingabeassender, rasterizer, Pixelshader und Ausgabezusammenführung in einem PSO gespeichert. Ein PSO ist ein einheitliches Pipelinezustandsobjekt, das nach der Erstellung unveränderlich ist. Der aktuell ausgewählte PSO kann schnell und dynamisch geändert werden, und die Hardware und Treiber können einen PSO direkt in native Hardwareanweisungen und -zustand konvertieren, wodurch die GPU für die Grafikverarbeitung vorbereitet wird. Um einen PSO anzuwenden, kopiert die Hardware eine minimale Menge an vorab berechnetem Zustand direkt in die Hardwareregister. Dadurch wird der Mehraufwand beseitigt, der durch den Grafiktreiber verursacht wird, der den Hardwarezustand basierend auf allen aktuell gültigen Rendering- und Pipelineeinstellungen kontinuierlich neu berechnet. Das Ergebnis ist ein erheblich geringerer Mehraufwand für Zeichenaufrufe, eine höhere Leistung und mehr Zeichnungsaufrufe pro Frame.
Der aktuell angewendete PSO definiert und verbindet alle Shader, die in der Renderingpipeline verwendet werden. Microsoft High Level Shader Language (HLSL) wird in Shaderobjekte vorkompiliert, die dann zur Laufzeit als Eingabe für Pipelinestatusobjekte verwendet werden. Weitere Informationen dazu, wie die PSO-Funktionen innerhalb der Grafikpipeline funktionieren, finden Sie unter Verwalten des Zustands der Grafikpipeline in Direct3D 12.
Direct3D 12-Computepipeline
Das folgende Diagramm veranschaulicht die Direct3D 12-Computepipeline und den Status.
Es gibt keine festen Funktionseinheiten in dieser Pipeline, aber Deskriptorheaps, Samplerheaps und statische Sampler sind weiterhin in compute verfügbar.
Zugehörige Themen