Pourquoi Direct3D application est plus performante en mode plein écran?
Les performances d'une application Direct3D semble être beaucoup mieux en mode plein écran par rapport à la mode fenêtré. Quelles sont les techniques des raisons derrière tout cela?
Je suppose que cela a quelque chose à voir avec le fait qu'un plein écran de l'application peut acquérir le contrôle exclusif de l'affichage. Mais pourquoi l'application ne peut pas acquérir le contrôle exclusif de partie de l'écran (fenêtre) et d'avoir les mêmes avantages de performance?
- Par curiosité, avez-vous essayé que sur Vista? Avec DWM activé, j'ai éprouvé de la fenêtre en mode vitesse plutôt supérieur sur mon système dans une application XNA (plus élevé, car les moins de remplissage taux est nécessaire, mais le point est qu'il n'est pas plus lent).
- Oui je suis sous Vista avec DWM activé. Je comprends aussi que Vista désactive DWM lorsqu'un plein écran de l'application est active pour libérer des ressources.
- Vista désactive DWM uniquement si la demande est incompatible. J'ai quelques jeux en cours d'exécution fine avec Aero Glass quand en plein écran (visible sur les autres moniteurs). Si, en général, c'est vrai, la plupart des jeux de désactiver DWM.
- Depuis Windows 8, vous pouvez avoir votre gâteau et le manger trop avec DirectFlip. Fondamentalement DWM détecte si la composition serait un no-op et utilise à la place de votre framebuffer directement, en vous donnant les mêmes performances.
Vous devez vous connecter pour publier un commentaire.
Voici la falaise notes sur la façon dont les choses fonctionnent en dessous.
Écran du moniteur doit toujours être associés aux primaires sur la surface pour être en mesure d'afficher quoi que ce soit, c'est à dire la carte vidéo ne peut balayage d'une surface dans la mémoire vidéo.
Lorsque l'application est en plein écran (et tout ce qui a été mis en place correctement pour permettre le retournement), la surface est simplement celui de l'application backbuffers, et est retourné à l'autre backbuffer chaque image. C'est le moyen le plus efficace de la présentation sur l'écran, mais il exige l'application de posséder l'ensemble de la zone de surveillance (c'est à dire toute la primaire de surface).
Quand il n'y a pas de plein écran de l'application et DWM est éteint, primaire surface est détenue par les OS, et chaque fenêtre de l'application effectue un blit de l'application backbuffer à partir d'une première surface. Cette blit prend un peu de GPU temps pour le terminer (ainsi que les blits les autres applications visible sur l'écran), il n'est donc pas aussi efficace que le plein écran de présentation. XP travaillé de cette façon.
Lorsque le DWM est la composition de l'écran, les choses deviennent encore plus compliquées.
Ici, DWM est propriétaire de la principale surface et à attirer l'application windows il. Pour la rendre possible, chaque fenêtre est associée à une surface de la tenue de son contenu, appelée redirection de surface (qui permet DWM pour activer la fenêtre de création de fantômes, effets de verre, et que toutes les bonnes choses). Chaque fois que D3D les problèmes d'application d'une image, il ajoute un blit à une redirection de surface.
De cette manière, plusieurs blits qu'il faut faire: blit à une redirection de surface par l'application, blit d'une redirection de la surface de la primaire par DWM, qui est, encore une fois, certains frais généraux par rapport à plein écran.
Remarque tous que des travaux supplémentaires sur le GPU, de sorte qu'il n'affecte pas les performances du PROCESSEUR.
Trucs à lire:
http://blogs.msdn.com/greg_schechter/archive/2006/03/19/555087.aspx
http://blogs.msdn.com/greg_schechter/archive/2006/05/02/588934.aspx
http://blogs.msdn.com/greg_schechter/archive/2006/03/05/544314.aspx
Il y a un peu sur MSDN qui dit mode plein écran utilise de la mémoire tampon de retournement, s'il est configuré correctement, plutôt que de blitting. Cela a du sens.
Bien sûr, vous pouvez (et dans un sens, n') donner le contrôle exclusif d'une partie de l'écran pour une application, mais ce qui se passe dans le reste de l'écran? Vous avez encore blit, ne occlusion de contrôle, etc ... sur le reste du windows, et je pense que c'est quelles sont les causes de la dégradation des performances.
Je vais ajouter à @aib's réponse que le reste de l'écran est géré par l'OS. Donc, si quelque chose d'autre doit être dessinée/travaillé simultanément, il y a un gain de performance.
Par exemple, si vous avez de la lecture d'une vidéo dans le Lecteur Windows Media dans une fenêtre, puis démarrez la Civilisation à l'autre, lorsque Civ commence à faire ses graphiques de fantaisie, vous devez l'écran de partage de l'espace avec tout le reste (comme la vidéo.
Alors que si le DirectX application est en plein écran, tout le reste peut être "mise à jour" ou "jouer", mais pas dessinée.
Fondamentalement, le matériel vidéo est entièrement dédié à l'application en mode exclusif.
Il n'y a pas de conflit pour les ressources vidéo (pipeline, la texture de la mémoire, etc...)
En particulier, la texture de téléchargement peut être un gros goulot d'étranglement. Le moins vous avez à faire (parce que vous l'avez tous), le meilleur.