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 因為記憶體不足而無法完成。 (當系統處於極低的記憶體狀況,且沒有足夠的空間配置 pages.) 陣列時,就會發生此錯誤
E_INVALIDARG 已驗證參數,並判斷為不正確。

此函式也可能傳回其他 HRESULT 值。

備註

使用者模式顯示驅動程式必須呼叫 pfnUnlockCb 函式,才能解除鎖定先前在 pfnLockCb 函式呼叫中鎖定的配置。 如果驅動程式未呼叫 pfnUnlockCb,Microsoft Direct3D 執行時間、使用者模式顯示驅動程式和顯示迷你埠驅動程式之間的協調就會遺失。

使用者模式顯示驅動程式通常會呼叫 pfnUnlockCb ,以回應其 UnlockResourceUnmap 函式的呼叫 (或其他 ResourceUnmap 變化,例如 DynamicIABufferUnmap) 來解除鎖定資源或資源內的表面。 從 UnlockResourceUnmap 呼叫傳回之前,使用者模式顯示驅動程式必須先將資源或表面對應到適當的配置,然後呼叫 pfnUnlockCb 來解除鎖定配置。

使用者模式顯示驅動程式也可以呼叫 pfnUnlockCb ,以回應其 DestroyDevice 或 DestroyDevice (D3D10) 函式的呼叫,以釋放它為裝置配置的所有資源。 在裝置的存留期內,每次呼叫 pfnLockCb 以鎖定配置都必須與 pfnUnlockCb 函式的呼叫配對,才能解除鎖定配置。

使用者模式顯示驅動程式可以在一次呼叫 pfnUnlockCb 中解除鎖定多個配置,方法是將 D3DDDICB_UNLOCK 結構的 NumAllocations 成員設定為D3DDDICB_UNLOCK的 phAllocations 成員所指定的數位配置數目。

使用者模式顯示驅動程式應該呼叫 pfnUnlockCb ,以解除鎖定命令數據流中參考的所有配置,然後再呼叫 pfnRenderCb 函式。 驅動程式可能會鎖定配置以支援,例如 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 (include D3dumddi.h)

另請參閱

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice (D3D10)

ResourceUnmap

Unlock

pfnLockCb

pfnRenderCb