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.

Diagramm zur Veranschaulichung von Direct3d 12-Pipeline und -Zustand

Eine Grafikpipeline ist der sequenzielle Fluss von Dateneingaben und -ausgaben, wenn 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 Beim Verweisen auf das Pipelinezustandsdiagramm Folgendes:

  • Die Deskriptortabellen und Heaps können beliebig angeordnet werden: SRVs, CBVs und UAVs können in beliebiger Reihenfolge referenziert und zugeordnet werden.
  • Einige Vorgänge der Pipeline sind konfigurierbar. Beispielsweise wird die Ausgabeverführung in der Regel mit Lese-/Änderungs-/Schreibzugriff mit den Renderziel- und Tiefen-Schablonenansichten durchgeführt. 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.

Pipelinezustandsobjekte

Direct3D 12 führt das Pipelinezustandsobjekt (PSO) ein. Anstatt den Pipelinezustand für eine große Anzahl von Objekten auf hoher Ebene zu speichern und zu darstellen, werden die Zustände von Pipelinekomponenten wie eingabembler, rasterizer, pixel shader und output merger in einem PSO gespeichert. Ein PSO ist ein einheitliches Pipelinezustandsobjekt, das nach der Erstellung unveränderlich ist. Das derzeit ausgewählte PSO kann schnell und dynamisch geändert werden, und die Hardware und treiber können ein PSO direkt in systemeigene Hardwareanweisungen und den Zustand konvertieren, um die GPU für die Grafikverarbeitung zu bereiten. Um ein PSO anzuwenden, kopiert die Hardware einen minimalen Vorberechungszustand direkt in die Hardwareregister. Dadurch entfällt der Mehraufwand, der durch die kontinuierliche Neubelegung des Hardwarezustands durch den Grafiktreiber basierend auf allen derzeit anwendbaren Rendering- und Pipelineeinstellungen verursacht wird. Das Ergebnis ist ein deutlich geringerer Aufwand für Zeichnen-Aufrufe, eine höhere Leistung und mehr Zeichnen-Aufrufe pro Frame.

Das derzeit angewendete PSO definiert und verbindet alle Shader, die in der Renderingpipeline verwendet werden. Microsoft High Level Shader Language (HLSL) wird in Shaderobjekte vorinstalliert, die dann zur Laufzeit als Eingabe für Pipelinezustandsobjekte verwendet werden. Weitere Informationen zur Funktionsweise des PSO in der Grafikpipeline finden Sie unter Verwalten des Grafikpipelinezustands in Direct3D 12.

Direct3D 12-Computepipeline

Das folgende Diagramm veranschaulicht die Direct3D 12-Computepipeline und den Zustand.

Diagramm, das die Direct3D 12-Computepipeline zeigt.

Es gibt keine festen Funktionseinheiten in dieser Pipeline, deskriptor heaps, sampler heaps and static samplers are still available in compute.

Arbeitsübermittlung in Direct3D 12