ID3D11DeviceContext2::ResizeTilePool メソッド (d3d11_2.h)
タイル プールのサイズを変更します。
構文
HRESULT ResizeTilePool(
[in] ID3D11Buffer *pTilePool,
[in] UINT64 NewSizeInBytes
);
パラメーター
[in] pTilePool
種類: ID3D11Buffer*
タイル プールのサイズを変更するための ID3D11Buffer へのポインター。
[in] NewSizeInBytes
型: UINT64
タイル プールの新しいサイズ (バイト単位)。 サイズは 64 KB または 0 の倍数である必要があります。
戻り値
種類: HRESULT
成功した場合はS_OKを返します。それ以外の場合は、次のいずれかを返します。
- 新しいタイル プール サイズが 64 KB または 0 の倍数でない場合は、E_INVALIDARGを返します。
- 呼び出しの結果、ドライバーが新しいページ テーブル マッピング用に領域を割り当てる必要があるが、メモリ不足が発生した場合は、 E_OUTOFMEMORY を返します。
- ビデオ カードがシステムから物理的に削除された場合、またはビデオ カードのドライバーのアップグレードが発生した場合にDXGI_ERROR_DEVICE_REMOVEDを返します。
注釈
ResizeTilePool は、アプリにマップされているタイル リソースに対して多かれ少なかれワーキング セットが必要かどうかに応じて、タイル プールのサイズを増減します。 アプリは新しいタイル リソースに追加のタイル プールを割り当てることができますが、タイル プールで最初に使用できる領域よりもタイル リソースが 1 つ以上必要な場合は、リソースのタイル プールのサイズを増やすことができます。 タイル リソースは、複数のタイル プールに同時にマッピングすることはできません。
タイル プールのサイズを大きくすると、ドライバーによって 1 つ以上の新しい割り当てを使用してタイル プールの末尾にタイルが追加されます。アプリは、新しい割り当ての内訳を検出できません。 タイル プール内の既存のメモリは変更されず、そのメモリへの既存のタイル リソース マッピングはそのまま残ります。
タイル プールのサイズを小さくすると、タイルは末尾から削除されます (これは初期割り当てサイズを下回っても 0 まで許可されます)。 つまり、新しいサイズを超えて新しいマッピングを作成することはできません。 ただし、新しいサイズの最後を超える既存のマッピングはそのまま残り、使用できます。 タイル プール メモリに使用されている割り当ての任意の部分へのマッピングが残っている限り、メモリはアクティブなままです。 減少した後も、タイル マッピングがポイントされ、タイル プールが (任意の量だけ) 再び増加するため、一部のメモリがアクティブなままになっている場合は、増加のサイズに対応するために追加の割り当てが行われる前に、既存のメモリが最初に再利用されます。
メモリを節約するには、アプリでタイル プールを減らすだけでなく、新しい小さいタイル プール サイズの末尾を越えて既存のマッピングを削除して再マップする必要があります。
減らす (マッピングを削除する) 行為は、必ずしもすぐにメモリを節約できるとは限りません。 メモリの解放は、タイル プールに対するドライバーの基になる割り当ての粒度によって異なります。 タイル プールのサイズが小さくなり、ドライバーの割り当てを使用できなくなると、ドライバーは割り当てを解放できます。 タイル プールが増加し、以前のサイズに減らした場合 (タイル マッピングを削除して再マップする) 場合は、メモリ節約が発生する可能性が最も高くなります。 ただし、サイズがドライバーによって選択された基になる割り当てサイズと正確に一致しない場合、このシナリオは保証されません。
タイルリソースの詳細については、「 タイルリソース」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1 [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2012 R2 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | d3d11_2.h |
Library | D3D11.lib |