割り当ての名前を変更する要求
ユーザー モード ディスプレイ ドライバーは、アプリケーションがサーフェスをロックする要求の一部としてサーフェスのコンテンツを破棄することを示したときに、ビデオ メモリ マネージャーがサーフェスに関連付けられている割り当ての名前を変更するように要求する必要があります (頂点バッファーなど)。 Microsoft Direct3D ランタイムは Discard ビット フィールド フラグを渡して、サーフェスの現在のコンテンツが不要であることを示します。 ドライバーは、現在の割り当てがアイドル状態になるまでアプリケーション スレッドを停止するのではなく、サーフェスのコンテンツを保持している現在の割り当てがビジー状態の場合、ロック要求を処理する新しい割り当てをビデオ メモリ マネージャーに割り当てることを要求できます。
ユーザー モード ディスプレイ ドライバーは、ドライバーが pfnLockCb 関数の呼び出しで D3DDDICB_LOCKFLAGS 構造体の Discard メンバーを設定するときに、ビデオ メモリ マネージャーに割り当ての名前を変更するように要求します。 ビデオ メモリ マネージャーは、割り当ての名前を変更するか、割り当てが現在ビジーかどうかと現在のメモリ状態に基づいて、割り当てがアイドル状態になるまでアプリケーションを停止させる必要があるかどうかを判断します。 名前を変更する割り当てごとに、ビデオ メモリ マネージャーは割り当てのロックに連続して使用される割り当てのリストを保持します。 ビデオ メモリ マネージャーは、アプリケーションが割り当ての内容を破棄するたびにリストを順番に切り替えます。 リストの長さは、アプリケーションの要件とメモリ不足によって決まります。 ビデオ メモリ マネージャーは、ロック要求でアプリケーション スレッドが停止しないように、リストを十分な長さに保つよう試みます。 ただし、メモリ不足の場合、ビデオ メモリ マネージャーは、余分なメモリ不足を引き起こさないようにリストをトリミングできます。
割り当ての名前変更リストの長さに制限を課すために、ドライバーは、割り当てを作成するときに、DXGK_ALLOCATIONINFO 構造体の MaximumRenamingListLength メンバーを設定します。 ドライバーが MaximumRenamingListLength を 0 以外の値に設定した場合、ビデオ メモリ マネージャーは、ドライバーによって課される制限を超えずに名前変更リストの適切な長さを判断します。 ドライバーが MaximumRenamingListLength を 0 に設定した場合、メモリ マネージャーは、名前変更リストのサイズをパフォーマンスを向上させるために必要なサイズに増やすことができます。
ユーザー モード ディスプレイ ドライバーが D3DDDICB_LOCKFLAGS の Discard メンバーを設定する場合、ビデオ メモリ マネージャーは、元の割り当てに追加の割り当てを割り当てるためにディスプレイ ミニポート ドライバーを呼び出さないことに注意してください。 ビデオ メモリ マネージャーは、元の割り当ての作成パラメーターを使用して、追加のすべての割り当てを作成します。 ディスプレイ ミニポート ドライバーの観点からは、同じ割り当てが複数の同時セグメントの場所でページングされます。