Freigeben über


Neuerungen in der Nov 2008 Direct3D 11 Tech Preview

Diese Version von Direct3D 11 enthält neue Features, Tools und Dokumentation.

Element Beschreibung
Tessellation
Direct3D 11 bietet zusätzliche Pipelinephasen, um die Echtzeit-Tessellation von Grundtypen hoher Reihenfolge zu unterstützen. Mit umfassend programmierbaren Funktionen ermöglicht dieses Feature viele verschiedene Methoden zum Bewerten von Oberflächen hoher Ordnung, einschließlich Unterteilungsflächen mithilfe von Näherungstechniken, Bézier-Patches, adaptive Tessellation und Verdrängungszuordnung. Dieses Feature ist nur auf Hardware der Direct3D 11-Klasse verfügbar. Um dieses Feature auszuwerten, müssen Sie daher den Verweisrasterer verwenden. Eine Demo zur Tessellation in Aktion finden Sie im SubD11-Beispiel , das über den Beispielbrowser verfügbar ist.
Compute-Shader
Der Compute-Shader ist eine zusätzliche Phase, die von der Direct3D 11-Pipeline unabhängig ist und allgemeines Computing auf der GPU ermöglicht. Zusätzlich zu allen Shaderfeatures, die vom einheitlichen Shaderkern bereitgestellt werden, unterstützt der Compute-Shader auch verstreute Lese- und Schreibvorgänge für Ressourcen über ungeordnete Zugriffsansichten, einen freigegebenen Speicherpool innerhalb einer Gruppe von ausführenden Threads, Synchronisierungsgrundtypen, Atomoperatoren und viele andere erweiterte datenparallele Features. In diesem Release wurde eine Variante des Direct3D 11 Compute-Shaders aktiviert, die auf Hardware der 10-Klasse von Direct3D ausgeführt werden kann. Es ist daher möglich, Compute-Shader auf der tatsächlichen Hardware zu entwickeln, aber ein aktualisierter Treiber ist erforderlich. Die vollständige Funktionalität des Direct3D 11 Compute Shaders ist für die Unterstützung von Direct3D 11-Hardware vorgesehen. Um die vollständige Funktionalität auszuwerten, müssen Sie daher den Verweisrasterizer verwenden, bis diese Hardware verfügbar ist. Eine Demo des Compute-Shaders in Aktion finden Sie im HDRToneMappingCS11-Beispiel , das über den Beispielbrowser verfügbar ist.
Multithread-Rendering
Der wichtigste API-Unterschied zu Direct3D 10 in Direct3D 11 ist das Hinzufügen von verzögerten Kontexten, die eine skalierbare Ausführung von Direct3D-Befehlen ermöglicht, die über mehrere Kerne verteilt sind. Ein verzögerter Kontext erfasst und sammelt Aktionen wie Zustandsänderungen und Zeichnungsübermittlungen, die zu einem späteren Zeitpunkt auf dem tatsächlichen Gerät ausgeführt werden können. Durch die Verwendung verzögerter Kontexte für mehrere Threads kann eine Anwendung den CPU-Mehraufwand, der in der Direct3D11-Runtime und dem Treiber benötigt wird, auf mehrere Kerne verteilen, sodass die Computerkonfiguration eines Endbenutzers besser genutzt werden kann. Dieses Feature ist für die Verwendung auf aktueller Direct3D 10-Hardware und dem Referenzrasterer verfügbar. Eine Demonstration der API-Nutzung finden Sie im MultithreadedRendering11-Beispiel , das über den Beispielbrowser verfügbar ist.
Dynamische Shaderverknüpfung
Um das kombinatorische Explosionsproblem zu beheben, das bei der Spezialisierung von Shadern auf Leistung gesehen wird, führt Direct3D 11 eine eingeschränkte Form der Laufzeit-Shaderverknüpfung ein, die eine nahezu optimale Shaderspezialisierung während der Ausführung einer Anwendung ermöglicht. Dies wird erreicht, indem die Implementierungen bestimmter Funktionen im Shadercode angegeben werden, wenn der Shader der Pipeline zugewiesen ist, sodass der Treiber schnell native Shaderanweisungen inline ausführen kann, anstatt den Treiber zu zwingen, die Zwischensprache mit der neuen Konfiguration in native Anweisungen neu zu kompilieren. Die Shaderentwicklung wird durch die Einführung von Klassen und Schnittstellen in HLSL verfügbar gemacht. Eine Demonstration finden Sie im Beispiel für dynamische Shaderverknüpfung 11 , das über den Beispielbrowser verfügbar ist.
Windows Advanced Rasterizer (WARP)
In diesem SDK über Direct3D 11 und schließlich auch über Direct3D 10.1 verfügbar, ist WARP ein schneller Multicore-Skalierungsrasterer, der vollständig Mit Direct3D 10.1 kompatibel ist. Die Verwendung dieser Technologie ist so einfach wie das Übergeben des D3D_DRIVER_TYPE_WARP-Flags bei der Geräteerstellung.
Direct3D 10 und Direct3D 11 auf Direct3D 9 Hardware (D3D10 Level 9)
In diesem SDK über Direct3D 11 und schließlich auch über Direct3D 10.1 verfügbar, kann die Direct3D-API die meisten Direct3D 9-Hardware sowie Direct3D 10, Direct3D 10.1 und Direct3D 11-Hardware ansprechen. Dies wird durch die Bereitstellung des Mechanismus auf Featureebene erreicht, der die Hardware je nach Funktionalität in sechs Kategorien gruppiert: 9_1, 9_2, 9_3, 10_0, 10_1 und 11_0. Eine Karte nur dann eine Featureebene erfüllt, wenn sie mit dieser Ebene vollständig kompatibel ist, und jede Ebene ist eine strikte Obermenge der darunter liegenden Ebenen. Die Funktionalität wird nur minimal emuliert, um sicherzustellen, dass keine unerwarteten Leistungsklippen auftreten. Daher sind Features wie Geometry Shader für Ziele der Direct3D-Ebene 9 nicht verfügbar.
Runtime-Binärdateien
Alle In der Direct3D 11 Tech Preview bereitgestellten Runtime-Binärdateien, die unter Windows 7 und Windows Vista SP1 verfügbar sein werden, werden mit dem SDK installiert und als "Beta"-Komponenten (d. h. D3D11_beta.DLL) bezeichnet. Alle betabeschrifteten Komponenten sind zeitgebombt. Um Projekte zum Auswerten dieser neuen Komponenten zu erstellen, müssen Sie eine Verknüpfung mit den entsprechenden Importbibliotheken mit Beta-Bezeichnung (d. h. D3D11_beta.lib) herstellen. Wenn Sie über eine PDC-Kopie von Windows 7 verfügen, sind die headers, libs und pdbs, die im Windows SDK mit dem Build bereitgestellt werden, für die Entwicklung mit den Direct3D 11-Komponenten geeignet, die in Windows 7 bereitgestellt werden. Bitte reservieren Sie die Verwendung der Header, libs und pdbs in diesem SDK für die hier bereitgestellten Betakomponenten.
D3DX11
D3DX11 unterstützt derzeit Texturladen, Shaderkompilierung, Datenladen und Workerthreadfunktionen für Direct3D 11-Ressourcen. In Zukunft wird diese Komponente mehr der in D3DX10 verfügbaren Technologien bereitstellen. Shaderkompilierungsfunktionen werden auch direkt über die Direct3D-Compilerkomponente bereitgestellt, die im Folgenden beschrieben wird.
HLSL und Direct3D-Compiler
Der HLSL-Compiler verfügt über mehrere neue Features zur Unterstützung der neuen Technologien, die in Direct3D 11 verfügbar sind. Dies umfasst objektorientierte Programmierung über Schnittstellen und Klassen, eine direkte Indizierungssyntax für Ressourcenlasten und die "präzise" Schlüsselwort (keyword), um sicherzustellen, dass alle Vorgänge, die mit einer bestimmten Variablen ausgeführt werden, den strengen Gleitkommaregeln entsprechen. Fast alle neuen linguistischen Features verfügen über gültige Funktionen für vorhandene Shaderziele. Zusätzlich zur Unterstützung aller Direct3D 9-, Direct3D 10-, Direct3D 10.1- und Direct3D 11-Shader unterstützt der HLSL-Compiler auch die speziellen Ziele, die zum Schreiben von Shadern für Direct3D 10 Level 9-Ziele erforderlich sind. Der D3D-Compiler ist jetzt direkt außerhalb von D3DX10 und D3DX11 über D3DCompiler.H und D3DCompiler.lib zugänglich. Bei diesen neuen Dateien muss eine Anwendung keine Verknüpfung mit D3DX herstellen, um die Laufzeitkompilierung durchzuführen, und eine Anwendung muss den Compiler nicht einschließen, wenn nur D3DX-Funktionalität erforderlich ist.
D3D11-Referenzrasterizer
Der Referenzrasterizer bietet eine Implementierung nach Goldstandard für die Rasterung für die Auswertung von Direct3D 11-Features, die noch nicht in der Hardware verfügbar sind. Der Verweisrasterizer wird auch als Möglichkeit bereitgestellt, die Genauigkeit einer bestimmten Hardwareimplementierung mit dem Rasterungsstandard zu überprüfen. Der Verweisrasterer ist auf Richtigkeit, nicht auf Leistung ausgelegt. Um ein Referenzgerät zu erstellen, übergeben Sie einfach das D3D_DRIVER_TYPE_REFERENCE-Flag bei der Geräteerstellung.
D3D11 SDK-Ebenen
Direct3D11 SDK-Ebenen bieten einen Mechanismus zum Nachverfolgen des Betriebs der Direct3D 11-Runtime während der Entwicklung. Derzeit wird dies zum Bereitstellen nützlicher Debuginformationen verwendet, die nicht nur Fehler bei unsachgemäßer Verwendung enthalten, sondern auch Warnungen, die die Verwendung bewährter Methoden für die Laufzeit empfehlen, und häufig ausführliche, nützliche Informationen zum Debuggen bereitstellt. Es wird dringend empfohlen, dass die Debugausgabe von D3D11 SDK-Ebenen während der Entwicklung jederzeit aktiviert ist und eine Anwendung während der Ausführung keine Debugausgabe generiert, bevor sie veröffentlicht oder mit PIX für Windows für die Profilerstellung verwendet wird. Das Aktivieren der Debugebene ist so einfach wie das Übergeben des D3D11_CREATE_DEVICE_DEBUG-Flags zur Geräteerstellungszeit. Entwicklern wird dringend empfohlen, Ebenen in Debugbuilds zu verwenden. Ebenen werden nicht für die Verwendung in Profil- oder Releasebuilds empfohlen.
Neue Beispiele
Dieses Release enthält vier neue Beispiele.
  • Das Dynamische Shader linkage 11-Beispiel veranschaulicht die Verwendung von Shader Model 5-Shaderschnittstellen und Direct3D 11-Unterstützung zum Verknüpfen von Shaderschnittstellenmethoden zur Laufzeit.
  • Das HDRToneMappingCS11-Beispiel zeigt, wie Sie den Compute Shader(CS) einrichten und ausführen, der eines der spannendsten neuen Features von Direct3D 11 ist. Obwohl das Beispiel nur die CS zum Implementieren der HDR-Tonzuordnung verwendet, sollte das Konzept problemlos auf andere Nachverarbeitungsalgorithmen und allgemeinere Berechnungen ausgeweitet werden.
  • Das MultithreadedRendering11-Beispiel veranschaulicht, wie das Rendering mit sehr geringem Aufwand auf mehrere Threads aufgeteilt wird.
  • Das neue SubD11-Beispiel ähnelt dem SubD10-Beispiel im DirectX SDK sehr, mit dem Unterschied, dass es erweitert wurde, um drei neue Direct3D 11-Pipelinestufen zu nutzen: den Hull-Shader, den Tessellator und den Domänenshader.

Features, die in früheren Releases eingeführt wurden