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