Compartilhar via


Aprimoramentos na depuração de TDR

Para ajudar na análise de TDR (detecção de tempo-limite e recuperação), o sistema operacional historicamente chamou o retorno de chamada DxgkddiCollectDbgInfo do driver de modo kernel para permitir que o driver grave sua própria carga no relatório de TDR que o sistema carrega da máquina do cliente.

Os aprimoramentos na depuração de TDR, descritos neste artigo, estão disponíveis a partir do Windows 11, versão 24H2 (WDDM 3.2). Os desenvolvedores de drivers gráficos devem estar familiarizados com a detecção e a recuperação do tempo-limite da GPU no Windows, conforme descrito em Detecção de tempo-limite e recuperação e TDR no Windows 8 e posterior.

Alterações de DDI

DxgkddiCollectDbgInfo2

DxgkddiCollectDbgInfo2 é adicionado como uma extensão de depuração de TDR. Esse retorno de chamada permite que o sistema operacional passe informações mais detalhadas para o KMD sobre a causa raiz de TDR. O driver de modo kernel (KMD), por sua vez, pode salvar o estado que é relevante para a parte da GPU responsável pelo TDR.

DxgkddiCollectDbgInfo2 é um superconjunto para o DxgkddiCollectDbgInfo existente.

  • Um driver do WDDM 3.2 não é necessário para implementar DxgkddiCollectDbgInfo2, caso em que 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 DXGKARG_COLLECTDBGINFO2 adicionada para DxgkddiCollectDbgInfo2.

O layout de DXGKARG_COLLECTDBGINFO2 é compatível com as versões anteriores da estrutura DXGKARG_COLLECTDBGINFO para permitir que a implementação DxgkDdiCollectDbgInfo2 reutilize os auxiliares DxgkDdiCollectDbgInfo existentes, 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.

  • TdrType
  • TdrPayloadSize
  • TdrPayload

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

Quando a carga não é NULL, ela pode ser convertida em uma estrutura que corresponda 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 da carga desejada ou posterior.

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

A partir do WDDM 3.2, as seguintes estruturas de carga são adicionadas como possíveis cargas para TdrPayload apontar.