Compartir a través de


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 D3DDDICB_UNLOCK que describe la asignación que se va a desbloquear.

Valor devuelto

pfnUnlockCb devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK La asignación se ha desbloqueado correctamente.
E_OUTOFMEMORY pfnUnlockCb no se pudo completar debido a una 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.

Observaciones

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

El controlador de visualización en modo de usuario suele llamar a pfnUnlockCb en respuesta a una llamada a su Unlock o función ResourceUnmap (u otras variaciones de ResourceUnmap como DynamicIABufferUnmap) para desbloquear un recurso o una superficie dentro del recurso. Antes de volver de la Desbloquear o llamada a 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 DestroyDevice o DestroyDevice(D3D10) función para liberar todos los recursos asignados para el dispositivo. En la duración de un dispositivo, todas las llamadas a pfnLockCb para bloquear una asignación deben emparejarse con una llamada a la función pfnUnlockCb para desbloquear la asignación.

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

El controlador de visualización 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, el NoOverwrite marca de campo de bits. 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 AGP.

El controlador de pantalla en modo de 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 Desbloquear o función 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 Valor
cliente mínimo admitido Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
de la plataforma de destino de Escritorio
encabezado de d3dumddi.h (incluya D3dumddi.h)

Consulte también

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

destroyDevice

destroyDevice(D3D10)

resourceUnmap

desbloquear

pfnLockCb

pfnRenderCb