Udostępnij przez


Obsługa błędów i usuwania urządzeń w języku DirectML

Usuwanie urządzenia

Jeśli wystąpi nieodwracalny błąd, urządzenie DirectML może przejść w stan "urządzenie odłączone". Nieodwracalne błędy, które powodują usunięcie urządzenia, obejmują nieprawidłowe użycie interfejsu API (w przypadku metod, które nie zwracają hrESULT), błędu sterownika, błędu sprzętowego lub warunków braku pamięci (OOM).

Po usunięciu urządzenia DirectML wszystkie wywołania metod na tym urządzeniu oraz każdy obiekt utworzony przez to urządzenie staną się bezczynne. W przypadku metod, które zwracają HRESULT, zwracany jest kod błędu DXGI_ERROR_DEVICE_REMOVED . Możesz użyć metody IDMLDevice::GetDeviceRemovedReason, aby sprawdzić, czy urządzenie DirectML zostało usunięte, i pobrać bardziej szczegółowy kod błędu.

Nie można przywrócić działania po usunięciu urządzenia, chyba że zwolnimy usunięte urządzenie i wszystkie jego elementy podrzędne, a następnie ponownie utworzymy od nowa urządzenie DirectML.

Usunięcie urządzenia bazowego Direct3D 12 powoduje również usunięcie powiązanego urządzenia DirectML. Jednak odwrotna zależność nie istnieje. Usuwanie urządzeń DirectML niekoniecznie może spowodować usunięcie bazowego urządzenia Direct3D 12.

Debugowanie usuwania urządzeń DirectML i innych błędów

Najczęstszą przyczyną błędów directML jest nieprawidłowe użycie interfejsu API. Nieprawidłowe użycie interfejsu API może spowodować E_INVALIDARG kod błędu HRESULT lub spowodować usunięcie urządzenia.

Zdecydowanie zalecamy włączenie warstwy debugowania DirectML podczas programowania, aby przechwycić i debugować takie błędy. Warstwa debugowania DirectML przeprowadza obszerną walidację parametrów metody i użycia interfejsu API i emituje komunikaty wyjściowe debugowania, aby ułatwić debugowanie.

Zobacz także