다음을 통해 공유


TDR 디버깅 기능 향상

TDR(시간 제한 검색 및 복구) 분석을 지원하기 위해 OS는 지금까지 커널 모드 드라이버의 DxgkddiCollectDbgInfo 콜백을 호출하여 시스템이 고객 컴퓨터에서 업로드하는 TDR 보고서에 자체 페이로드를 쓸 수 있도록 했습니다.

이 문서에 설명된 TDR 디버그 개선 사항은 Windows 11 버전 24H2(WDDM 3.2)부터 사용할 수 있습니다. 그래픽 드라이버 개발자는 Windows 8 이상에서 시간 제한 검색 및 복구 및 TDR에 설명된 대로 Windows의 GPU 시간 제한 검색 및 복구에 익숙해야 합니다.

DDI 변경 내용

DxgkddiCollectDbgInfo2

DxgkddiCollectDbgInfo2 는 TDR 디버그 확장으로 추가됩니다. 이 콜백을 사용하면 OS가 TDR의 근본 원인에 대한 자세한 정보를 KMD에 전달할 수 있습니다. 그러면 KMD(커널 모드 드라이버)는 TDR을 담당하는 GPU 부분과 관련된 상태를 저장할 수 있습니다.

DxgkddiCollectDbgInfo2 는 기존 DxgkddiCollectDbgInfo의 상위 집합입니다.

  • DxgkddiCollectDbgInfo2를 구현하기 위해 WDDM 3.2 드라이버가 필요하지 않습니다. 이 경우 OS는 DxgkddiCollectDbgInfo를 호출합니다.

  • KMD가 DxgkddiCollectDbgInfo2를 구현하는 경우 OS는 모든 경우에 DxgkddiCollectDbgInfo 대신 호출합니다.

DRIVER_INITIALIZATION_DATA 구조체는 DxgkddiCollectDbgInfo2에 대한 포인터를 포함하도록 확장됩니다.

DXGKARG_COLLECTDBGINFO2

OS는 추가된 DXGKARG_COLLECTDBGINFO2 구조를 DxgkddiCollectDbgInfo2에 전달합니다.

DXGKARG_COLLECTDBGINFO2 레이아웃은 DxgkDdiCollectDbgInfo2 구현이 필요에 따라 기존 DxgkDdiCollectDbgInfo 도우미를 재사용할 수 있도록 기존 DXGKARG_COLLECTDBGINFO 구조와 이전 버전과 호환됩니다. 이러한 이유로 이유, pBuffer, BufferSizepExtension 필드에는 동일한 의미 체계가 있습니다.

다음 다른 필드는 DXGKARG_COLLECTDBGINFO2 있지만 DXGKARG_COLLECTDBGINFO 없습니다.

  • TdrType
  • TdrPayloadSize
  • TdrPayload

일부 TDR 형식의 경우 OS는 TdrPayloadSize 바이트의 TdrPayload 버퍼에 추가 정보를 제공합니다. NULL일 수 있으며 드라이버는 충돌 없이 이 사례를 처리해야 합니다.

페이로드가 NULL이 아닌 경우 TDR 형식에 해당하는 구조체로 캐스팅할 수 있습니다. OS는 이전 버전과 호환되는 방식으로 이러한 구조를 확장하여 끝에 새 필드를 추가할 수 있습니다. 드라이버는 TdrPayload 필드에 액세스하기 전에 TdrPayloadSize를 검사 OS가 원하는 페이로드 버전 이상을 구현하는지 확인해야 합니다.

TdrPayload가 가리키는 메모리는 DxgkddiCollectDbgInfo2 호출 중에만 유효합니다. 드라이버는 DxgkddiCollectDbgInfo2 호출의 끝을 지나 TdrPayload에 대한 포인터를 저장해서는 안 됩니다.

WDDM 3.2부터 다음 페이로드 구조는 TdrPayload가 가리킬 수 있는 페이로드로 추가됩니다.

  • 엔진 시간 제한 페이로드에 대한 DXGK_TDR_PAYLOAD_ENGINE_TIMEOUT(TdrType은 DXGK_TDR_TYPE_ENGINE_TIMEOUT 같음).

  • VSync 시간 제한 페이로드에 대한 DXGK_TDR_PAYLOAD_VSYNC_TIMEOUT(TdrType은 DXGK_TDR_TYPE_VSYNC_TIMEOUT 동일).