PFND3DDDI_QUERYRESOURCERESIDENCY回调函数 (d3dumddi.h)

QueryResourceResidency 函数确定给定资源列表的驻留。

语法

PFND3DDDI_QUERYRESOURCERESIDENCY Pfnd3dddiQueryresourceresidency;

HRESULT Pfnd3dddiQueryresourceresidency(
  HANDLE hDevice,
  const D3DDDIARG_QUERYRESOURCERESIDENCY *unnamedParam2
)
{...}

参数

hDevice

显示设备的句柄 (图形上下文) 。

unnamedParam2

pData [in]

指向 D3DDDIARG_QUERYRESOURCERESIDENCY 结构的指针,该结构描述验证驻留的资源列表。

返回值

QueryResourceResidency 返回以下值之一:

返回代码 说明
S_OK 所有资源都位于 GPU 可访问的内存中。
S_RESIDENT_IN_SHARED_MEMORY 磁盘上没有构成资源的分配。 但是,至少有一个分配不在 GPU 可访问的内存中。
S_NOT_RESIDENT 磁盘上至少有一个包含资源的分配。
E_INVALIDARG 参数已验证,确定为不正确。
E_OUTOFMEMORY QueryResourceResidency 无法分配完成它所需的内存。

注解

Microsoft Direct3D 运行时为应用程序调用用户模式显示驱动程序的 QueryResourceResidency 函数,以确定如果系统必须使资源可供 GPU 访问,操作系统是否会在绘图时产生严重停滞。 从 QueryResourceResidency 返回的信息是资源驻留的近似值,因为资源可能会在应用程序使用资源之前降级。

用户模式显示驱动程序的 QueryResourceResidency 函数必须调用 pfnQueryResidencyCb 函数。 pfnQueryResidencyCb 函数返回由D3DDDICB_QUERYRESIDENCY结构的 pResidencyStatus 成员指定的数组元素中的资源的驻留状态。 如果 pfnQueryResidencyCb 对任何查询返回D3DDDI_RESIDENCYSTATUS_NOTRESIDENT, 则 QueryResourceResidency 必须返回S_NOT_RESIDENT。 如果 pfnQueryResidencyCb 对任何查询返回D3DDDI_RESIDENCYSTATUS_RESIDENTINSHAREDMEMORY,并且不返回任何查询的D3DDDI_RESIDENCYSTATUS_NOTRESIDENT, 则 QueryResourceResidency 必须返回S_RESIDENT_IN_SHARED_MEMORY。 仅当所有查询对 pfnQueryResidencyCb 的所有调用都返回D3DDDI_RESIDENCYSTATUS_RESIDENTINGPUMEMORY时,QueryResourceResidency 必须返回S_OK。

对于运行时通过对 QueryResourceResidency 的调用查询的每个资源,用户模式显示驱动程序必须确定要通过调用 pfnQueryResidencyCb 查询属于该资源的分配。 对于拥有单个分配的资源,确定很简单 -- 驱动程序将查询该分配。 但是,如果资源拥有多个分配,则更难确定。 驱动程序必须确定应用程序可能用于呈现的分配,并且驱动程序必须仅查询这些分配。 例如,如果资源拥有用于呈现的分配和处理锁定操作的暂存分配,则驱动程序应仅查询第一个分配的驻留,因为应用程序很可能不使用第二个分配进行呈现。

注意 由于运行时不支持系统内存资源的驻留查询,因此运行时始终会失败应用程序中的系统内存资源的驻留状态请求,并且永远不会对这些系统内存资源调用用户模式显示驱动程序的 QueryResourceResidency 函数。
 

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 桌面
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

D3DDDIARG_QUERYRESOURCERESIDENCY

D3DDDICB_QUERYRESIDENCY

D3DDDI_DEVICEFUNCS

pfnQueryResidencyCb