共用方式為


TDR 偵錯性改善

本文說明從 Windows 11 版本 24H2 (WDDM 3.2) 開始提供的 TDR (逾時偵測和復原) 偵錯改善。 圖形驅動程式開發人員應該熟悉 Windows 中的 GPU 逾時偵測和復原,如 Windows 8 和更新版本中的逾時偵測和復原以及 TDR 中所述。

DDI 變更

DxgkddiCollectDbgInfo2

為了協助 TDR 分析,OS 歷來會呼叫核心模式驅動程式 (KMD) 的 DxgkddiCollectDbgInfo 回呼,以允許驅動程式將自己的承載寫入系統從客戶計算機上傳的 TDR 報告中。

DxgkddiCollectDbgInfo2 會新增為 TDR 偵錯延伸模組。 此回呼可讓 OS 將 TDR 根本原因的詳細資訊傳遞至 KMD。 然後,KMD 可以儲存與負責 TDR 的 GPU 部分相關的狀態。

DxgkddiCollectDbgInfo2 是現有 DxgkddiCollectDbgInfo 的超集。

  • 不需要 WDDM 3.2 驅動程式即可實作 DxgkddiCollectDbgInfo2,在此情況下,OS 會呼叫 DxgkddiCollectDbgInfo

  • 如果 KMD 確實實作 DxgkddiCollectDbgInfo2,OS 會在所有情況下叫用它,而不是 DxgkddiCollectDbgInfo

DRIVER_INITIALIZATION_DATA 結構已擴充,現在包含指向 DxgkddiCollectDbgInfo2 的指標。

DXGKARG_COLLECTDBGINFO2

OS 會將新增的 DXGKARG_COLLECTDBGINFO2 結構傳遞至 DxgkddiCollectDbgInfo2

DXGKARG_COLLECTDBGINFO2的配置會回溯相容於現有的 DXGKARG_COLLECTDBGINFO 結構,以允許 DxgkDdiCollectDbgInfo2 實作視需要重複使用現有的 DxgkDdiCollectDbgInfo 協助程式。 因此,ReasonpBufferBufferSizepExtension 字段具有相同的語意。

下列其他欄位在 DXGKARG_COLLECTDBGINFO2中,但未 在DXGKARG_COLLECTDBGINFO中。

針對某些 TDR 類型,OS 會在 TdrPayloadSize 位元組的 TdrPayload 緩衝區中提供其他資訊。 它可以是 NULL,而且驅動程式應該會在不當機的情況下處理此案例。

當承載不是 NULL 時,它可以轉換成對應至 TDR 類型的結構。 OS 可能會以回溯相容的方式來成長這些結構,並在結尾新增新的字段。 驅動程式必須先檢查 TdrPayloadSize ,才能存取 TdrPayload 欄位,以確保 OS 實作所需的承載版本或更新版本。

TdrPayload 指向的記憶體只有在 DxgkddiCollectDbgInfo2 呼叫期間有效。 驅動程式不應該將指標儲存至 TdrPayload 超過 DxgkddiCollectDbgInfo2 呼叫結尾的 TdrPayload。

從 WDDM 3.2 開始,下列承載結構會新增為 TdrPayload 指向的可能承載。