Lidar com erros e remoção de dispositivo no DirectML
Remoção de dispositivo
Se ocorrer um erro irrecuperável, o dispositivo DirectML poderá entrar em um estado de "dispositivo removido". Os erros irrecuperáveis que causam a remoção do dispositivo incluem uso inválido da API (para métodos que não retornam um HRESULT), erro de driver, falha de hardware ou condições de falta de memória (OOM).
Quando um dispositivo DirectML é removido, todas as chamadas de método no dispositivo e todos os objetos criados por esse dispositivo tornam-se no-ops. Para métodos que retornam um HRESULT, um código de erro DXGI_ERROR_DEVICE_REMOVED é retornado. Você pode usar o método IDMLDevice::GetDeviceRemovedReason para verificar se o dispositivo DirectML foi removido e para recuperar um código de erro mais detalhado.
Você não pode se recuperar da remoção do dispositivo, exceto liberando o dispositivo afetado e todos os seus filhos e, em seguida, recriando o dispositivo DirectML do zero.
A remoção do dispositivo Direct3D 12 subjacente também faz com que o dispositivo DirectML seja removido. No entanto, o inverso não é verdadeiro. A remoção do dispositivo DirectML pode não necessariamente fazer com que o dispositivo Direct3D 12 subjacente seja removido.
Depurar a remoção de dispositivos DirectML e outros erros
A causa mais comum de erros do DirectML é o uso inválido da API. O uso inválido da API pode resultar em um código de erro HRESULT E_INVALIDARG ou pode resultar na remoção do dispositivo.
É altamente recomendável que você habilite a camada de depuração do DirectML durante o desenvolvimento, a fim de capturar e depurar esses erros. A camada de depuração do DirectML executa uma validação extensiva dos parâmetros do método e do uso da API e emitirá mensagens de saída de depuração para ajudá-lo a depurar.