Partilhar via


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

A função Lock bloqueia o recurso especificado ou uma superfície dentro do recurso.

Sintaxe

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

Parâmetros

hDevice

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

unnamedParam2

pData [in, out]

Um ponteiro para uma estrutura de D3DDDIARG_LOCK que descreve o recurso ou a superfície dentro do recurso a ser bloqueado.

Retornar valor

Lock retorna um dos seguintes valores:

Código de retorno Descrição
S_OK O recurso foi bloqueado com êxito.
E_OUTOFMEMORY O bloqueio não pôde alocar a memória necessária para que ela fosse concluída.
D3DDDIERR_WASSTILLDRAWING O recurso não estava ocioso quando o runtime do Microsoft Direct3D chamou a função Lock com o sinalizador de campo de bits DoNotWait definido no membro Flags do D3DDDIARG_LOCK .

Comentários

O runtime do Microsoft Direct3D chama a função Lock do driver de exibição do modo de usuário para bloquear um recurso ou uma superfície dentro do recurso. Esse recurso ou superfície bloqueado pode ser lido ou gravado usando operações de leitura e gravação da CPU. Quando o runtime chama Lock, o driver de exibição do modo de usuário deve chamar a função de retorno de chamada pfnLockCb do runtime para bloquear uma alocação correspondente ao recurso ou à superfície. Observe que, como o driver de exibição do modo de usuário pode alocar várias alocações para cada recurso ou superfície, o driver de exibição do modo de usuário pode ser necessário para converter ou processar adequadamente o ponteiro de alocação retornado do pfnLockCb antes de retornar a chamada lock para o runtime.

Normalmente, as chamadas para Lock são seguidas por chamadas correspondentes à função Desbloqueio do driver antes que o driver receba chamadas para suas funções primitivas de desenho (ou seja, chamadas para DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive e DrawPrimitive2). Essa ordem garante que um driver nunca seja solicitado a extrair de um recurso bloqueado. No entanto, ocasionalmente, ao executar a transformação e a iluminação de software, o runtime deve chamar uma das funções primitivas de desenho do driver antes de desbloquear um recurso (atualmente, apenas buffers de vértice exibem esse comportamento). O runtime marca buffers de vértice nos quais esse comportamento incomum pode ocorrer com o sinalizador de campo de bits MightDrawFromLocked no membro Flags das estruturas D3DDDIARG_CREATERESOURCE e D3DDDIARG_LOCK (ou seja, na criação e no tempo de bloqueio). Quando o hardware é renderizado ativamente de um buffer de vértice bloqueado, o driver não é obrigado a executar nenhuma ação especial porque o runtime não substituirá nenhum dado no buffer de vértice bloqueado.

O runtime chama a função Lock do driver de exibição do modo de usuário para bloquear superfícies de memória do sistema pré-alocadas também. Essa operação permite que o driver de exibição do modo de usuário sincronize corretamente as referências a essas superfícies que podem estar no fluxo de comandos de hardware. O driver de exibição do modo de usuário pode realizar a sincronização:

  • Liberação (ou seja, chamar a função de retorno de chamada pfnRenderCb do runtime ) todos os comandos pendentes conforme necessário.
  • Chamando pfnLockCb com o identificador de alocação apropriado para comandos que já foram enviados ao hardware.
O driver de exibição do modo de usuário retorna um ponteiro para a memória da superfície bloqueada e o tom da superfície nos membros pSurfData e Pitch da estrutura D3DDDIARG_LOCK. No entanto, para superfícies de memória do sistema preallocadas, o runtime ignora a memória e o tom definidos pelo driver, embora o driver ainda possa falhar na chamada de bloqueio (e, portanto, fazer failback para o aplicativo). O runtime define o sinalizador de campo de bit NotifyOnly no membro Flags da estrutura D3DDDIARG_LOCKpara diferenciar chamadas de bloqueio que bloqueiam superfícies de memória do sistema preallocadas de outras chamadas de bloqueio .

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Universal
Cabeçalho d3dumddi.h (inclua D3dumddi.h)

Confira também

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb