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 收到訊號,才能提交參考配置或 GPU 頁面錯誤的命令緩衝區。
E_OUTOFMEMORY 視訊記憶體管理員無法對每個要求的配置進行駐留。 發生這種情況時,提供清單中的配置不會看到其落地計數已修改。 換句話說,這是不可部分完成的作業,其中所有配置都會增加其落地計數,或不會增加它們。 此外,NumBytesToTrim 會藉由呼叫 pfnEvictCb,在嘗試重新進行失敗的配置之前,從裝置落地需求清單中修剪多少個字節給驅動程式。
與應用程式相關聯的記憶體預算可以隨著執行的應用程式以異步方式變更。 因此,修剪要求的位元組數目不保證下一次嘗試讓一組駐留的配置成功,因為應用程式的記憶體預算可能會減少。 由於此驅動程式應該確保它會嘗試在迴圈中嘗試落地要求、在每個反覆項目之間修剪,直到要求成功或驅動程式已修剪所有專案,才能在單一作業上進行向前進度,並在最後一次嘗試時使用所需的資源。 如果最終嘗試失敗,基礎裝置將會處於錯誤狀態,而且使用者模式驅動程序應該中止要求並返回應用程式。 核心不允許對屬於裝置的任何內容進行進一步提交。
針對 DirectX 12.0 使用者模式驅動程式,pfnMakeResidentCb 的行為稍有不同,因為它不再負責修剪或分頁配置。 這是為了確保從呼叫傳回之後的所有配置狀態與呼叫之前的狀態相同。 這表示如果從函式傳回E_OUTOFMEMORY:
- 所有配置都維持在原始狀態。
- 配置並未進行常駐。
- 應該忽略 PagingFenceValue。
如果驅動程式需要在多個批次中執行 pfnMakeResidentCb 呼叫,以容納資源對配置轉譯,驅動程式應該復原 pfnMakeResidentCb 的任何先前呼叫,並以對 pfnEvictCb 的對等呼叫,並將錯誤碼傳播回運行時間。

規格需求

需求
最低支援的用戶端 Windows 10
最低支援的伺服器 Windows Server 2016
目標平台 桌面
標頭 d3dumddi.h (include D3dumddi.h)

另請參閱

D3DDDI_MAKERESIDENT

pfnEvictCb