Compartilhar via


Aprimoramentos na depuração de TDR

Este artigo descreve melhorias de depuração de TDR (detecção e recuperação de time-out) disponíveis a partir do Windows 11, versão 24H2 (WDDM 3.2). Os desenvolvedores de driver de gráficos devem estar familiarizados com a detecção e recuperação de tempo limite de GPU no Windows, conforme descrito na Detecção e Recuperação de Tempo Limite e TDR no Windows 8 e posterior.

Alterações de DDI

DxgkddiCollectDbgInfo2

Para auxiliar a análise de TDR, o sistema operacional historicamente chamou o retorno de chamada DxgkddiCollectDbgInfo do driver no modo kernel (KMD) para permitir que o driver escreva sua própria carga útil no relatório TDR que o sistema carrega do computador do cliente.

DxgkddiCollectDbgInfo2 é adicionado como uma extensão de depuração de TDR. Esse callback permite que o sistema operacional passe informações mais detalhadas ao KMD sobre a causa raiz do TDR. Então, o KMD pode salvar um estado relevante para a seção da GPU responsável pelo TDR.

DxgkddiCollectDbgInfo2 é um superconjunto para o DxgkddiCollectDbgInfo existente.

  • Um driver WDDM 3.2 não é necessário para implementar DxgkddiCollectDbgInfo2, nesse caso, o sistema operacional chama DxgkddiCollectDbgInfo.

  • Se o KMD implementar DxgkddiCollectDbgInfo2, o sistema operacional o invocará em vez de DxgkddiCollectDbgInfo em todos os casos.

A estrutura DRIVER_INITIALIZATION_DATA é estendida para incluir um ponteiro para DxgkddiCollectDbgInfo2.

DXGKARG_COLLECTDBGINFO2

O sistema operacional passa a estrutura de DXGKARG_COLLECTDBGINFO2 adicionada para DxgkddiCollectDbgInfo2.

O layout de DXGKARG_COLLECTDBGINFO2 é retrocompatível com a estrutura DXGKARG_COLLECTDBGINFO existente para permitir que a implementação DxgkDdiCollectDbgInfo2 reutilize os auxiliares DxgkDdiCollectDbgInfo conforme necessário. Por esse motivo, os campos Reason, pBuffer, BufferSize e pExtension têm a mesma semântica.

Os outros campos a seguir estão em DXGKARG_COLLECTDBGINFO2, mas não em DXGKARG_COLLECTDBGINFO.

Para alguns tipos de TDR, o sistema operacional fornece informações adicionais no buffer TdrPayload com TdrPayloadSize bytes. Pode ser NULL, e espera-se que o driver lide com esse caso sem falhar.

Quando o payload não é NULL, ele pode ser convertido para uma estrutura que corresponde ao tipo TDR. O sistema operacional pode aumentar essas estruturas de maneira compatível com versões anteriores, adicionando novos campos no final. O driver deve verificar TdrPayloadSize antes de acessar os campos TdrPayload para garantir que o Sistema Operacional implemente a versão de conteúdo desejada ou posterior.

A memória que TdrPayload aponta só é válida durante a chamada DxgkddiCollectDbgInfo2. O driver não deve armazenar um ponteiro para TdrPayload após concluir a chamada DxgkddiCollectDbgInfo2.

A partir do WDDM 3.2, as estruturas de conteúdo a seguir são adicionadas como cargas possíveis para o TdrPayload apontar.