Gestion des erreurs et des suppressions d’appareil dans DirectML
Suppression d’un appareil
Si une erreur irrécupérable se produit, l’appareil DirectML peut entrer un état «appareil supprimé ». Les erreurs irrécupérables qui provoquent la suppression de l’appareil incluent une utilisation non valide de l’API (pour les méthodes qui ne retournent pas de HRESULT), une erreur de pilote, une défaillance matérielle ou des conditions de mémoire insuffisante (OOM).
Lorsqu’un appareil DirectML est supprimé, toutes les méthodes qui appellent l’appareil et chaque objet créé par cet appareil deviennent no-ops (sans opération). Pour les méthodes qui retournent un HRESULT, un code d’erreur DXGI_ERROR_DEVICE_REMOVED est retourné. Vous pouvez utiliser la méthode IDMLDevice::GetDeviceRemovedReason pour vérifier si l’appareil DirectML a été supprimé et récupérer un code d’erreur plus détaillé.
Vous ne pouvez pas récupérer une suppression d’appareil, à moins de libérer l’appareil concerné et tous ses enfants. Il faut ensuite recréer l’appareil DirectML à partir de zéro.
La suppression de l’appareil Direct3D 12 sous-jacent entraîne également la suppression de l’appareil DirectML. En revanche, l'inverse n'est pas vrai. La suppression d’appareils DirectML n’entraînement pas nécessairement la suppression de l’appareil Direct3D 12 sous-jacent.
Débogage de la suppression d’appareils DirectML et d’autres erreurs
La cause la plus courante des erreurs DirectML est l’utilisation d’API non valable. L’utilisation de l’API non valable peut entraîner un code d’erreur HRESULT E_INVALIDARG ou entraîner la suppression de l’appareil.
Nous vous recommandons vivement d’activer la couche de débogage DirectML pendant le développement, afin d’intercepter et de déboguer ces erreurs. La couche de débogage DirectML effectue une validation approfondie des paramètres de méthode et de l’utilisation de l’API, et émet des messages de sortie de débogage pour vous aider à déboguer.