可变刷新率
可变刷新率 (VRR),也称为自适应同步,允许显示器根据输出信号调整其刷新率。这使得游戏能够消除画面撕裂,同时减少 Vsync 的常见缺点(例如卡顿)。有关 VRR 的全面介绍,请参阅 PC Gaming Wiki。
概述
VRR 有多种实现方式
- FreeSync 是 AMD 对 VESA 的 VRR 标准的实现,这两个术语经常互换使用。带有 FreeSync 品牌的显示器应与所有 VESA 兼容的驱动程序兼容。
- G-SYNC 是 NVIDIA 专有的 VRR 硬件和软件实现。
- 英特尔计划在其即将推出的第 11 代和独立 GPU 中实现 VESA 标准。
为了设置目的,有必要区分获得英伟达自身芯片许可的“原生” G-SYNC 显示器,以及 G-SYNC Compatible 显示器,即支持 G-SYNC 部分功能的 FreeSync 显示器。在 G-SYNC Compatible 显示器类别中,显示器可能已通过或未通过 NVIDIA 验证。即使 VRR 显示器未通过 NVIDIA 的验证(因此在营销材料中不会被称为 G-SYNC Compatible),您仍然可以使用它与 G-SYNC。
驱动程序 | VESA | G-SYNC |
---|---|---|
AMDGPU | FreeSync | 否 |
英特尔 | 计划中 | 否 |
Nouveau | 否 | 否 |
NVIDIA | G-SYNC 兼容 | G-SYNC |
硬件配置
显示器必须通过 DisplayPort 连接。一些实现(部分)HDMI 2.1 规范的显示器也支持通过 HDMI 的 VRR。Nvidia 驱动程序支持此功能,AMD 驱动程序(HDMI 2.1 之前)在 Kernel 5.13 及更高版本中也[4]支持此功能。
Xorg 配置
在 AMDGPU 上启用
只有当您的显示器兼容 FreeSync 且您的 GPU 兼容 FreeSync 时,FreeSync 才可用
- 兼容的 GPU 包括自 2013 年发布的 Radeon™ RX 200 系列起的所有 AMD Radeon™ 显卡,以及所有更新的、使用 GCN 2.0 架构及更高版本的 Radeon 消费级图形产品。
使用 Xorg 配置文件
将该行添加到您的 AMDGPU .conf 文件中 Section "Device"
代码块中
Option "VariableRefresh" "true"
使用 xrandr 验证 vrr_capable 是否设置为 1
$ xrandr --props
vrr_capable: 1 range: (0, 1)
xrandr 将显示所有视频输出端口的属性;请务必查看实际连接到您的显示器的端口 - 其他输出将报告 vrr_capable: 0。
多显示器配置
假设您有一个新的 144Hz FreeSync 功能显示器,并想将其用作主显示器,并将旧的 60Hz 显示器连接为辅助显示器。在这种情况下,您可能需要在 AMDGPU .conf 文件中的 Section "Device"
代码块中启用 AsyncFlipSecondaries 选项
Option "AsyncFlipSecondaries" "true"
此选项自 xorg-server 21.1.0 版本起可用,并将允许同步页面翻转,最高可达您的主显示器支持的最高刷新率。但是,您的辅助显示器可能会出现画面撕裂。
在 NVIDIA 上启用
使用 Xorg 配置文件
通过 nvidia-settings
“原生” G-SYNC 和经过验证的 G-SYNC 兼容显示器应自动启用 VRR。要检查显示器的状态,请打开 nvidia-settings 并导航到您的 GPU(例如 GPU 0),在其下将为每个活动显示器(例如 DP-0、HDMI-0)创建一个节点。在每个显示器框架中,“G-SYNC Mode Available”指示 G-SYNC 支持的状态,即:[5] [6]
- G-SYNC,表示这是“原生” G-SYNC 显示器。默认情况下启用完整 G-SYNC 支持。
- G-SYNC 兼容,表示这是经过验证的 G-SYNC 兼容显示器。默认情况下启用 G-SYNC 支持。
- G-SYNC 未验证,表示这是未经验证的 G-SYNC 兼容显示器。默认情况下不启用 G-SYNC 支持。 [7]
- 无,表示此显示器似乎不支持 G-SYNC。请注意,有些 FreeSync VRR 显示器根本不兼容 G-SYNC。 [8]
如果您有未经验证的 G-SYNC 兼容显示器,您可以覆盖 NVIDIA 的默认设置并为其启用 VRR
- 在 nvidia-settings 中,转到“X Server Display Configuration”页面,然后在“高级”按钮下,有一个选项“Allow G-SYNC on monitor not validated as G-SYNC Compatible”。单击“应用”。
- 现在,在“OpenGL settings”下,选中“Allow G-SYNC/G-SYNC Compatible”。
Wayland 配置
NVIDIA
使用专有驱动程序的 VRR Wayland 需要 Volta GPU 架构或更新版本。
NVIDIA 已从 525 版本驱动程序开始提供 VRR Wayland 支持。在 545 版本之前,存在强制 VSync 问题。在此之后,仍然存在一些问题,这些问题在 NVIDIA 论坛上的 VRR Wayland 线程中有所介绍。
GNOME
GNOME 从版本 46 开始支持 VRR 作为实验性功能。运行 gsettings set org.gnome.mutter experimental-features "['variable-refresh-rate']"
以启用实验性功能,然后通过注销并重新登录来重启会话。然后可以在“显示设置”中的“刷新率”下为每个支持的显示器启用 VRR。在受支持且启用的显示器上运行时,GNOME 会自动为所有全屏应用程序启用 VRR。
KDE Plasma
Plasma 的 Wayland 会话使用 kwin 合成器,该合成器应自动为全屏应用程序启用 VRR [10]。
Sway
Sway 支持可变刷新率。要为所有输出启用它,您可以将以下内容添加到 sway 配置文件中,或在每个输出的基础上应用该设置
output * adaptive_sync on
您可以使用 swaymsg 验证您的显示器是否支持自适应同步
$ swaymsg -t get_outputs
Output DP-1 'Display Name' Adaptive sync: enabled
-D noscanout
启动 sway 来禁用直接扫描输出。 https://github.com/swaywm/sway/issues/7370#issuecomment-1380986291Hyprland
Hyprland 支持可变刷新率。要启用它,您需要在 hyprland.conf 文件的 misc 部分中添加 vrr = 1
或 vrr = 2
[11]
misc { vrr = 1 }
vrr = 1
始终启用可变刷新率,而 vrr = 2
仅为全屏应用程序启用它。
您可以使用 hyprctl 验证您的显示器是否支持自适应同步
$ hyprctl monitors
Monitor DP-2 (ID 0): ... vrr: 1
测试
VRRTest 是一个简单的测试工具,应该适用于 FreeSync 和 G-Sync。安装 vrrtest-gitAUR 或,手动安装 love 软件包,克隆存储库,然后运行
$ love /path/to/cloned/repository
关闭 VRR 后,如果应用程序的 FPS 低于显示器的原生刷新率,则条形图会卡顿很多,因为帧被跳过。启用 VRR 后,条形图将始终在屏幕上平滑移动,因为屏幕的刷新率将与应用程序的刷新率匹配。即使 VRR 功能正常,您也可能会遇到画面撕裂,在这种情况下,您还可以为 AMDGPU 启用 TearFree 选项;同时启用这两者应该既没有卡顿也没有撕裂(nvidia 的等效选项是什么?)。
如果您正在使用 Nvidia GPU,您可以使用 gl-gsync-demoAUR 测试 G-SYNC 兼容性。该程序将允许您测试 VRR 和 Vsync,以便您可以观察结果效果。有关更多信息,请参阅项目的 Readme。
根据此页面:“gl-gsync-demo 是用 G-SYNC 制作的,但这无关紧要,它将很好地测试 AMD 自适应同步”。但是,它可能仍然无法按预期进行 FreeSync 测试。
更改 FreeSync 显示器的 VRR 范围
Freesync 显示器的 VRR 通常具有有限的范围,远低于其最大刷新率。应该可以超频显示器以更改 Freesync 范围。
编辑 EDID 文件
外部显示器识别数据 (EDID) 存储有关显示器的驱动程序信息。默认情况下,此文件由您的显示器发送并在连接时读取。您需要使用类似 read-edid 或 nvidia-settings 的工具提取此文件。
您可以使用 wxedidAUR 编辑此文件。
您可以按照人们在 Windows 上更改 freesync 范围的指南之一: [12][13]
在 Linux 上超频的过程(仅适用于 NVidia GPU): [14]
为您的显示器创建一个 Xorg .conf 文件,并添加您已编辑的自定义 EDID 文件的路径。请参阅 xrandr 以查找有关显示器的其他信息。
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Screen" Identifier "Screen0" Device "nvidia" # e.g. Radeon, nvidia Monitor "DP1" Option “CustomEDID” “MONITOR:/home/USER/Desktop/modified-edid.bin” EndSection
xrandr -–query
命令获取显示 ID。技巧与窍门
从黑名单中移除应用程序
Mesa 有一个黑名单应用程序列表,以避免意外行为,您可以在此处编辑此黑名单
/usr/share/drirc.d/00-mesa-defaults.conf
故障排除
启用 FreeSync 时显示器偶尔掉信号
这很可能是由于固件问题或驱动程序问题导致刷新率低于最小安全边际[15]。您可以通过提高最小垂直刷新范围来缓解此问题。
使用 wxedid
请参阅 #编辑_EDID_文件 或参考此教程。
NVIDIA
或者,您可以在 Xorg 配置文件中编辑 VertRefresh 属性(以下示例由 nvidia-settings 生成)
/etc/xorg.conf.d/20-nvidia.conf
Section "Monitor" # HorizSync source: edid, VertRefresh source: edid Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 223.0 - 223.0 VertRefresh 48.0 - 144.0 Option "DPMS" EndSection
显示器在 Wayland 中未显示为支持 VRR,即使它支持
对于某些设备(例如笔记本电脑显示器),GNOME/Plasma 可能无法在 Wayland 下识别 VRR 功能,即使显示器支持它(并通过 EDID 广告支持)。
这可能是由于您的 greeter(例如 GDM/SDDM)在 X11 上运行,而您的桌面会话在 Wayland 上运行所致。要解决此问题,请将您的 greeter 配置为改用 Wayland(请参阅: SDDM#Wayland)。
已知问题
- Wayland 从 KDE Plasma 5.22(任何兼容的 GPU)和 Sway(无 Nvidia)开始提供支持 [16] [17]。GNOME Wayland 从版本 46 开始作为实验性功能提供支持。
- 如果您想在 X11 上使用 G-SYNC 和可能的 Freesync,则只能连接 G-SYNC/Freesync 显示器。
- 在 X11 上,单个 X 显示器中的多个显示器会破坏 G-SYNC/Freesync,但是,Wayland 上不存在此问题。
- 设置为复制/克隆主显示器的辅助显示器不会破坏主显示器上的 G-SYNC/Freesync。
- 如果在 X11 上,如果您想使用多个显示器并仍然使用 G-SYNC/Freesync,您可以创建一个新的 X 显示器,该显示器仅覆盖 G-SYNC/Freesync 显示器并在那里运行游戏。
- 启动 OpenGl/Vulkan 程序之前,很可能需要禁用合成器(在 Wayland 上禁用合成器是不相关或不必要的)[18]。
- 在 X11 上,Mesa 黑名单 将许多应用程序列入黑名单,包括视频播放器。
- 尽管在较高的刷新率下画面撕裂不太明显,但 FreeSync 显示器的 VRR 范围通常有限,为 90Hz,这可能远低于其最大刷新率。请参阅 更改 FreeSync 显示器的 VRR 范围。