Question

J'ai une application WinForms qui utilise XNA pour animer des modèles 3D dans un contrôle. L'application a été fait très bien depuis des mois, mais récemment, j'ai commencé à avoir des pauses périodiques dans l'animation. En partant d'enquêter sur ce qui se passe j'ai établi ces faits:

  1. Il arrive que sur ma machine, d'autres machines fonctionne très bien
  2. Retrait tout de ma boucle de rendu n'améliore pas le problème

2. Je n'ai pas fait enlever tout , je limité ma boucle pour régler la fenêtre sur mon GraphicsDevice puis faire GraphicsDevice.Present.

Essayer de creuser plus loin, je tiré au PIX pour capturer quelques statistiques. Captures d'écran de deux pistes de PIX peuvent être consultés ici (Run6) et ici (Run14) . Run6 utilise ma boucle de rendu original et Run14 utilise le bare-bones boucle actuelle.

PIX me dit que le GPU fait périodiquement quelque chose , et je suppose que cela cause des pauses. Quelle pourrait être la cause de cela? Ou comment puis-je faire pour savoir ce que le GPU est en train de faire?

Mise à jour: depuis que je fais confiance habituellement mon code pour être parfait (qui rit?) J'ai commencé un nouveau projet XNA à partir de zéro pour voir si elle le même comportement. Ainsi, à partir d'un nouveau XNA 3.1 projet Windows jeu en cours d'exécution et PIX que je reçois cette calendrier . Les mêmes pauses périodiques. Donc, le problème doit être plus bas dans la pile, dans XNA ou Direct3D.

PIX montre que le GPU travaille sur quelque chose, je peux voir la liste des appels DX faite dans chaque trame et les calculs de temps montre que la pause se produit pendant (ou après) l'appel IDirect3DDevice9::Present.

Mise à jour 2: J'avais XNA déjà installé et désinstallé 4.0 CTP sur la machine problématique. Je ne peux pas être certain que cela est lié, mais je pensais que peut-être un Réinstaller des bits XNA Game Studio 3.1 pourrait faire une différence. Il se trouve que l'ont fait.

La question fondamentale reste la même (et la générosité est toujours en place): ce qui pourrait affecter XNA 3.1 (ou DirectX) pour qu'il se comporte comme celui-ci et est-il un outil de puissance enregistrement / traçage pour DirectX et / ou au niveau du GPU là-bas qui pourrait faire la lumière sur ce qui se passe?

Remarque:. J'utilise XNA 3.1 sur un ordinateur Windows 7 x64 machine dual-core avec 8 Go de RAM

Note2: ont également affiché cette question sur les forums XNA Creators .

Était-ce utile?

La solution

Vous pouvez essayer de voir si vous pouvez trouver quelque chose avec Xperf et comment obtenir , nous espérons que cela donne des résultats.


Sinon, vous pouvez également essayer GPUView qui a été utilisé pour des améliorations dans DWM,
cela est également inclus à côté de Xperf avec la boîte à outils de performances de Windows de sorte que vous pouvez facilement essayer les deux!

  

log v

     

... attente pour un montant juste de temps pour être sûr que le problème est tracée ...

     

log

     

gpuview merged.etl

Dans le cas où gpuview sort de la mémoire, vous pouvez essayer d'ajouter « / limite 3 » ou supprimer le v.

Lire la documentation des outils si vous êtes quelque part coincé.

Autres conseils

Hmm ... cela semble se produire sur le GPU, mais il ressemble à un problème de collecte des ordures CPU. Pouvez-vous exécuter CLR profileur et voyez si vous pouvez voir les pointes l'activité GC que vous pouvez établir une corrélation entre les ralentissements?

Je suis d'accord que cela semble peu probable puisque vous pouvez le voir clairement dans PIX, mais elle peut donner un indice quant à la cause.

Si cela ne se passe sur votre propre machine, pourrait-il être pilotes? Pardonnez-moi d'être sceptique, mais il est une machine 64 bits après tout: D

Cela ressemble soit un problème de vsync ou GPU dans ses derniers soubresauts. Depuis remontant à une autre version fixe, et le « goulot d'étranglement » est en IDirect3DDevice9::Present laisse aller avec la première option.

Je ne suis pas familier avec XNA, donc je ne sais pas à quel point le fonctionnement de D3D sont exposés, mais savez-vous ce que vos PresentationParameters sont mis à?

essayer précisément la mise en jeu d'effet de swap à Rejeter.

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