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: - 所有分配都保持其原始状态。 - 分配不是居民。 - 应忽略分页FenceValue。 如果驱动程序需要在多个批处理中执行 pfnMakeResidentCb 调用以适应资源到分配转换,驱动程序应撤消对 pfnMakeResidentCb 的任何先前调用,并调用 pfnEvictCb,并将错误代码传播回运行时。 |
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 |
支持的最低服务器 | Windows Server 2016 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |