ID3D11DeviceContext::Flush メソッド (d3d11.h)

コマンド バッファー内のキューに登録されたコマンドをグラフィックス処理装置 (GPU) に送信します。

構文

void Flush();

戻り値

なし

解説

ほとんどのアプリケーションでは、このメソッドを呼び出す必要はありません。 アプリケーションが不要な場合にこのメソッドを呼び出すと、パフォーマンスが低下します。 Flush を呼び出すたびに、かなりのオーバーヘッドが発生します。

Microsoft Direct3D の状態設定、現在、または描画のコマンドがアプリケーションによって呼び出されると、これらのコマンドは内部コマンド バッファーにキューに入れられます。 Flush は、処理のためにこれらのコマンドを GPU に送信します。 通常、Direct3D ランタイムは、コマンド バッファーがいっぱいの場合やアプリケーションがリソースをマップするときなど、ランタイムが送信する必要があると判断するたびに、これらのコマンドを GPU に自動的に送信します。 Flush はコマンドを手動で送信します。

CPU が任意の時間 (Sleep 関数を呼び出す場合など) を待機する場合は、Flush を使用することをお勧めします。

Flush は非同期的に動作するため、GPU がキューに登録されたグラフィックス コマンドの実行を完了する前または後に を返すことができます。 ただし、グラフィックス コマンドは最終的に常に完了します。 ID3D11Device::CreateQuery メソッドをD3D11_QUERY_EVENT値で呼び出して、イベント クエリを作成できます。その後、ID3D11DeviceContext::GetData メソッドの呼び出しでそのイベント クエリを使用して、GPU がグラフィックス コマンドの処理を完了したタイミングを判断できます。

Microsoft Direct3D 11 は、オブジェクトの破棄を延期します。 そのため、アプリケーションはすぐに破棄されるオブジェクトに依存することはできません。 Flush を呼び出すと、破棄が延期されたすべてのオブジェクトが破棄されます。 アプリケーションでオブジェクトの同期破棄が必要な場合は、アプリケーションですべての参照を解放し、 ID3D11DeviceContext::ClearState を呼び出してから Flush を呼び出すようにお勧めします。

フリップ プレゼンテーション スワップ チェーンに関する遅延破壊の問題

Direct3D 11 は、ビューやリソースなどのオブジェクトを効率的に破棄できるようになるまで、オブジェクトの破棄を延期します。 この遅延破棄により、フリップ プレゼンテーション モデルのスワップ チェーンに問題が発生する可能性があります。 フリップ プレゼンテーション モデルのスワップ チェーンには 、DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL フラグが設定されています。 フリップ プレゼンテーション モデルのスワップ チェーンを作成する場合、一度に関連付けることができるスワップ チェーンは 、HWNDIWindow、またはコンポジション サーフェスに 1 つだけです。 アプリケーションがフリップ プレゼンテーション モデルのスワップ チェーンを破棄して別のスワップ チェーンに置き換えようとした場合、元のスワップ チェーンが元のスワップ チェーンの参照をすべてすぐに解放しても、元のスワップ チェーンは破棄されません。

ほとんどのアプリケーションでは、通常、古いスワップ チェーン バッファーの新しいスワップ チェーン バッファーを置き換えるシナリオの大半に IDXGISwapChain::ResizeBuffers メソッドを使用します。 ただし、アプリケーションが実際に古いスワップ チェーンを破棄し、新しいスワップ チェーンを作成する必要がある場合、アプリケーションは、アプリケーションが解放したすべてのオブジェクトを強制的に破棄する必要があります。 破棄を強制するには、 ID3D11DeviceContext::ClearState を呼び出し (または、ビューがパイプライン状態にバインドされていないことを確認します)、イミディエイト コンテキストで Flush を呼び出します。 新しいスワップ チェーンを作成するには、 IDXGIFactory2::CreateSwapChainForHwndIDXGIFactory2::CreateSwapChainForCoreWindow、または IDXGIFactory2::CreateSwapChainForComposition を再度呼び出す前に、強制的に破棄する必要があります。

必要条件

   
対象プラットフォーム Windows
ヘッダー d3d11.h
Library D3D11.lib

関連項目

ID3D11DeviceContext