Partager via


PFND3DDDI_UNLOCKCB fonction de rappel (d3dumddi.h)

La fonction pfnUnlockCb déverrouille une allocation qui a été verrouillée par un appel à la fonction pfnLockCb .

Syntaxe

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

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

Paramètres

hDevice

Handle pour le périphérique d’affichage (contexte graphique).

unnamedParam2

pData [in]

Pointeur vers une structure de D3DDDICB_UNLOCK qui décrit l’allocation à déverrouiller.

Valeur retournée

pfnUnlockCb retourne l’une des valeurs suivantes :

Code de retour Description
S_OK L’allocation a été déverrouillée avec succès.
E_OUTOFMEMORY pfnUnlockCb n’a pas pu se terminer en raison d’une mémoire insuffisante. (Cette erreur se produit lorsque le système est dans une situation de mémoire extrêmement faible et qu’il n’y a pas suffisamment d’espace pour allouer le tableau de pages.)
E_INVALIDARG Les paramètres ont été validés et déterminés comme incorrects.

Cette fonction peut également retourner d’autres valeurs HRESULT.

Remarques

Le pilote d’affichage en mode utilisateur doit appeler la fonction pfnUnlockCb pour déverrouiller une allocation précédemment verrouillée dans un appel à la fonction pfnLockCb . Si le pilote n’appelle pas pfnUnlockCb, la coordination entre le runtime Microsoft Direct3D, le pilote d’affichage en mode utilisateur et le pilote miniport d’affichage est perdue.

Le pilote d’affichage en mode utilisateur appelle généralement pfnUnlockCb en réponse à un appel à sa fonction Unlock ou ResourceUnmap (ou à d’autres variantes de ResourceUnmap telles que DynamicIABufferUnmap) pour déverrouiller une ressource ou une surface au sein de la ressource. Avant de revenir de l’appel Unlock ou ResourceUnmap , le pilote d’affichage en mode utilisateur doit d’abord mapper la ressource ou la surface à l’allocation appropriée, puis appeler pfnUnlockCb pour déverrouiller l’allocation.

Le pilote d’affichage en mode utilisateur peut également appeler pfnUnlockCb en réponse à un appel à sa fonction DestroyDevice ou DestroyDevice(D3D10) pour libérer toutes les ressources qu’il a allouées à l’appareil. Pendant la durée de vie d’un appareil, chaque appel à pfnLockCb pour verrouiller une allocation doit être associé à un appel à la fonction pfnUnlockCb pour déverrouiller l’allocation.

Le pilote d’affichage en mode utilisateur peut déverrouiller plusieurs allocations dans un appel à pfnUnlockCb en définissant le membre NumAllocations de la structure D3DDDICB_UNLOCK sur le nombre d’allocations dans le tableau spécifié par le membre phAllocations de D3DDDICB_UNLOCK.

Le pilote d’affichage en mode utilisateur doit appeler pfnUnlockCb pour déverrouiller toutes les allocations référencées dans le flux de commandes avant d’appeler la fonction pfnRenderCb . Les allocations du pilote peuvent être verrouillées pour la prise en charge, par exemple, l’indicateur de champ de bits NoOverwrite . Si le pilote ne déverrouille pas toutes ces allocations, le gestionnaire de mémoire vidéo peut être nécessaire pour placer ces allocations dans la mémoire AGP.

Le pilote d’affichage en mode utilisateur ne doit pas appeler pfnUnlockCb pour déverrouiller une allocation qu’une application peut utiliser. Le pilote est averti que l’application ne lit plus ou n’écrit plus dans l’allocation quand le pilote reçoit un appel à sa fonction Unlock ou ResourceUnmap sur la ressource correspondante.

Exemples

L’exemple de code suivant montre comment déverrouiller une allocation.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dumddi.h (inclure D3dumddi.h)

Voir aussi

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

Déverrouiller

pfnLockCb

pfnRenderCb