码迷,mamicode.com
首页 > 其他好文 > 详细

GPU异步V-Sync技术方案

时间:2015-02-12 10:49:37      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:v-sync   gpu   

引用注明>> 【作者:张佩】【原文:www.YiiYee.cn/blog

2014年中,我在Intel内部提交了一个名为“异步Timing”(又名“异步V-Sync”)创新方案,用于解决GPU使用V-Sync同步所导致的问题。但十分可惜的是,Intel的创新审核委员没有通过我的方案,只礼貌性地回了一封感谢邮件。这件事情本来尘埃落定,我已不作多想。但最近很多IT新闻介绍了AMD在今年CES上所展示的一项FreeSync技术,惊喜颇多。我发现AMD的FreeSyn技术所要解决的问题和采取的策略,与我的“异步Timing”的设计方案十分相似。我写作此文,向大家介绍V-Sync的基本概念和产生的问题,以及异步Timing方案的细节。

在计算机图形显示系统中,这几个概念是相互关联的:Timing(时序),V-Sync(垂直同步),Refresh Rate(刷新率)。它们是从同一个地方衍生出的概念:Timing Controller(时序控制器,简称T-Con)经过配置后产生连续的Timing时序,Timing时序决定了何时会产生一个V-Sync中断;显示器每收到一个V-Sync中断,便开始一次显示刷新;显示器每秒刷新的次数就对应了它的Refresh Rate(刷新率)。

技术分享

GPU使用的T-Con所产生的都是等时 Timing (Isochronous Timing):即固定频率的Timing,在固定时间间隔内产生一个 脉冲(Pulse),脉冲的上升沿代表将产生一个V-Sync中断。系统必须同步于Timing:显示器在收到V-Sync时进行显示刷新,显卡根据V-Sync进行图形渲染(Render)。

等时 Timing

Timing是显卡设备和输出设备进行同步的关键。等时Timing产生固定频率的脉冲信号,以将显卡的渲染(Render)和monitor的显示(Display)进行同步。但是显卡每次渲染任务的轻重程度是不相等的,根据被处理数据的复杂程度,渲染所耗费的时间长短不一。换句话说:渲染是天然不等时的,而显示器总是等时地刷新内容,二者将因此产生矛盾。

另一方面,很多时候,系统显示静态图像或桌面内容长时间不变,这使得GPU在很长时间内没有新内容可供其渲染,而显示器却一如既往地进行刷新,显示内容却未改变。

等时Timing导致了两个方面的缺点:渲染过程中的FPS(Frames Per Second每秒帧数)损失,显示工程中的电能损失。

FPS

显卡的渲染操作要和V-Sync同步,以避免画面的撕裂。假设只有一个Frame Buffer的情况下,平均渲染一个Frame需要1.1 个V-Sync时间。第一个V-Sync到来时当前渲染还没有结束,只能继续占用下一个V-Sync周期。在第二个V-Sync周期,显卡其实只需要0.1时间。但因为渲染必须与V-Sync同步,使得显卡在剩下的0.9时间内不能再使用Frame Buffer以免污染其中未被显示的帧数据。等到第二个V-Sync到来时,显卡提交Frame Buffer内容后,才能安全地继续渲染新的下一帧。在这个示例中,显卡为了与V-Sync同步,它对硬件的使用效率只有11/20(~50%),严重浪费了硬件资源。

在使用单Frame Buffer的情况下,硬件资源的浪费最大接近于1/2。使用Double Frame Buffer或Tri Frame Buffer可改善这种情况:使用Double Frame Buffer配置的最大的浪费接近于1/3,使用Tri Frame Buffer配置的最大浪费接近于1/4。硬件资源的浪费,导致一些Frame的渲染被延迟或丢弃,从而导致FPS损失。

很多3D软件和游戏提供选项让用户禁用V-Sync同步以充分利用硬件的渲染能力。但禁用V-Sync会导致画面撕裂的情况,体验很不好。以Single Frame Buffer为例:

在第二个V-Sync周期内,第一个Frame已经在0.1时间内渲染完成,显卡如果不等待下一个V-Sync中断而继续进行渲染操作,就会把新的内容填入到Frame Buffer中,从而覆盖掉上一次渲染出的一部分内容。在下一个V-Sync到来时,用户看到的就是一个两帧上下重叠的撕裂画面。

能耗损

和D3D软件追求FPS最大化的情况相反,用户在一般使用电脑时,如使用office软件或浏览网页时,显示内容的更新速度是很慢的,可能几秒或十几秒钟保持桌面内容不变。但LCD显示器并不知道这一点,对于60Hz的固定刷新率而言,显示器会把相同的显示内容每秒钟重复刷新屏幕60次。导致了很大的能耗损失。这种能耗损失是结构性的,如此大的结构性能耗损失,对于移动设备更是十分地致命。

异步 Timing

基于等时Timing的上述缺点,本文将引入异步 Timing。他的核心原理是:显卡完成一帧内容的渲染后,动态产生V-Sync中断通知显示器刷新;动态V-Sync产生后,显卡可以立即渲染新的帧内容,不必有任何的等待;而显示器只在必要时才刷新屏幕,极大地降低了能耗。下图是关系图。

技术分享

下图描述了异步 Timing的形态,它产生非等时的脉冲信号,每个脉冲表示一个V-Sync的产生。当没有脉冲时,表示显卡还没有渲染出新的帧内容,在此期间,显示器不必刷新。

技术分享

实现方

本节提出两种可能的异步 Timing的实现方法。

方法1:动态脉

改造当前使用的等时 Timing的控制器(T-Con),让它能够接受外部指令,并在接到外部指令时实时产生一个脉冲,从而产生V-Sync中断。

方法2:特殊通信通道

在显卡和显示器之间建立特殊的数据通道来通知异步V-Sync的产生,可借助现有的数据通道,如DVI/HDMI的I2C Channel,DP的Aux Channel。

异步 TIMING 的频

异步 Timing没有固定的频率,只有当显卡有渲染好的内容时,才产生一个信号。现实情况下,大多数LCD显示器的电子元器件有漏电的情况,会导致信号衰退,所以需要维持一个最低的屏幕刷新率来抵消信号衰退的影响。可以让显示器提供最小刷新率信息,并由显卡来满足。

显示器端的处

除了提供最小刷新率信息外,显示器端的改变很少。显示器在收到V-Sync中断时,以原来的逻辑处理新的帧内容。唯一变化是原来等时的V-Sync变成了非等时的。也就是显示器在处理完一帧内容后,等待时间将变得长短不一。

下图中VP是处理一帧内容的全部时间,VDISP是处理可视部分内容的时间,VFP是处理完可视内容后的回扫时间。在等时 Timing中,VFP之后就紧接着是下一帧的VS时间;但异步 Timing中,VFP之后是长短不一的等待时间。

技术分享

GPU异步V-Sync技术方案

标签:v-sync   gpu   

原文地址:http://blog.csdn.net/blog_index/article/details/43759079

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!