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