Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para transmitir o buffer de comando através do stack gráfico do Windows, deve-se executar a seguinte sequência de operações:
O driver de exibição no modo de usuário (UMD) inicia um envio de buffer de comando se o tempo de execução do Direct3D chamar uma das seguintes funções do UMD para executar 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 é usado no lote de comandos atual.
O UMD também inicia o envio do buffer de comandos sempre que esse buffer está cheio.
O UMD chama a função pfnRenderCb do runtime do Direct3D para enviar o buffer de comando para o runtime.
O subsistema de kernel de gráficos DirectX (Dxgkrnl) chama a função de miniporto de driver de exibição em modo kernel (KMD) DxgkDdiRender ou DxgkDdiRenderKm para validar o buffer de comando, escrever um buffer DMA no formato do hardware e produzir uma lista de alocação que descreve as superfícies utilizadas. Observe que o buffer de DMA ainda não foi corrigido (isto é, os endereços físicos atribuídos). Nota Se o runtime iniciou o envio de buffer de comando chamando a função Present da 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 de 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 Paginação de recursos de memória de vídeo.
O agendador de GPU chama a função DxgkDdiPatch do KMD para atribuir endereços físicos aos recursos no buffer DMA. No entanto, não é necessário que o agendador chame 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 atribuídos e fornecidos durante a chamada de DxgkDdiBuildPagingBuffer.
O agendador de 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 de GPU chama a função DxgkDdiSubmitCommand do KMD para solicitar que o driver enfileira o buffer de DMA para a unidade de execução da GPU. Cada buffer de DMA enviado à GPU contém um identificador de cerca. Depois que a GPU terminar de processar o buffer de DMA, a GPU gerará uma interrupção.
O KMD é notificado sobre a interrupção em sua função DxgkDdiInterruptRoutine . O KMD deve ler, da GPU, o identificador de cerca do buffer de DMA que acabou de ser concluído.
O KMD deve chamar a função DxgkCbNotifyInterrupt para notificar o agendador de GPU que o buffer de DMA foi concluído.
O KMD deve chamar a função DxgkCbQueueDpc para colocar em fila uma chamada de procedimento adiado (DPC).
O DPC do KMD é notificado para lidar com a maior parte do processamento de buffer de DMA.