rke*_*erm 5 directx performance directx-11 windows-8 dxva
我有一个在桌面模式下在Windows 8上运行的专有媒体播放器.运行时DirectX版本是11,但本机图形驱动程序支持适用于DirectX 9.
在一些具有完全相同设置的计算机上,我看到实际交换链的后缓冲区计数为2,性能很好,而在其他一些计算机上缓冲区计数为7,并且有帧丢弃.
我没有该播放器的源代码,并想知道在运行时确定不同后台缓冲区计数的原因是什么.
有人可以解释为什么这样的后备缓冲计数导致性能的这种变化?或者只是向我指出解释反向缓冲区数量影响的相关文档?
(更多调试信息:使用GPUView我看到当后备缓冲计数为2时,硬件以同步模式工作,即每秒VSync中的一个数据包在HW队列中(Clip帧速率为30fps),对于7个后备缓冲区,工作是一起完成5-7帧,然后一些空VSyncs,然后再5-7帧,依此类推).
先感谢您!
我真的没有看到使用超过4个缓冲区(四缓冲,用于立体视觉).大多数应用程序使用2个缓冲区(双缓冲),以便应用程序可以开始将下一帧绘制到第二个(后面)缓冲区,同时将第一个(前面)缓冲区呈现给监视器,否则,应用程序将不得不等到前缓冲区在完成绘制下一帧之前已完成绘制到屏幕.三重缓冲只是扩展了这个想法,因此有两个后缓冲区.这样,如果应用程序能够以比前缓冲区呈现给屏幕更快的速度完成整个缓冲区的绘制,那么它可以开始将下一帧绘制到第三缓冲区,而不是等待前缓冲区完成呈现.
我不确定这是否真的能回答你关于使用7个缓冲区的其他应用程序的问题,但我不认为有必要,因为监视器通常只以60到75Hz的速率刷新.
如果您的应用程序运行速度很快,它可以在第一个缓冲区完成呈现之前绘制2个缓冲区,只需将应用程序置于睡眠状态,直到前缓冲区完成,以便为其他程序提供使用cpu的机会,或者花费额外的时间为您的应用程序做一些其他处理.如果它是一个媒体播放器,你可以花费额外的时间做一些更昂贵的操作来提高媒体播放的质量.
这里有一个描述缓冲的链接,但他们并没有谈论超过4个缓冲区,可能是因为没有必要.
http://en.wikipedia.org/wiki/Multiple_buffering
PS可能是应用程序在使用7缓冲区时可能会丢失一些帧速率的原因,因为应用程序可能无法在需要将它们呈现到屏幕之前继续写入所有缓冲区.如果使用多线程,则可能不会出现这种情况,因为在应用程序完成绘制到所有其他后台缓冲区之前,可以将下一个缓冲区呈现给屏幕.
好吧,我得到了微软的答复。这是为了在使用 DC(电池)时节省电量 - 这样处理器可以唤醒处理所有可用的缓冲区,将它们发送到 GPU 进行处理,并在更长时间内进入更深的省电模式。