ID3D12Device::MakeResident メソッド (d3d12.h)
デバイスにオブジェクトを常駐させます。
構文
HRESULT MakeResident(
UINT NumObjects,
[in] ID3D12Pageable * const *ppObjects
);
パラメーター
NumObjects
型: UINT
デバイスに常駐させる ppObjects 配列内のオブジェクトの数。
[in] ppObjects
種類: ID3D12Pageable*
オブジェクトの ID3D12Pageable インターフェイス ポインターの配列を含むメモリ ブロックへのポインター。
ほとんどの D3D12 オブジェクトは ID3D12Pageable から継承されますが、所在地の変更は、記述子ヒープ、ヒープ、コミットされたリソース、クエリ ヒープの各オブジェクトでのみサポートされます。
戻り値
種類: HRESULT
このメソッドは、Direct3D 12リターン コードのいずれかを返します。
注釈
MakeResident は 、リソースに関連付けられているデータをディスクから読み込み、リソースの適切なメモリ プールからメモリを再割り当てします。 このメソッドは、物理メモリを所有する オブジェクトで呼び出す必要があります。
このメソッドと Evict を使用して GPU ビデオ メモリを管理します。これは D3D11 で自動的に行われましたが、D3D12 のアプリで行う必要があります。
MakeResident と Evict は、アプリケーションが多くのアダプターで所在地の予算を管理するのに役立ちます。 MakeResident は明示的にデータをページインし、GPU がデータにアクセスできるようにページアウトを除外します。 Evict を使用すると、ページアウトが有効になります。
一部の GPU アーキテクチャでは、十分な GPU 仮想アドレス空間がないため、常駐操作の恩恵を受けられません。 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTと IDXGIAdapter3::QueryVideoMemoryInfo を使用して、プロセスあたりの GPU VA 領域の上限が狭すぎるか、所在地の予算とほぼ同じサイズであることを認識します。 このようなアーキテクチャでは、所在地の予算は常に GPU 仮想アドレス空間の量によって制限されます。 削除は 、そのようなシステム上の常駐予算を解放しません。
利用可能な十分な所在地予算がある場合でも、アプリケーションは MakeResident エラーを処理する必要があります。 物理メモリの断片化とアダプター アーキテクチャの違いにより、大きな連続した範囲の使用率が妨げられる可能性があります。 アプリケーションは、もう一度試す前に、より多くの所在地予算を解放する必要があります。
MakeResident は参照カウントされ、Evict が有効になる前に、Evict を MakeResident と同じ回数呼び出す必要があります。 常駐をサポートするオブジェクトは作成時に常駐状態になるため、1 回の Evict 呼び出しでオブジェクトが実際に削除されます。
アプリケーションでは、GPU で非常駐オブジェクトが使用されないようにフェンスを使用する必要があります。 MakeResident は、GPU が オブジェクトを参照するコマンド リストを実行する前に を返す必要があります。 オブジェクトを参照するコマンド リストの実行が GPU によって終了した後で、Evict を呼び出す必要があります。
削除されたオブジェクトは、引き続き同じ GPU 仮想アドレスと同じ量の GPU 仮想アドレス空間を使用します。 したがって、リソース記述子とその他の GPU 仮想アドレス参照は、 Evict 後に無効になりません。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | d3d12.h |
Library | D3D12.lib |
[DLL] | D3D12.dll |