Поделиться через


Обработка ошибок и удаления устройств в DirectML

Удаление устройства

Если возникает неустранимая ошибка, устройство DirectML может ввести состояние "удалено устройство". Неустранимые ошибки, которые приводят к удалению устройства, включают недопустимое использование API (для методов, которые не возвращают HRESULT), ошибки драйвера, сбоя оборудования или состояния вне памяти (OOM).

При удалении устройства DirectML все вызовы методов на этом устройстве, а также все объекты, созданные этим устройством, становятся неоперативными. Для методов, возвращающих HRESULT, возвращается код ошибки DXGI_ERROR_DEVICE_REMOVED . Метод IDMLDevice::GetDeviceRemovedReason можно использовать для проверки того, удалено ли устройство DirectML и получить более подробный код ошибки.

Вы не можете восстановиться после удаления устройства, за исключением освобождения затронутого устройства и всех его дочерних элементов, а затем повторного создания устройства DirectML с нуля.

Удаление основного устройства Direct3D 12 также вызывает удаление устройства DirectML. Однако обратное неверно. Удаление устройства DirectML может не обязательно привести к удалению базового устройства Direct3D 12.

Отладка удаления устройства DirectML и других ошибок

Наиболее распространенной причиной ошибок DirectML является недопустимое использование API. Недопустимое использование API может привести к коду ошибки E_INVALIDARG HRESULT или может привести к удалению устройства.

Настоятельно рекомендуется включить уровень отладки DirectML во время разработки, чтобы перехватывать и отлаживать такие ошибки. Уровень отладки DirectML выполняет обширную проверку параметров метода и использования API, а также выводит отладочные выходные сообщения, помогающие выполнить отладку.

См. также