Pipelinestufen (Direct3D 10)
Die programmierbare Direct3D 10-Pipeline ist für die Generierung von Grafiken für Echtzeit-Gaminganwendungen konzipiert. Das folgende Diagramm zeigt den Datenfluss von der Eingabe zur Ausgabe durch jede der programmierbaren Phasen.

Alle Phasen können mithilfe der API konfiguriert werden. Phasen mit gängigen Shaderkernen (die abgerundeten rechteckigen Blöcke) können mithilfe der HLSL-Programmiersprache programmiert werden. Wie Sie sehen werden, ist die Pipeline dadurch äußerst flexibel und anpassbar. Der Zweck der einzelnen Phasen ist unten aufgeführt.
- Eingabe-Assembler-Stufe: Die Eingabe-Assembler-Stufe ist für die Bereitstellung von Daten (Dreiecke, Linien und Punkte) für die Pipeline verantwortlich.
- Vertex-Shader-Stufe. Die Vertex-Shader-Stufe verarbeitet Scheitelpunkte und führt dabei in der Regel Vorgänge wie Transformationen, das Anwenden von Skins und Beleuchtung aus. Ein Vertex-Shader verarbeitet immer einen einzigen Eingabescheitelpunkt und erzeugt daraus einen einzigen Ausgabescheitelpunkt.
- Geometry-Shader-Phase: Die Geometry-Shader-Stufe verarbeitet ganze Primitive. Die Eingabe ist ein vollständiger Grundtyp (drei Scheitelpunkte für ein Dreieck, zwei Scheitelpunkte für eine Linie oder ein einzelner Scheitelpunkt für einen Punkt). Darüber hinaus kann jede Primitive auch die Scheitelpunktdaten für alle an den Rand angrenzenden Primitiven enthalten. Dies kann bis zu drei weitere Scheitelungen für ein Dreieck oder zwei weitere Scheitelstriche für eine Linie umfassen. Der Geometrie-Shader unterstützt auch eingeschränkte Geometrievergrößerung und -entschärfung. Bei einer Eingabeprimitive kann der Geometry-Shader den Primitiven verwerfen oder einen oder mehrere neue Primitive aus geben.
- Streamausgabephase: Die Streamausgabephase ist für das Streamen primitiver Daten aus der Pipeline in den Arbeitsspeicher auf dem Weg zum Rasterizer konzipiert. Daten können "ausgestreamt" und/oder in den Rasterizer übergeben werden. In den Arbeitsspeicher gestreamte Daten können als Eingabedaten wieder der Pipeline zugeführt oder von der CPU eingelesen werden.
- Rasterizer-Stufe: Der Rasterizer ist für das Beschneiden von Primitiven, das Vorbereiten von Primitiven für den Pixel-Shader und das Bestimmen des Aufrufs von Pixel-Shadern verantwortlich.
- Pixelshader-Stufe. Die Pixelshader-Stufe empfängt interpolierte Daten für einen Grundtyp und generiert Pro-Pixel-Daten (z. B. die Farbe).
- Ausgabe-Merger-Phase: Die Ausgabe-Merger-Phase ist dafür verantwortlich, verschiedene Typen von Ausgabedaten (Pixel-Shaderwerte, Tiefen- und Schabloneninformationen) mit dem Inhalt des Renderziels und den Tiefen-/Schablonenpuffern zu kombinieren, um das endgültige Pipelineergebnis zu generieren.