Freigeben über


DXGI 1.4-Verbesserungen

Die folgenden Funktionen wurden in Microsoft DirectX Graphics Infrastructure (DXGI) 1.4 hinzugefügt oder geändert, hauptsächlich zur Unterstützung von Direct3D 12.

Günstigere Adapterenumeration

Für Direct3D 12 ist es nicht mehr möglich, von einem Gerät auf die IDXGIAdapter- zurückzutracken, die zum Erstellen verwendet wurde. Es ist auch nicht mehr möglich, D3D_DRIVER_TYPE_WARP in D3D12CreateDevicebereitzustellen. Um die Entwicklung zu vereinfachen, können Sie IDXGIFactory4- verwenden, um mit beiden zu umgehen. IDXGIFactory4::EnumAdapterByLuid (für die Kopplung mit ID3D12Device::GetAdapterLuid) ermöglicht es einer App, Informationen zum Adapter abzurufen, auf dem ein Direct3D 12-Gerät erstellt wurde. IDXGIFactory4::EnumWarpAdapter stellt einen Adapter bereit, der D3D12CreateDevice zur Verwendung des WARP-Renderers bereitgestellt werden kann.

Nachverfolgen des Speicherbudgets für Videospeicher

Anwendungsentwickler werden ermutigt, ein Videospeicherreservierungssystem zu verwenden, um das Betriebssystem über die Menge des physischen Videospeichers zu informieren, ohne die die App nicht gehen kann.

Die Menge des für einen Prozess verfügbaren physischen Arbeitsspeichers wird als "Videospeicherbudget" bezeichnet. Das Budget kann merklich schwanken, da 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 abruft. Wenn eine Anwendung nicht innerhalb ihres Budgets verbleibt, wird der Prozess zeitweise fixiert, 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 Thema "Direct3D 12" zu Residency.

Änderungen am Direct3D 12-Swapchain

Einige der vorhandenen Direct3D 11-Swapchainfunktionen sind veraltet, um die Overheadreduzierung 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 Backbuffer Identity

In Direct3D 11 konnten Anwendungen GetBuffer-( 0, ... ) nur einmal aufrufen. Jeder Aufruf von Present die Ressourcenidentität der zurückgegebenen Schnittstelle implizit geändert. Direct3D 12 unterstützt diese implizite Ressourcenidentitätsänderung aufgrund des erforderlichen CPU-Aufwands und des flexiblen Entwurfs der Ressourcenbeschreibung nicht mehr. Daher muss die Anwendung manuell GetBuffer- für jeden puffer aufrufen, der mit der Swapchain erstellt wurde. Die Anwendung muss nach dem Aufrufen von Presentmanuell in den nächsten Puffer in der Sequenz gerendert werden. Anwendungen werden empfohlen, einen Cache von Deskriptoren für jeden Puffer zu erstellen, anstatt viele Objekte Presentneu zu erstellen.

Multiadapterunterstützung

Wenn eine Swapchain auf einem Multi-GPU-Adapter erstellt wird, werden alle Backbuffers auf Knoten 1 erstellt, und nur eine einzige Befehlswarteschlange wird unterstützt. ResizeBuffers1- ermöglicht Anwendungen das Erstellen von Backbuffers auf verschiedenen Knoten, sodass jeweils eine andere Befehlswarteschlange verwendet werden kann. Diese Funktionen ermöglichen die Verwendung von Alternativer Framerendering (AFR)-Techniken mit der Swapchain. Weitere Informationen finden Sie unter Multiadaptersysteme.

Sonstiges

  • Ein Befehlswarteschlangenobjekt muss anstelle des Direct3D 12-Geräteobjekts an CreateSwapChain- Methoden übergeben werden.
  • Es werden nur die folgenden beiden Flipmodell-Swapeffekte unterstützt:
    DXGI_SWAP_EFFECT_FLIP_DISCARD sollten bevorzugt werden, wenn Anwendungen vollständig über den Backbuffer gerendert werden, bevor sie präsentiert werden oder sich für die einfache Unterstützung von Szenarien mit mehreren Adaptern interessieren.
    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL sollten von Anwendungen verwendet werden, die auf Teilpräsentationsoptimierungen basieren oder regelmäßig aus zuvor präsentierten Backbuffers gelesen werden.
  • SetFullscreenState besitzt nicht mehr ausschließlich die Anzeige, sodass vom Benutzer initiierte Betriebssystemelemente nahtlos vor der Anwendungsausgabe angezeigt werden können. Die Volumeeinstellungen sind ein Beispiel dafür.

Direct3D 12-Hardwarefeatureebenen

Programmierhandbuch für DXGI-