Freigeben über


PFND3DDDI_UNLOCKCB Rückruffunktion (d3dumddi.h)

Die pfnUnlockCb--Funktion entsperrt eine Zuordnung, die durch einen Aufruf der pfnLockCb--Funktion gesperrt wurde.

Syntax

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

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

Parameter

hDevice

Ein Handle für das Anzeigegerät (Grafikkontext).

unnamedParam2

pData- [in]

Ein Zeiger auf eine D3DDDICB_UNLOCK-Struktur, die die Zuordnung zum Entsperren beschreibt.

Rückgabewert

pfnUnlockCb gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die Zuordnung wurde erfolgreich entsperrt.
E_OUTOFMEMORY pfnUnlockCb konnte wegen unzureichendem Arbeitsspeicher nicht abgeschlossen werden. (Dieser Fehler tritt auf, wenn sich das System in einer extrem niedrigen Speichersituation befindet und nicht genügend Speicherplatz zum Zuordnen des Arrays von Seiten vorhanden ist.)
E_INVALIDARG Parameter wurden überprüft und ermittelt, dass sie falsch sind.

Diese Funktion kann auch andere HRESULT-Werte zurückgeben.

Bemerkungen

Der Anzeigetreiber für den Benutzermodus muss die pfnUnlockCb--Funktion aufrufen, um eine Zuordnung zu entsperren, die zuvor in einem Aufruf der pfnLockCb--Funktion gesperrt war. Wenn der Treiber pfnUnlockCbnicht aufruft, geht die Koordination zwischen der Microsoft Direct3D-Laufzeit, dem Anzeigetreiber für den Benutzermodus und dem Miniporttreiber des Anzeigemodus verloren.

Der Anzeigetreiber im Benutzermodus ruft in der Regel pfnUnlockCb als Reaktion auf einen Aufruf der Unlock oder ResourceUnmap-funktion (oder andere Variationen von ResourceUnmap wie DynamicIABufferUnmap) auf, um eine Ressource oder eine Oberfläche innerhalb der Ressource zu entsperren. Vor der Rückgabe vom Unlock oder ResourceUnmap Aufruf muss der Anzeigetreiber für den Benutzermodus zuerst die Ressource oder Oberfläche der entsprechenden Zuordnung zuordnen und dann pfnUnlockCb aufrufen, um die Zuordnung zu entsperren.

Der Anzeigetreiber für den Benutzermodus kann auch pfnUnlockCb als Reaktion auf einen Aufruf seiner DestroyDevice oder DestroyDevice(D3D10) aufrufen, um alle ressourcen freizugeben, die es für das Gerät zugewiesen hat. Während der Lebensdauer eines Geräts muss jeder Aufruf von pfnLockCb zum Sperren einer Zuordnung mit einem Aufruf der pfnUnlockCb-Funktion gekoppelt werden, um die Zuordnung zu entsperren.

Der Anzeigetreiber für den Benutzermodus kann mehrere Zuordnungen in einem Aufruf von pfnUnlockCb entsperren, indem das NumAllocations-Element der D3DDDICB_UNLOCK Struktur auf die Anzahl der Zuordnungen im Array festgelegt wird, die durch die phAllocations Member von D3DDDICB_UNLOCK angegeben wird.

Der Anzeigetreiber für den Benutzermodus sollte pfnUnlockCb- aufrufen, um alle Zuordnungen zu entsperren, die im Befehlsdatenstrom bezeichnet werden, bevor die pfnRenderCb--Funktion aufgerufen wird. Der Treiber könnte Zuordnungen für die Unterstützung gesperrt haben, z. B. das NoOverwrite Bitfeldflagge. Wenn der Treiber nicht alle diese Zuordnungen entsperrt, muss der Videospeicher-Manager diese Zuordnungen möglicherweise im AGP-Speicher platzieren.

Der Anzeigetreiber für den Benutzermodus sollte pfnUnlockCb- nicht aufrufen, um eine Zuordnung zu entsperren, die eine Anwendung verwenden könnte. Der Treiber wird benachrichtigt, dass die Anwendung die Zuordnung nicht mehr liest oder in die Zuordnung schreibt, wenn der Treiber einen Aufruf seiner Unlock oder ResourceUnmap-funktion für die entsprechende Ressource empfängt.

Beispiele

Das folgende Codebeispiel zeigt, wie sie eine Zuordnung entsperren.

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;
}

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform- Desktop
Header- d3dumddi.h (include D3dumddi.h)

Siehe auch

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap-

Entsperren

pfnLockCb

pfnRenderCb