Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются улучшения отладки TDR (обнаружение времени ожидания и восстановление), доступные начиная с Windows 11 версии 24H2 (WDDM 3.2). Разработчики графических драйверов должны быть знакомы с обнаружением и восстановлением после таймаута GPU в Windows, как описано в разделе Обнаружение и восстановление после таймаута и TDR в Windows 8 и более поздних версиях.
Изменения DDI
DxgkddiCollectDbgInfo2
Чтобы помочь анализу TDR, операционная система исторически вызывала функцию обратного вызова драйвера в режиме ядра (KMD) DxgkddiCollectDbgInfo, чтобы разрешить драйверу записывать собственные данные в отчет TDR, который система отправляет с компьютера клиента.
DxgkddiCollectDbgInfo2 добавляется в виде расширения отладки TDR. Этот обратный вызов позволяет ОС передавать более подробные сведения в KMD о первопричине TDR. Затем KMD может сохранить состояние, соответствующее части GPU, ответственной за TDR.
DxgkddiCollectDbgInfo2 — это супермножество существующего dxgkddiCollectDbgInfo.
Драйвер WDDM 3.2 не требуется для реализации DxgkddiCollectDbgInfo2, в этом случае ОС вызывает DxgkddiCollectDbgInfo.
Если KMD реализует DxgkddiCollectDbgInfo2, ОС вызывает его вместо DxgkddiCollectDbgInfo во всех случаях.
Структура DRIVER_INITIALIZATION_DATA расширена, чтобы включить указатель на DxgkddiCollectDbgInfo2.
DXGKARG_COLLECTDBGINFO2
ОС передает добавленную структуру DXGKARG_COLLECTDBGINFO2 в DxgkddiCollectDbgInfo2.
Макет DXGKARG_COLLECTDBGINFO2 обратно совместим с существующей структурой DXGKARG_COLLECTDBGINFO , чтобы разрешить реализации DxgkDdiCollectDbgInfo2 повторно использовать существующие вспомогательные средства DxgkDdiCollectDbgInfo по мере необходимости. По этой причине поля Reason, pBuffer, BufferSize и pExtension имеют одинаковую семантику.
Следующие другие поля находятся в DXGKARG_COLLECTDBGINFO2, но не в DXGKARG_COLLECTDBGINFO.
- TdrType
- TdrPayloadSize
- TdrPayload
Для некоторых типов TDR ОС предоставляет дополнительные сведения в буфере TdrPayload размером TdrPayloadSize байт. Он может иметь значение NULL, и драйвер, как ожидается, обработает этот случай без сбоя.
Если нагрузка не является NULL, её можно привести к типу структуры, соответствующей типу TDR. ОС может увеличивать эти структуры в обратной совместимости, добавляя новые поля в конце. Драйвер должен проверить TdrPayloadSize перед доступом к полям TdrPayload, чтобы убедиться, что ОС реализует нужную версию полезной нагрузки или более позднюю.
Память, на которую указывает TdrPayload , допустима только во время вызова DxgkddiCollectDbgInfo2 . Драйвер не должен хранить указатель на TdrPayload после завершения вызова DxgkddiCollectDbgInfo2 .
Начиная с WDDM 3.2, следующие структуры полезной нагрузки добавляются в качестве возможных вариантов для TdrPayload, на который они указывают.
DXGK_TDR_PAYLOAD_ENGINE_TIMEOUT для пейлоада тайм-аута двигателя (TdrType равно DXGK_TDR_TYPE_ENGINE_TIMEOUT).
DXGK_TDR_PAYLOAD_VSYNC_TIMEOUT для таймаута VSync (TdrType равно DXGK_TDR_TYPE_VSYNC_TIMEOUT).