ID3D11DeviceCoNtext::Flush 方法 (d3d11.h)

將命令緩衝區中的佇列命令傳送至圖形處理單位, (GPU) 。

Syntax

void Flush();

傳回值

備註

大部分的應用程式不需要呼叫這個方法。 如果應用程式在必要時呼叫此方法,就會造成效能損失。 每次呼叫 Flush 都會產生大量的額外負荷。

當應用程式呼叫 Microsoft Direct3D 狀態設定、呈現或繪製命令時,這些命令會排入內部命令緩衝區。 Flush 會將這些命令傳送至 GPU 進行處理。 一般而言,每當執行時間判斷需要傳送命令時,Direct3D 執行時間會自動將這些命令傳送至 GPU,例如當命令緩衝區已滿或應用程式對應資源時。 Flush 會手動傳送命令。

建議您在 CPU 等候任意時間量 (時使用 Flush ,例如呼叫 Sleep 函式) 。

由於 Flush 會以非同步方式運作,因此可以在 GPU 執行佇列圖形命令之前或之後傳回 。 不過,圖形命令最終一律會完成。 您可以使用D3D11_QUERY_EVENT值呼叫ID3D11Device::CreateQuery方法來建立事件查詢;接著,您可以在ID3D11DeviceCoNtext::GetData方法的呼叫中使用該事件查詢,以判斷 GPU 處理圖形命令的時機。

Microsoft Direct3D 11 會延遲物件的解構。 因此,應用程式無法依賴立即終結的物件。 藉由呼叫 Flush,您可以終結任何延後解構的物件。 如果應用程式需要物件的同步解構,建議應用程式釋放其所有參考、呼叫 ID3D11DeviceCoNtext::ClearState,然後呼叫 Flush

翻轉簡報交換鏈結的延遲解構問題

Direct3D 11 會延遲檢視和資源等物件的解構,直到可以有效率地終結它們為止。 此延後解構可能會導致翻轉簡報模型交換鏈結的問題。 翻轉簡報模型交換鏈結已設定 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 旗標。 當您建立翻轉簡報模型交換鏈結時,一次只能將一個交換鏈結與 HWNDIWindow或組合表面產生關聯。 如果應用程式嘗試終結翻轉簡報模型交換鏈結,並將它取代為另一個交換鏈結,當應用程式立即釋放所有原始交換鏈結的參考時,不會終結原始交換鏈結。

大部分的應用程式通常會針對大部分案例使用 IDXGISwapChain::ResizeBuffers 方法,其中會取代舊交換鏈結緩衝區的新交換鏈結緩衝區。 不過,如果應用程式必須實際終結舊的交換鏈結並建立新的交換鏈結,應用程式必須強制解構應用程式釋放的所有物件。 若要強制解構,請呼叫 ID3D11DeviceCoNtext::ClearState (,否則請確定沒有任何檢視系結至管線狀態) ,然後在立即的內容上呼叫 Flush 。 您必須先強制解構,才能再次呼叫 IDXGIFactory2::CreateSwapChainForHwndIDXGIFactory2::CreateSwapChainForCoreWindowIDXGIFactory2::CreateSwapChainForComposition 來建立新的交換鏈結。

規格需求

   
目標平台 Windows
標頭 d3d11.h
程式庫 D3D11.lib

另請參閱

ID3D11DeviceContext