Partilhar via


Erros internos do driver (Direct3D 9)

No Direct3D 9, o Direct3D permitirá que o driver retorne códigos de erro como E_OUTOFMEMORY, D3DERR_OUTOFVIDEOMEMORY e D3DERR_UNSUPPORTEDCOLORARG para que um aplicativo possa respondê-los. No entanto, às vezes, as chamadas de API que geraram esses tipos de retorno são carregadas em um buffer de comandos e são enviadas em lote para serem enviadas à GPU (consulte Controlling Runtime and Driver Optimizations). Nesse caso, os erros não podem ser retransmitidos para o aplicativo quando a ação precisa ser tomada, então o código de erro é consumido pelo tempo de execução e uma anotação é feita no objeto do dispositivo que isso aconteceu. Mais tarde, quando o aplicativo invocar IDirect3DDevice9::P resent, IDirect3DDevice9::P resent retornará D3DERR_DRIVERINTERNALERROR. É por isso que a melhor abordagem para um aplicativo ao receber um D3DERR_DRIVERINTERNALERROR de IDirect3DDevice9::P resent é destruir e recriar o dispositivo.

Se você quiser tentar depurar mais, aqui estão algumas sugestões para tentar descobrir qual chamada de API está gerando o erro:

  • Como a lista de possíveis valores de retorno não está completa, você pode tentar descobrir qual chamada está falhando cercando cada chamada de API da seguinte forma:

    TRACE ( "Calling DrawPrimitive" );
    d3ddev->DrawPrim(...);
    TRACE ( "done\n" );
    

    O fluxo de depuração de saída deve mostrar a chamada que está causando o problema.

  • Além disso, para fins de depuração, tente chamar IDirect3DDevice9::ValidateDevice imediatamente antes de cada IDirect3DDevice9::D rawPrimitive para ver se há um problema adicional com o driver de dispositivo (operação não suportada, combinação inutilizável de formatos de textura, etc).

    Observação

    IDirect3DDevice9::ValidateDevice deve ser usado com cuidado e moderação devido à quantidade de trabalho de validação que o driver precisa executar para retornar uma resposta.

     

Dicas de Programação