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