Pipelines für Direct3D Version 11
Dieser Abschnitt gilt nur für Windows 7 und höher sowie Windows Server 2008 R2 und höhere Versionen des Windows-Betriebssystems.
Die Grafikrenderingpipeline für Direct3D Version 11 wird von der Grafikrenderingpipeline für Direct3D Version 10 erweitert. Zusätzlich zu den gemeinsam genutzten programmierbaren Shaderkernen, die Direct3D Version 10 unterstützt, unterstützt Direct3D Version 11 auch Hull-, Domänen- und Compute-Shaderkerne.
Direct3D Version 11 unterstützt tatsächlich zwei separate Pipelines: die Draw-Pipeline (Grafikrenderingpipeline) und die Dispatchpipeline (Compute-Shaderpipeline). Die Draw- und Dispatchpipelines sind technisch lose verbunden, da sie nicht dieselbe Unterressource für das Schreiben in beiden Pipelines gleichzeitig oder für das Schreiben in einer Pipeline und für das Lesen in der anderen Pipeline gebunden haben können.
Die folgende Abbildung zeigt die Funktionsblöcke der Draw-Pipeline für Direct3D Version 11.
Die folgende Abbildung zeigt die Funktionsblöcke der Dispatchpipeline für Direct3D Version 11.
In den folgenden Abschnitten werden die new-for-Direct3D 11-Blöcke beschrieben, die in den vorherigen Abbildungen dargestellt sind.
Rumpf-Shader
Der Rumpfshader arbeitet einmal pro Patch. Sie können den Rumpfshader mit Patches aus dem Eingabe-Assembler verwenden. Der Hull-Shader kann Eingabesteuerungspunkte, aus denen ein Patch besteht, in Ausgabesteuerungspunkte transformieren. Der Rumpfshader kann eine andere Einrichtung für die Tessellatorphase mit fester Funktion durchführen. Beispielsweise kann der Hull-Shader Tess-Faktoren ausgeben, d. h. Zahlen, die angeben, wie viel tessellatet werden soll.
Die Direct3D-Runtime ruft die folgenden Treiberfunktionen auf, um den Hull-Shader zu erstellen, einzurichten und zu zerstören:
- CalcPrivateShaderSize
- CalcPrivateTessellationShaderSize
- CreateHullShader
- DestroyShader
- HsSetShaderResources
- HsSetShader
- HsSetSamplers
- HsSetConstantBuffers
- HsSetShaderWithIfaces
Tessellator
Der Tessellator ist eine Einheit mit fester Funktion, deren Vorgang durch Deklarationen im Rumpfshader definiert wird. Der Tessellator arbeitet einmal pro Patch, der vom Hull-Shader ausgegeben wird. Der Hull-Shader generiert Tess-Faktoren, bei denen es sich um Zahlen handelt, die den Tessellator darüber informieren, wie viel über die Domäne des Patches zu tesselieren (Geometrie und Konnektivität generieren) werden soll.
Die Direct3D-Runtime ruft die CalcPrivateTessellationShaderSize-Funktion des Treibers auf, um die Größe des Speicherbereichs für einen Hull- oder Domänenshader zu berechnen.
Domain-Shader
Der Domänenshader wird einmal pro Scheitelpunkt aufgerufen, der vom Tessellator generiert wird. Jeder Aufruf wird durch seine Koordinate in einer generischen Domäne identifiziert. Die Rolle des Domänenshaders besteht darin, diese Koordinate in etwas Greifbares (z. B. einen Punkt im 3D-Bereich) umzuwandeln, um den Downstream des Domänenshaders zu verwenden. Jeder Domänen-Shaderaufruf für einen Patch greift auch auf freigegebene Eingaben aller Hull-Shader-Ausgabe zu (z. B. Ausgabesteuerungspunkte).
Die Direct3D-Runtime ruft die folgenden Treiberfunktionen auf, um den Domänenshader zu erstellen, einzurichten und zu zerstören:
- CalcPrivateTessellationShaderSize
- CreateDomainShader
- DestroyShader
- DsSetShaderResources
- DsSetShader
- DsSetSamplers
- DsSetConstantBuffers
- DsSetShaderWithIfaces
Compute-Shader
Der Compute-Shader ermöglicht es, die GPU als generisches Raster von datenparallelen Prozessoren ohne Grafikhindernisse aus der Draw-Pipeline anzuzeigen. Der Compute-Shader hat expliziten Zugriff auf schnellen freigegebenen Speicher, um die Kommunikation zwischen Gruppen von Shaderaufrufen zu erleichtern. Der Compute-Shader kann auch verstreute Lese- und Schreibvorgänge in den Arbeitsspeicher ausführen. Die Verfügbarkeit von atomischen Vorgängen ermöglicht den eindeutigen Zugriff auf freigegebene Speicheradressen. Der Compute-Shader ist nicht Teil der Zeichnungspipeline. Der Compute-Shader ist eigenständig vorhanden. Der Compute-Shader ist jedoch auf demselben Gerät wie alle anderen Shaderphasen vorhanden. Die Direct3D-Runtime ruft die DispatchXxx-Funktionen des Treibers anstelle der DrawXxx-Funktionen des Treibers auf, um den Compute-Shader aufzurufen.
Die Direct3D-Runtime ruft die folgenden Treiberfunktionen auf, um den Compute-Shader zu erstellen, einzurichten und zu zerstören:
- CreateComputeShader
- DestroyShader
- CsSetShaderResources
- CsSetShader
- CsSetSamplers
- CsSetConstantBuffers
- CsSetShaderWithIfaces
- CsSetUnorderedAccessViews
- Dispatch
- DispatchIndirect
Ungeordnete Zugriffsressourcensichten
Ressourcenansichten für ungeordneten Zugriff sind Lese-/Schreibressourcen, die Sie an den Compute-Shader oder Pixelshader binden können. Die Bindung von ungeordneten Zugriffsressourcensichten ähnelt der Bindung von Shaderressourcensichten, bei denen es sich um schreibgeschützte Ressourcen handelt, an jede Shaderphase.
Die Direct3D-Runtime ruft die folgenden Treiberfunktionen auf, um Ressourcensichten für ungeordneten Zugriff zu erstellen, einzurichten und zu zerstören: