Enable Variable refresh rate (vrr) FreeSync

Hi all!
I have an MSI G2712 monitor with AMD FreeSync and AMD Radeon RX 6600.
I just can’t enable 165 Hz support in NixOS.
I’ve read quite a few guides but to no avail:

xrandr --props
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
DisplayPort-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
# ...
     vrr_capable: 0
		range: (0, 1)
# ...

What part of my configuration looks like:

# ...
boot.initrd.kernelModules = [ "dm-snapshot" "amdgpu" ];

services.xserver.enable =true;
services.xserver.videoDrivers = [ "amdgpu" ];
services.xserver.deviceSection = ''
        Option "DRI" "3"
        Option "VariableRefresh" "true"
'';
hardware.opengl = {
  enable = true;
  driSupport = true;
  driSupport32Bit = true;
  };
# ...

Oh, yeah I’m using X11, sddm (qtile, awesomewm)

Where did I get the information from:
AMD FreeSync NixOS (Reddit)
Vrr from Arch wiki
Guide from Github

I know for sure that everything is fine with the cable, my second system is Windows 11 and there I see 165 Hz in the monitor menu parameters. On NixOS this is always 60 Hz.

I think I’m missing something important.
If anyone has set up vrr support and knows a solution, I would be very grateful.

It’s working for me using a similar config:

Please post the full xrandr output.

This is how it should look like:

DisplayPort-0 connected primary 3440x1440+0+0 (normal left inverted right x axis y axis) 800mm x 335mm
        EDID:
                00ffffffffffff001e6d4b77f1bd0a00
                011f0104b55021789ff675af4e42ab26
                0e50542109007140818081c0a9c0b300
                d1c08100d1cfdaa77050d5a034509020
                3a30204f3100001a000000fd0030a0fa
                fa5a010a202020202020000000fc004c
                4720554c545241474541520a000000ff
                003130314e5454514c503938350a020d
                020330712309070747100403011f1312
                83010000e305c000e2006ae606050161
                613d6d1a0000020530a00004613d613d
                4ed470d0d0a0325030203a00204f3100
                001a0000000000000000000000000000
                00000000000000000000000000000000
                00000000000000000000000000000000
                000000000000000000000000000000de
                7012790000030128663801866f0def00
                2f801f009f054500020009004c5b0106
                6f0def008f801f009f05450002000900
                00000000000000000000000000000000
                00000000000000000000000000000000
                00000000000000000000000000000000
                00000000000000000000000000000000
                0000000000000000000000000000bc90
        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: off
                supported: off, on, auto
        subconnector: Native
                supported: Unknown, VGA, DVI-D, HDMI, DP, Wireless, Native
        HDCP Content Type: HDCP Type0
                supported: HDCP Type0, HDCP Type1
        Content Protection: Undesired
                supported: Undesired, Desired, Enabled
        vrr_capable: 1
                range: (0, 1)
        Colorspace: Default
                supported: Default, BT709_YCC, opRGB, BT2020_RGB, BT2020_YCC
        max bpc: 16
                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: 99
                supported: 99
        non-desktop: 0
                range: (0, 1)
   3440x1440    143.92*+  60.00 + 160.00   120.02    96.03    72.01    60.01    50.00    48.00    99.99
   1920x1200    143.92
   1920x1080     74.98    60.00    60.00    50.00    59.94
   1600x1200    143.92
   1680x1050     59.95
   1600x900      60.00
   1280x1024     75.02    60.02
   1440x900     143.92
   1280x800      59.81
   1152x864      59.97
   1280x720      60.00    50.00    59.94
   1024x768      60.00
   800x600       60.32
   720x576       50.00
   720x480       60.00    59.94
   640x480       60.00    59.94

Hello!
Thanks for your response :handshake:

xrandr --props
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
DisplayPort-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
	EDID:
		00ffffffffffff003669b58c15050000
		0f210104a53c22783b4575ac5149a827
		0c5054bfcf00814081809500714f81c0
		b30001010101023a801871382d40582c
		450055502100001ed09480a070381e40
		3040350055502100001a000000fd0030
		a5c8c828010a202020202020000000fc
		004d53492047323731320a2020200187
		02032bf14a01030402900e0f1d1e1f23
		0907078301000065030c0010006d1a00
		00020130a5000000000000866f80a070
		3840403020350055502100001a088280
		5070384d400820f80c55502100001a00
		00000000000000000000000000000000
		00000000000000000000000000000000
		000000000000000000000000000000a6
	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
	HDCP Content Type: HDCP Type0
		supported: HDCP Type0, HDCP Type1
	Content Protection: Undesired
		supported: Undesired, Desired, Enabled
	vrr_capable: 0
		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: 86
		supported: 86
	non-desktop: 0
		range: (0, 1)
   1920x1080     60.00*+ 165.00   143.85   119.98    50.00    59.94
   1680x1050     59.95
   1280x1024     75.02    60.02
   1440x900      59.89
   1280x960      60.00
   1280x800      60.00
   1152x864      75.00
   1280x720      60.00    59.94
   1440x576      50.00
   1024x768      75.03    70.07    60.00
   1440x480      60.00    59.94
   800x600       72.19    75.00    60.32    56.25
   720x480       60.00    59.94
   640x480       75.00    72.81    66.67    60.00    59.94
   720x400       70.08
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
# ...

How can I check where an option is linked?

services.xserver.deviceSection

I only see:

ls /etc/X11/xorg.conf.d/
00-keyboard.conf  10-evdev.conf  40-libinput.conf
ls /etc/static/X11/xorg.conf.d/
00-keyboard.conf  10-evdev.conf  40-libinput.conf
ls /run/current-system/sw/share/X11/xorg.conf.d/
10-evdev.conf  10-quirks.conf  40-libinput.conf

cat  /nix/store/m71ifw29sx7r9bmwzqx49mhn65xcjnr6-xf86-video-amdgpu-23.0.0/share/X11/xorg.conf.d/10-amdgpu.conf
Section "OutputClass"
	Identifier "AMDgpu"
	MatchDriver "amdgpu"
	Driver "amdgpu"
	Option "HotplugDriver" "amdgpu"
EndSection

It appears your monitor doesn’t list its high refresh rate modes as preferred.

You should be able to switch to the high refresh rate modes manually. Unfortunately, any display handling software on a Linux desktop (including the kernel) is hell-bent on only ever choosing the display’s preferred modes automatically rather than the actual best modes. I have yet to find a solution to that.

I don’t know why it’s not showing up as VRR-capable though. Perhaps it needs to be in a mode that’s fast enough for LFC to work in order for that? Shouldn’t be but worth trying out.

Is there anything other than a DP1.2 cable in between your GPU and monitor? An adapter, KVM or other DP switch for instance.

I do not know what you mean by that. Do you mean how an option is implemented? For that you have to look inside the module’s declaration. search.nixos.org contains a handy-dandy link for that.

Interesting, I too cannot find my declared lines in here. I think I got these off the wiki like 3 years ago or whatever. This might be the cause of some of the issues I’ve been having with VRR.

As it turns out, the Xorg config is applied by the display-manager to the X server it starts via command line flag.

See ps aux | grep xserver.conf.

1 Like