ID3D11DeviceContext:Flush-Methode (d3d11.h)

Sendet Befehle in der Warteschlange im Befehlspuffer an die Grafikverarbeitungseinheit (GRAPHICS Processing Unit, GPU).

Syntax

void Flush();

Rückgabewert

Keine

Bemerkungen

Die meisten Anwendungen müssen diese Methode nicht aufrufen. Wenn eine Anwendung diese Methode aufruft, wenn dies nicht erforderlich ist, kommt es zu Leistungseinbußen. Jeder Aufruf von Flush verursacht einen erheblichen Mehraufwand.

Wenn Microsoft Direct3D-Befehle zum Festlegen, Präsentieren oder Zeichnen von einer Anwendung aufgerufen werden, werden diese Befehle in einer Warteschlange in einen internen Befehlspuffer eingereiht. Flush sendet diese Befehle zur Verarbeitung an die GPU. In der Regel sendet die Direct3D-Runtime diese Befehle automatisch an die GPU, wenn die Runtime feststellt, dass sie gesendet werden müssen, z. B. wenn der Befehlspuffer voll ist oder wenn eine Anwendung eine Ressource ordnet. Flush sendet die Befehle manuell.

Es wird empfohlen, Flush zu verwenden, wenn die CPU eine beliebige Zeit wartet (z. B. wenn Sie die Standbyfunktion aufrufen).

Da Flush asynchron arbeitet, kann es entweder vor oder nach Abschluss der GPU-Ausführung der Grafikbefehle in der Warteschlange zurückgeben. Die Grafikbefehle sind jedoch letztendlich immer abgeschlossen. Sie können die ID3D11Device::CreateQuery-Methode mit dem D3D11_QUERY_EVENT-Wert aufrufen, um eine Ereignisabfrage zu erstellen. Sie können diese Ereignisabfrage dann in einem Aufruf der ID3D11DeviceContext::GetData-Methode verwenden, um zu bestimmen, wann die GPU die Verarbeitung der Grafikbefehle abgeschlossen hat.

Microsoft Direct3D 11 verschiebt die Zerstörung von Objekten. Daher kann sich eine Anwendung nicht darauf verlassen, dass Objekte sofort zerstört werden. Durch Aufrufen von Flush zerstören Sie alle Objekte, deren Zerstörung verzögert wurde. Wenn eine Anwendung eine synchrone Zerstörung eines Objekts erfordert, wird empfohlen, dass die Anwendung alle Verweise freigeben, ID3D11DeviceContext::ClearState aufrufen und dann Flush aufrufen.

Probleme mit verzögerter Zerstörung bei Wechselketten für Flip-Präsentationen

Direct3D 11 verschiebt die Zerstörung von Objekten wie Ansichten und Ressourcen, bis sie effizient zerstört werden können. Diese verzögerte Zerstörung kann Probleme mit Wechselketten des Flip-Präsentationsmodells verursachen. In Swapchains des Flip-Präsentationsmodells ist das flag DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL festgelegt. Wenn Sie eine Wechselkette des Flip-Präsentationsmodells erstellen, können Sie einer HWND-, IWindow- oder Kompositionsoberfläche jeweils nur eine Swapchain zuordnen. Wenn eine Anwendung versucht, eine Wechselkette des Flip-Präsentationsmodells zu zerstören und durch eine andere Swapchain zu ersetzen, wird die ursprüngliche Swapkette nicht zerstört, wenn die Anwendung sofort alle Verweise der ursprünglichen Swapchain freigibt.

Die meisten Anwendungen verwenden in der Regel die IDXGISwapChain::ResizeBuffers-Methode für die meisten Szenarien, in denen sie neue Swap chain-Puffer für alte Swapchainpuffer ersetzen. Wenn eine Anwendung jedoch tatsächlich eine alte Swap chain zerstören und eine neue Swap chain erstellen muss, muss die Anwendung die Zerstörung aller Objekte erzwingen, die die Anwendung freigegeben hat. Um die Zerstörung zu erzwingen, rufen Sie ID3D11DeviceContext::ClearState auf (oder stellen Sie anderweitig sicher, dass keine Ansichten an den Pipelinezustand gebunden sind), und rufen Sie dann Flush im unmittelbaren Kontext auf. Sie müssen die Zerstörung erzwingen, bevor Sie IDXGIFactory2::CreateSwapChainForHwnd, IDXGIFactory2::CreateSwapChainForCoreWindow oder IDXGIFactory2::CreateSwapChainForComposition erneut aufrufen, um eine neue Swap chain zu erstellen.

Anforderungen

   
Zielplattform Windows
Kopfzeile d3d11.h
Bibliothek D3D11.lib

Weitere Informationen

ID3D11DeviceContext