DXGKDDI_QUERYCURRENTFENCE função de retorno de chamada (d3dkmddi.h)
A função DxgkDdiQueryCurrentFence consultas sobre o identificador de cerca de envio concluído mais recente na unidade de execução de 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 miniporto de exibição forneceu anteriormente esse identificador para o subsistema de kernel de elementos gráficos do Microsoft DirectX na função MiniportDeviceContext da função DxgkDdiAddDevice.
[in/out] pCurrentFence
Um ponteiro para uma estrutura de DXGKARG_QUERYCURRENTFENCE que contém informações sobre os dados de cerca atuais.
Valor de retorno
DxgkDdiQueryCurrentFence retorna STATUS_SUCCESS ou um resultado de erro apropriado se os dados de cerca não forem recuperados com êxito.
Observações
Um de cerca é uma instrução que contém 64 bits de dados e um endereço. O driver de miniporto de exibição pode inserir uma cerca no fluxo de acesso direto à memória (DMA) 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 DMA 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 cercas 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.
-
cercas privilegiadas são cercas que só podem ser inseridas em um buffer DMA criado (e acessível apenas) no modo kernel. Cercas dentro desse buffer DMA referem-se a um endereço físico na memória.
Observe que, se o endereço de destino da cerca estiver acessível no modo de usuário, o software mal-intencionado poderá executar uma operação gráfica sobre o local da memória da cerca e, portanto, substituir o conteúdo do que o kernel esperava receber.
Se o driver do miniporto de exibição perdeu a última cerca de um buffer DMA, a função DxgkDdiQueryCurrentFence do driver pode 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 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 miniporto 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 IRQL para interrupção do 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 de DxgkDdiInterruptRoutine.
- Na interrupção do dispositivo IRQL, compara a última cerca relatada com a cerca mais recente concluída por hardware.
- Na interrupção do dispositivo IRQL, as chamadas DxgkCbNotifyInterrupt somente quando a cerca de hardware mais recente concluída for mais recente do que a última cerca relatada.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows Vista |
da Plataforma de Destino | Área de trabalho |
cabeçalho | d3dkmddi.h (inclua D3dkmddi.h) |
IRQL | PASSIVE_LEVEL |