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进行查询。 对于拥有单个分配的资源,确定很简单-驱动程序将查询该分配。 但是,如果资源拥有多个分配,则确定难度更大。 驱动程序必须确定应用程序可能用于呈现的分配,并且驱动程序必须仅查询这些分配。 例如,如果资源拥有用于呈现的分配和处理锁定作的暂存分配,驱动程序应仅查询第一个分配的驻留,因为应用程序很可能不会使用第二个分配进行呈现。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |