Control de errores y eliminación de dispositivos en DirectML
Si se produce un error irrecuperable, el dispositivo DirectML puede especificar un estado de eliminación del dispositivo. Entre los errores irrecuperables que provocan la eliminación de dispositivos se incluyen un uso de API no válido (para los métodos que no devuelven HRESULT), errores del controlador, errores de hardware o las condiciones de memoria insuficiente (OOM).
Cuando se elimina un dispositivo DirectML, todas las llamadas de método el dispositivo y todos los objetos creados por el dispositivo se convierten en no utilizables. Para los métodos que devuelven HRESULT, se devuelve un código de error DXGI_ERROR_DEVICE_REMOVED. Puede usar el método IDMLDevice::GetDeviceRemovedReason para comprobar si se ha eliminado el dispositivo DirectML y recuperar un código de error más detallado.
La eliminación del dispositivo es un proceso irrecuperable, excepto si libera el dispositivo afectado y todos sus elementos secundarios y, a continuación, vuelve a crear el dispositivo DirectML desde cero.
La eliminación del dispositivo Direct3D 12 subyacente también hace que se elimine el dispositivo DirectML. Sin embargo, esto no es aplicable a la inversa. La eliminación de dispositivos DirectML puede no provocar necesariamente que el dispositivo Direct3D 12 subyacente se elimine.
La causa más común de los errores de DirectML es un uso de API no válido. El uso de API no válido podría dar lugar a un código de error HRESULT E_INVALIDARG, o podría dar lugar a la eliminación del dispositivo.
Se recomienda encarecidamente habilitar la capa de depuración de DirectML durante el desarrollo para detectar y depurar estos errores. La capa de depuración de DirectML realiza una validación exhaustiva de los parámetros del método y el uso de API, y emitirá mensajes de salida de depuración para ayudarle a depurar.