PFND3DDDI_MAKERESIDENTCB コールバック関数 (d3dumddi.h)

pfnMakeResidentCb は、デバイス所在地リストにリソースを追加し、この割り当ての常駐参照カウントをインクリメントするように OS に指示するために使用されます。

構文

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

パラメーター

hDevice

ディスプレイ デバイスへのハンドル。

unnamedParam2

pData [in, out]

常駐させるメモリ ページを記述する D3DDDI_MAKERESIDENT 構造体へのポインター。

戻り値

pfnMakeResidentCb は、次のいずれかの値を返します。

リターン コード 説明
S_OK すべての割り当ては、この関数の終了時に GPU に常駐し、すぐにアクセスできる状態になっています。
E_PENDING 割り当てがデバイス所在地要件リストに追加されましたが、正常にアクセスできるようになる前に、完了するページング操作が保留中です。 この場合、ユーザー モード ドライバーは、割り当てを参照するコマンド バッファーを送信する前に、hPagingQueue に関連付けられている監視対象のフェンス同期オブジェクトの PagingFenceValue が通知されるまで待機する必要があります。
E_OUTOFMEMORY ビデオ メモリ マネージャーは、要求されたすべての割り当てを常駐させるわけではありません。 この場合、指定された一覧の割り当てで所在地数が変更されることはありません。 つまり、これはアトミックな操作であり、すべての割り当てによって所在地数が増加するか、いずれも増加しません。 さらに、NumBytesToTrim は、失敗した割り当てを再度常駐させる前に pfnEvictCb を呼び出すことによって、デバイス所在地要件リストからトリミングする必要があるバイト数をドライバーに示します。
アプリケーションに関連付けられているメモリ予算は、実行中のアプリケーションと非同期的に変更できます。 その結果、要求されたバイト数をトリミングしても、アプリケーションのメモリ予算が減った可能性があるため、割り当てのセットを常駐させる次の試行が成功することは保証されません。 このため、ドライバーは、要求が成功するか、ドライバーが 1 回の操作で前方に進行し、その最後の試行で必要なリソースを使用できるすべてをトリミングするまで、各イテレーション間でトリミングして、ループ内で常駐要求を試行することを確認する必要があります。 最終的な試行が失敗した場合、基になるデバイスはエラーになり、ユーザー モード ドライバーは要求を中止し、アプリケーションに戻る必要があります。 エラーが発生しているデバイスに属するコンテキストへのそれ以上の送信は、カーネルによって許可されません。
DirectX 12.0 ユーザー モード ドライバーの場合、pfnMakeResidentCb は割り当てのトリミングやページングを行う必要がなくなったため、動作が若干異なります。 これは、呼び出しから戻った後のすべての割り当ての状態が、呼び出しの前と同じであることを確認するために行われます。 つまり、関数からE_OUTOFMEMORYが返される場合は、次のようになります。
- すべての割り当ては元の状態のままです。
- 割り当てが常駐していません。
- PagingFenceValue は無視する必要があります。
リソースから割り当てへの変換に対応するために、ドライバーが複数のバッチで pfnMakeResidentCb 呼び出しを実行する必要がある場合、ドライバーは pfnEvictCb を同等の呼び出しで pfnMakeResidentCb に対する以前の呼び出しを元に戻し、エラー コードをランタイムに反映する必要があります。

要件

要件
サポートされている最小のクライアント Windows 10
サポートされている最小のサーバー Windows Server 2016
対象プラットフォーム デスクトップ
Header d3dumddi.h (D3dumddi.h を含む)

こちらもご覧ください

D3DDDI_MAKERESIDENT

pfnEvictCb