Compartilhar via


Tratamento de erros e remoção de dispositivo no DirectML

Remoção do dispositivo

Se ocorrer um erro irrecuperável, o dispositivo DirectML poderá entrar em um estado de "dispositivo removido". 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 OOM (memória insuficiente).

Quando um dispositivo DirectML é removido, todas as chamadas de método realizadas no dispositivo, e cada objeto criado por esse dispositivo, se tornam operações nulas. 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 recuperar um código de erro mais detalhado.

Você não pode recuperar de uma remoção de dispositivo a não ser liberando o dispositivo afetado e todos os seus componentes 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 do dispositivo DirectML e outros erros

A causa mais comum de erros de 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 habilitar a camada de depuração do DirectML durante seu desenvolvimento, a fim de capturar e depurar esses erros. A camada de depuração do DirectML executa uma ampla validação dos parâmetros de método e do uso da API e emitirá mensagens de saída de depuração para ajudá-lo a depurar.

Consulte também