Verwenden Sie das DXGI-Flip-Modell, um eine optimale Leistung zu erzielen.

Dieses Thema enthält Entwicklerleitfäden zum Maximieren der Leistung und Effizienz im Präsentationsstapel für moderne Versionen Windows. Sie wählt die Stelle aus, an der DXGI flip model , DirectX 12: Presentation Modes In Windows 10 (video) und Presentation Enhancements in Windows 10: An Early Look (video) (DXGIFlip-Modell, DirectX 12: Präsentationsmodi in Windows 10 (Video))und Präsentationserweiterungen in Windows 10: An Early Look (Video) aufgelassen haben.

Handlungsaufforderung

Wenn Sie weiterhin DXGI _ SWAP EFFECT DISCARD _ _ oder DXGI SWAP EFFECT SEQUENTIAL (auch als "DXGI _ SWAP EFFECT _ _ SEQUENTIAL" bezeichnet) verwenden das "blt"-Modell), ist es An der Zeit, anzuhalten!

Wechsel zu DXGI _ SWAP EFFECT FLIP SEQUENTIAL _ _ _ oder DXGI SWAP EFFECT FLIP _ _ _ _ DISCARD (AUCH ALS das Flip-Modell) bietet eine bessere Leistung, einen geringeren Energieverbrauch und einen vielfältigeren Satz von Features. (Weitere Informationen zu diesen Werten finden Sie unter DXGI _ SWAP EFFECT-Enumeration.) _

Flip model presents go as far as making windowed mode effectively equivalent or better when the classic "fullscreen exclusive" mode . Tatsächlich möchten Sie vielleicht überlegen, ob Ihre Anwendung tatsächlich einen exklusiven Vollbildmodus benötigt, da die Vorteile eines rahmenlosen Fensters eines Flip-Modells einen schnelleren Wechsel Alt-Tab und eine bessere Integration in moderne Anzeigefunktionen umfassen.

Warum jetzt? Vor dem Update vom April 2018 könnte blt model presents zu sichtbaren Reißern führen, wenn sie in Hybrid-GPU-Konfigurationen verwendet werden, die häufig in High-End-Laptops zu finden sind (siehe KB 3158621). Im Update vom April 2018 wurde diese Tränkung auf Kosten zusätzlicher Arbeit behoben. Wenn Sie blt-Darden mit hohen Frameraten über Hybrid-GPUs hinweg vor allem bei hohen Auflösungen wie 4K machen, kann sich diese zusätzliche Arbeit auf die Gesamtleistung auswirken. Um die beste Leistung auf diesen Systemen zu gewährleisten, wechseln Sie vom Blt- zum Flip Present-Modell. Erwägen Sie darüber hinaus, die Auflösung Ihrer Swapchain zu reduzieren, insbesondere, wenn sie nicht der primäre Punkt der Benutzerinteraktion ist (wie es häufig bei VR-Vorschaufenstern der Fall ist).

Ein kurzer Verlauf

Was ist das Flip-Modell? Was ist die Alternative?

Vor Version Windows 7 war die einzige Möglichkeit, Inhalt aus D3D zu "blten" oder auf eine Oberfläche zu kopieren, die im Besitz des Fensters oder Bildschirms war. Ab dem FLIPEX-Swapeffekt von D3D9 und dem Wechsel zu DXGI über den FLIP SEQUENTIAL-Swapeffekt in Windows 8 haben wir eine effizientere Möglichkeit entwickelt, Inhalte auf dem Bildschirm zu stellen, indem wir sie mit minimalen Kopien direkt für den _ Desktopkompositor freigeben. Eine übersicht über die Technologie finden Sie unter DXGI flip model (DXGI-Flip-Modell).

Diese Optimierung ist dank dwm (Desktopfenster-Manager) möglich, dem Compositor, der den Windows steuert.

Wann sollte ich das blt-Modell verwenden?

Es gibt einen Teil der Funktionalität, die das Flip-Modell nicht bietet: die Möglichkeit, mehrere verschiedene APIs zu erzeugen, die Inhalte erzeugen, die alle zusammen in demselben HWND auf vorhandener Basis schichten. Ein Beispiel hierfür wäre die Verwendung von D3D zum Zeichnen eines Fensterhintergrunds und dann Windows GDI, um etwas oben zu zeichnen, oder die Verwendung von zwei verschiedenen Grafik-APIs oder zwei Swapchains aus derselben API, um abwechselnde Frames zu erzeugen. Wenn Sie keine HWND-Level-Interop zwischen Grafikkomponenten benötigen, benötigen Sie kein blt-Modell.

Es gibt einen zweiten Teil der Funktionalität, der nicht im ursprünglichen Flip-Modellentwurf bereitgestellt wurde, aber jetzt verfügbar ist. Dies ist die Möglichkeit, mit einer ungedrosselten Framerate zu präsentieren. Für eine Anwendung, die das Synchronisierungsintervall 0 verwendet, wird nicht empfohlen, zum Flip-Modell zu wechseln, es sei denn, die IDXGIFactory5::CheckFeatureSupport-API ist verfügbar und meldet Unterstützung für DXGI _ FEATURE PRESENT _ ALLOW _ _ TEARING. Dieses Feature ist in neueren Versionen von Windows 10 und auf moderner Hardware fast überall verfügbar.

DirectFlip

Wenn Sie DirectX 12: Präsentationsmodi inWindows 10 gesehen haben, wird von "Direct Flip" und "Independent Flip" die Rede sein. Dies sind Optimierungen, die für Anwendungen aktiviert sind, die Flip-Modell-Swapchains verwenden. Abhängig von der Fenster- und Pufferkonfiguration ist es möglich, die Desktopkomposition vollständig zu umgehen und Anwendungsframes direkt an den Bildschirm zu senden. Dies erfolgt auf die gleiche Weise wie bei einem exklusiven Vollbildmodus.

In diesen Tagen können diese Optimierungen in einem von drei Szenarien verwendet werden, um die Funktionalität zu erhöhen:

  1. DirectFlip: Ihre Swapchainpuffer passen zu den Bildschirmdimensionen, und der Clientbereich des Fensters deckt den Bildschirm ab. Anstatt die DWM-Swapchain zum Anzeigen auf dem Bildschirm zu verwenden, wird die Anwendungs-Swapchain verwendet.
  2. DirectFlip mit Panel-Installierern: Ihr Fensterclientbereich deckt den Bildschirm ab, und Ihre Swapchainpuffer befinden sich innerhalb eines hardwareabhängigen Skalierungsfaktors (z. B. 0,25x bis 4x) des Bildschirms. Die GPU-Scanouthardware wird verwendet, um den Puffer zu skalieren, während er an die Anzeige gesendet wird.
  3. DirectFlip mit Mehrebenenüberlagerung (Multi-Plane Overlay, MPO): Ihre Swapchainpuffer befinden sich innerhalb eines hardwareabhängigen Skalierungsfaktors Ihrer Fensterdimensionen. Das DWM kann eine dedizierte Hardwarescanoutebene für Ihre Anwendung reservieren, die dann ausgescannt und möglicherweise in einen unteren Alphablendingbereich des Bildschirms gestreckt wird.

Mit dem Flip-Modell mit Fenstern kann die Anwendung Hardwareunterstützung für verschiedene DirectFlip-Szenarien abfragen und verschiedene Arten der dynamischen Skalierung mithilfe von IDXGIOutput6::CheckHardwareCompositionSupport implementieren. Ein Nachteil, der zu beachten ist, ist, dass es möglich ist, dass der Cursor bei Verwendung von Panel-Beschleunigern Streckungsseiteneffekte erleidet, die über DXGI _ HARDWARE COMPOSITION SUPPORT FLAG CURSOR _ _ _ _ _ STRETCHED angezeigt werden.

Sobald Ihre Swapchain "DirectF partitiond" ist, kann das DWM in den Ruhezustand wechseln und nur dann reaktiviert werden, wenn sich etwas außerhalb Ihrer Anwendung ändert. Ihre Anwendungsframes werden unabhängig voneinander direkt an den Bildschirm gesendet, mit der gleichen Effizienz wie der exklusive Vollbildmodus. Dies ist "Unabhängiger Flip" und kann in allen oben genannten Szenarien verwendet werden. Wenn andere Desktopinhalte an oberster Stelle angezeigt werden, kann das DWM entweder nahtlos zurück in den zusammengesetzten Modus wechseln, den Inhalt vor dem Kippen effizient auf die Anwendung "umkehren" oder MPO nutzen, um den unabhängigen Flip-Modus auf dem Bildschirm zu verwalten.

Sehen Sie sich das PresentMon-Tool an, um zu erfahren, welche der oben genannten Tools verwendet wurde.

Was ist im Flip-Modell noch neu?

Zusätzlich zu den oben genannten Verbesserungen, die ohne etwas Besonderes für Standard-Swapchains gelten, stehen mehrere Features zur Verfügung, die von Flipmodellanwendungen verwendet werden können:

  • Verringern der Latenz mit DXGI _ SWAP CHAIN FLAG FRAME _ _ _ _ LATENCY _ WAITABLE _ OBJECT. Im Unabhängigen Flip-Modus können Sie bei neueren Versionen von Windows bis zu 1 Frame latenzen, und bei der Zusammengestelltkeit kann ein ordnungsgemäßer Fallback auf das minimum mögliche Minimum durchgeführt werden.
    • Einschränkung: Es gab ein Problem, bei dem mindestens zwei Frames mit Latenz im Windows 10 Anniversary Update und früher verfügbar waren. Weitere Informationen finden Sie in diesem Forum. Dies wurde im Fall Creator es Update behoben.
  • DXGI _ SWAP _ EFFECT _ FLIP _ DISCARD ermöglicht einen "umgekehrten Kompositionsmodus" des direkten Kippens, was zu weniger Gesamtarbeit bei der Anzeige des Desktops führt. Das DWM kann die Anwendungspuffer scribblen und an den Bildschirm senden, anstatt eine vollständige Kopie in ihre eigenen Swapchains zu erstellen.
  • DXGI _ SWAP _ CHAIN FLAG ALLOW _ _ _ TEARING kann sogar in einem Fenster auf Systemen mit Mehrebenenüberlagerungsunterstützung eine noch geringere Latenz als das wartebare Objekt ermöglichen.
  • Anwendungen haben die Kontrolle über die Inhaltsskalierung, die während der Größenvergrößerung des Fensters erfolgt, indem sie die DXGI _ SCALING-Eigenschaft verwenden, die während der Erstellung der Swapchain festgelegt wurde.
  • Inhalte in HDR-Formaten (R10G10B10A2 UNORM oder _ R16G16B16A16 FLOAT) werden nur dann an einen _ SDR-Desktop zusammengestellt.
  • Aktuelle Statistiken sind im Fenstermodus verfügbar.
  • Die Kompatibilität mit dem UWP-Anwendungsmodell (Universal Windows Platform) und DX12 ist besser, da diese nur mit dem Flip-Modell kompatibel sind.

Was muss ich tun, um das Flip-Modell zu verwenden?

Flipmodell-Swapchains haben zusätzlich zu blt-Swapchains einige zusätzliche Anforderungen:

  1. Die Pufferanzahl muss mindestens 2 sein.
  2. Nach Present-Aufrufen muss der Backpuffer explizit erneut an den unmittelbaren Kontext D3D11 gebunden werden, bevor er erneut verwendet werden kann.
  3. Nach dem Aufruf von SetFullscreenStatemuss die Anwendung ResizeBuffers vor Present aufrufen.
  4. MSAA-Swapchains (Multisample Antialiaing) werden im Flip-Modell nicht direkt unterstützt. Daher muss die Anwendung eine MSAA-Auflösung vor der Ausgabe von Present (Vorhanden) erstellen.

Auswählen der richtigen Rendering- und Präsentationsauflösungen

Das herkömmliche Muster für Anwendungen in der Vergangenheit war es, dem Benutzer eine Liste von Auflösungen zur Auswahl zu stellen, wenn der Benutzer den exklusiven Vollbildmodus auswählt. Da moderne Displays nahtlos mit der Skalierung von Inhalten beginnen können, sollten Sie erwägen, Benutzern die Möglichkeit zu geben, unabhängig von einer Ausgabeauflösung und sogar im Fenstermodus eine Renderingauflösung für die Leistungsskalierung zu wählen. Darüber hinaus sollten Anwendungen IDXGIOutput6::CheckHardwareCompositionSupport nutzen, um zu bestimmen, ob der Inhalt vor der Präsentation skaliert werden muss oder ob die Hardware die Skalierung für sie übernehmen soll.

Ihre Inhalte müssen möglicherweise im Rahmen des aktuellen oder Kompositionsvorgang von einer GPU zu einer anderen migriert werden. Dies gilt häufig für Multi-GPU-Laptops oder Systeme mit externen GPUs, die angeschlossen sind. Da diese Konfigurationen immer häufiger verwendet werden und Sichten mit hoher Auflösung häufiger angezeigt werden, steigen die Kosten für die Darstellung einer vollständigen Auflösungs-Swapchain. Wenn das Ziel Ihrer Swapchain nicht der primäre Punkt der Benutzerinteraktion ist, wie es häufig bei VR-Titeln der Fall ist, die eine 2D-Vorschau der VR-Szene in einem sekundären Fenster präsentieren, sollten Sie erwägen, eine Swapchain mit niedrigerer Auflösung zu verwenden, um die Bandbreite zu minimieren, die über verschiedene GPUs übertragen werden muss.

Weitere Überlegungen

Wenn Sie die GPU zum ersten Mal zum Schreiben in den Swapchain-Zurück-Puffer auffordern, ist dies die Zeit, zu der die GPU auf die Verfügbare des Puffers wartet. Verzögern Sie diesen Punkt nach Möglichkeit so weit wie möglich in den Frame.