ビデオ メモリ リソースのページング
Microsoft Windows 2000 ディスプレイ ドライバー モデルとは異なり、Windows Vista ディスプレイ ドライバー モデルを使用すると、使用可能な物理ビデオ メモリの合計量よりも多くのビデオ メモリ リソースを作成でき、必要に応じてビデオ メモリのページングが行われます。 つまり、すべてのビデオ メモリ リソースが同時にビデオ メモリに格納されているわけではありません。
GPU は、パイプラインに複数の DMA バッファーを含めることができます。 これらのアクティブな DMA バッファーによって参照されるビデオ メモリ リソースは、ビデオ メモリ内にある必要があります。 その他のアイドル状態のビデオ メモリ リソースは、システム メモリにページアウトされる可能性があります。
GPU スケジューラがディスプレイ ミニポート ドライバーの DxgkDdiSubmitCommand 関数を呼び出して DMA バッファーを GPU に送信する前に、スケジューラは DMA バッファーで使用されるすべてのビデオ メモリ リソースが実際にビデオ メモリ内にあることを確認する必要があります。 一部のリソースがビデオ メモリにない場合は、システム メモリからページインする必要があります。 GPU スケジューラは、ビデオ メモリ マネージャーを呼び出してビデオ メモリ内の領域を検索し、必要なビデオ メモリ リソース データをシステム メモリからビデオ メモリに転送する必要があります。 ビデオ メモリの需要が高い場合、GPU スケジューラはビデオ メモリ マネージャーを呼び出して、アイドル状態のビデオ メモリ リソース データをシステム メモリに転送して、必要なビデオ メモリ リソース データの空き容量を作る必要があります。 ビデオ メモリとシステム メモリの間でデータを転送するためのコマンドを含む特殊な用途の DMA バッファーは、ページング バッファーと呼ばれます。 ビデオ メモリ マネージャーは、ディスプレイ ミニポート ドライバーの DxgkDdiBuildPagingBuffer 関数を呼び出して、ドライバーがハードウェア固有のデータ転送コマンドを書き込むページング バッファーを作成します。