Войти
ПрограммированиеФорумГрафика

Посмертный анализ вылета драйвера

#0
(Правка: 22:10) 22:09, 28 июня 2021

Кто нибудь разобрался как работает ID3D12DeviceRemovedExtendedData ?
В https://devblogs.microsoft.com/directx/dred/ написано:
In Windows 10 1903, DRED 1.1 provided D3D12 developers with the ability to diagnose device removed events using GPU page fault data and automatic breadcrumbs. As a result, TDR debugging pain has been greatly reduced."

Отлично, то что надо! Далее сказано:

"After device removal has been detected (e.g. Present returns DXGI_ERROR_DEVICE_REMOVED), use ID3D12DeviceRemovedExtendedData methods to access the DRED data for the removed device." и приводится код для этого. В виде двух строчек:
  VERIFY_SUCCEEDED(pDred->GetAutoBreadcrumbsOutput(&DredAutoBreadcrumbsOutput));
  VERIFY_SUCCEEDED(pDred->GetPageFaultAllocationOutput(&DredPageFaultOutput));

Ну и что с этим делать, как добраться до операции вызвавшей слет?


#1
23:11, 28 июня 2021

san
> VERIFY_SUCCEEDED(pDred->GetAutoBreadcrumbsOutput(&DredAutoBreadcrumbsOutput));
>   VERIFY_SUCCEEDED(pDred->GetPageFaultAllocationOutput(&DredPageFaultOutput))
наверное не смотрел MSDN там все хорошо расписано, там в cтруктурах все возвращается:
D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT ->
D3D12_AUTO_BREADCRUMB_NODE

typedef struct D3D12_AUTO_BREADCRUMB_NODE {
  const char                       *pCommandListDebugNameA;
  const wchar_t                    *pCommandListDebugNameW;
  const char                       *pCommandQueueDebugNameA;
  const wchar_t                    *pCommandQueueDebugNameW;
  ID3D12GraphicsCommandList        *pCommandList;
  ID3D12CommandQueue               *pCommandQueue;
  UINT32                           BreadcrumbCount;
  const UINT32                     *pLastBreadcrumbValue;
  const D3D12_AUTO_BREADCRUMB_OP   *pCommandHistory;
  const D3D12_AUTO_BREADCRUMB_NODE *pNext;
  struct                           D3D12_AUTO_BREADCRUMB_NODE;
} D3D12_AUTO_BREADCRUMB_NODE;

Из этого все будет понятно где что отвалилось

Второй  вызов посмотри по MSDN сам.

#2
23:12, 28 июня 2021

Походу проитерировать DredAutoBreadcrumbsOutput ноды, где в pCommandHistory будет список выполенных команд на определенном коммандлисте в определенной очереди. DredPageFaultOutput будет указывать на участок убитой памяти.

#3
3:25, 29 июня 2021

Ага. Уже понятнее. А пример использующий эти вызовы никому не попадался?

ПрограммированиеФорумГрафика