Partager via


PFND3DDDI_UNLOCKCB fonction de rappel (d3dumddi.h)

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

Syntaxe

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

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

Paramètres

hDevice

Handle de l’appareil d’affichage (contexte graphique).

unnamedParam2

pData [in]

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

Valeur de retour

pfnUnlockCb retourne l’une des valeurs suivantes :

Retourner le code Description
S_OK L’allocation a été correctement déverrouillée.
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 extrême de mémoire 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 perdu.

Le pilote d’affichage en mode utilisateur appelle généralement pfnUnlockCb en réponse à un appel à son Déverrouiller ou fonction ResourceUnmap (ou d’autres variantes de ResourceUnmap telles que DynamicIABufferUnmap) pour déverrouiller une ressource ou une surface dans la ressource. Avant de revenir du Déverrouiller ou appel 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 à son DestroyDevice ou DestroyDevice(D3D10) fonction pour libérer toutes les ressources qu’il a allouées pour l’appareil. Au cours de 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 seul appel pour pfnUnlockCb en définissant le membre NumAllocations de la structure D3DDDICB_UNLOCK sur le nombre d’allocations dans le tableau spécifié par les phAllocations membre 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 commande avant d’appeler la fonction pfnRenderCb. Le pilote peut avoir des allocations verrouillées pour prendre en charge, par exemple, l’indicateur de NoOverwrite bit-field. 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 lorsque le pilote reçoit un appel à son Déverrouiller ou fonction 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;
}

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
plateforme cible Bureau
d’en-tête d3dumddi.h (include D3dumddi.h)

Voir aussi

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

Déverrouiller

pfnLockCb

pfnRenderCb