Freigeben über


Funktionen von Direct3D 10.1

Mit Direct3D 10.1 wird der Funktionsumfang von Direct3D 10.0 um die folgenden neuen Funktionen erweitert:

  • Füllmethoden – Unabhängige Füllmethoden pro Renderziel mithilfe der neuen Schnittstelle für den Füllstand (siehe ID3D10BlendState1-Schnittstelle). Füllvorgänge mit zwei Quellen sind auf den Rendering-Ziel-Slot 0 beschränkt; Sie dürfen nicht in andere Ausgänge schreiben oder Rendering-Ziele haben, die an andere Slots als Slot 0 gebunden sind.

  • Culling-Verhalten – Flächengesichtsflächen werden automatisch gekullt; Dies wirkt sich nur auf das Rendern von Drahtmodelln aus.

  • Gleitkommaregeln – Verwendet dieselben IEEE-754-Regeln für Gleitkommavorgänge mit Ausnahme von 32-Bit-Gleitkommavorgängen, um ein Ergebnis innerhalb von 0,5 Einheiten an der Endstelle (0,5 unit-last-place ULP) des unendlich genauen Ergebnisses zu erzielen. Dies gilt für Addition, Subtraktion und Multiplikation. (Genauigkeit auf 0,5 ULP für Multiplikation, 1,0 ULP für Kehrwert).

  • Formate – Die Genauigkeit der Float16-Mischung wurde auf 0,5 ULP erhöht. Mischen ist auch für UNORM16/SNORM16/SNORM8-Formate erforderlich.

  • Multisample Antialiasing – Multisampling wurde verbessert, um die abdeckungsbasierte Transparenz zu generalisieren und Multisampling mit Multidurchlaufrendering effektiver zu gestalten. Um dies zu erreichen, werden alle Multisample-Semantiken so definiert, als ob der Pixel-Shader immer einmal pro Beispiel (Sample-Frequenz) läuft und für jedes Sample eine eigene Farbe berechnet. Wenn ein Pixel-Shader keine Attribute pro Sample verwendet, berechnet er denselben Wert für jedes abgedeckte Sample in einem Pixel. In diesem Fall ist es gleichbedeutend damit, dass die Hardware den Shader einmal pro Pixel (Pixelfrequenz) ausführt und das Ergebnis auf alle abgedeckten Samples überträgt. Natürlich führt die Ausführung mit Pixelfrequenz immer zu den gleichen Ergebnissen wie die Ausführung desselben Shaders mit Samplefrequenz, wenn die Attribute mit einer Pixelfrequenz abgetastet werden. Die PSInvocations-Pipelinestatistik wird mit der Sample-Frequenz erhöht, es sei denn, der Shader läuft mit der Pixelfrequenz.

  • Pipeline-Vorschaufensterbandbreite – Erhöht die Datenmenge, die zwischen Shader-Stufen übertragen werden kann:

    Ressource Grenzwerte
    Registriert zwischen Shader-Vorschaufenster 32 (32-Bit x 4-Komponente)
    Vertex-Shadereingaberegister 32
    Eingabesteckplätze für Eingabe-Assembler 32

     

  • Rasterungsregeln – Die Regeln für die Rasterung wurden für Zeilen geändert, zusätzlich wurden neue Funktionen hinzugefügt.

    • MultisampleEnable wirkt sich nur auf die Linienrasterung aus (Punkte und Dreiecke sind nicht betroffen), und wird verwendet, um einen Linienzeichnungsalgorithmus auszuwählen. Das bedeutet, dass einige Multisample-Rasterungen aus Direct3D 10 nicht mehr unterstützt werden.
    • Neue Ausführung von Pixel-Shadern mit Sample-Frequenz und primitiver Rasterung.
  • Ressourcen – CopyResource ist in zwei neuen Szenarien aktiviert:

    • Sowohl Farb- als auch Tiefen-/ Schablonen-MSAA-Oberflächen können jetzt mit CopyResource als Quelle oder Ziel verwendet werden
    • Formatkonvertierung beim Kopieren zwischen bestimmten 32/64/128-Bit-Vorstrukturierungen, typierten Ressourcen und komprimierten Darstellungen derselben Bitbreite.
  • Textursampling – sample_c- und sample_c_lz/Anweisungen sind definiert, um sowohl mit Texture2DArrays als auch mit TextureCubeArrays zu arbeiten, verwenden Sie das Location-Element (die Alphakomponente), um einen Arrayindex anzugeben.

  • Ansichten – TextureCube und das neue TextureCubeArray (siehe D3D10_TEXCUBE_ARRAY_SRV1) sind keine tatsächlichen Ressourcen, sondern neue Ansichten für eine Texture2DArray-Ressource. Erstellen Sie eine Ressourcenansicht aus einer Texture2DArray-Ressource mit einem neuen Verwendungskennzeichen (D3D10_RESOURCE_MISC_TEXTURECUBE), verwenden Sie die neue ID3D10ShaderResourceView1-Schnittstelle, um eine Cubetexturansicht an die Pipeline zu binden.

Die neuen Features erfordern einen 10.1-Gerätetyp (siehe ID3D10Device1-Schnittstelle), der durch Aufrufen von D3D10CreateDevice1 erstellt werden kann, oder Sie können das Gerät und die Swapchain gleichzeitig erstellen, indem Sie D3D10CreateDeviceAndSwapChain1 aufrufen.

In Windows Vista Service Pack 1 sind Direct3D 10.0- und Direct3D 10.1-DLLs nebeneinander auf dem System vorhanden. Führen Sie eine der folgenden Aktionen aus, um auf 10.1-Features zuzugreifen:

Zugreifen auf 10.1-Features für Vista Gold und Vista Service Pack 1

Entwickler, die Vista Gold und SP1 unterstützen möchten, müssen die fehlenden neuen 10.1-API-Erweiterungen auf Vista Gold berücksichtigen. Sowohl DXUT als auch D3DX10 bieten Komfortfunktionen zum Erstellen des entsprechenden Geräts, basierend auf den auf dem System verfügbaren DLLs und der verfügbaren Hardware (10.0 oder 10.1). Das 10.1-Gerät erbt vom 10.0-Gerät und kann mithilfe von QueryInterface() abgerufen werden. Es wird empfohlen, dass jede Anwendung den Gerätetyp nachverfolgt und einen Zeiger auf das 10.1-Gerät (sofern verfügbar) verwaltet, um häufige QueryInterface-Aufrufe zu vermeiden, wenn 10.1-Funktionen gewünscht werden. Wenn 10.1-Ressourcenansichten und Zustandsobjekte von der benutzerdefinierten Klasse einer Anwendung zugeordnet sind, wird empfohlen, dass die Anwendung nachverfolgt, ob das Objekt ein 10.0- oder 10.1-Typ ist, um redundante QueryInterface()-Aufrufe zu vermeiden. D3DX10 enthält eine Reihe von Hilfsfunktionen, um diesen Prozess zu vereinfachen (siehe D3DX10CreateDeviceund D3DX10CreateDeviceAndSwapChain).

Ausschließlicher Zugriff auf 10.1-Features für Vista Service Pack 1

Einige Entwickler können festlegen, dass Vista Service Pack 1 erforderlich ist, das allgemein an Endbenutzer verteilt wird und eine Reihe von Verbesserungen außerhalb von Direct3D 10.1 enthält. Diese Entwickler können die Direct3D 10.1-Header und -Bibliotheken ausschließlich verwenden, wobei eine Abhängigkeit von den Direct3D 10.1-DLLs verwendet wird, die sowohl 10.0- als auch 10.1-Hardware unterstützen (einige Aufrufe können jedoch auf 10.0-Geräten fehlschlagen, auf denen die neue Funktionalität nicht unterstützt wird).

Zusätzliche Hinweise:

  • Die in der D3DX10.dll verfügbaren APIs akzeptieren sowohl 10.0- als auch 10.1-Geräte und nutzen 10.1-Funktionen, wenn verfügbar.
  • D3D10SDKLayers.dll unterstützt ein 10.1-Gerät und kann die entsprechenden Debugspew für 10.1-Features ausgeben.
  • D3D10Ref.dll implementiert ein 10.0- und 10.1-Softwaregerät.
  • D3DX10 und FXC unterstützen das aktualisierte 10.1-Shadermodell mit den folgenden Zielen: vs_4_1, gs_4_1, ps_4_1 und fx_4_1, die an ein 10.1-Gerät gebunden werden können. Ein 10.1-Gerät unterstützt Shadermodell 4.0 und 4.1-Shader.
  • Das Direct3D 10.0-Effektframework unterstützt 10.0- und 10.1-Geräte, jedoch müssen alle Techniken, die Shadermodell 4.1-Shader oder die neuen 10.1-Features enthalten, ein 10.1-Gerät verwenden.

Programmierhandbuch für Direct3D 10