PFND3DDDI_UNLOCKCB回调函数 (d3dumddi.h)

pfnUnlockCb 函数解锁通过调用 pfnLockCb 函数锁定的分配。

语法

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

HRESULT Pfnd3dddiUnlockcb(
  HANDLE hDevice,
  const D3DDDICB_UNLOCK *unnamedParam2
)
{...}

参数

hDevice

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

unnamedParam2

pData [in]

指向描述要解锁的分配的 D3DDDICB_UNLOCK 结构的指针。

返回值

pfnUnlockCb 返回以下值之一:

返回代码 描述
S_OK 分配已成功解锁。
E_OUTOFMEMORY pfnUnlockCb 由于内存不足而无法完成。 (当系统内存非常低且没有足够的空间来分配页面数组时,会发生此错误。
E_INVALIDARG 参数已验证并确定不正确。

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

言论

用户模式显示驱动程序必须调用 pfnUnlockCb 函数,才能解锁以前在调用 pfnLockCb 函数时锁定的分配。 如果驱动程序未调用 pfnUnlockCb,则Microsoft Direct3D 运行时、用户模式显示驱动程序和显示微型端口驱动程序之间的协调将丢失。

用户模式显示驱动程序通常调用 pfnUnlockCb,以响应其 解锁ResourceUnmap 函数(或 ResourceUnmap 的其他变体(如 DynamicIABufferUnmap)来解锁资源或资源中的图面。 在从 解锁ResourceUnmap 调用返回之前,用户模式显示驱动程序必须先将资源或图面映射到相应的分配,然后调用 pfnUnlockCb 解锁分配。

用户模式显示驱动程序还可以调用 pfnUnlockCb,以响应对其 DestroyDeviceDestroyDevice(D3D10) 函数的调用,以释放为设备分配的所有资源。 在设备的生存期内,每次调用 pfnLockCb 以锁定分配时,都必须与对 pfnUnlockCb 函数的调用配对才能解锁分配。

用户模式显示驱动程序可以通过将 D3DDDICB_UNLOCK 结构的 NumAllocations 成员设置为由 D3DDDICB_UNLOCK phAllocations 成员指定的数组中的分配数,在一次调用 pfnUnlockCb 中解锁多个分配。

在调用 pfnRenderCb 函数之前,用户模式显示驱动程序应调用 pfnUnlockCb 来解锁命令流中引用的所有分配。 驱动程序可以锁定分配以支持-例如,NoOverwrite 位字段标志。 如果驱动程序未解锁所有这些分配,则可能需要视频内存管理器将这些分配放置在 AGP 内存中。

用户模式显示驱动程序不应调用 pfnUnlockCb 来解锁应用程序可以使用的分配。 当驱动程序在相应资源上收到对其 解锁ResourceUnmap 函数的调用时,驱动程序将不再读取或写入分配。

例子

下面的代码示例演示如何解锁分配。

HRESULT CD3DContext::SyncEnginesUsingLock(VOID) {
    HRESULT hr;
    D3DDDICB_LOCK   lockCB;
    D3DDDICB_UNLOCK Unlock;

    memset(&lockCB, 0, sizeof(D3DDDICB_LOCK));
    lockCB.hAllocation = m_HandleUsedInLastSubmit;
    lockCB.PrivateDriverData = 0;                       
    hr = m_d3dCallbacks.pfnLockCb(m_hD3D, &lockCB);
    if (FAILED(hr)) {
        DBG_BREAK;
        return hr;
    }
    Unlock.NumAllocations = 1;
    Unlock.phAllocations = &m_HandleUsedInLastSubmit;
    m_d3dCallbacks.pfnUnlockCb(m_hD3D, &Unlock);   
    return hr;
}

要求

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

另请参阅

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

解锁

pfnLockCb

pfnRenderCb