構文
パラメーター
NumObjects型: UINT デバイスに対して常駐状態にする ppObjects 配列内のオブジェクトの数。 ppObjects [in]
型: ID3D12Pageable *const * オブジェクトの ID3D12Pageable インターフェイス ポインターの配列を含むメモリ ブロックへのポインター。 ほとんどの D3D12 オブジェクトは ID3D12Pageable から継承しますが、常駐性の変更は次のオブジェクトでのみサポートされます: デスクリプター ヒープ、ヒープ、コミット済みリソース、およびクエリ ヒープ。
戻り値
型: HRESULT このメソッドは Direct3D 12 の戻りコード のいずれかを返します。解説
MakeResident は、リソースに関連付けられたデータをディスクからロードし、リソースの適切なメモリ プールからメモリを再割り当てします。このメソッドは、物理メモリを所有するオブジェクトに対して呼び出す必要があります。 このメソッドと Evict を使用して GPU ビデオ メモリを管理します。これは D3D11 では自動的に行われていましたが、D3D12 ではアプリで行う必要があります。 MakeResident と Evict は、多くのアダプターで常駐予算の管理をアプリケーションが行うのに役立ちます。MakeResident は、明示的にデータをページインし、GPU がデータにアクセスできるようにページアウトを阻止します。Evict はページアウトを有効にします。 一部の GPU アーキテクチャでは、十分な GPU 仮想アドレス空間がないため、常駐性の操作の恩恵を受けません。プロセスあたりの最大 GPU VA 空間が常駐予算より小さいか、ほぼ同じサイズの場合を認識するには、D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT および IDXGIAdapter3::QueryVideoMemoryInfo を使用します。そのようなアーキテクチャでは、常駐予算は常に GPU 仮想アドレス空間の量によって制約されます。Evict は、そのようなシステムでは常駐予算を解放しません。 十分な常駐予算があるように見えても、アプリケーションは MakeResident の失敗を処理する必要があります。物理メモリの断片化とアダプター アーキテクチャの癖により、大きな連続した範囲の使用が阻止されることがあります。アプリケーションは、再試行する前により多くの常駐予算を解放する必要があります。 MakeResident は参照カウントされており、Evict が効果を発揮する前に、MakeResident と同じ回数だけ Evict を呼び出す必要があります。常駐性をサポートするオブジェクトは作成中に常駐状態にされるため、単一の Evict 呼び出しで実際にオブジェクトが排除されます。 アプリケーションは、フェンスを使用して GPU が非常駐オブジェクトを使用しないことを保証する必要があります。MakeResident は、GPU がオブジェクトを参照するコマンド リストを実行する前に返される必要があります。Evict は、GPU がオブジェクトを参照するコマンド リストの実行を完了した後に呼び出す必要があります。 排除されたオブジェクトは依然として同じ GPU 仮想アドレスと同じ量の GPU 仮想アドレス空間を消費します。したがって、リソース記述子およびその他の GPU 仮想アドレス参照は Evict の後に無効化されません。要件
ヘッダー: d3d12_xs.h または d3d12_x.hライブラリ: d3d12_xs.lib または d3d12_x.lib
サポートされているプラットフォーム: XBOX Series 本体および XBOX One ファミリ
