Partilhar via


PFND3DDDI_UNLOCKCB função de retorno de chamada (d3dumddi.h)

A função pfnUnlockCb desbloqueia uma alocação que foi bloqueada por uma chamada para a função pfnLockCb.

Sintaxe

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

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

Parâmetros

hDevice

Um identificador para o dispositivo de exibição (contexto gráfico).

unnamedParam2

pData [in]

Um ponteiro para uma estrutura de D3DDDICB_UNLOCK que descreve a alocação a ser desbloqueada.

Valor de retorno

pfnUnlockCb retorna um dos seguintes valores:

Código de retorno Descrição
S_OK A alocação foi desbloqueada com êxito.
E_OUTOFMEMORY pfnUnlockCb não pôde ser concluído devido à memória insuficiente. (Esse erro ocorre quando o sistema está em uma situação de memória extrema baixa e não há espaço suficiente para alocar a matriz de páginas.)
E_INVALIDARG Os parâmetros foram validados e determinados como incorretos.

Essa função também pode retornar outros valores HRESULT.

Observações

O driver de exibição do modo de usuário deve chamar a função pfnUnlockCb para desbloquear uma alocação que foi bloqueada anteriormente em uma chamada para a função de pfnLockCb. Se o driver não chamar pfnUnlockCb, a coordenação entre o runtime do Microsoft Direct3D, o driver de exibição do modo de usuário e o driver de miniporto de exibição serão perdidos.

O driver de exibição no modo de usuário normalmente chama pfnUnlockCb em resposta a uma chamada para sua função de desbloqueio ou resourceUnmap (ou outras variações de ResourceUnmap, como DynamicIABufferUnmap) para desbloquear um recurso ou uma superfície dentro do recurso. Antes de retornar da chamada de Desbloqueio ou ResourceUnmap, o driver de exibição no modo de usuário deve primeiro mapear o recurso ou a superfície para a alocação apropriada e, em seguida, chamar pfnUnlockCb para desbloquear a alocação.

O driver de exibição no modo de usuário também pode chamar pfnUnlockCb em resposta a uma chamada para sua função DestroyDevice ou DestroyDevice(D3D10) para liberar todos os recursos alocados para o dispositivo. No tempo de vida de um dispositivo, cada chamada para pfnLockCb para bloquear uma alocação deve ser emparelhada com uma chamada para a função pfnUnlockCb para desbloquear a alocação.

O driver de exibição do modo de usuário pode desbloquear várias alocações em uma chamada para pfnUnlockCb definindo o membro numAllocations da estrutura D3DDDICB_UNLOCK para o número de alocações na matriz especificada pelo phAllocations membro do D3DDDICB_UNLOCK.

O driver de exibição no modo de usuário deve chamar pfnUnlockCb para desbloquear todas as alocações que são referenciadas no fluxo de comandos antes de chamar a função pfnRenderCb. O driver pode ter alocações bloqueadas para dar suporte, por exemplo, o sinalizador NoOverwrite campo de bits. Se o driver não desbloquear todas essas alocações, o gerenciador de memória de vídeo poderá ser necessário para colocar essas alocações na memória AGP.

O driver de exibição do modo de usuário não deve chamar pfnUnlockCb para desbloquear uma alocação que um aplicativo poderia estar usando. O driver é notificado de que o aplicativo não está mais lendo ou gravando na alocação quando o driver recebe uma chamada para sua função Desbloquear ou ResourceUnmap no recurso correspondente.

Exemplos

O exemplo de código a seguir mostra como desbloquear uma alocação.

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
de cliente com suporte mínimo Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
da Plataforma de Destino Área de trabalho
cabeçalho d3dumddi.h (inclua D3dumddi.h)

Consulte também

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

desbloqueio

pfnLockCb

pfnRenderCb