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. Teilunterstützung für Direct3D 11.1 ist auf 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 Compilerverbesserungen

Mit Direct3D 11.1 können Sie die Shaderablaufverfolgung verwenden, um sicherzustellen, dass Ihr Code wie beabsichtigt ausgeführt wird, und wenn es nicht möglich ist, das Problem zu ermitteln und zu beheben. Das Windows Software Development Kit (SDK) für Windows 8 enthält HLSL-Compilerverbesserungen. Shaderablaufverfolgung und der HLSL-Compiler werden in D3dcompiler_nn.dll implementiert.

Die Shaderablaufverfolgungs-API und die Verbesserungen des HLSL-Compilers 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

Während Sie diese Bibliotheks- und DLL-Kombination für die Entwicklung verwenden können, können Sie Windows Store Apps, die diese Kombination verwenden, nicht bereitstellen. Daher müssen Sie stattdessen HLSL-Shader kompilieren, bevor Sie Ihre Windows Store App versenden. Sie können HLSL-Kompilierungs-Binärdateien auf Datenträger schreiben, oder der Compiler kann Header mit statischen Bytearrays generieren, die die Shader-Blobdaten 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 feeden Sie dann die resultierenden Blobdaten in Direct3D.

 

Direct3D-Gerätefreigabe

Direct3D 11.1 ermöglicht Direct3D 10-APIs und Direct3D 11-APIs die Verwendung eines zugrunde liegenden Renderinggeräts.

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 neue 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 HLSL-Mindestgenauigkeit

Ab Windows 8 können Grafiktreiber mindestgenaue HLSL-Skalardatentypen implementieren, indem sie eine beliebige Genauigkeit verwenden, die größer oder gleich ihrer angegebenen Bitgenauigkeit ist. Wenn Ihr HLSL-Minimalgenauigkeits-Shadercode auf Hardware verwendet wird, die HLSL-Mindestgenauigkeit implementiert, verwenden Sie weniger Speicherbandbreite und daher auch weniger Systemleistung.

Sie können die minimale Genauigkeitsunterstützung abfragen, die der Grafiktreiber bereitstellt, indem Sie ID3D11Device::CheckFeatureSupport mit dem D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT Wert aufrufen. Übergeben Sie in diesem ID3D11Device::CheckFeatureSupport-Aufruf einen Zeiger an eine D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT Struktur, die ID3D11Device::CheckFeatureSupport mit den minimalen Genauigkeitsstufen ausfüllt, die der Treiber für die Pixelhaderphase und für andere Shaderstufen unterstützt. Die zurückgegebenen Informationen weisen lediglich darauf hin, dass die Grafikhardware HLSL-Vorgänge mit geringerer Genauigkeit als die standardmäßige 32-Bit-Float-Genauigkeit 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 Mindestgenauigkeit nicht 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 Mindestgenauigkeit unterstützt. Weitere Informationen zur MINDESTgenauigkeit von HLSL finden Sie unter Verwenden der HLSL-Mindestgenauigkeit.

HLSL-Mindestgenauigkeitshader funktionieren nicht vor Windows 8 auf Betriebssystemen.

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

Ab Windows 8 können Sie das Clipplanes-Funktionsattribute 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 Featureebene 9 Hardware.

Erstellen größerer Konstantenpuffer als ein Shader kann darauf zugreifen

Mit Direct3D 11.1 können Sie Konstantenpuffer erstellen, die größer als die maximale Größe des Konstantenpuffers sind, auf die ein Shader zugreifen kann (4096 32-Bit*4-Komponentenkonstanten – 64 KB). Wenn Sie die Puffer später an die Pipeline binden, z. B. über PSSetConstantBuffers oder PSSetConstantBuffers1, können Sie einen Bereich von Puffern 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 anstelle einer Vermischung in einem Renderziel verwenden. Sie können jedoch keine Logikvorgänge mit einer Mischung aus mehreren Renderzielen kombinieren.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Erzwingen der Beispielanzahl zum Erstellen eines Rasterizerstatus

Mit Direct3D 11.1 können Sie beim Erstellen eines Rasterizerzustands eine Force-Beispielanzahl angeben.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Hinweis

Wenn Sie mit der Beispielanzahl zu 1 oder höher rendern möchten, müssen Sie diese Richtlinien befolgen:

  • Binden Sie keine Tiefenablonenansichten.
  • Deaktivieren Sie Tiefentests.
  • Stellen Sie sicher, dass der Shader keine Tiefe ausgibt.
  • Wenn Sie über alle Renderzielansichten gebunden (D3D11_BIND_RENDER_TARGET) verfügen und die Beispielanzahl auf größer als 1 erzwungen haben, stellen Sie sicher, dass jedes Renderziel nur ein einzelnes Beispiel aufweist.
  • Führen Sie den Shader nicht in der Beispielfrequenz aus. Daher gibt ID3D11ShaderReflection::IsSampleFrequencyShaderFALSE zurück.

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

 

Verarbeiten von Videoressourcen mit Shadern

Mit Direct3D 11.1 können Sie Ansichten (SRV/RTV/UAV) in Videoressourcen erstellen, damit Direct3D-Shader diese Videoressourcen verarbeiten können. Das Format einer zugrunde liegenden Videoressource beschränkt die Formate, die die Ansicht verwenden kann. Die DXGI_FORMAT-Aufzählung enthält neue Werte des Videoressourcenformats. Diese DXGI_FORMAT Werte geben die gültigen Ansichtsformate an, die Sie erstellen und wie die Direct3D 11.1-Runtime die Ansicht zugeordnet. 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 freigeben können, die Sie mit bestimmten Ressourcentypen und Formaten erstellt haben. Verwenden Sie zum Freigeben von Texture2D-Ressourcen die D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX oder eine Kombination aus den D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX und D3D11_RESOURCE_MISC_SHARED_NTHANDLE (neu für Windows 8) Flags, wenn Sie diese Ressourcen erstellen.

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

  • 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, arraygröße von 1, binden Flags von D3D11_BIND_SHADER_RESOURCE und D3D11_BIND_RENDER_TARGET kombinierten, Verwendungsstandard (D3D11_USAGE_DEFAULT) und nur diese D3D11_RESOURCE_MISC_FLAG Werte:

Direct3D 11.1 ermöglicht Ihnen eine größere Vielzahl von Texture2D-Ressourcentypen und -formaten. Sie können abfragen, ob der Grafiktreiber und die Hardware erweiterte Texture2D-Ressourcenfreigabe unterstützen, indem Sie ID3D11Device::CheckFeatureSupport mit dem D3D11_FEATURE_D3D11_OPTIONS Wert aufrufen. Übergeben Sie in diesem ID3D11Device::CheckFeatureSupport-Aufruf einen Zeiger an 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 Texture2D-Ressourcenfreigabe unterstützen.

Wenn ID3D11Device::CheckFeatureSupporttrue in ExtendedResourceSharing zurückgibt, können Sie Ressourcen freigeben, die Sie mit diesen DXGI_FORMAT Werten erstellt haben:

  • 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::CheckFeatureSupporttrue in ExtendedResourceSharing zurückgibt, können Sie Ressourcen freigeben, die Sie mit diesen Features und Flags erstellt haben:

Hinweis

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

 

Selbst wenn ID3D11Device::CheckFeatureSupporttrue in ExtendedResourceSharing zurückgibt, können Sie weiterhin keine Ressourcen freigeben, die Sie mit diesen Features und Flags erstellt haben:

Ändern von Unterressourcen mit neuen Kopieroptionen

Direct3D 11.1 ermöglicht es Ihnen, neue Kopier-Flags zum Kopieren und Aktualisieren von Unterressourcen zu verwenden. Wenn Sie eine Unterressource kopieren, können die Quell- und Zielressourcen identisch sein, und die Quell- und Zielbereiche können überlappen.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Ressourcen und Ressourcenansichten verwerfen

Direct3D 11.1 ermöglicht Es Ihnen, Ressourcen und Ansichten von Ressourcen aus dem Gerätekontext zu verwerfen. Diese neue Funktionalität informiert die GPU, dass vorhandene Inhalte in Ressourcen- oder Ressourcenansichten nicht mehr benötigt werden.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Unterstützen einer größeren Anzahl von UAVs

Direct3D 11.1 ermöglicht es Ihnen, eine größere Anzahl von UAVs zu verwenden, wenn Sie Ressourcen an die Ausgabezusammenführungsstufe binden und wenn Sie ein Array von Ansichten für eine nicht angeordnete Ressource festlegen.

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

Binden einer Unterrange eines Konstantenpuffers an einen Shader

Direct3D 11.1 ermöglicht es Ihnen, eine Unterrange eines Konstantenpuffers für einen Shader zu binden. Sie können einen größeren Konstantenpuffer angeben und die Unterrange angeben, die der Shader verwenden kann.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Abrufen der Unterrange eines Konstantenpuffers, der an einen Shader gebunden ist

Direct3D 11.1 ermöglicht es Ihnen, den Unterbereich eines Konstantenpuffers abzurufen, der an einen Shader gebunden ist.

Dieses Direct3D 11.1-Feature besteht aus der folgenden API.

Löschen aller oder eines Teils einer Ressourcenansicht

Direct3D 11.1 ermöglicht es Ihnen, eine Ressourcenansicht (RTV, UAV oder eine beliebige Videoansicht einer Texture2D-Oberfläche) zu 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 von dynamischen Puffern mit NO_OVERWRITE

Direct3D 11.1 ermöglicht es Ihnen, Shaderressourcenansichten (SRV) dynamischer Puffer mit D3D11_MAP_WRITE_NO_OVERWRITE zuzuordnen. Die Direct3D 11- und früheren Laufzeiten beschränkte Zuordnungen zu Vertex- 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 in allen Shaderphasen verwenden, die zuvor in nur Pixel-Shadern und Compute-Shadern verwendet wurden.

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

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

Wenn Sie kompilierte Shader (VS/HS/HS/HS) übergeben, die eine dieser Anweisungen für eine Create-Shader-Funktion verwenden, z. B. CreateVertexShader, auf Geräten, die uaVs nicht auf jeder Stufe unterstützen (einschließlich vorhandener Treiber, die nicht mit diesem Feature implementiert werden), schlägt die Create-Shader-Funktion fehl. Die Create-Shader-Funktion schlägt auch fehl, wenn der Shader versucht, einen UAV-Steckplatz über den Satz der UAV-Steckplätze hinaus zu verwenden, die die Hardware unterstützt.

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

UAV greift von innerhalb oder über Shaderphasen zu, die innerhalb eines bestimmten Draw*() ausgeführt werden oder dass Sie aus dem Compute-Shader innerhalb eines Dispatch*() problemieren, sind nicht garantiert, dass sie in der Reihenfolge abgeschlossen werden, in der Sie sie ausgestellt haben. Alle UAV-Zugriffe enden jedoch am Ende des 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äten 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 zwischen WARP-Geräten sowie 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" ist. Dieses WARP-Gerät kann die vollständige Windows Erfahrung ausführen, die DWM, Internet Explorer und Windows Store-Apps umfasst. 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 Sitzungs-0-Prozessen

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

Hinweis

Diese Ausgabe-, Fenster-, Swapchain- und präsentationsbezogenen APIs sind in Sitzungs-0-Prozessen nicht verfügbar, da sie nicht auf die Sitzung 0-Umgebung angewendet werden:

Wenn Sie eine der vorherigen APIs in einem Sitzungs-0-Prozess aufrufen, wird DXGI_ERROR_NOT_CURRENTLY_AVAILABLE zurückgegeben.

 

Unterstützung für Schattenpuffer auf Featureebene 9

Verwenden Sie eine Teilmenge von Direct3D 10_0+-Schattenpufferfeatures, um Schatteneffekte auf Featureebene 9_x zu implementieren. Informationen zum Implementieren von Schatteneffekten auf Featureebene 9_x finden Sie unter Implementieren von Schattenpuffern für Direct3D-Featureebene 9.

Neuerungen in Direct3D 11