Direct3D 11.1 Features

Die folgende Funktionalität wurde in Direct3D 11.1 hinzugefügt, die in Windows 8, Windows RT und Windows Server 2012 enthalten ist. Teilweise Unterstützung für Direct3D 11.1 ist unter Windows 7 und Windows Server 2008 R2 über das Plattformupdate für Windows 7 verfügbar, das über das Plattformupdate für Windows 7 verfügbar ist.

Shaderablaufverfolgung und Compilererweiterungen

Mit Direct3D 11.1 können Sie die Shaderablaufverfolgung verwenden, um sicherzustellen, dass Ihr Code wie vorgesehen funktioniert. Wenn dies nicht der Fall ist, können Sie das Problem ermitteln und beheben. Das Windows Software Development Kit (SDK) für Windows 8 enthält HLSL-Compilererweiterungen. Die Shaderablaufverfolgung und der HLSL-Compiler werden in D3dcompiler_nn.dll implementiert.

Die Shaderablaufverfolgungs-API und die Verbesserungen am HLSL-Compiler bestehen aus den folgenden Methoden und Funktionen.

Die D3dcompiler.lib-Bibliothek erfordert D3dcompiler_nn.dll. Diese DLL ist nicht Teil von Windows 8. Sie befindet sich im Ordner \bin des Windows SDK für Windows 8 zusammen mit der Fxc.exe Befehlszeilenversion des HLSL-Compilers.

Hinweis

Sie können diese Bibliotheks- und DLL-Kombination zwar für die Entwicklung verwenden, sie können jedoch keine Windows Store-Apps bereitstellen, die diese Kombination verwenden. Daher müssen Sie stattdessen HLSL-Shader kompilieren, bevor Sie Ihre Windows Store-App versenden. Sie können HLSL-Kompilierungsbinärdateien auf den Datenträger schreiben, oder der Compiler kann Header mit statischen Bytearrays generieren, die die Shaderblobdaten enthalten. Sie verwenden die ID3DBlob-Schnittstelle , um auf die Blobdaten zuzugreifen. Um Ihre Windows Store-App zu entwickeln, rufen Sie D3DCompile2 oder D3DCompileFromFile auf, um die unformatierte HLSL-Quelle zu kompilieren, und geben Sie dann die resultierenden Blobdaten an Direct3D.

 

Direct3D-Gerätefreigabe

Mit Direct3D 11.1 können Direct3D 10-APIs und Direct3D 11-APIs ein zugrunde liegendes Renderinggerät verwenden.

Dieses Direct3D 11.1-Feature besteht aus den folgenden Methoden und schnittstellen.

Überprüfen der Unterstützung neuer Direct3D 11.1-Features und -Formate

Mit Direct3D 11.1 können Sie nach neuen Features suchen, die der Grafiktreiber möglicherweise unterstützt, und nach neuen Möglichkeiten, wie ein Format auf einem Gerät unterstützt wird. Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 gibt auch neue DXGI_FORMAT Werte an.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Verwenden der minimalen HLSL-Genauigkeit

Ab Windows 8 können Grafiktreiber skalare HLSL-Datentypen mit minimaler Genauigkeit implementieren, indem sie eine Genauigkeit verwenden, die größer als oder gleich der angegebenen Bitgenauigkeit ist. Wenn Ihr HLSL-Shadercode mit minimaler Genauigkeit auf Hardware verwendet wird, die eine minimale HLSL-Genauigkeit implementiert, verwenden Sie weniger Speicherbandbreite, sodass Sie auch weniger Systemleistung verbrauchen.

Sie können die minimale Genauigkeitsunterstützung abfragen, die der Grafiktreiber bietet, indem Sie ID3D11Device::CheckFeatureSupport mit dem D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT-Wert aufrufen. Übergeben Sie in diesem ID3D11Device::CheckFeatureSupport-Aufruf einen Zeiger auf eine D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT Struktur, die ID3D11Device::CheckFeatureSupport mit den mindestgenauen Genauigkeitsstufen ausfüllt, die der Treiber für die Pixel-Shaderphase und andere Shaderstufen unterstützt. Die zurückgegebenen Informationen zeigen nur an, dass die Grafikhardware HLSL-Vorgänge mit einer niedrigeren Genauigkeit als die standardmäßige 32-Bit-Floatgenauigkeit ausführen kann, aber nicht garantiert, dass die Grafikhardware tatsächlich mit einer niedrigeren Genauigkeit ausgeführt wird.

Sie müssen nicht mehrere Shader erstellen, die die minimale Genauigkeit verwenden. Erstellen Sie stattdessen Shader mit minimaler Genauigkeit, und die Minimalgenauigkeitsvariablen verhalten sich bei voller 32-Bit-Genauigkeit, wenn der Grafiktreiber meldet, dass er keine minimale Genauigkeit unterstützt. Weitere Informationen zur minimalen HLSL-Genauigkeit finden Sie unter Verwenden von HLSL-Mindestgenauigkeit.

HLSL-Shader mit minimaler Genauigkeit funktionieren nicht auf Betriebssystemen vor Windows 8.

Angeben von Benutzerclipebenen in HLSL auf Featureebene 9 und höher

Ab Windows 8 können Sie das Funktionsattribut clipplanes in einer HLSL-Funktionsdeklaration anstelle von SV_ClipDistance verwenden, damit Ihr Shader auf Featureebene 9_x sowie auf Featureebene 10 und höher funktioniert. Weitere Informationen finden Sie unter Benutzerclipebenen auf Hardware der Featureebene 9.

Erstellen größerer Konstantpuffer, auf die ein Shader zugreifen kann

Mit Direct3D 11.1 können Sie Konstantenpuffer erstellen, die größer als die maximale konstante Puffergröße sind, auf die ein Shader zugreifen kann (4096 Konstanten mit 32 Bit*4 Komponenten – 64 KB). Wenn Sie später die Puffer an die Pipeline binden, z. B. über PSSetConstantBuffers oder PSSetConstantBuffers1, können Sie einen Pufferbereich angeben, auf den der Shader zugreifen kann, der innerhalb des Grenzwerts von 4096 passt.

Direct3D 11.1 aktualisiert die ID3D11Device::CreateBuffer-Methode für dieses Feature.

Verwenden logischer Vorgänge in einem Renderziel

Mit Direct3D 11.1 können Sie logische Vorgänge verwenden, anstatt ein Renderziel zu überblenden. Sie können jedoch keine Logikvorgänge mit dem Mischen mehrerer Renderziele kombinieren.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Erzwingen der Beispielanzahl zum Erstellen eines Rasterisierungszustands

Mit Direct3D 11.1 können Sie eine Stichprobenanzahl erzwingen, wenn Sie einen Rasterizerstatus erstellen.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Hinweis

Wenn Sie mit der Anzahl der Stichproben rendern möchten, die auf 1 oder höher erzwungen wird, müssen Sie die folgenden Richtlinien befolgen:

  • Binden Sie keine Tiefenschablonenansichten.
  • Deaktivieren Sie tiefentests.
  • Stellen Sie sicher, dass der Shader keine Tiefe ausgibt.
  • Wenn Sie Renderzielsichten (D3D11_BIND_RENDER_TARGET) gebunden haben und die Stichprobenanzahl auf größer als 1 erzwungen wurde, stellen Sie sicher, dass jedes Renderziel nur über ein einziges Beispiel verfügt.
  • Verwenden Sie den Shader nicht bei der Stichprobenhäufigkeit. Id3D11ShaderReflection::IsSampleFrequencyShader gibt daher FALSE zurück.

Andernfalls ist das Renderingverhalten nicht definiert. Informationen zum Konfigurieren der Tiefenschablone finden Sie unter Konfigurieren Depth-Stencil Funktionalität.

 

Verarbeiten von Videoressourcen mit Shadern

Mit Direct3D 11.1 können Sie Ansichten (SRV/RTV/UAV) für Videoressourcen erstellen, damit Direct3D-Shader diese Videoressourcen verarbeiten können. Das Format einer zugrunde liegenden Videoressource schränkt die Formate ein, die die Ansicht verwenden kann. Die DXGI_FORMAT-Enumeration enthält neue Videoressourcenformatwerte. Diese DXGI_FORMAT Werte geben die gültigen Ansichtsformate an, die Sie erstellen können, und wie die Direct3D 11.1-Runtime die Ansicht zuordnet. Sie können mehrere Ansichten verschiedener Teile derselben Oberfläche erstellen, und je nach Format können sich die Größen der Ansichten voneinander unterscheiden.

Direct3D 11.1 aktualisiert die folgenden Methoden für dieses Feature.

Erweiterte Unterstützung für freigegebene Texture2D-Ressourcen

Direct3D 11.1 garantiert, dass Sie Texture2D-Ressourcen, die Sie erstellt haben, mit bestimmten Ressourcentypen und -formaten freigeben können. Verwenden Sie zum Freigeben von Texture2D-Ressourcen die D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX oder eine Kombination aus den Flags D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX und D3D11_RESOURCE_MISC_SHARED_NTHANDLE (neu für Windows 8), wenn Sie diese Ressourcen erstellen.

Direct3D 11.1 garantiert, dass Sie Texture2D-Ressourcen, die Sie erstellt haben, mit den folgenden DXGI_FORMAT Werten freigeben können:

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

Darüber hinaus garantiert Direct3D 11.1, dass Sie Texture2D-Ressourcen freigeben können, die Sie mit einer Mipmap-Ebene von 1, einer Arraygröße von 1, Bindungsflags von D3D11_BIND_SHADER_RESOURCE und D3D11_BIND_RENDER_TARGET kombiniert, Verwendungsstandard (D3D11_USAGE_DEFAULT) und nur diesen D3D11_RESOURCE_MISC_FLAG Werten:

Mit Direct3D 11.1 können Sie eine größere Vielfalt von Texture2D-Ressourcentypen und -formaten gemeinsam nutzen. Sie können abfragen, ob der Grafiktreiber und die Hardware die erweiterte Texture2D-Ressourcenfreigabe unterstützen, indem Sie ID3D11Device::CheckFeatureSupport mit dem wert D3D11_FEATURE_D3D11_OPTIONS aufrufen. Übergeben Sie in diesem ID3D11Device::CheckFeatureSupport-Aufruf einen Zeiger auf eine D3D11_FEATURE_DATA_D3D11_OPTIONS-Struktur . ID3D11Device::CheckFeatureSupport legt das ExtendedResourceSharing-Element von D3D11_FEATURE_DATA_D3D11_OPTIONS auf TRUE fest, wenn die Hardware und der Treiber die erweiterte Textur2D-Ressourcenfreigabe unterstützen.

Wenn ID3D11Device::CheckFeatureSupport in ExtendedResourceSharingTRUE zurückgibt, können Sie von Ihnen erstellte Ressourcen mit den folgenden DXGI_FORMAT Werten freigeben:

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

Wenn ID3D11Device::CheckFeatureSupport in ExtendedResourceSharingTRUE zurückgibt, können Sie die von Ihnen erstellten Ressourcen mit den folgenden Features und Flags freigeben:

Hinweis

Wenn ExtendedResourceSharingTRUE ist, haben Sie mehr Flexibilität, wenn Sie Bindungsflags für die Freigabe von Texture2D-Ressourcen angeben. Der Grafiktreiber und die Hardware unterstützen nicht nur mehr Bindungsflags, sondern auch mehr mögliche Kombinationen von Bindungsflags. Sie können beispielsweise nur D3D11_BIND_RENDER_TARGET oder keine Bindungsflags usw. angeben.

 

Auch wenn ID3D11Device::CheckFeatureSupport in ExtendedResourceSharingTRUE zurückgibt, können Sie die von Ihnen erstellten Ressourcen immer noch nicht mit den folgenden Features und Flags freigeben:

Ändern von Unterressourcen mit neuen Kopieroptionen

Mit Direct3D 11.1 können Sie neue Kopierflags zum Kopieren und Aktualisieren von Unterressourcen verwenden. Wenn Sie eine Unterressource kopieren, können die Quell- und Zielressourcen identisch sein, und die Quell- und Zielregionen können sich überlappen.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Verwerfen von Ressourcen und Ressourcensichten

Mit Direct3D 11.1 können Sie Ressourcen und Ansichten von Ressourcen aus dem Gerätekontext verwerfen. Diese neue Funktionalität informiert die GPU darüber, dass vorhandene Inhalte in Ressourcen oder Ressourcenansichten nicht mehr benötigt werden.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Unterstützung einer größeren Anzahl von UAVs

Mit Direct3D 11.1 können Sie eine größere Anzahl von UAVs verwenden, wenn Sie Ressourcen an die Ausgabefusionsphase binden und ein Array von Ansichten für eine nicht sortierte Ressource festlegen.

Direct3D 11.1 aktualisiert die folgenden Methoden für dieses Feature.

Binden eines Unterbereichs eines Konstantenpuffers an einen Shader

Mit Direct3D 11.1 können Sie einen Unterbereich eines Konstantenpuffers binden, auf den ein Shader zugreifen kann. Sie können einen größeren Konstantenpuffer bereitstellen und den Unterbereich angeben, den der Shader verwenden kann.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Abrufen des Unterbereichs eines Konstantenpuffers, der an einen Shader gebunden ist

Mit Direct3D 11.1 können Sie den Unterbereich eines Konstantenpuffers abrufen, der an einen Shader gebunden ist.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Löschen sie eine Ressourcenansicht ganz oder teilweise.

Mit Direct3D 11.1 können Sie eine Ressourcenansicht (RTV, UAV oder eine beliebige Videoansicht einer Texture2D-Oberfläche) löschen. Sie wenden den gleichen Farbwert auf alle Teile der Ansicht an.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Zuordnen von SRVs dynamischer Puffer mit NO_OVERWRITE

Mit Direct3D 11.1 können Sie Shaderressourcensichten (SRV) dynamischer Puffer mit D3D11_MAP_WRITE_NO_OVERWRITE zuordnen. Die Direct3D 11- und früheren Runtimes beschränkten die Zuordnung zu Scheitelpunkt- oder Indexpuffern.

Direct3D 11.1 aktualisiert die ID3D11DeviceContext::Map-Methode für dieses Feature.

Verwenden von UAVs in jeder Pipelinephase

Mit Direct3D 11.1 können Sie die folgenden Shadermodell 5.0-Anweisungen für alle Shaderstufen verwenden, die zuvor nur in Pixel-Shadern und Compute-Shadern verwendet wurden.

Direct3D 11.1 aktualisiert die folgenden Methoden für dieses Feature.

Diese Anweisungen waren in Direct3D 11.0 in ps_5_0 und cs_5_0 vorhanden. Da Direct3D 11.1 UAVs in allen Shaderphasen verfügbar macht, sind diese Anweisungen in allen Shaderphasen verfügbar.

Wenn Sie kompilierte Shader (VS/HS/DS/HS), die eine dieser Anweisungen verwenden, an eine Create-Shader-Funktion wie CreateVertexShader auf Geräten übergeben, die UAVs nicht in jeder Phase unterstützen (einschließlich vorhandener Treiber, die nicht mit diesem Feature implementiert sind), schlägt die Create-Shader-Funktion fehl. Die Create-Shader-Funktion schlägt auch fehl, wenn der Shader versucht, einen UAV-Slot über den satz von der Hardware unterstützten UAV-Slots zu verwenden.

Die UAVs, auf die in diesen Anweisungen verwiesen wird, werden in allen Pipelinephasen gemeinsam genutzt. Beispielsweise ist ein UAV, der in der Ausgabefusionsphase an Slot 0 gebunden ist, im Slot 0 an VS/HS/DS/GS/PS verfügbar.

UAV-Zugriffe, die Sie innerhalb oder über Shaderphasen ausstellen, die innerhalb einer bestimmten Draw*() ausgeführt werden, oder die Sie aus dem Compute-Shader innerhalb eines Dispatch*() ausgeben, werden nicht in der Reihenfolge abgeschlossen, in der Sie sie ausgestellt haben. Alle UAV-Zugriffe enden jedoch am Ende von Draw*() oder Dispatch*().

Erweiterte Unterstützung für WARP-Geräte

Direct3D 11.1 erweitert die Unterstützung für WARP-Geräte , die Sie erstellen, indem Sie D3D_DRIVER_TYPE_WARP im DriverType-Parameter von D3D11CreateDevice übergeben.

Ab Direct3D 11.1 WARP-Geräte unterstützen:

  • Alle Direct3D-Featureebenen von 9.1 bis 11.1
  • Compute-Shader und Tessellation
  • Freigegebene Oberflächen. Das heißt, Sie können Oberflächen sowohl zwischen WARP-Geräten als auch zwischen WARP-Geräten in verschiedenen Prozessen vollständig freigeben.

WARP-Geräte unterstützen diese optionalen Features nicht:

Wenn Sie einen virtuellen Computer (VM), Hyper-V, mit deaktivierter Grafikverarbeitungseinheit (GPU) oder ohne Anzeigetreiber ausführen, erhalten Sie ein WARP-Gerät, dessen Anzeigename "Microsoft Basic Display Adapter" lautet. Dieses WARP-Gerät kann die vollständige Windows-Benutzeroberfläche ausführen, einschließlich DWM-, Internet-Explorer- und Windows Store-Apps. Dieses WARP-Gerät unterstützt auch die Ausführung von Legacy-Apps, die DirectDraw verwenden oder Apps ausführen, die Direct3D 3 bis Direct3D 11.1 verwenden.

Verwenden von Direct3D in Sitzung 0-Prozessen

Ab Windows 8 und Windows Server 2012 können Sie die meisten Direct3D-APIs in Sitzung 0-Prozessen verwenden.

 

Unterstützung für Schattenpuffer auf Featureebene 9

Verwenden Sie eine Teilmenge der Direct3D 10_0+-Schattenpufferfeatures, um Schatteneffekte auf Featureebene 9_x zu implementieren. Informationen dazu, was Sie tun müssen, um Schatteneffekte auf Featureebene 9_x zu implementieren, finden Sie unter Implementieren von Schattenpuffern für Direct3D-Featureebene 9.

Neuerungen in Direct3D 11