Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A seguinte sequência de operações deve ser executada para passar um buffer de comandos através da pilha de gráficos do Windows:
O driver de vídeo em modo de utilizador (UMD) inicia a submissão de um buffer de comandos se o runtime do Direct3D chamar uma das seguintes funções UMD para realizar a operação especificada:
- A função Present para exibir gráficos.
- A função Flush para enviar comandos de hardware.
- A função Bloquear para bloquear um recurso, que é usada no lote de comandos atual.
O UMD também inicia um envio de buffer de comando sempre que o buffer de comando está cheio.
O UMD chama a função pfnRenderCb do tempo de execução do Direct3D para submeter o buffer de comandos ao tempo de execução.
O subsistema do kernel de gráficos DirectX (Dxgkrnl) chama a função DxgkDdiRender ou DxgkDdiRenderKm do driver de miniporta de exibição no modo kernel (KMD) para validar o buffer de comandos, escrever um buffer DMA no formato do hardware e produzir uma lista de alocação que descreve as superfícies usadas. Observe que o buffer DMA ainda não foi corrigido (ou seja, endereços físicos atribuídos). Observação Se o tempo de execução iniciou o envio do buffer de comandos chamando a função Present do UMD, o subsistema gráfico chamará a função DxgkDdiPresent do KMD, em vez de DxgkDdiRender ou DxgkDdiRenderKm.
O gerenciador de memória de vídeo chama a função DxgkDdiBuildPagingBuffer do KMD para criar buffers DMA de finalidade especial, conhecidos como buffers de paginação, que movem as alocações especificadas na lista de alocação que acompanha o buffer DMA de e para a memória acessível por GPU. Para obter mais informações, consulte Recursos de memória de vídeo de paginação.
O agendador de GPU chama a função DxgkDdiPatch do KMD para atribuir endereços físicos aos recursos no buffer DMA. No entanto, o agendador não é obrigado a chamar DxgkDdiPatch para atribuir endereços físicos ao buffer de paginação porque os endereços físicos para o buffer de paginação foram passados e atribuídos durante a chamada DxgkDdiBuildPagingBuffer .
O agendador da GPU chama a função DxgkDdiSubmitCommand do KMD para solicitar que o driver enfileire o buffer de paginação para a unidade de execução da GPU.
O agendador da GPU chama a função DxgkDdiSubmitCommand do KMD para solicitar que o driver enfileire o buffer DMA para a unidade de execução da GPU. Cada buffer DMA enviado à GPU contém um identificador de cerca. Depois que a GPU termina de processar o buffer DMA, a GPU gera uma interrupção.
O KMD é notificado da interrupção em sua função DxgkDdiInterruptRoutine . O KMD deve ler, da GPU, o identificador de barreira do buffer DMA que foi concluído há pouco.
O KMD deve chamar a função DxgkCbNotifyInterrupt para notificar o agendador da GPU de que o buffer DMA foi concluído.
O KMD deve chamar a função DxgkCbQueueDpc para enfileirar uma chamada de procedimento adiada (DPC).
O DPC do KMD é notificado para lidar com a maior parte do processamento do buffer DMA.