RDNA Freesync problem with CVT-Reduced display profile
Brief summary of the problem:
When a CVT-RB or CVT-RB2 monitor profile is enabled, using Freesync on a game that demands 100% of GPU utilization makes the mouse pointer to perform very slow (2~3fps) on Wayland, even if the game is running above 90fps smoothly. Recording the screen results in a video without this problem happening (maybe pipewire simulates the mouse?) With x11, the game itself starts jumping frames while recording the screen (CVT-RB only), or always have a terrible struttering (CVT-RB2).
Why do I want to use CVT-RB or CVT-RB2 monitor profiles?
I want to decrease the idle power consumption of my GPU. Using one of those monitor profiles do the trick (15W -> 3W). On the same hardware I tried those profiles on Windows 10 and it works just fine, so it's probably fixable in some way.
Hardware description:
- CPU: AMD Ryzen 5 5600X 6-Core Proccessor
- GPU: AMD Radeon RX 5500XT (GV-R55XTOC-8GD), recognized as "[AMD/ATI] Navi 14 [Radeon RX 5500/5500M / Pro 5500M] [1002:7340] (rev c5)"
- System Memory: 2x 16GB 3600MT/s XPG DDR4 (AX4U360016G18I-SB10)
- Display(s): AOC 24G2W1G4, 1920x1080 144hz Freesync Premium
- Type of Display Connection: DisplayPort
System information:
- Distro name and Version: Arch Linux
- Kernel version: 6.3.6
- Custom kernel: N/A
- AMD official driver version: N/A
How to reproduce the issue:
With a custom EDID applied with CVT-RB or CVT-RB2, enable freesync and launch a very demanding game, that uses 100% of the GPU.
How I've modified the EDID to use CVT-RB2 on my monitor:
Dump the EDID from the monitor using the package read-edid (it's necessary to modprobe i2c_dev before running sudo get-edid > edid.bin). With a EDID editor like Custom Resolution Utility, import the file, double click on the "CTA-861..." option, double click on the resolution with the highest refresh rate, check "CVT-RB2 Standard" on timing, press OK twice, then go to edit and ensure that range limits and IDs are set correctly. Finally export the file, move it to /usr/lib/firmware/edid/edid.bin (needs to create the "edid" folder), add "drm.edid_firmware=edid/edid.bin" to your kernel boot parameters and add this file to your initramfs if early KMS is needed.
Original EDID of my monitor: original.bin
Modified EDID with CVT-RB2: modified.bin
Video demonstration under Wayland: https://www.youtube.com/watch?v=7biIWLGwwqM