张佩的技术库

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

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

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

显卡的渲染操作要和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的控制器(T-Con),让它能够接受外部指令,并在接到外部指令时实时产生一个脉冲,从而产生V-Sync中断。

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

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

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

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

爱情使人忘记时间,时间也使人忘记爱情。

张佩的技术库

相关文章:

你感兴趣的文章:

标签云: