首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有7个后台缓冲区的DirectX 11交换链

具有7个后台缓冲区的DirectX 11交换链
EN

Stack Overflow用户
提问于 2012-06-04 17:35:30
回答 2查看 3.1K关注 0票数 5

我有一个可以在桌面模式下运行在Windows8上的专业媒体播放器。运行时DirectX版本是11,但本机图形驱动程序支持是针对DirectX 9的。

在一些具有完全相同设置的计算机上,我看到实际交换链的后台缓冲区计数是2,性能很好,而在其他一些计算机上,后台缓冲区计数是7,并且有丢弃的帧。

我没有该播放器的源代码,我想知道在运行时确定不同的后台缓冲区计数的原因是什么。

有人能解释一下为什么这样的后台缓冲区计数会导致性能发生这样的变化吗?或者直接参考相关文档来解释backbuffers数量的含义?

(更多调试信息:使用GPUView时,我看到当backbuffer count为2时,硬件以同步模式工作,即每秒VSync (剪辑帧速率为30fps)中HW队列中的一个数据包,当7个backbuffer的工作一起完成5-7帧时,然后是一些空VSyncs,然后是5-7帧,依此类推)。

提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-19 18:05:07

好吧,我从微软那里得到了答案。这是为了在使用DC (电池)工作时节省电力-这样处理器就可以唤醒以处理所有可用缓冲区,将它们发送到GPU继续工作,并在更长时间内进入更深层次的省电模式。

票数 5
EN

Stack Overflow用户

发布于 2012-06-07 18:15:30

我真的看不到拥有4个以上的缓冲区的用处(四个缓冲区,用于stereoscopy)。大多数应用程序使用2个缓冲区(双缓冲),以便应用程序可以在将第一个(前)缓冲区呈现给监视器时开始将下一帧绘制到第二个(后)缓冲区,否则,应用程序必须等到前缓冲区完成对屏幕的绘制后才能开始绘制下一帧。三重缓冲只是对这一想法的扩展,因此有两个后台缓冲区。这样,如果应用程序能够以比前台缓冲区显示在屏幕上更快的速度完成整个缓冲区的绘制,那么它就可以开始将下一帧绘制到第三个缓冲区,而不是等待前台缓冲区完成显示。

我不确定这是否真的回答了你关于使用7个缓冲器的其他应用程序的问题,但我同样认为没有必要,因为监视器通常只以60到75 60的频率刷新。

如果你的应用程序运行得如此之快,以至于它能够在第一个缓冲区完成呈现之前绘制两个缓冲区,那么只需让应用程序休眠,直到前端缓冲区结束,以便让其他一些程序有机会使用cpu,或者花一些额外的时间为你的应用程序做一些其他的处理。如果它是一个媒体播放器,你可以花额外的时间做一些更昂贵的操作来提高媒体的播放质量。

这里有一个描述缓冲的链接,但他们不会讨论超过4个缓冲区,可能是因为没有必要。

http://en.wikipedia.org/wiki/Multiple_buffering

另外,也许应用程序在使用7个缓冲区时可能会丢失一些帧率的原因,是因为应用程序可能无法在所有缓冲区需要显示在屏幕上之前保持写入。如果使用了多线程,情况可能就不是这样了,因为在应用程序完成对所有其他后台缓冲区的绘制之前,下一个缓冲区可能会显示在屏幕上。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10879183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档