Compartilhar 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 D3DDDICB_UNLOCK que descreve a alocação a ser desbloqueada.

Retornar valor

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 extremamente 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.

Comentários

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 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 do modo de usuário normalmente chama pfnUnlockCb em resposta a uma chamada para sua função Unlock 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 Unlock ou ResourceUnmap , o driver de exibição do 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 do 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 como o número de alocações na matriz especificada pelo membro phAllocations do D3DDDICB_UNLOCK.

O driver de exibição do modo de usuário deve chamar pfnUnlockCb para desbloquear todas as alocações mencionadas 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 de campo de bits NoOverwrite . 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 Unlock 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
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Área de Trabalho
Cabeçalho d3dumddi.h (inclua D3dumddi.h)

Confira também

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

Unlock

pfnLockCb

pfnRenderCb