DXGI 1.4 Verbesserungen
Die folgende Funktionalität wurde in Microsoft DirectX Graphics Infrastructure (DXGI) 1.4 hinzugefügt oder geändert, hauptsächlich zur Unterstützung von Direct3D 12.
Günstigere Adapteraufzählung
Bei Direct3D 12 ist es nicht mehr möglich, von einem Gerät auf den IDXGIAdapter zurückzuverfolgen, der zum Erstellen verwendet wurde. Es ist auch nicht mehr möglich, D3D_DRIVER_TYPE_WARP in D3D12CreateDevice bereitzustellen. Um die Entwicklung zu vereinfachen, können Sie IDXGIFactory4 verwenden, um beides zu verarbeiten. IDXGIFactory4::EnumAdapterByLuid (für die Kopplung mit ID3D12Device::GetAdapterLuid) ermöglicht einer App das Abrufen von Informationen zu dem Adapter, in dem ein Direct3D 12-Gerät erstellt wurde. IDXGIFactory4::EnumWarpAdapter stellt einen Adapter bereit, der für D3D12CreateDevice bereitgestellt werden kann, um den WARP-Renderer zu verwenden.
Nachverfolgung des Videospeicherbudgets
Anwendungsentwickler werden aufgefordert, ein Videospeicherreservierungssystem zu verwenden, um das Betriebssystem über die Menge des physischen Videospeichers zu informieren, auf den die App nicht verzichten kann.
Die Menge des für einen Prozess verfügbaren physischen Arbeitsspeichers wird als "Videospeicherbudget" bezeichnet. Das Budget kann merklich schwanken, wenn Hintergrundprozesse aufwachen und schlafen. und schwanken dramatisch, wenn der Benutzer zu einer anderen Anwendung wechselt. Die Anwendung kann benachrichtigt werden, wenn sich das Budget ändert und sowohl das aktuelle Budget als auch die aktuell verbrauchte Arbeitsspeichermenge abfragen. Wenn eine Anwendung nicht innerhalb ihres Budgets bleibt, wird der Prozess zeitweilig eingefroren, damit andere Anwendungen ausgeführt werden können, und/oder die Erstellungs-APIs einen Fehler zurückgeben. Die IDXGIAdapter3-Schnittstelle stellt die Methoden für diese Funktionalität bereit, insbesondere QueryVideoMemoryInfo und RegisterVideoMemoryBudgetChangeNotificationEvent.
Weitere Informationen finden Sie im Direct3D 12-Thema zu Residency.
Änderungen an der Direct3D 12-Swapchain
Einige der vorhandenen Direct3D 11-Swapchainfunktionen wurden veraltet, um die Mehraufwandsreduzierungen in Direct3D 12 zu erzielen. Während andere Änderungen vorgenommen wurden, um entweder an Direct3D 12-Konzepten auszurichten oder eine bessere Unterstützung für Direct3D 12-Features bereitzustellen.
Invariante Backbufferidentität
In Direct3D 11 konnten Anwendungen GetBuffer( 0, ... ) nur einmal aufrufen. Jeder Aufruf von Present hat implizit die Ressourcenidentität der zurückgegebenen Schnittstelle geändert. Direct3D 12 unterstützt diese implizite Änderung der Ressourcenidentität aufgrund des erforderlichen CPU-Mehraufwands und des Entwurfs des flexiblen Ressourcendeskriptors nicht mehr. Daher muss die Anwendung GetBuffer für jeden puffer manuell aufrufen, der mit der Swapchain erstellt wurde. Die Anwendung muss nach dem Aufrufen von Present manuell in den nächsten Puffer in der Sequenz gerendert werden. Anwendungen werden empfohlen, einen Cache mit Deskriptoren für jeden Puffer zu erstellen, anstatt jedes Objekt erneut zu erstellen.
Unterstützung für mehrere Adapter
Wenn eine Swapchain auf einem Multi-GPU-Adapter erstellt wird, werden die Backbuffer alle auf Knoten 1 erstellt, und nur eine einzelne Befehlswarteschlange wird unterstützt. ResizeBuffers1 ermöglicht Es Anwendungen, Backbuffer auf verschiedenen Knoten zu erstellen, sodass mit jedem eine andere Befehlswarteschlange verwendet werden kann. Mit diesen Funktionen können AFR-Techniken (Alternate Frame Rendering) mit der Swapchain verwendet werden. Weitere Informationen finden Sie unter Systeme mit mehreren Adaptern.
Verschiedenes
- Ein Befehlswarteschlangenobjekt muss anstelle des Direct3D 12-Geräteobjekts an createSwapChain-Methoden übergeben werden.
- Es werden nur die folgenden beiden Flip-Model-Swap-Effekte unterstützt:
- DXGI_SWAP_EFFECT_FLIP_DISCARD sollten bevorzugt werden, wenn Anwendungen den Backbuffer vollständig rendern, bevor sie sie präsentieren, oder wenn Sie Szenarien mit mehreren Adaptern problemlos unterstützen möchten.
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL sollten von Anwendungen verwendet werden, die auf teilweisen Präsentationsoptimierungen basieren oder regelmäßig aus zuvor präsentierten Backbuffern lesen. - SetFullscreenState besitzt nicht mehr ausschließlich die Anzeige, sodass benutzerinitiierte Betriebssystemelemente nahtlos vor der Anwendungsausgabe angezeigt werden können. Volumeeinstellungen sind ein Beispiel dafür.