Freigeben über


Verbesserungen bei der TDR-Debugging-Fähigkeit

Zur Unterstützung der TDR-Analyse (Timeouterkennung und -wiederherstellung) hat das Betriebssystem historisch den DxgkddiCollectDbgInfo-Rückruf des Kernelmodustreibers aufgerufen, damit der Treiber seine eigene Nutzlast in den TDR-Bericht schreiben kann, den das System vom Kundencomputer hochlädt.

Die in diesem Artikel beschriebenen TDR-Debugverbesserungen, sind ab Windows 11, Version 24H2 (WDDM 3.2) verfügbar. Grafiktreiberentwickler sollten mit der GPU-Timeouterkennung und -wiederherstellung in Windows vertraut sein, wie unter Timeouterkennung und -wiederherstellung und TDR in Windows 8 und höher beschrieben.

DDI-Änderungen

DxgkddiCollectDbgInfo2

DxgkddiCollectDbgInfo2 wird als TDR-Debugerweiterung hinzugefügt. Mit diesem Rückruf kann das Betriebssystem detailliertere Informationen zur Ursache des TDR an KMD übergeben. Der Kernelmodustreiber (KMD) kann wiederum den Zustand speichern, der für den für TDR zuständigen Teil der GPU relevant ist.

DxgkddiCollectDbgInfo2 ist eine Obermenge an die vorhandene DxgkddiCollectDbgInfo.

  • Ein WDDM 3.2-Treiber ist nicht erforderlich, um DxgkddiCollectDbgInfo2 zu implementieren. In diesem FAll ruft das Betriebssystem DxgkddiCollectDbgInfo auf.

  • Wenn der KMD DxgkddiCollectDbgInfo2 implementiert, ruft das Betriebssystem sie in allen Fällen anstelle vonDxgkddiCollectDbgInfo auf.

Die DRIVER_INITIALIZATION_DATA-Struktur wird erweitert, um einen Zeiger auf DxgkddiCollectDbgInfo2 einzuschließen.

DXGKARG_COLLECTDBGINFO2

Das Betriebssystem übergibt die hinzugefügte DXGKARG_COLLECTDBGINFO2-Struktur an DxgkddiCollectDbgInfo2.

Das Layout von DXGKARG_COLLECTDBGINFO2 ist abwärtskompatibel mit der vorhandenen DXGKARG_COLLECTDBGINFO-Struktur, um die Implementierung von DxgkDdiCollectDbgInfo2 zum erneuten Verwenden von vorhandenen DxgkDdiCollectDbgInfo-Hilfsprogrammen nach Bedarf zuzulassen. Aus diesem Grund weisen die Felder Reason, pBuffer, BufferSize und pExtension dieselbe Semantik auf.

Die folgenden anderen Felder befinden sich in DXGKARG_COLLECTDBGINFO2, aber nicht in DXGKARG_COLLECTDBGINFO.

  • TdrType
  • TdrPayloadSize
  • TdrPayload

Für einige TDR-Typen stellt das Betriebssystem zusätzliche Informationen im TdrPayload-Puffer von TdrPayloadSize-Byte bereit. Es kann NULL sein, und vom Treiber wird erwartet, dass dieser Fall ohne Absturz behandelt wird.

Wenn die Payload nicht NULL ist, kann sie in eine Struktur umgerechnet werden, die dem TDR-Typ entspricht. Das Betriebssystem kann diese Strukturen auf abwärtskompatible Weise vergrößern und am Ende neue Felder hinzufügen. Der Treiber muss TdrPayloadSize überprüfen, bevor er auf die Felder TdrPayload zugreift, um sicherzustellen, dass das Betriebssystem die gewünschte Payload-Version (oder höher) implementiert.

Der Speicher, der auf TdrPayload zeigt, ist nur während des DxgkddiCollectDbgInfo2-Aufrufs gültig. Der Treiber sollte keinen Zeiger auf TdrPayload über das Ende des DxgkddiCollectDbgInfo2-Aufrufs speichern.

Ab WDDM 3.2 werden die folgenden Payload-Strukturen als mögliche Payloads von TdrPayload hinzugefügt, auf die verwiesen werden soll.