Direct3D 11-Features

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

Compute-Shader

Ein Compute-Shader ist ein programmierbarer Shader, der für die parallele Verarbeitung von Daten für allgemeine Zwecke entwickelt wurde. Anders ausgedrückt: Compute-Shader ermöglichen die Verwendung einer GPU als universeller paralleler Prozessor. Der Compute-Shader ähnelt den anderen programmierbaren Pipeline-Shadern (z. B. Vertex, Pixel, Geometry) in der Weise, wie er auf Ein- und Ausgaben zugreift. Die Compute-Shadertechnologie 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 Speicherressourcen direkt mit Grafik-Shadern gemeinsam genutzt werden. Es ist jedoch nicht direkt mit anderen Shaderstufen verbunden.

Ein Compute-Shader ist für Massenanwendungen konzipiert, die Berechnungen mit interaktiven Raten ausführen, wenn die Kosten für den Übergang zwischen der API (und dem zugehörigen Softwarestapel) und einer CPU zu viel Aufwand verursachen 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 (wie ein Vertex-Shader) oder Ausgabedatensätze (wie der Pixel-Shader). Einige Features des Grafik-Shaders werden unterstützt, aber andere wurden 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 einer erheblichen Komplexität umgehen und gleichzeitig die Möglichkeit bieten, Shadercode zu optimieren. Dies wird zu einer noch größeren Herausforderung, da Shader eine Vielzahl verschiedener 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 große, universelle Shader mit vollem Funktionsumfang erstellt, die von einer Vielzahl von Szenenelementen verwendet werden können, die eine gewisse Leistung für Flexibilität beeinträchtigen, oder einzelne Shader für jeden benötigten Geometriestrom, Materialtyp oder Lichttyp-Kombination erstellt.

Diese großen, universellen Shader bewältigen diese Herausforderung, indem sie denselben Shader mit unterschiedlichen Präprozessordefinitionen neu kompilieren, und die letztere Methode verwendet Brute-Force-Entwicklerpower, um das gleiche Ergebnis zu erzielen. Die Explosion der Shaderpermutation war oft ein Problem für Entwickler, die jetzt Tausende verschiedener Shaderpermutationen 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üpfung, um Entwicklern beim Programmieren von Shadern zu helfen.

Weitere Informationen finden Sie unter Dynamische Verknüpfung .

Multithreading

Viele Grafikanwendungen sind CPU-gebunden, da kostspielige Aktivitäten wie Szenendiagrammdurchläufe, Objektsortierung und Physiksimulationen erforderlich sind. Da Multicore-Systeme immer verfügbarer werden, hat Direct3D 11 die Unterstützung für Multithreading 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. Dadurch können viele Threads objekte gleichzeitig erstellen. Beispielsweise kann eine Anwendung jetzt einen Shader kompilieren oder eine Textur in einem Thread laden, während sie auf einem anderen rendert.
  • Befehlslisten können für mehrere Threads erstellt werden. Eine Befehlsliste ist eine aufgezeichnete Sequenz von Grafikbefehlen. Mit Direct3D 11 können Sie Befehlslisten für mehrere CPU-Threads erstellen, wodurch eine parallele Durchquerung der Szenendatenbank oder die Physikverarbeitung auf mehreren Threads möglich ist. Dadurch wird der Standard Renderingthread freigegeben, um Befehlspuffer an die Hardware zu senden.

Weitere Informationen finden Sie unter MultiThreading .

Mosaik

Tessellation kann verwendet werden, um ein einzelnes Modell mit unterschiedlichen Detailebenen zu rendern. Dieser Ansatz generiert ein geometrisch genaueres Modell, das von der Detailebene abhängt, die für eine Szene erforderlich ist. Verwenden Sie Tessellation in einer Szene, in der der Detailgrad ein niedrigeres Geometriemodell zulässt, wodurch die beim Rendern verbrauchte Arbeitsspeicherbandbreite verringert wird.

In Direct3D wird tessellation auf der GPU implementiert, um eine glattere gekrümmte Oberfläche aus einem groben (weniger detaillierten) Eingabepatch zu berechnen. Jede Patchfläche (Quad oder Dreieck) ist in kleinere dreieckige Gesichter unterteilt, die der gewünschten Oberfläche besser angenähert werden.

Informationen zum Implementieren von Tessellation in der Grafikpipeline finden Sie unter Übersicht über Tessellation.

Vollständige Liste der Features

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

  • Sie können Direct3D 11 auf Hardware auf heruntergefahrener Ebene ausführen, indem Sie beim Erstellen eines Geräts eine Featureebene angeben.

  • Sie können tessellation (siehe Tessellationsübersicht) mithilfe der folgenden Shadertypen durchführen:

    • Rumpf-Shader
    • Domain-Shader
  • Direct3D 11 unterstützt Multithreading (siehe MultiThreading)

    • Erstellen von Multithreadressourcen/Shadern/Objekten
    • Erstellen einer Multithread-Anzeigeliste
  • Direct3D 11 erweitert Shader mit den folgenden Features (siehe Shadermodell 5)

    • Adressierbare Ressourcen : Texturen, Konstantenpuffer und Sampler

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

    • Unterprogramme

    • Compute-Shader (siehe Übersicht über Compute-Shader): Ein Shader, der Berechnungen beschleunigt, indem er den Problembereich auf mehrere Softwarethreads oder Gruppen von Threads aufteilt und Daten für Shaderregister freigibt, um die Menge an Daten, die für die Eingabe in einen Shader erforderlich sind, erheblich zu reduzieren. Algorithmen, die der Compute-Shader erheblich verbessern kann, umfassen Nachverarbeitung, Animation, Physik und künstliche Intelligenz.

    • Geometrie-Shader (siehe Geometrie-Shaderfeatures)

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

      • Abdeckung als PS-Eingabe

      • Programmierbare Interpolation von Eingaben: Der Pixel-Shader kann Attribute innerhalb des Pixels überall im Multisampelraster auswerten.

      • Die zentröse Stichprobenentnahme von Attributen muss den folgenden Regeln entsprechen:

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

        • Andernfalls wird das Attribut bei der ersten abgedeckten Stichprobe ausgewertet, d. h. der Stichprobe mit dem niedrigsten Index unter allen Beispielindizes. In dieser Situation wird die Stichprobenabdeckung bestimmt, nachdem der logische AND-Vorgang auf die Abdeckung und den Rasterisierungszustand der Stichprobenmaske angewendet wurde.

        • Wenn keine Beispiele abgedeckt werden (z. B. für Hilfspixel, die an den Grenzen eines Grundtyps ausgeführt werden, um 2x2 Pixelstempel auszufüllen), wird das Attribut auf eine der folgenden Arten ausgewertet:

          • Wenn der Rasterisierungszustand der Stichprobenmaske eine Teilmenge der Stichproben im Pixel ist, ist das erste Beispiel, das durch den Rasterisierungszustand der Stichprobenmaske abgedeckt wird, der Auswertungspunkt.
          • Andernfalls ist in der vollständigen Beispielmaskenbedingung das Pixelzentrum der Auswertungspunkt.
  • Direct3D 11 erweitert Texturen (siehe Übersicht über Texturen) mit den folgenden Features

    • Gather4

      • Unterstützung für Texturen mit mehreren Komponenten: Geben Sie einen Kanal an, aus dem geladen werden soll.
      • Unterstützung für programmierbare Offsets
    • Streaming

      • Texturschellen zum Einschränken der WDDM-Vorladung
    • 16.000 Texturgrenzwerte

    • Erfordern von 8 Bit Subtexel- und Submip-Genauigkeit für die Texturfilterung

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

  • Direct3D 11 unterstützt konservative oDepth: Dieser Algorithmus ermöglicht es einem Pixel-Shader, den Tiefenwert des Pixel-Shaders pro Pixel mit dem Wert im Rasterisierer zu vergleichen. Das Ergebnis ermöglicht frühe Tiefen-Culling-Vorgänge, während die Möglichkeit zur Ausgabe von oDepth aus einem Pixel-Shader beibehalten wird.

  • Direct3D 11 unterstützt großen Arbeitsspeicher

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

    • Adressierbare Streamausgabe
    • Erhöhen der Anzahl der Streamausgabe auf 4
    • Ändern aller Streamausgabepuffer in mehrere Elemente
  • Direct3D 11 unterstützt Shadermodell 5 (siehe Shadermodell 5)

    • Doubles mit Denorms
    • Anweisung zum Festlegen der Anzahl bits
    • Erste Bitsatzanweisung suchen
    • Übertragung/Überlaufbehandlung
    • Anweisungen zur Bitumkehr für FFTs
    • Bedingter Austausch intrinsisch
    • Resinfo für Puffer
    • Reziprozien mit reduzierter Genauigkeit
    • Anweisungen zur Shaderkonvertierung – fp16 in fp32 und umgekehrt
    • Strukturierter Puffer, bei dem es sich um einen neuen Typ von Puffer 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 von Textur als Eingabe und die Tiefen-Culling-Funktion.
  • Direct3D 11 unterstützt indirektes Zeichnen: Direct3D 10 implementiert DrawAuto, das Inhalte (von der GPU generiert) akzeptiert und (auf der GPU) rendert. Direct3D 11 generalisiert DrawAuto, sodass es von einem Compute-Shader mit DrawInstanced und DrawIndexedInstanced aufgerufen werden kann.

  • Direct3D 11 unterstützt verschiedene Features.

    • Gleitkomma-Viewports
    • Mipmap-Clamping pro Ressource
    • Tiefenverzerrung: Dieser Algorithmus aktualisiert das Verhalten der Tiefenverzerrung mithilfe des Rasterizerzustands. Das Ergebnis eliminiert die Szenarien, in denen die berechnete Verzerrung NaN sein könnte.
    • Ressourcengrenzwerte: Ressourcenindizes müssen <immer noch = 32 Bit sein, aber Ressourcen können größer als 4 GB sein.
    • Genauigkeit des Rasterisierers
    • 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