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 (包括 D3dumddi.h) |