PFND3DDDI_SETPRIORITYCB回调函数 (d3dumddi.h)

pfnSetPriorityCb 函数设置资源或分配列表的优先级。

语法

PFND3DDDI_SETPRIORITYCB Pfnd3dddiSetprioritycb;

HRESULT Pfnd3dddiSetprioritycb(
  HANDLE hDevice,
  D3DDDICB_SETPRIORITY *unnamedParam2
)
{...}

参数

hDevice

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

unnamedParam2

pData [in]

指向 D3DDDICB_SETPRIORITY 结构的指针,该结构描述要设置资源或分配列表的优先级。

返回值

pfnSetPriorityCb 返回以下值之一:

返回代码 描述
S_OK 已成功设置优先级。
E_INVALIDARG 参数已验证并确定不正确。

此函数还可以返回其他 HRESULT 值。

言论

用户模式显示驱动程序可以调用 pfnSetPriorityCb 函数来设置基础资源或分配列表的优先级。 如果设置了资源的优先级级别,则属于该资源的所有分配都设置为指定的优先级级别。 通常,用户模式显示驱动程序在 Microsoft Direct3D 运行时调用用户模式显示驱动程序的 SetPrioritySetResourcePriorityDXGI 函数后设置资源或分配列表的优先级,以设置资源的逐出-内存优先级。 但是,用户模式显示驱动程序可以随时设置分配的优先级。

应用程序请求设置图面的优先级后,用户模式显示驱动程序应将适当的资源或分配列表设置为应用程序指定的优先级。

注意 优先级只是视频内存管理器的提示;内存管理器可以在各种条件下忽略它们。
 
分配优先级定义了分配保持驻留的可能性,以及视频内存管理器尝试尊重驱动程序对分配放置偏好的可能性。 以下优先级在 D3dukmdt.h 头文件中定义:

驱动程序可以在适当时使用上述定义的值以外的优先级级别。 例如,使用优先级0x78000001标记分配表示分配略高于正常。

例子

下面的代码示例演示如何设置优先级。

HRESULT CD3DContext::SetPriority(CONST D3DDDIARG_SETPRIORITY* pSetPriority) {
    DWORD  dwSurfaceHandle = (DWORD)(DWORD_PTR)pSetPriority->hResource;
    CResource   &res = m_RTbl[dwSurfaceHandle];
    D3DDDICB_SETPRIORITY    setPri;
    UINT                    priority;

    priority = pSetPriority->Priority;

    memset(&setPri, 0, sizeof(setPri));

    setPri.hResource   = res.m_hResRuntime;
    setPri.pPriorities = &priority;

    return (m_d3dCallbacks.pfnSetPriorityCb(m_hD3D, &setPri));
}

要求

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

另请参阅

D3DDDICB_SETPRIORITY

D3DDDI_DEVICECALLBACKS

DxgkCbCreateContextAllocation

SetPriority

SetResourcePriorityDXGI