smt*_*smt 24 directx performance direct3d fullscreen
与窗口模式相比,Direct3D应用程序在全屏模式下的性能似乎要好得多.这背后的技术原因是什么?
我想这与全屏幕应用程序可以获得显示器的独占控制这一事实有关.但是为什么应用程序无法获得部分屏幕(即窗口)的独占控制权并具有相同的性能优势?
小智 23
以下是关于事物如何在下面工作的悬崖笔记.
监视器屏幕总是需要与所谓的主表面相关联才能显示任何东西,即视频卡只能扫描出视频存储器中的一个表面.
当应用程序是全屏的(并且所有内容都设置正确以启用翻转)时,主表面只是应用程序后备缓冲区之一,并且每帧都会翻转到另一个后备缓冲区.这是在屏幕上呈现的最有效方式,但它需要应用程序来拥有整个监视区域(即整个主要表面).
当没有全屏应用程序并且DWM关闭时,主表面由OS拥有,并且每个窗口化应用程序执行从应用程序后备缓冲区到主表面的blit.这个blit需要一些GPU时间来完成(以及屏幕上可见的其他应用程序的blits),因此它不如全屏演示效率高.XP以这种方式工作.
当DWM组成屏幕时,事情变得更加复杂.这里,DWM拥有主表面,需要在那里绘制应用程序窗口.为了使它成为可能,每个窗口都有一个相关的表面,其中包含其内容,称为重定向表面(允许DWM启用窗口重影,玻璃效果和所有好东西).每次D3D应用程序发出帧时,它都会向重定向表面添加一个blit.这样,需要发生几个blits:应用程序向重定向表面进行blit,通过DWM从重定向表面blit到主要部分,与全屏相比,这也是一些开销.
请注意,所有这些额外工作都在GPU上,因此它不会影响CPU性能.
进一步阅读:
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