Question

Dans les rapports d'erreur de certains que j'ai assez souvent vu le comportement suivant:. :: IDirect3DVertexBuffer9 échoue de verrouillage, le code d'erreur renvoyé est D3DERR_NOTAVAILABLE

Une fois que cela arrive, assez souvent (mais pas toujours), il est suivi par CreateTexture ou à défaut CreateVertexBuffer avec D3DERR_OUTOFVIDEOMEMORY d'erreur.

Quelles sont les raisons possibles de l'échec de verrouillage tampon de sommet? Pourrait espace d'adressage mémoire virtuelle est épuisée, ou quoi?

Était-ce utile?

La solution

D'après la réponse DIRECTXDEV par Chuck Walbourn de Microsoft, en plus de « hors de l'espace d'adressage » une autre cause pourrait être « hors de la piscine de page ».

  

Vous pouvez également sous Windows XP cela pourrait indiquer que vous avez atteint les limites de la mémoire paginée du noyau. En général cela se produit lorsque vous créez beaucoup de ressources Direct3D (textures, etc.)

Nous ne créons beaucoup de ressources Direct3D.

Autres conseils

est ce que j'affecté à DirectXDev:;)

  

Avez-vous vérifié la quantité de mémoire de votre   application utilise? (Assurez-vous de   sélectionnez la colonne de mémoire virtuelle dans   Gestionnaire des tâches!). Je dirais   questions sur la base fragmentation de la mémoire   en vous faisant, comme vous le suggérez, exécutez   hors de l'espace d'adresses.

     

Il pourrait cependant être un bug du pilote ...

L'exécution de débogage fournir toute information utile?

Edit: La seule autre chose que je peux penser est que la mémoire d'ouverture est épuisée. Je ne sais pas comment cela fonctionne avec PCIExpress mais AGP vous pouvez définir la taille de l'ouverture. Je ne sais pas comment vérifier si elle est pleine cependant. Je soupçonne l'erreur que vous voyez rapporte que son plein. Faites-vous beaucoup de serrures avec le drapeau Jeter? Dans ce cas il est possible que ceux-ci créent de tonnes de nouvelles allocations dans l'ouverture et est en vous faisant exécuter de mémoire là-bas. Ce travail est pure conjecture cependant.

Je guess que si cela se produit avec seulement certains utilisateurs, ce sont ceux sur les machines bas de gamme. Si les choses se passent lentement, vous pouvez retrouver avec un grand nombre de données mises en mémoire tampon dans la mémoire tampon de commande. Cela rendra laggy de contrôle et « pourrait », à une supposition, conduire au problème que vous voyez. Vous voudrez peut-être essayer de faire que la commande tampon ne fait jamais trop longtemps. Si vous vous assurez que le premier verrou de chaque cadre se fait sans le drapeau défausse (ie jeu de drapeau à 0), alors cela entraînera le pipeline de décrochage jusqu'à ce que le tampon de sommet a été rendu et amener la mémoire tampon commande en synchronisation avec vous. Cela entraînera un ralentissement de la mise en mémoire tampon de commande ne sera pas en mesure de lisser les pics de frame rate aussi facilement ...

En tout cas ... c'est juste une supposition!

La question soulevée au sujet de mémoire est valide. Nous avons besoin de quelques détails sur l'appel pour être sûr, mais par exemple si elle est dans la piscine DEFAULT Lock () et si elle est dynamique (drapeau D3DLOCK_DISCARD passé), il est très possible que vos essais pilotes à trouver un morceau de mémoire pour le retour utilisé (car il le double ou triple tampons en interne) et échoue parce que, comme vous découvrirez bientôt après, la mémoire vidéo est épuisée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top