Funktionen in Direct3D 11

Das Programmierhandbuch enthält Informationen zur Verwendung der programmierbaren Pipeline in Direct3D 11, mit der Echtzeit-3D-Grafiken für Spiele, für wissenschaftliche und für Desktopanwendungen erstellt werden können.

Compute-Shader

Ein Compute-Shader ist ein programmierbarer Shader zur allgemeinen Parallelverarbeitung von Daten. Anders ausgedrückt, ermöglichen Compute-Shader die Verwendung einer GPU als allgemeiner paralleler Prozessor. Der Compute-Shader ähnelt anderen programmierbaren Pipeline-Shadern ( wie z. B. Vertex-, Pixel- oder Geometrie-Shadern) in der Art und Weise, wie er auf Eingaben und Ausgaben zugreift. Die Compute-Shader-Technologie wird auch als DirectCompute-Technologie bezeichnet. Ein Compute-Shader ist in Direct3D integriert, und Sie können auf diesen über ein Direct3D-Gerät zugreifen. Er kann über das Direct3D-Gerät Speicherressourcen direkt zusammen mit Grafik-Shadern nutzen. Er ist jedoch nicht direkt mit anderen Shader-Phasen verbunden.

Ein Compute-Shader ist für Massenmarkt-Anwendungen geeignet, die Berechnungen mit interaktiven Raten ausführen, wenn der Aufwand für den Übergang zwischen der API (und ihrem zugehörigen Softwarestapel) und einer CPU zu hoch wäre.

Ein Compute-Shader hat eine eigene Statusmenge. Ein Compute-Shader hat nicht notwendigerweise eine erzwungene 1-1-Zuordnung für Eingabedatensätze (wie ein Vertex-Shader) oder für Ausgabedatensätze (wie der Pixel-Shader). Einige Funktionen des Grafik-Shaders werden unterstützt, andere hingegen wurden entfernt, damit neue spezifische Funktionen für den Compute-Shader hinzugefügt werden konnten.

Zur Unterstützung der spezifischen Funktionen für den Compute-Shader sind jetzt mehrere neue Ressourcentypen verfügbar, wie z. B. Lese-/Schreibpuffer, Texturen und strukturierte Puffer.

Weitere Informationen finden Sie in Übersicht über den Compute-Shader.

Dynamische Shader-Bindung

Renderingsysteme müssen eine große Komplexität bewältigen, wenn sie Shader verwalten, und gleichzeitig die Möglichkeit geben, den Shader-Code zu optimieren. Die Herausforderung wird noch größer, da Shader eine Vielzahl unterschiedlicher Materialien in einer gerenderten Szene für verschiedene Hardwarekonfigurationen unterstützen müssen. Um dieser Herausforderung zu begegnen, haben Shader-Entwickler oft auf einen von zwei allgemeinen Ansätzen zurückgegriffen. Sie haben entweder große, allgemeine Shader mit großem Funktionsumfang erstellt, die von einer Vielzahl von Szenenelementen verwendet werden können und zugunsten der Flexibilität auf etwas Leistung verzichten, oder sie haben individuelle Shader für die einzelnen benötigten Geometriedatenströme, Materialtypen oder Lichttypkombination erstellt.

Diese großen, allgemeinen Shader gehen auf diese Herausforderung ein, indem sie den gleichen Shader mit unterschiedlichen Präprozessordefinitionen neu kompilieren, wohingegen der Entwickler bei der letzteren Methode Brute-Force-Leistung einsetzt, um das gleiche Ergebnis zu erzielen. Die unüberschaubaren Shader-Permutationen waren oft ein Problem für Entwickler, die jetzt Tausende von unterschiedlichen Shader-Permutationen in ihren Spiel- und Ressourcenpipelines verwalten müssen.

Direct3D 11 und Shader Model 5 führen objektorientierte Sprachkonstrukte ein und bieten eine Laufzeitunterstützung für die Shader-Bindung, die den Entwicklern bei der Programmierung von Shadern hilft.

Weitere Informationen finden Sie unter Dynamische Bindung.

Multithreading

Viele Grafikanwendungen sind aufgrund aufwändiger Aktivitäten, wie z. B. Szenengraphtraversalen, Objektsortierung und Physiksimulationen an die CPU gebunden. Da zunehmend Multicore-Systeme verfügbar werden, hat Direct3D 11 seine Multithreadingunterstützung verbessert, damit eine effizientere Interaktion zwischen mehreren CPU-Threads und den D3D11-Grafik-APIs möglich ist.

Direct3D 11 ermöglicht die folgenden Funktionen zur Unterstützung von Multithreading:

  • Gleichzeitige Objekte werden jetzt in separaten Threads erstellt — Die Konstruktion von Einstiegspunktfunktionen, die Objekte threadunabhängig erstellen, macht ein gleichzeitiges Erstellen von Objekten möglich. Zum Beispiel kann eine Anwendung jetzt einen Shader kompilieren oder eine Textur auf einem Thread laden und gleichzeitig auf einem anderen rendern.
  • Befehlslisten können auf mehreren Threads erstellt werden — Eine Befehlsliste ist eine aufgezeichnete Sequenz von Grafikbefehlen. In Direct3D 11 können Sie Befehlslisten auf mehreren CPU-Threads erstellen, wodurch eine parallele Traversale der Szenendatenbank oder Physikverarbeitung auf mehreren Threads möglich wird. Dies entlastet den Hauptrenderingthread, um Befehlspuffer an die Hardware weiterzuleiten.

Weitere Informationen finden Sie unter MultiThreading.

Tessellation:

Tessellation kann verwendet werden, um ein einzelnes Modell mit variierenden Detailtiefen zu rendern. Dieser Ansatz generiert ein geometrisch genaueres Modell, das von der für eine Szene benötigten Detailtiefe abhängt. Verwenden Sie Tessellation in einer Szene, in der die Detailtiefe ein niedrigeres Geometriemodell zulässt, wodurch die beim Rendering verbrauchte Speicherbandbreite verringert werden kann.

In Direct3D wird die Tessellation auf der GPU implementiert, um eine glattere gekrümmte Oberfläche aus einem groben (weniger detaillierten) Eingabepatch zu berechnen. Jede (viereckige oder dreieckige) Patchfläche wird in kleinere dreieckige Flächen unterteilt, mit denen die gewünschte Oberfläche besser angenähert werden kann.

Informationen zum Implementieren der Tessellation in der Grafikpipeline finden Sie in Tessellation – Überblick.

Vollständige Funktionsliste

Dies ist eine vollständige Liste der Funktionen in Direct3D 11.

  • Sie können Direct3D 11 auf kompatibler Hardware ausführen, wenn Sie bei der Erstellung eines Geräts eine Funktionsebene angeben.
  • Sie können die Tessellation (siehe Tessellation – Überblick) unter Verwendung der folgenden Shader-Typen ausführen:

    • Hüllen-Shader
    • Domänen-Shader
  • Direct3D 11 unterstützt Multithreading (siehe MultiThreading)

    • Erstellung von Multithreadressourcen/Shadern/Objekten
    • Erstellung einer Multithread-Anzeigeliste
  • Direct3D 11 erweitert Shader um die folgenden Funktionen (siehe Shader Model 5)

    • Adressierbare Ressourcen - Texturen, Konstantenpuffer und Sampler
    • Zusätzliche Ressourcentypen, z. B. Lese-/Schreibpuffer und Texturen (siehe Neue Ressourcentypen).
    • Unterroutinen
    • Compute-Shader (siehe Übersicht über den Compute-Shader) - Ein Shader, der Berechnungen dadurch beschleunigt, dass er den Problemraum zwischen verschiedenen Softwarethreads oder Gruppen von Threads aufteilt und die Daten über die Shader-Register hinweg gemeinsam nutzt, um die Datenmenge, die als Eingabe in einen Shader erforderlich ist, deutlich zu reduzieren. Zu den Algorithmen, die der Compute-Shader stark verbessern kann, gehören Nachverarbeitung, Animation, Physik und künstliche Intelligenz.
    • Geometrie-Shader (siehe Funktionen des Geometrie-Shaders)

      • Instancing - ermöglicht es dem Geometrie-Shader, ein Maximum von 1024 Vertizes (Scheitelpunkten) oder eine beliebige Kombination von Instanzen und Vertizes bis 1024 (maximal 32 Instanzen mit jeweils 32 Vertizes), auszugeben.
    • Pixel-Shader

      • Abdeckung als PS-Eingabe
      • Programmierbare Interpolation von Eingaben - der Pixel-Shader kann Attribute innerhalb des Pixels an einem beliebigen Punkt auf dem Multisample-Raster auswerten
      • Schwerpunktsampling von Attributen muss den folgenden Regeln genügen:

        • Wenn alle Samples in der Primitive abgedeckt sind, wird das Attribut beim Pixelmittelpunkt ausgewertet, unabhängig davon, ob das Samplemuster eine Sampleposition im Pixelmittelpunkt hat.
        • Andernfalls wird das Attribut am zuerst abgedeckten Sample ausgewertet, das heißt, an dem Sample mit dem niedrigsten Index von allen Sampleindizes. In dieser Situation wird die Sampleabdeckung durch Anwendung einer logischen UND-Operation auf der Abdeckung und dem Rastererstellungsstatus der Samplemaske bestimmt.
        • Wenn keine Samples abgedeckt sind (z. B. auf Hilfspixeln, die außerhalb der Grenzen einer Primitive ausgeführt werden, um 2x2-Pixelstempel auszufüllen), wird das Attribut auf eine der folgenden Weisen ausgewertet:

          • Wenn der Rastererstellungsstatus der Samplemaske eine Teilmenge der Samples im Pixel ist, ist das erste Sample, das vom Rastererstellungsstatus der Samplemaske abgedeckt wird, der Auswertungspunkt.
          • Andernfalls – bei einer vollen Samplemaske – ist der Pixelmittelpunkt der Auswertungspunkt.
  • Direct3D 11 erweitert Texturen um die folgenden Funktionen (siehe Übersicht über Texturen)

    • Gather4

      • Unterstützung für Mehrkomponententexturen - geben Sie einen Kanal an, von dem geladen werden soll
      • Unterstützung für programmierbare Offsets
    • Streaming

      • Texturklammern zur Begrenzung der WDDM-Vorlast
    • 16K Texturbeschränkungen
    • Erfordert 8-Bit Subtexel- und Sub-Mip-Genauigkeit bei Texturfilterung
    • Neue Texturkomprimierungsformate (1 neues LDR-Format und 1 neues HDR-Format)
  • Direct3D 11 unterstützt konservatives oDepth - Dieser Algorithmus ermöglicht es einem Pixel-Shader, den pixelbasierten Tiefenwert des Pixel-Shaders mit dem Wert in der Rastererstellung zu vergleichen. Dieses Ergebnis ermöglicht frühzeitige Tiefenausschnitt-Operationen, bei Aufrechterhaltung der Fähigkeit, oDepth von einem Pixel-Shader auszugeben.
  • Direct3D 11-Unterstützungen große Speicher

    • Ermöglicht Ressourcen > 4GB
    • Hält die Indizes von Ressourcen bei 32 Bit, aber die Ressourcen sind größer
  • Direct3D 11 unterstützt Verbesserungen bei der Datenstromausgabe

    • Adressierbare Datenstromausgabe
    • Erhöht die Anzahl der Datenstromausgaben auf 4
    • Ändert alle Datenstromausgabepuffer in Multielement-Puffer
  • Direct3D 11 unterstützt Shader Model 5 (siehe Shader Model 5)

    • Verdoppelt sich bei Denorms
    • Anweisung:Gesetzte Bits zählen
    • Anweisung:Erstes gesetztes Bit finden
    • Transport-/Überlauf-Behandlung
    • Bitumkehrungsanweisungen für FFTs
    • Bedingte systeminterne Swap-Funktion
    • Resinfo auf Puffern
    • Reziprokbildung mit reduzierter Genauigkeit
    • Shader-Konvertierungsanweisungen - fp16 auf fp32 und umgekehrt
    • Strukturierter Puffer, ein neuer Puffertyp, der strukturierte Elemente enthält.
  • Direct3D 11 unterstützt schreibgeschützte Tiefen- oder Schablonenansichten

    • Deaktiviert Schreibvorgänge auf dem schreibgeschützten Teil und ermöglicht die Verwendung von Texturen als Eingabe und für Depth-Culling
  • Direct3D 11 unterstützt indirektes Zeichnen - Direct3D 10 implementiert DrawAuto, das den Inhalt (von der GPU generiert) übernimmt und (auf der GPU) rendert. Direct3D 11 verallgemeinert DrawAuto so, dass es von einem Compute-Shader mit DrawInstanced und DrawIndexedInstanced aufgerufen werden kann.
  • Direct3D 11 unterstützt weitere Funktionen

    • Gleitkomma-Viewports
    • Ressourcenbasierte Mipmap-Klammerung
    • Tiefenverschiebung - Dieser Algorithmus aktualisiert das Verhalten der Tiefenverschiebung anhand des Rastererstellungsstatus. Das Ergebnis schließt Szenarien aus, bei denen die berechnete Verschiebung NaN sein konnte.
    • Ressourcengrenzen - Ressourcenindizes müssen immer noch <= 32 Bits sein, aber die Ressourcen selbst können größer als 4 GB sein.
    • Rastererstellungsgenauigkeit
    • MSAA-Anforderungen
    • Reduzierte Leistungsindikatoren
    • 1-Bit-Format und Textfilter wurden entfernt

In vorherigen Versionen hinzugefügte Funktionen

Eine Liste der Funktionen, die in vorherigen Versionen hinzugefügt wurden, finden Sie in den folgenden Themen:

Verwandte Themen

Einführung

 

 

Anzeigen: