Bonjour,
J'aimerais pouvoir récupérer la mémoire GPU qu'il me reste à un instant T dans mon application.
Existe-t'il une fonction qui fait ça en DirectX?
Merci.
Sïmone
Bonjour,
J'aimerais pouvoir récupérer la mémoire GPU qu'il me reste à un instant T dans mon application.
Existe-t'il une fonction qui fait ça en DirectX?
Merci.
Sïmone
Quelle version de DX , quelle couche ( D3D ?..)
Pour le moment je n'ai trouvé que cela avec D3d9
Regarder dans le SDK de Direct XIDirect3DDevice9::GetAvailableTextureMem
Returns an estimate of the amount of available texture memory.
UINT GetAvailableTextureMem();
Effectivement, j'aurai peut être pu préciser un minimum...
Alors, en fait, j'utilise DirectX 9c et Direct3D.
Je bosse également en C#.
A priori, cette fonction ne renvoi qu'une estimation.
Apperement, on ne peut pas connaitre la mémoire graphique restante
Tu auras sans doute une meilleure approximation en la calculant toi-même (somme des VB/IB, textures et shaders en pool DEFAULT ou MANAGED).
Enfin, cela suppose que tu connais la mémoire vidéo totale disponible
pas de moyen efficace sans les nouveaux modeles de driver VISTA et Dx9 Vista ou Dx10. il est possible d'utiliser quelques bidouilles, comme lire une clé du registre.
globalement, tu ne peux pas faire ca; tu veux plutot laisser le driver gérer sa mémoire. et tu veux savoir combien de memoire tu utilises, pas combien il te reste. l'autre approche ne fonctionne pas.
Il y a PIX en Direct3D et sinon Riva tuner.
Tenez vous à jour les gars,
le SDK de mars 2008 par exemple contient le source du programme d'exemple "VideoMemory" :
Il faut noter cependant (c'est expliqué dans la documentation du sample) que la notion de mémoire vidéo est assez fluctuante, parce que ce que vous pouvez considérer comme mémoire vidéo (sur la carte graphique par exemple) n'est parfois pas présente (integrated graphics) et que toutes les cartes sont capables de texturer depuis la mémoire centrale (aussi appelée Host ou système), d'y placer des données de vertices, des instructions de shaders ou d'y faire du rendu. Certaines cartes bas de gamme ont une mémoire à faible latence mais bas débit sur la carte, et peuvent lire la mémoire host/système avec une plus haute latence mais plus gros débit (le délire du bas de gamme).L'échantillon VideoMemory montre comment obtenir le montant de la mémoire vidéo par différentes méthodes.
Également sous Vista (faudra vous y mettre aussi ), les resources du système sont virtualisées (à la fois pour D3D9 et D3D10), ceci pour empêcher qu'une application utilise toutes les ressources et empêche une autre de se charger (cela veut dire que le contenu de la mémoire de la carte graphique est déchargée en mémoire système non lisible par le GPU et sur disque). Cela veut aussi dire qu'une application programmée exclusivement pour Vista, peut allouer beaucoup plus que ce qui est théoriquement disponible dans le segment addressable par le GPU, ce qui est généralement une mauvaise idée (possibilité de swapping dans la boucle de rendu principale y compris en mode exclusif), mais peut cependant servir à émuler les ressources managed pour les applications qui ne veulent pas à avoir à gérer leurs ressources eux-mêmes (l'alternative serait le streaming géré par l'application).
LeGreg
Ok, merci pour vos réponses...
Je ne vais pas pouvoir utiliser Device.GetAvailableVideoMemory, mais, en gavant la mémoire de texture, et en récupérant le nombre de textures créées lors du OutOfMemory, j'arrive à avoir également une indications de la mémoire qu'il me reste...
Par contre, à la base, je voulais voir la mémoire qu'il me restait après chaque chargement de texture... (Sur chipset Intel, j'avais un bug bizarre)
Mais la méthode ci-dessus n'est pas efficace par contre...
Enfin, bref...
Merci quand même!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager