BREAKTHROUGH:
I have managed to get a Reduced Blanking timing working with 1080p 120.00hz that’s able to be set using xrandr
. Tested using the BenQ EX2510 and confirmed working. xrandr
is a thorn in Nvidia’s side, as many Nvidia users have trouble with it whereas AMD and Intel IGP users don’t have the same issues.
Modeline "1920x1080_120.00" 274.56 1920 1928 1960 2000 1080 1130 1138 1144 +hsync -vsync
This was calculated using a trusty video blanking calculator available here: Video Timings Calculator (I used CVT-RBv2)
The formula to get it into a modeline using the terminology on the calculator:
Modeline "name" [PixelClock] \
[HPixels] [HPixels+HFrontPorch] [HPixels+HFrontPorch+HSync] [HTotal] \
[VPixels] [VPixels+VFrontPorch] [VPixels+VFrontPorch+VSync] [VTotal] \
[Polarizations]
Polarizations are determined by cvt -r 1920 1080 120
.
Nvidia appear to be deliberately hostile towards custom resolutions using xrandr, adding in many different safety checks that prevent you from using xrandr to it’s full ability. Hence the frustration people face when trying to set xrandr and it doing nothing on Nvidia.
You will need this in your /etc/X11/xorg.conf.d
as 20-randr.conf
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
Option "UseEDIDFreqs" "Off"
Option "ModeValidation" "AllowNonEdidModes,AllowNon60HzDFPModes,NoMaxPClkCheck,NoEdidMaxPClkCheck,AllowInterlacedModes,NoMaxSizeCheck,NoHorizSyncCheck,NoVertRefreshCheck"
Option "Coolbits" "28"
Option "UseNvKmsCompositionPipeline" "Off"
EndSection
This will override your entire Device
section in xorg.conf
so modify accordingly so your custom settings carry over. This is required to defeat the safeties.
Now, you need a startup script to run on login. Make a shell script with this in it:
#!/bin/bash
# Replace DP-0 with your current display
xrandr --newmode "1920x1080_120.00" 274.56 1920 1928 1960 2000 1080 1130 1138 1144 +hsync -vsync
xrandr --addmode DP-0 "1920x1080_120.00"
xrandr --output DP-0 --mode "1920x1080_120.00"
Save as xrandr.sh
and make it executable: chmod +x xrandr.sh
Now in whichever startup script manager you choose, (in KDE it’s under System Settings > Startup and Shutdown > Autostart) add the script you just made to run at login (xrandr does NOT need to be root to do this. Validated this on Nvidia Driver 460.91.03)
Adding this information to xorg.conf.d
or xorg.conf
will not work. It simply refuses to acknowledge custom resolutions in said files as yet another safety measure IMO. It has to be a shell script executed at login.
Now you can capture 120.00hz using NVFBC with VERY few frame time inconsistencies. It will be less on the display and more on how the game engine delivers frames to the framebuffer that affects frame times in the recording. This is as close to as perfect 120hz same system capture as there is on Linux.