Erreurs internes du pilote (Direct3D 9)

Dans Direct3D 9, Direct3D permet au pilote de retourner des codes d’erreur tels que E_OUTOFMEMORY, D3DERR_OUTOFVIDEOMEMORY et D3DERR_UNSUPPORTEDCOLORARG afin qu’une application puisse y répondre. Toutefois, parfois, les appels d’API qui ont généré ces types de retour sont chargés dans une mémoire tampon de commandes et sont traités par lots pour être envoyés au GPU (consultez Contrôle des optimisations du runtime et des pilotes). Dans ce cas, les erreurs ne peuvent pas être relayées à l’application lorsque l’action doit être effectuée, de sorte que le code d’erreur est consommé par le runtime et qu’une note est faite sur l’objet d’appareil que cela s’est produit. Plus tard, lorsque l’application appelle IDirect3DDevice9::P resent, IDirect3DDevice9::P resent retourne D3DERR_DRIVERINTERNALERROR. C’est pourquoi la meilleure approche à adopter pour une application lors de la réception d’un D3DERR_DRIVERINTERNALERROR de IDirect3DDevice9::P resent consiste à détruire et recréer l’appareil.

Si vous souhaitez essayer de déboguer davantage, voici quelques suggestions pour essayer de déterminer quel appel d’API génère l’erreur :

  • Étant donné que la liste des valeurs de retour possibles n’est pas complète, vous pouvez essayer de trouver quel appel échoue en entourant chaque appel d’API comme suit :

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

    Le flux de débogage de sortie doit ensuite afficher l’appel à l’origine du problème.

  • En outre, à des fins de débogage, essayez d’appeler IDirect3DDevice9::ValidateDevice immédiatement avant chaque IDirect3DDevice9::D rawPrimitive pour voir s’il existe un problème supplémentaire avec le pilote de périphérique (opération non prise en charge, combinaison inutilisable de formats de texture, etc.).

    Notes

    IDirect3DDevice9::ValidateDevice doit être utilisé avec précaution et avec parcimonie en raison de la quantité de travail de validation que le pilote doit effectuer pour retourner une réponse.

     

Conseils de programmation