Qu'est-ce qui peut rendre ALT-TAB «ennuyeux» / lent / glitchy?

25

Il s'agit plus d'une question ouverte, mais j'espère avoir une bonne idée de la façon d'éviter le problème.

Lorsque vous jouez à des jeux sur Windows, je voudrais peut-être ALT-TAB en sortir. Certains jeux n'ont pas de problèmes, d'autres ne sont pas si faciles: ils peuvent prendre AGES pour s'éteindre et revenir. Certains sont même sujets à planter ou à des comportements étranges comme la distorsion graphique ou le son bégaiement.

Je me demande simplement ce qui cause ce comportement? Est-ce plus une chose DirectX ou OpenGL? Est-ce dû au fait que les jeux sont «intelligents» et mettent en cache / effacent le cache chaque fois que les paramètres d'écran changent? (Je suppose qu'ils obtiennent une sorte de signal lorsque je ALT-TAB?)

Je n'ai pas de problème, mais j'aimerais savoir quoi éviter et quelle astuce «intelligente» peut provoquer ce type d'horrible expérience client?

Michael Stum
la source
1
Grande question! J'espère que nous recevrons des réponses perspicaces, comme d'habitude!

Réponses:

17

Dans certaines situations, ALT-TAB entraînera la perte du périphérique DirectX. Lorsque le périphérique est perdu, toutes les ressources GPU (sommets, textures, shaders, etc.) doivent être considérées comme non valides et ne peuvent pas être réutilisées. Référence MSDN ici .

Ces ressources perdues doivent être libérées, puis recréées lorsque le périphérique est restauré. Dans le cas de la plupart des jeux, la restauration de ces ressources nécessite de charger à nouveau beaucoup de données à partir du disque - souvent la même procédure de chargement que celle effectuée au début du jeu / niveau.

Que peut-on faire pour éviter cela?

  • Vous pouvez conserver un cache de vos données dans le ram afin que le transfert vers le GPU soit plus rapide que le rechargement à partir de la HD. Je pense qu'il existe un moyen de faire en sorte que DirectX le fasse automatiquement.
  • Utilisez une nouvelle version de DirectX. Cette citation ( source ) provient de MSDN sur DirectX 9Ex:

Les appareils ne sont désormais perdus que dans deux circonstances; lorsque le matériel est réinitialisé parce qu'il se bloque et lorsque le pilote de périphérique est arrêté. Lorsque le matériel se bloque, l'appareil peut être réinitialisé en appelant ResetEx. Si le matériel se bloque, la mémoire de texture est perdue.

CiscoIPPhone
la source
Pourriez-vous fournir un lien pour cette citation? Nous constatons également que l'appareil est perdu lorsque vous verrouillez le bureau.
Kylotan
J'ai ajouté le lien pour le devis.
CiscoIPPhone
1
la modification du comportement DirectX est un effet secondaire de la modification du modèle de pilote. Autrement dit, il nécessite WDDM. C'est donc Vista / Win7 uniquement.
Bahbar
7

Dans Direct3D, un périphérique peut se perdre lorsque vous ALT-TAB hors de la fenêtre plein écran. Si cela se produit, vous devez libérer et restaurer les ressources et réinitialiser l'appareil. Cela peut être difficile à faire correctement en fonction de la complexité du jeu ou de la paresse des développeurs (salut Valve!). Je ne pense pas qu'OpenGL souffre du même problème parce que le pilote est responsable de garder le contexte OpenGL pour vous, mais je ne suis pas sûr.

Il y a une question sur StackOverflow sur les meilleures pratiques pour la prise en charge ALT-TAB dans une application DirectX qui comprend des liens utiles à partir de MSDN et d'autres sources.

Firas Assaad
la source
3
Vous avez raison, la raison pour laquelle OpenGL n'en souffre pas (autant) est que le pilote conserve une copie de tout pour vous sur Windows. Cela peut amener les applications GL à utiliser plus de RAM que les applications DX, mais une application DX bien comportée devrait tout mettre en cache au cas où elle aurait besoin de restaurer ses données de contexte de toute façon, donc cela revient à qui est la responsabilité de la mise en cache.
Branan
C'est vrai (à propos d'OpenGL).
au
0

Il peut s'agir de la quantité de RAM disponible. S'il est trop bas, lorsque votre jeu s'exécute, Windows cache la plupart de ses services dans la zone de swap (c'est-à-dire qu'il prend la plupart des données chargées dans la RAM et les place à la place dans une zone spéciale de votre disque dur) pour que votre jeu d'avoir autant d'espace RAM disponible que possible.

Ensuite, lorsque vous alt + tab du jeu vers Windows, il a besoin que ces services soient chargés dans la RAM pour fonctionner, donc il prendra vos données de jeu de la RAM, les stockera dans le swap et tirera les données de Windows de le swap à la RAM.

Et comme vous le savez, l'écriture sur le disque dur peut prendre AGES par rapport à la RAM. La même chose se produit également lorsque vous quittez un jeu lourd. C'est pourquoi avoir suffisamment d'espace RAM pour un jeu et des fenêtres peut être vraiment plus confortable.

Aurelien Ribon
la source