FreeSync
There are issues with DRM v6.1 and 6.6 regarding functionality of FreeSync, see PR 277558
The workaround for that issue is enabling VSync in your application to trigger FreeSync again.
This article currently only covers the traditional way while its also possible to use HDMI or other vendors instead of AMD for example.
If you are have such an working setup then it would be nice if this article could be extended.
Introduction
FreeSync, also known as Variable Refresh Rate (VRR) is a technology that prevents the tearing of images on screen.
The refresh rate of the monitor is adapted to the frame rate produced by the GPU so that no screen tearing occurs.
The big advantage is that there are no delays as with VSync, for example. In addition, games that have a very poor or unstable frame rate (to a certain degree) can still look smooth.
Contents
Requirements
Using DisplayPort (with a VESA certified cable, optional but recommended)
FreeSync capable monitor
FreeSync capable AMD GPU
graphics/mesa-libs and graphics/mesa-dri version 19 or better.
DRM version 5.4 or better.
xf86-video-amdgpu version 19 and better or xorg-server version 21.1.0 and better.
- Game window has to be "Fullscreen" or "Borderless Windowed"
- Compositor has to be disabled and no additional overlays or things like that should be running.
How to enable FreeSync
Create the file /usr/local/etc/X11/xorg.conf.d/amdgpu.conf and write the following to it:
If you want to use the modesetting driver by xorg-server instead of xf86-video-amdgpu, use modesetting in Driver instead.
Section "Device" Identifier "Card0" Driver "amdgpu" Option "VariableRefresh" "true" EndSection
Verifying that FreeSync is Enabled
Run xrandr --prop provided by x11/xrandr
This lists all connections with all their capabilities and vrr_capable should be set to 1 for the connection you want to use. If it is set to 0 then FreeSync is not enabled on your monitor.
Example:
DisplayPort-1 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 697mm x 392mm EDID: 00ffffffffffff004c2dde0f35305630 271d0104a54627783b4935ad5146a927 0f5054bfef80714f810081c081809500 a9c0b300010122e50050a0a067500820 f80cb9882100001a000000fd003090e1 e13b010a202020202020000000fc0043 33324a4735780a2020202020000000ff 0048544f4d3930303530360a20200141 020313f146901f041303122309070783 010000565e00a0a0a0295030203500b9 882100001a023a801871382d40582c45 00b9882100001e5aa000a0a0a0465030 203500b9882100001a6fc200a0a0a055 5030203500b9882100001a0000000000 00000000000000000000000000000000 000000000000000000000000000000af GAMMA_LUT_SIZE: 4096 range: (0, -1) DEGAMMA_LUT_SIZE: 4096 range: (0, -1) GAMMA_LUT: 0 range: (0, 65535) CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 DEGAMMA_LUT: 0 range: (0, 65535) TearFree: auto supported: off, on, auto subconnector: Native supported: Unknown, VGA, DVI-D, HDMI, DP, Wireless, Native vrr_capable: 1 range: (0, 1) max bpc: 8 range: (8, 16) underscan vborder: 0 range: (0, 128) underscan hborder: 0 range: (0, 128) underscan: off supported: off, on, auto scaling mode: None supported: None, Full, Center, Full aspect link-status: Good supported: Good, Bad CONNECTOR_ID: 76 supported: 76 non-desktop: 0 range: (0, 1) 2560x1440 144.00*+ 120.00 99.95 59.95 1920x1200 144.00 1920x1080 60.00 50.00 59.94 1600x1200 144.00 1680x1050 59.95 1600x900 60.00 1280x1024 75.02 60.02 1440x900 59.89 1280x800 59.81 1152x864 75.00 1280x720 60.00 50.00 59.94 1024x768 75.03 70.07 60.00 832x624 74.55 800x600 72.19 75.00 60.32 56.25 720x576 50.00 720x480 60.00 59.94 640x480 75.00 72.81 66.67 60.00 59.94 720x400 70.08
Checking if FreeSync Works
Try playing games where you know tearing can occur, or check your monitor's OSD to see if the refresh rate changes (if the monitor provides it).
Example from an Alienware OSD:
Disabling the Compositor
For technologies such as FreeSync to work properly, the games must address the GPU directly, i.e. the image shouldn't go through a compositor first. (Known as fullscreen window unredirect.)
But also in general it is important that the compositor is off when you play something, as this affects the performance and delay somewhat.
The following lists are incomplete.
List of environments/window managers that allow to or automatically turn off the compositor when an application is in full screen mode:
- Budgie (unreliable¹)
- Cinnamon (Port needs to be updated) (unreliable¹)
- Enlightenment (unreliable¹)
- GNOME (unreliable¹)
- KDE
- MATE
- Metacity
- XFCE
¹ Works only partially or not at all.
List of environments/window managers that dont use a compositor by default:
- IceWM
- JWM
- Openbox
Screen Flickering
If you have a game where the frame rates jump back and forth too often in large intervals and also between the FreeSync ranges, the image can flicker.
The intensity of that flickering depends on the model. With some models it can even happen that frame drops occur, so it is advisable to solve this directly.
To solve this: Limit the frame rate to your refresh rate, if the game has no framelimiter then enable Vsync. If the game is unstable inside the FreeSync range then try to enable some functions such as triple buffering or frame smoothing.
If nothing helps, the game must be run in windowed mode so that it FreeSync gets not used.
Notes
FreeSync should not be used together with TearFree "On" in the Xorg configuration file, leave it on "auto" or don't define it.