Pregunta

El rendimiento de una aplicación Direct3D parece ser significativamente mejor en modo de pantalla completa en comparación con el modo de ventana. ¿Cuáles son las razones técnicas detrás de esto?

Supongo que tiene algo que ver con el hecho de que una aplicación de pantalla completa puede obtener un control exclusivo para la pantalla. Pero, ¿por qué la aplicación no puede obtener el control exclusivo de parte de la pantalla (es decir, la ventana) y tener los mismos beneficios de rendimiento?

¿Fue útil?

Solución

Aquí están las notas del acantilado sobre cómo funcionan las cosas debajo.

La pantalla del monitor siempre debe asociarse con la llamada superficie primaria para poder mostrar cualquier cosa, es decir, la tarjeta de video solo puede escanear desde una superficie en la memoria de video.

Cuando la aplicación es de pantalla completa (y todo se configuró correctamente para permitir el volteo), la superficie primaria es solo uno de los backbuffers de la aplicación, y se voltea a otro backbuffer cada fotograma. Es la forma más eficiente de presentar en la pantalla, pero requiere que la aplicación posea toda el área del monitor (es decir, toda la superficie primaria).

Cuando no hay una aplicación de pantalla completa y DWM está desactivado, la superficie primaria es propiedad del sistema operativo, y cada aplicación con ventana realiza una interrupción desde el backbuffer de la aplicación a una superficie primaria. Este blit tarda un tiempo en completar la GPU (así como los blits de las otras aplicaciones visibles en la pantalla), por lo que no es tan eficiente como la presentación a pantalla completa. XP funcionó de esa manera.

Cuando DWM está componiendo la pantalla, las cosas se vuelven aún más complicadas. Aquí, DWM posee la superficie primaria y necesita dibujar ventanas de aplicación allí. Para hacerlo posible, cada ventana tiene una superficie asociada que contiene su contenido, llamada superficie de redirección (que permite a DWM habilitar el efecto fantasma de la ventana, los efectos de cristal y todo lo bueno). Cada vez que la aplicación D3D emite un marco, agrega un poco a una superficie de redireccionamiento. De esa manera, deben producirse varios cambios: la transferencia a una superficie de redireccionamiento por parte de la aplicación, la transferencia desde una superficie de redireccionamiento a la primaria por DWM, que es, nuevamente, algo de sobrecarga en comparación con la pantalla completa.

Tenga en cuenta que todo ese trabajo adicional está en la GPU, por lo que no afecta el rendimiento de la CPU.

Cosas para leer más:

http://blogs.msdn.com/greg_schechter/ archivo / 2006/03/19 / 555087.aspx

http://blogs.msdn.com/greg_schechter/ archivo / 2006/05/02 / 588934.aspx

http://blogs.msdn.com/greg_schechter/ archivo / 2006/03/05 / 544314.aspx

scroll top