PFND3DDDI_QUERYRESIDENCYCB回呼函式 (d3dumddi.h)
pfnQueryResidencyCb 函式會查詢資源或配置清單的落地狀態。
語法
PFND3DDDI_QUERYRESIDENCYCB Pfnd3dddiQueryresidencycb;
HRESULT Pfnd3dddiQueryresidencycb(
HANDLE hDevice,
const D3DDDICB_QUERYRESIDENCY *unnamedParam2
)
{...}
參數
hDevice
顯示裝置的句柄(圖形內容)。
unnamedParam2
pData [in, out]
D3DDDICB_QUERYRESIDENCY 結構的指標,描述資源或配置清單的落地狀態。
傳回值
pfnQueryResidencyCb 會傳回下列其中一個值:
傳回碼 | 描述 |
---|---|
S_OK | 已成功傳回落地狀態。 |
E_INVALIDARG | 已驗證參數,並判斷為不正確。 |
此函式也可能傳回其他 HRESULT 值。
言論
使用者模式顯示驅動程式可以呼叫 pfnQueryResidencyCb 函式,以透過資源或配置清單來查詢配置的落地狀態。 如果驅動程式透過資源查詢配置落地狀態,則會查詢屬於資源的所有配置。 使用者模式顯示驅動程式通常會在 Microsoft Direct3D 運行時間呼叫使用者模式的 QueryResourceResidency QueryResourceResidency 或 QueryResourceResidencyDXGI 函式來判斷資源的落地之後,資源或配置列表的落地。 不過,使用者模式顯示驅動程式可以隨時查詢資源或配置清單的落地。
例子
下列程式代碼範例示範如何查詢落地狀態。
HRESULT
CD3DContext::QueryResourceResidency(CONST D3DDDIARG_QUERYRESOURCERESIDENCY* pQRR)
{
D3DDDICB_QUERYRESIDENCY queryRes;
D3DDDI_RESIDENCYSTATUS resStatus = (D3DDDI_RESIDENCYSTATUS)0;
HRESULT hr;
BOOL bPartInSharedMem = FALSE;
for (UINT i = 0; i < pQRR->NumResources; i++) {
memset(&queryRes, 0, sizeof(queryRes));
queryRes.hResource = m_RTbl[(DWORD)(DWORD_PTR)pQRR->pHandleList[i]].m_hResRuntime;
if (! queryRes.hResource) {
return (DDERR_INVALIDPARAMS);
}
queryRes.pResidencyStatus = &resStatus;
hr = m_d3dCallbacks.pfnQueryResidencyCb(m_hD3D, &queryRes);
if (FAILED(hr)) {
return (hr);
}
switch (resStatus) {
case D3DDDI_RESIDENCYSTATUS_NOTRESIDENT:
return S_NOT_RESIDENT;
case D3DDDI_RESIDENCYSTATUS_RESIDENTINSHAREDMEMORY:
bPartInSharedMem = TRUE;
break;
case D3DDDI_RESIDENCYSTATUS_RESIDENTINGPUMEMORY:
break;
default:
return DDERR_GENERIC;
}
}
if (bPartInSharedMem) {
return S_RESIDENT_IN_SHARED_MEMORY;
}
else {
return S_OK;
}
}
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 可在 Windows Vista 和更新版本的 Windows作系統中使用。 |
目標平臺 | 桌面 |
標頭 | d3dumddi.h (包括 D3dumddi.h) |