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 或 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) |