Verwenden von Direct3D 11-Featuredaten zum Ergänzen von Direct3D-Featureebenen
Erfahren Sie, wie Sie die Geräteunterstützung auf optionale Features überprüfen, einschließlich Features, die in den neuesten Versionen von Windows hinzugefügt wurden.
Direct3D-Featureebenen geben klar definierte Sätze von GPU-Funktionen an, die in etwa verschiedenen Generationen von Grafikhardware entsprechen. Dies vereinfacht die Überprüfung der Hardwarekapazität erheblich und bietet auch eine konsistente Benutzeroberfläche für eine vielzahl verschiedener Geräte.
Um einige der Unterschiede zwischen verschiedenen Hardwareimplementierungen ( einschließlich Legacyhardware, mobiler Hardware und moderner Hardware) zu berücksichtigen, werden einige Features als optional betrachtet. Die Unterstützung für diese Features kann durch Aufrufen von ID3D11Device::CheckFeatureSupport und Bereitstellen der relevanten D3D11_FEATURE_DATA_*-Struktur bestimmt werden. In diesem Thema werden die verschiedenen optionalen Direct3D 11-Features beschrieben, wie einige davon zusammenarbeiten und wie Sie vermeiden können, nach jedem einzelnen optionalen Feature zu suchen.
Überprüfen auf optionale Featureunterstützung
Rufen Sie ID3D11Device::CheckFeatureSupport auf, und geben Sie die Struktur an, die das optionale Feature darstellt, das Sie verwenden möchten. Wenn die Methode S_OK zurückgibt, bedeutet dies, dass Sie eine Version der Direct3D-Runtime verwenden, die das optionale Feature unterstützt. Wenn E_INVALIDARG zurückgegeben wird, bedeutet dies, dass Sie vor dem Hinzufügen des optionalen Features eine Version der Direct3D 11-Runtime verwenden. Dies bedeutet, dass das optionale Feature zusammen mit anderen optionalen Features, die in derselben Version von Direct3D 11 oder höher eingeführt wurden, nicht verfügbar ist.
Kann ich den Aufwand für Überprüfungen der Featureunterstützung minimieren?
Zusätzlich zur richtigen Direct3D 11-Runtime (normalerweise mit einer Windows-Version verknüpft) muss der Grafiktreiber auch aktuell genug sein, um das optionale Feature zu unterstützen. Die WDDM-Spezifikationen erfordern optionale Features, die unterstützt werden müssen, wenn sie von der Hardware unterstützt werden können. Wenn also ein Grafiktreiber eines der optionalen Features unterstützt, die in einer bestimmten Version von Windows hinzugefügt wurden, bedeutet dies in der Regel, dass der Grafiktreiber die anderen Features unterstützt, die in dieser Version von Windows hinzugefügt wurden. Wenn beispielsweise ein Gerätetreiber Schatten auf Featureebene 9 unterstützt, wissen Sie, dass der Gerätetreiber mindestens WDDM 1.2 ist.
Hinweis Wenn ein Microsoft Direct3D-Gerät die Featureebene 11.1 unterstützt, werden alle optionalen Features, die durch D3D11_FEATURE_DATA_D3D11_OPTIONS angegeben werden, automatisch unterstützt, mit Ausnahme von SAD4ShaderInstructions und ExtendedDoublesShaderInstructions.
Die Runtime legt die folgenden Gruppierungen von Membern immer identisch fest. Das heißt, alle Werte in einer Gruppierung sind zusammen TRUE oder FALSE :
- DiscardAPIsSeenByDriver und FlagsForUpdateAndCopySeenByDriver
- ClearView, CopyWithOverlap, ConstantBufferPartialUpdate, ConstantBufferOffsetting und MapNoOverwriteOnDynamicConstantBuffer
- MapNoOverwriteOnDynamicBufferSRV und MultisampleRTVWithForcedSampleCountOne
Optionen auf Featureebene 11.2 (D3D11_FEATURE_D3D11_OPTIONS1): Die in diesem Feld angegebenen optionalen Features sind unabhängig und müssen einzeln überprüft werden.
Featureunterstützung auf Windows RT 8.1- und Windows Phone 8.1-Geräten
Windows RT Tablet-Geräte können eine Vielzahl von Featureebenen und optionalen Features unterstützen, sind für einen geringeren Stromverbrauch optimiert und verwenden integrierte Grafiken anstelle von diskreten GPUs. Windows Store-Apps für ARM-Geräte müssen die Featureebene 9.1 unterstützen. DirectX-Apps für Windows RT sollten optionale Features nutzen, die Strom und Zyklen sparen können , z. B. einfaches Instancing, wenn sie verfügbar sind.
Windows Phone 8 mobile Geräte unterstützen Featureebene 9.3 mit bestimmten optionalen Features. Weitere Informationen finden Sie unter Direct3D-Featureebene 9_3 für Windows Phone 8.
Was sind die optionalen Direct3D 11-Features?
Im weiteren Verlauf dieses Artikels werden die optionalen Features beschrieben, die in Direct3D 11.2 verfügbar sind. Features werden in chronologischer Reihenfolge nach dem Zeitpunkt des Hinzufügens beschrieben, sodass Sie einen Eindruck davon erhalten können, welche Features in verschiedenen Versionen von Direct3D 11 vorhanden sind.
Optionale Compute-Shader-Unterstützung für Featureebene 10
Das folgende Feature ist für Geräte der Featureebene 10 immer verfügbar:
D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS: Wenn dies TRUE ist, unterstützt das Gerät Compute-Shader. Dies umfasst die Unterstützung für rohe und strukturierte Puffer.
Wenn das Gerät der Featureebene 10_0 oder 10_1 dieses Feature unterstützt, wird nicht garantiert, dass das Gerät Compute-Shader 4.1 unterstützt. Apps sollten darauf vorbereitet sein, auf einen Compute-Shader 4.0 zurückzugreifen, wenn ID3D11Device::CreateComputeShader eine Ausnahme mit einem Compute-Shader 4.1-Programm auslöst.
Optionale Funktionen für Featureebene 9
Die folgenden Features werden für Featureebene 9 ab Windows 8 hinzugefügt:
D3D11_FEATURE_DATA_D3D9_OPTIONS: Gibt die Unterstützung für die Umbruchtexturadressierung mit Nicht-Power-of-2-Texturen an. Wenn dies unterstützt wird, können D3D11_TEXTURE_ADDRESS_MODE_WRAP mit solchen Texturen verwendet werden.
D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT: Gibt die Unterstützung für Vergleichsbeispiele im Shadermodell 4.0 auf Featureebene 9_x Shadern an. Dies wird für Tiefentests in Pixelshadern verwendet, sodass allgemeine Techniken wie Schattenzuordnung und Schablonen unterstützt werden.
Das folgende Feature wurde für Geräte der Featureebene 9 ab Windows 8.1 hinzugefügt:
D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT: Gibt die Unterstützung für einfache Instanziierungsfeatures an, die möglicherweise auf Hardware auf DirectX 9-Ebene verfügbar sind. Einfaches Instancing bedeutet, dass alle InstanceDataStepRate-Member der D3D11_INPUT_ELEMENT_DESC Strukturen, die zum Definieren des Eingabelayouts verwendet werden, gleich 1 sein müssen. Geräte, die Featureebene 9.3 oder höher unterstützen, enthalten bereits vollständige Unterstützung für die Instancing.
Optionale Gleitkommagenauigkeitsunterstützung für Shaderprogramme
D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT: Die Felder in dieser Struktur geben die Länge von Gleitkommazahlen an, wenn die Mindestgenauigkeit aktiviert ist, oder 0, wenn nur eine volle 32-Bit-Gleitkommagenauigkeit unterstützt wird.
Bei Geräten der Featureebene 9 kann sich die Minimale Genauigkeit für den Vertexshader vom Pixelshader unterscheiden. Die Genauigkeit für den Vertex-Shader wird im Feld AllOtherShaderStagesMinPrecision angegeben.
D3D11_FEATURE_DATA_DOUBLES: Geräte der Featureebene 11 können Berechnungen mit doppelter Genauigkeit in Shadermodell 5.0-Programmen unterstützen. Die Unterstützung für Berechnungen mit doppelter Genauigkeit innerhalb des Shaders bedeutet, dass Floats innerhalb des Compute-Shader-Programms in Doubles konvertiert werden können, was den Vorteil von Berechnungen mit höherer Genauigkeit innerhalb jedes Shaderdurchlaufs bietet. Die Zahlen mit doppelter Genauigkeit müssen zurück in floats konvertiert werden, bevor sie in den Ausgabepuffer geschrieben werden. Beachten Sie, dass die Division mit doppelter Genauigkeit nicht unbedingt unterstützt wird.
Zusätzliche Funktionen für Direct3D 11.2
Direct3D 11.2 fügt vier neue optionale Features hinzu, die von Direct3D 11-Geräten unterstützt werden können. Diese Features befinden sich in der D3D11_FEATURE_DATA_D3D11_OPTIONS1-Struktur :
TiledResourcesTier: Gibt die Unterstützung für gruppierte Ressourcen an und gibt die unterstützte Ebenenebene an.
MinMaxFiltering: Gibt die Unterstützung für die Filteroptionen D3D11_FILTER_MINIMUM_* und D3D11_FILTER_MAXIMUM_* an, die das Filterergebnis mit dem minimalen (oder maximalen) Wert vergleichen. Siehe D3D11_FILTER.
ClearViewAlsoSupportsDepthOnlyFormats: Gibt die Unterstützung für das Löschen von Tiefenpufferressourcensichten an.
MapOnDefaultBuffers: Gibt die Unterstützung für die Zuordnung von Renderzielpuffern an, die mit dem flag D3D11_USAGE_DEFAULT erstellt wurden.
Kachelbasiertes Rendering
D3D11_FEATURE_DATA_ARCHITECTURE_INFO: Gibt an, ob das Grafikgerät Renderingbefehle in Batches verarbeitet und standardmäßig kachelbasiertes Rendering ausführt. Dies kann als Hinweis für die Optimierung der Grafik-Engine verwendet werden.
Optionale Features für Entwicklung und Debuggen
D3D11_FEATURE_DATA_D3D11_OPTIONS::D iscardAPIsSeenByDriver: Sie können dieses Element während der Entwicklung überwachen, um Ältere Treiber auf Hardware auszuschließen, bei denen DiscardView und DiscardResource sonst von Vorteil gewesen wären.
D3D11_FEATURE_DATA_MARKER_SUPPORT: Dies wird unterstützt, wenn die Hardware und der Treiber die Datenmarkierung für die GPU-Profilerstellung unterstützen.
Zugehörige Themen