PFND3DDDI_UNLOCKCB función de devolución de llamada (d3dumddi.h)

La función pfnUnlockCb desbloquea una asignación bloqueada por una llamada a la función pfnLockCb .

Sintaxis

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

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

Parámetros

hDevice

Identificador del dispositivo de visualización (contexto de gráficos).

unnamedParam2

pData [in]

Puntero a una estructura de D3DDDICB_UNLOCK que describe la asignación para desbloquear.

Valor devuelto

pfnUnlockCb devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK La asignación se desbloqueó correctamente.
E_OUTOFMEMORY pfnUnlockCb no se pudo completar debido a memoria insuficiente. (Este error se produce cuando el sistema está en una situación de memoria extrema baja y no hay suficiente espacio para asignar la matriz de páginas).
E_INVALIDARG Los parámetros se validaron y determinaron que son incorrectos.

Esta función también puede devolver otros valores HRESULT.

Comentarios

El controlador de pantalla en modo de usuario debe llamar a la función pfnUnlockCb para desbloquear una asignación bloqueada anteriormente en una llamada a la función pfnLockCb . Si el controlador no llama a pfnUnlockCb, se pierde la coordinación entre el entorno de ejecución de Microsoft Direct3D, el controlador de pantalla en modo usuario y el controlador de minipuerto de pantalla.

El controlador de pantalla en modo de usuario normalmente llama a pfnUnlockCb en respuesta a una llamada a su función Unlock o ResourceUnmap (u otras variaciones de ResourceUnmap , como DynamicIABufferUnmap) para desbloquear un recurso o una superficie dentro del recurso. Antes de volver desde la llamada Unlock o ResourceUnmap , el controlador de pantalla en modo de usuario debe asignar primero el recurso o la superficie a la asignación adecuada y, a continuación, llamar a pfnUnlockCb para desbloquear la asignación.

El controlador de pantalla en modo de usuario también puede llamar a pfnUnlockCb en respuesta a una llamada a su función DestroyDevice o DestroyDevice(D3D10) para liberar todos los recursos que asignó para el dispositivo. En la duración de un dispositivo, todas las llamadas a pfnLockCb para bloquear una asignación se deben emparejar con una llamada a la función pfnUnlockCb para desbloquear la asignación.

El controlador de pantalla en modo de usuario puede desbloquear varias asignaciones en una llamada a pfnUnlockCb estableciendo el miembro NumAllocations de la estructura D3DDDICB_UNLOCK en el número de asignaciones de la matriz especificada por el miembro phAllocations de D3DDDICB_UNLOCK.

El controlador de pantalla en modo de usuario debe llamar a pfnUnlockCb para desbloquear todas las asignaciones a las que se hace referencia en el flujo de comandos antes de llamar a la función pfnRenderCb . El controlador podría tener asignaciones bloqueadas para admitir, por ejemplo, la marca de campo de bits NoOverwrite . Si el controlador no desbloquea todas estas asignaciones, es posible que sea necesario que el administrador de memoria de vídeo coloque estas asignaciones en la memoria de AGP.

El controlador de pantalla en modo usuario no debe llamar a pfnUnlockCb para desbloquear una asignación que una aplicación podría usar. Se notifica al controlador que la aplicación ya no lee ni escribe en la asignación cuando el controlador recibe una llamada a su función Unlock o ResourceUnmap en el recurso correspondiente.

Ejemplos

En el ejemplo de código siguiente se muestra cómo desbloquear una asignación.

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

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Escritorio
Encabezado d3dumddi.h (incluya D3dumddi.h)

Consulte también

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

Unlock

pfnLockCb

pfnRenderCb