翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书[通俗易懂]

翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书[通俗易懂]译者注以下为正文。介绍多年来,显示行业一直普遍认为显示器是以固定的刷新率(refreshrate)运行的,如60Hz。这与以下事实形成鲜明对比:送给显示器的图像内容多种多样,每种图像都有自己独特的、变化的帧率(framerate)。当显示的刷新率与图像内容自身的帧率不同步时,用户可能会察觉到撕裂(tearing)和卡顿(stutter)之类的异常效果。在移动应用程序中(如平板、笔记本电脑),对于静态图像和视频播放来说,较高的显示刷新率不仅显得多余,还增加了系统功耗,降低了续航能力。这些因素使得我

大家好,又见面了,我是你们的朋友全栈君。

译者注

近两年,VRR 技术又开始火了起来,无论是 DRM 驱动框架,还是 Xorg 、Sway (Wayland Compositor),都陆续添加了对 VRR 的支持。就连今年即将发布的 AndroidR,也都原生支持了 VRR 的功能。其实 VRR 技术早在 2014 年就已经提出了,但一直用于 PC 平台。随着移动平台 GPU 和 Display 硬件技术的不断发展,可支持的帧率和分辨率也越来越高,游戏玩家对于游戏体验的流畅度要求也越来越高。再加上越来越多的手机开始支持 DisplayPort 接口,将 VRR 技术运用于移动平台已经成为新的趋势。因此本人决定将 VESA Adaptive-Sync 白皮书翻译成中文,方便大家阅读。

由于 VESA Adaptive-Sync 标准主要由 AMD 工程师参与定制,因此它实际上就是 AMD Project FreeSync 的一个子集,FreeSync 除了支持 DisplayPort 接口外,还支持 HDMI 接口。《VESA Adaptive-Sync 白皮书》其实就是《AMD Project FreeSync 白皮书》的修改版,因此本文也加入了 FreeSync 的一部分内容(即“实现方案简介”一节)。

以下为正文内容。

介绍

多年来,显示行业一直存在一种普遍的认识,即显示器是以固定不变的刷新率(refresh rate)来显示的,如 60Hz。这与以下事实形成鲜明对比:送给显示器的图像内容多种多样,每种图像都有自己特有的、变化的帧率(frame rate)。当显示的刷新率与图像自身内容的帧率不同步时,用户可能会察觉到撕裂(tearing)和卡顿(stutter)之类的异常效果。在移动终端上(如平板、笔记本电脑),对于静态图像和视频播放来说,较高的显示刷新率不仅显得多余,还增加了系统功耗,降低了续航能力。这些影响促使我们去寻找一种技术,能允许显示刷新率适应图像自身内容的帧率变化。视频电子标准协会(VESA®)已经制定了这样一个行业标准,通过 DisplayPort 和 Embedded DisplayPort(eDP)接口,实现交互式的可变刷新率(VRR,Variable Refresh Rate)功能,也就是 “Adaptive-Sync” 技术。本文描述了该技术的使用场景,以及它给我们带来了哪些好处。

图 1 展示了 VRR 方案如何让 graphics source 基于典型的内容帧率来动态调节显示刷新率,从而实现省电、无卡顿(stutter-free)和低延迟(low-latency)的画面更新效果。

图 1: 基于内容动态调节的显示刷新率
在这里插入图片描述

DisplayPort Adaptive-Sync 使用场景

游戏场景

VRR 技术可以大大改善游戏的用户体验。在一个典型的游戏场景中,由于整个游戏过程中 GPU 运算工作量各不相同,渲染的帧率也会随着时间变化差异很大(如图2所示)。那些细节很少或特效很少的场景将以高帧率快速渲染,而其他具有更多细节和特效的场景(如爆炸、烟雾等场景)则可能需要较长的渲染时间。这种帧率的变化通常会让玩家在选择屏幕刷新方式时进行权衡,比如在他们的设置程序中开启“VSync”同步功能。

图 2: 典型游戏场景中渲染帧率随时间变化的曲线图
在这里插入图片描述

启用“VSync”同步后,Display 硬件只会在帧与帧之间的 VBLANK (垂直消隐)区间切换显示 buffer,这样就能保证显示器上始终显示的是一帧完整的画面,且不会出现撕裂的现象。这对于游戏渲染帧率高于显示刷新率的情况来说,效果非常好。但如果游戏的帧率低于显示的刷新率(例如,在短时间内出现大量密集的动作),那么新渲染的一帧就不能及时的在 VBLANK 区间内准备就绪,于是上一帧老的画面就会在显示器上重复显示。如下图 3 所示,因为 B 帧需要较长的渲染时间,导致 A 帧不得不被重复显示2次,最终的结果就是用户感知到了卡顿和延迟。对于该问题,游戏玩家通常会选择禁用 VSync,这的确能避免卡顿和延迟,但它却带来了撕裂的问题,尤其是在快速移动的场景中,撕裂现象尤为明显。

图 3:VSync(上) 与 Adaptive-Sync (下)工作方式的区别
在这里插入图片描述

VRR 技术,如 DisplayPort Adaptive-Sync,提供了一种机制,允许显示刷新率随着游戏的渲染帧率而动态变化,以此来解决上面遇到的问题。就像图3下半部分所展示的那样,在更新显示 B 之前,Display 硬件会一直等到该帧彻底渲染完成后才开始执行刷新动作,这样可以确保每帧几乎都是在第一时间显示出来的,从而避免了延迟的发生。同时还能确保每帧不会在 Display 硬件的刷新周期内被重复显示,因而也避免了卡顿的问题。显示刷新率与渲染的帧率同步后,还可以避免因关闭 VSync 所造成的撕裂问题。DisplayPort Adaptive-Sync 技术为实现流畅的游戏体验提供了理想的解决方案,既降低了延迟,又避免了撕裂的发生。

视频播放场景

DisplayPort Adaptive-Sync 还可以用于游戏之外的应用场景,比如对于具有固定播放帧率的视频,可以将显示刷新率调整为视频播放的帧率,以此来实现几乎任何帧率视频的流畅播放(如 23.98 fps、24 fps、25 fps、29.97 fps、30 fps、48 fps、50 fps、59.94 fps、60 fps)。DisplayPort Adaptive-Sync 可以在几乎任何视频帧率下提供几乎无抖动的播放,而无需高成本的帧率转换后处理(FRC,Frame Rate Conversion),这也有助于降低视频播放时的整机功耗。

系统功耗优化场景

VRR 技术作为笔记本内嵌显示面板的一项系统节能技术,已经被笔记本制造商使用了多年。Embedded DisplayPort (eDP)接口早已具备支持该技术的能力,例如,当系统进入静态画面显示状态时(即屏幕上没有新的内容更新),显示器的刷新率会降低到它所能支持的最低频率,以此来节省功耗。终端用户是感知不到刷新率的切换的,而且因为不需要额外的硬件来开启这一功能,对 PC 制造商而言成本也很低。

实现方案简介

AMD 的 Project FreeSync 实现方案需要在每帧的基础上调整 VBLANK 持续时间,以此来改变所产生的帧周期,进而改变刷新率。图 4 中展示了通过增加 VBLANK 的时间来实现降低刷新率的方法。

图 4:调整 VBLANK
在这里插入图片描述

在这种操作模式下,DisplayPort receiver 必须忽略与 VBLANK 相关的时序变化,此时就必须从 DisplayPort source 端跟踪时序,DisplayPort source 将通过写寄存器的方式来通知 receiver 进入此操作模式。要想达到即插即用的用户体验,显卡驱动程序需要读取显示器上报的能力来实现对该功能的支持。显示器的 EDID 必须正确的标识它是一个“连续可变频率的显示器”,并上报显示器所支持的刷新率范围,以便显卡驱动设置刷新率范围(最小值和最大值)。

总结

总之,VESA 的 DisplayPort Adaptive-Sync 标准可用于创造具有 VRR 功能的产品,它给我们带来了如下好处:

  • 根据变化的游戏渲染帧率动态调节显示刷新率,以实现低延迟、高流畅、几乎无卡顿的游戏体验。
  • 动态地将显示刷新率调整为固定的视频内容播放帧率,从而达到省电、几乎无卡顿的视频播放体验。
  • 当屏幕显示画面静止时,通过降低显示面板的刷新率,有助于提高电池的续航能力
  • 能够确保显示刷新率之间是无缝切换的,用户无感知的

原文链接

  1. 《VESA Adaptive-Sync Whitepaper》
  2. 《AMD Project FreeSync Whitepaper》
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132742.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WPF特效-鱼游动动画

    WPF特效-鱼游动动画

    2021年6月10日
    103
  • 每天一道算法_2_求高精度幂

    今天这个可能有点偷懒,学c++的时候就知道大数计算很复杂,现在一直用java,有幸有大数的方法可以用那么今天的算法就用java偷懒过去吧Description对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 现在要你解决的问题是:对一个实数R( 0.0 n),其中n 是整数并且 0 InputT输入包括多组 R 和 n。

    2022年3月10日
    38
  • 东芝笔记本电脑重装系统按F几(戴尔笔记本重装系统)

    东芝笔记本电脑怎么重装系统?其实笔记本东芝要怎么重装系统的方法很简单,具体要怎么给东芝笔记本电脑重装系统呢?其实笔记本重装系统是非常简单的,那笔记本东芝如何重装系统呢?那下面就让小白小编给大家介绍笔记本东芝如何重装系统的解决方法吧。大家赶紧学习东芝笔记本重装系统吧。东芝笔记本重装系统方法1、去网站下载win7旗舰版镜像文件。2、使用软碟通软件把镜像文件里面的gho.win7提取到已经制…

    2022年4月13日
    141
  • 用Xshell连接虚拟机Linux「建议收藏」

    用Xshell连接虚拟机Linux「建议收藏」首先,要将虚拟机中的Linux系统设置为桥接模式。然后进一步确认虚拟机的ip地址跟本机地址在同一个网段(要ping的通)。具体操作如下:1、查看我本机的IP地址是:10.253.0.512、继续查看虚拟机中linux系统的IP地址是:10.253.0.91然后在windows上ping一下:可见完全是ping的通的。3、接下来配置Linux的

    2022年9月22日
    0
  • 空指针引用故障(空指针解引用)「建议收藏」

    空指针引用故障(空指针解引用)「建议收藏」C语言中的指针机制使得它灵活高效,但由于指针操作不当产生的动态内存错误也有很多,比如内存泄漏(MemoryLeakage)、内存的重复释放、空指针解引用(NullPointerDereference)。其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元。当指针指向无效内存地址时对其引用,有可能…

    2025年6月7日
    0
  • ubuntu eclipse 乱码「建议收藏」

    ubuntu eclipse 乱码「建议收藏」今天,把windows下的工程导入到了Linux下eclipse中,由于以前的工程代码,都是GBK编码的(Windows下的Eclipse默认会去读取系统的编码,所以Widnwos下的Eclipse的编码为GBK),而Ubuntu默认是不支持GBK编码的。所以,首先我们要先让Ubuntu支持GBK,方法如下:修改/var/lib/locales/supported.d/local文

    2022年5月25日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号