DXGKDDI_QUERYCURRENTFENCE função de retorno de chamada (d3dkmddi.h)
A função DxgkDdiQueryCurrentFence consulta o identificador de cerca de envio concluído mais recentemente na unidade de execução do comando de hardware.
Sintaxe
DXGKDDI_QUERYCURRENTFENCE DxgkddiQuerycurrentfence;
NTSTATUS DxgkddiQuerycurrentfence(
[in] IN_CONST_HANDLE hAdapter,
[in/out] INOUT_PDXGKARG_QUERYCURRENTFENCE pCurrentFence
)
{...}
Parâmetros
[in] hAdapter
Um identificador para um bloco de contexto associado a um adaptador de exibição. O driver de miniporta de exibição anteriormente forneceu esse identificador para o subsistema kernel de elementos gráficos do Microsoft DirectX no parâmetro de saída MiniportDeviceContext da função DxgkDdiAddDevice .
[in/out] pCurrentFence
Um ponteiro para uma estrutura DXGKARG_QUERYCURRENTFENCE que contém informações sobre os dados de limite atuais.
Retornar valor
DxgkDdiQueryCurrentFence retorna STATUS_SUCCESS ou um resultado de erro apropriado se os dados de limite não forem recuperados com êxito.
Comentários
Uma cerca é uma instrução que contém 64 bits de dados e um endereço. O driver de miniporta de exibição pode inserir uma cerca no fluxo de DMA (acesso direto à memória) que é enviado para a GPU (unidade de processamento gráfico). Quando a GPU lê a cerca, a GPU grava os dados de cerca no endereço de cerca especificado. No entanto, antes que a GPU possa gravar os dados de cerca na memória, ela deve garantir que todos os pixels dos primitivos que precedem a instrução de cerca sejam desativados e gravados corretamente na memória.
- Cercas regulares são cercas que podem ser inseridas em um buffer de AMD criado no modo de usuário. Como o conteúdo de um buffer de DMA do modo de usuário não é confiável, as restrições dentro desse buffer de DMA devem se referir a um endereço virtual no espaço de endereço de contexto da GPU e não a um endereço físico. O acesso a esse endereço virtual é associado pelo mesmo mecanismo de validação de memória que qualquer outro endereço virtual que a GPU acessa.
-
As cercas privilegiadas são cercas que só podem ser inseridas em um buffer de AMD criado (e acessível somente) no modo kernel. As cercas dentro desse buffer de AMD referem-se a um endereço físico na memória.
Observe que, se o endereço de destino da cerca estivesse acessível no modo de usuário, o software mal-intencionado poderia executar uma operação gráfica sobre o local de memória da cerca e, portanto, substituir o conteúdo do que o kernel esperava receber.
Se o driver do miniporto de exibição tiver perdido a última cerca de um buffer DMA, a função DxgkDdiQueryCurrentFence do driver poderá ser chamada para relatar a cerca perdida. Por exemplo, se o hardware gerar uma cerca na memória, a função DxgkDdiInterruptRoutine do driver será disparada para ler a memória. No entanto, se os dados da cerca não estiverem disponíveis quando o driver tentar ler os dados (por exemplo, se houver um chipset defeituoso), a cerca normalmente será relatada na próxima interrupção, a menos que as interrupções tenham sido interrompidas. Se as interrupções forem interrompidas e o subsistema de kernel de elementos gráficos DirectX aguardar muito tempo por uma cerca, o subsistema chamará a função DxgkDdiQueryCurrentFence do driver para verificar a cerca atual e determinar qualquer cerca pendente que possa ter perdido.
Antes que o driver de miniporta de exibição retorne de uma chamada para DxgkDdiQueryCurrentFence, se o identificador de cerca de envio concluído por hardware mais recente ainda não tiver sido relatado, o driver deverá chamar a função DxgkCbNotifyInterrupt para relatar a cerca. Para implementar essa funcionalidade, o driver:
- Rastreia qual cerca foi relatada pela última vez ao sistema operacional.
- Gera a interrupção do IRQL para o dispositivo. Para elevar o IRQL ao nível de interrupção, o driver pode chamar a função DxgkCbSynchronizeExecution para sincronizar com sua função DxgkDdiInterruptRoutine .
- No IRQL de interrupção do dispositivo, compara a última cerca relatada com a cerca mais recente concluída por hardware.
- No IRQL de interrupção do dispositivo, chama DxgkCbNotifyInterrupt somente quando a cerca de hardware mais recente concluída é mais recente do que a última cerca relatada.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | d3dkmddi.h (inclua D3dkmddi.h) |
IRQL | PASSIVE_LEVEL |