Freigeben über


Direct3D 11-Features

Das Programmierhandbuch enthält Informationen zur Verwendung der programmierbaren Direct3D 11-Pipeline zum Erstellen von Echtzeit-3D-Grafiken für Spiele und für wissenschaftliche und Desktopanwendungen.

Compute-Shader

Ein Compute-Shader ist ein programmierbarer Shader, der für die allgemeine Daten-parallele Verarbeitung entwickelt wurde. Mit anderen Worten, Compute-Shader ermöglichen es einer GPU, als allgemeiner paralleler Prozessor verwendet zu werden. Der Compute-Shader ähnelt den anderen programmierbaren Pipeline-Shadern (z. B. Vertex, Pixel, Geometrie), so wie er auf Eingaben und Ausgaben zugreift. Die Computeshadertechnologie wird auch als DirectCompute-Technologie bezeichnet. Ein Compute-Shader ist in Direct3D integriert und kann über ein Direct3D-Gerät zugänglich sein. Mithilfe des Direct3D-Geräts können Sie Speicherressourcen direkt mit Grafikshadern teilen. Es ist jedoch nicht direkt mit anderen Shaderphasen verbunden.

Ein Compute-Shader wurde für Massenmarktanwendungen entwickelt, die Berechnungen mit interaktiven Raten durchführen, wenn die Kosten für den Übergang zwischen der API (und dem zugehörigen Softwarestapel) und einer CPU zu viel Mehraufwand beanspruchen würden.

Ein Compute-Shader verfügt über einen eigenen Satz von Zuständen. Ein Compute-Shader verfügt nicht unbedingt über eine erzwungene 1-1-Zuordnung zu Eingabedatensätzen (z. B. einem Vertex-Shader) oder Ausgabedatensätze (wie der Pixelshader). Einige Features des Grafikshaders werden unterstützt, andere wurden jedoch entfernt, sodass neue Compute-Shader-spezifische Features hinzugefügt werden können.

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

Weitere Informationen finden Sie unter Übersicht über compute shader.

Dynamische Shaderverknüpfung

Renderingsysteme müssen bei der Verwaltung von Shadern mit erheblicher Komplexität umgehen und gleichzeitig die Möglichkeit bieten, Shadercode zu optimieren. Dies wird zu einer noch größeren Herausforderung, da Shader eine Vielzahl unterschiedlicher Materialien in einer gerenderten Szene über verschiedene Hardwarekonfigurationen hinweg unterstützen müssen. Um diese Herausforderung zu bewältigen, haben Shaderentwickler häufig auf einen von zwei allgemeinen Ansätzen zurückgegriffen. Sie haben entweder umfangreiche, allgemeine Shader erstellt, die von einer Vielzahl von Szenenelementen verwendet werden können, die sich auf eine gewisse Leistung für Flexibilität auswirken, oder einzelne Shader für jeden Geometriedatenstrom, Materialtyp oder eine erforderliche Lichttypkombination erstellt haben.

Diese großen, allgemeinen Shader behandeln diese Herausforderung, indem sie denselben Shader mit unterschiedlichen Präprozessordefinitionen neu kompilieren, und die letztere Methode verwendet Brute-Force-Entwicklerleistung, um dasselbe Ergebnis zu erzielen. Die Permutationsexplosion des Shaders ist häufig ein Problem für Entwickler, die jetzt Tausende verschiedener Shader-Permutationen innerhalb ihrer Spiel- und Assetpipeline verwalten müssen.

Direct3D 11 und Shadermodell 5 führen objektorientierte Sprachkonstrukte ein und bieten Laufzeitunterstützung für Shaderverknüpfungen, um Entwicklern beim Programmieren von Shadern zu helfen.

Weitere Informationen finden Sie unter Dynamic Linking.

Multithreading

Viele Grafikanwendungen sind aufgrund kostspieliger Aktivitäten wie Szenendiagramm-Traversal-, Objektsortierungs- und Physiksimulationen CPU-gebunden. Da Multicore-Systeme zunehmend verfügbar werden, hat Direct3D 11 seine Multithreading-Unterstützung verbessert, um eine effiziente Interaktion zwischen mehreren CPU-Threads und den D3D11-Grafik-APIs zu ermöglichen.

Direct3D 11 ermöglicht die folgende Funktionalität zur Unterstützung von Multithreading:

  • Gleichzeitige Objekte werden jetzt in separaten Threads erstellt . Durch das Erstellen von Einstiegspunktfunktionen, die Freithread-Objekte erstellen, können viele Threads gleichzeitig Objekte erstellen. Beispielsweise kann eine Anwendung jetzt einen Shader kompilieren oder eine Textur in einem Thread laden, während sie auf einem anderen gerendert werden.
  • Befehlslisten können in mehreren Threads erstellt werden . Eine Befehlsliste ist eine aufgezeichnete Sequenz von Grafikbefehlen. Mit Direct3D 11 können Sie Befehlslisten auf mehreren CPU-Threads erstellen, die die parallele Durchquerung der Szenendatenbank oder der Physikverarbeitung in mehreren Threads ermöglichen. Dadurch wird der Hauptrenderingthread freigegeben, um Befehlspuffer an die Hardware zu verteilen.

Weitere Informationen finden Sie unter MultiThreading-.

Tesselation

Tessellation kann verwendet werden, um ein einzelnes Modell mit unterschiedlichen Detailebenen zu rendern. Dieser Ansatz generiert ein geometrisches Modell, das von der für eine Szene benötigten Detailebene abhängt. Verwenden Sie tessellation in einer Szene, in der die Detailebene ein niedrigeres Geometriemodell zulässt, wodurch die Während des Renderings verbrauchte Speicherbandbreite reduziert wird.

In Direct3D wird tessellation auf der GPU implementiert, um eine glattere gekrümmte Oberfläche aus einem groben (weniger detaillierten) Eingabepatch zu berechnen. Jedes Patch-Gesicht (Quad oder Dreieck) wird in kleinere dreieckige Gesichter unterteilt, die die gewünschte Oberfläche besser annähern.

Informationen zur Implementierung von Tessellation in der Grafikpipeline finden Sie unter Tessellation Overview.

Vollständige Auflistung der Features

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

  • Sie können Direct3D 11 auf hardwarebasierten ausführen, indem Sie beim Erstellen eines Geräts eine Featureebene festlegen.

  • Sie können tessellation (siehe Tessellation Overview) mithilfe der folgenden Shadertypen ausführen:

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

    • Multithread-Ressource/Shader/Objekterstellung
    • Erstellen von Multithread-Listen
  • Direct3D 11 erweitert Shader mit den folgenden Features (siehe Shadermodell 5)

    • Adressierbare Ressourcen – Texturen, Konstantenpuffer und Sampler

    • Weitere Ressourcentypen, z. B. Lese-/Schreibpuffer und Texturen (siehe Neue Ressourcentypen).

    • Unterroutinen

    • Compute-Shader (siehe Compute-Shader Overview) – Ein Shader, der Berechnungen beschleunigt, indem der Problemraum zwischen mehreren Softwarethreads oder Threads geteilt wird, und das Freigeben von Daten zwischen Shaderregistern, um die Menge der daten, die für die Eingabe in einen Shader erforderlich sind, erheblich zu verringern. Algorithmen, die der Compute-Shader erheblich verbessern kann, umfassen die Nachbearbeitung, Animation, Physik und künstliche Intelligenz.

    • Geometry-Shader (siehe Geometry-Shaderfeatures)

      • Instancing : Ermöglicht dem Geometrie-Shader, maximal 1024 Scheitelpunkte oder eine beliebige Kombination von Instanzen und Scheitelpunkten bis zu 1024 (maximal 32 Instanzen von jeweils 32 Scheitelpunkten) auszugeben.
    • Pixelshader

      • Abdeckung als PS-Eingabe

      • Programmierbare Interpolation von Eingaben – Der Pixelshader kann Attribute innerhalb des Pixels an beliebiger Stelle im Multisampleraster auswerten.

      • Das Sampling von Attributen im Zentrum muss den folgenden Regeln entsprechen:

        • Wenn alle Beispiele im Grundtyp abgedeckt werden, wird das Attribut in der Pixelmitte ausgewertet, unabhängig davon, ob das Beispielmuster eine Beispielposition in der Pixelmitte aufweist.

        • Andernfalls wird das Attribut beim ersten behandelten Beispiel ausgewertet, d. h. das Beispiel mit dem niedrigsten Index unter allen Beispielindizes. In diesem Fall wird die Stichprobenabdeckung bestimmt, nachdem der logische UND-Vorgang auf die Abdeckung und den Rasterizerzustand der Beispielmaske angewendet wurde.

        • Wenn keine Beispiele abgedeckt werden (z. B. auf Hilfspixeln, die außerhalb der Grenzen eines Grundtyps ausgeführt werden, um 2 x 2 Pixelstempel auszufüllen), wird das Attribut auf eine der folgenden Arten ausgewertet:

          • Wenn der Rasterizerzustand der Beispielmaske eine Teilmenge der Beispiele im Pixel ist, ist das erste Beispiel, das vom Rasterizerzustand der Beispielmaske abgedeckt wird, der Auswertungspunkt.
          • Andernfalls ist die Pixelmitte in der vollständigen Beispielmaske der Auswertungspunkt.
  • Direct3D 11 erweitert Texturen (siehe Texturübersicht) mit den folgenden Features

    • Gather4

      • Unterstützung für mehrteilige Texturen – Geben Sie einen Kanal an, der geladen werden soll.
      • Unterstützung für programmierbare Offsets
    • Strömend

      • Texturklammern zum Einschränken des WDDM-Preloads
    • 16K-Texturgrenzwerte

    • Erfordern einer 8-Bit-Genauigkeit von Subtexel und Submip-Genauigkeit bei der Texturfilterung

    • Neue Texturkomprimierungsformate (1 neues LDR-Format und 1 neues HDR-Format)

  • Direct3D 11 unterstützt konservative oDepth - Dieser Algorithmus ermöglicht es einem Pixelshader, den Tiefenwert pro Pixel des Pixelshadrs mit diesem im Rasterizer zu vergleichen. Das Ergebnis ermöglicht frühe Tiefen-Culling-Vorgänge und behält gleichzeitig die Möglichkeit zum Ausgeben von oDepth aus einem Pixelshader bei.

  • Direct3D 11 unterstützt großen Arbeitsspeicher

    • Ressourcen > 4 GB zulassen
    • Indizes von Ressourcen 32Bit beibehalten, aber Ressourcen größer
  • Direct3D 11 unterstützt Verbesserungen bei der Streamausgabe

    • Ausgabe des adressierbaren Datenstroms
    • Erhöhen der Anzahl der Streamausgabe auf 4
    • Ändern aller Streamausgabepuffer als Mehrelement
  • Direct3D 11 unterstützt Shadermodell 5 (siehe Shadermodell 5)

    • Doubles with denorms
    • Count bits set instruction
    • Erste Bitsatzanweisung suchen
    • Übertragungs-/Überlaufbehandlung
    • Bitumkehranweisungen für FFTs
    • Systeminterner bedingter Swap
    • Resinfo für Puffer
    • Reziprozision mit reduzierter Genauigkeit
    • Shaderkonvertierungsanweisungen – fp16 zu fp32 und umgekehrt
    • Strukturierter Puffer, bei dem es sich um einen neuen Puffertyp handelt, der strukturierte Elemente enthält.
  • Direct3D 11 unterstützt schreibgeschützte Tiefen- oder Schablonenansichten.

    • Deaktiviert Schreibvorgänge in den schreibgeschützten Teil, ermöglicht die Verwendung der Textur als Eingabe und für die Tiefen-Culling-Funktion.
  • Direct3D 11 unterstützt draw indirect - Direct3D 10 implementiert DrawAuto, das Inhalte (generiert durch die GPU) übernimmt und rendert (auf der GPU). Direct3D 11 generalisiert DrawAuto, sodass es von einem Compute-Shader mithilfe von DrawInstanced und DrawIndexedInstanced aufgerufen werden kann.

  • Direct3D 11 unterstützt verschiedene Features

    • Gleitkomma-Viewports
    • Mipmap-Klammerung pro Ressource
    • Depth Bias – Dieser Algorithmus aktualisiert das Verhalten von Tiefenverzerrungen mithilfe des Rasterizerzustands. Das Ergebnis beseitigt die Szenarien, in denen die berechnete Verzerrung naN sein könnte.
    • Ressourcenbeschränkungen – Ressourcenindizes müssen weiterhin <= 32 Bits sein, Ressourcen können jedoch größer als 4 GB sein.
    • Rasterizerpräzision
    • MSAA-Anforderungen
    • Leistungsindikatoren reduziert
    • 1-Bit-Format und Textfilter entfernt

Features, die in früheren Versionen hinzugefügt wurden

Eine Liste der features, die in früheren Versionen hinzugefügt wurden, finden Sie in den folgenden Themen:

Neuerungen in Direct3D 11-