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) |