FreeSync flickering when applications are idling
Brief summary of the problem:
On Windows, when an application stops presenting frames, it seems that the driver stops refreshing the display. The FPS counter on the OSD freezes until the application presents a new frame. On Linux the display keeps refreshing at the lowest value of the VRR range (I have this set to 20 Hz but it also happens with the default 48 Hz). I have an older FreeSync display that has brightness flickering at low framerates so Linux ends up looking worse than Windows. I'm not sure what part of the stack is responsible for this difference but it happens on both X11 and Wayland with KDE 5.27.
This is NOT related to #2066, I can resolve that issue by running a high-performance power profile and there is no flickering during gameplay.
Hardware description:
- CPU: AMD Ryzen 7 5800X
- GPU: AMD Radeon RX 6700 XT
- System Memory: 16 GB
- Display(s): Acer XF240H, Acer GN246HL
- Type of Display Connection: DP, HDMI
System information:
- Distro name and Version: Arch Linux
- Kernel version: Linux 6.5.2-zen1-1-zen
- Custom kernel: No
- AMD official driver version: N/A
How to reproduce the issue:
Run a game or application in fullscreen that idles and stops presenting frames. I'm using Super Smash Bros. Melee on the Dolphin emulator but this can also be reproduced with GUI applications like image viewers or video players (qView and mpv are two examples where the display will flicker if the mouse is stationary).
I can create a minimal test program if necessary.
Attached files:
Screenshots/video files
Windows (Adrenalin 23.9.1):
PXL_20230910_173119535_noaudio
Linux (Mesa 23.3.0-devel):
PXL_20230910_173220795_noaudio
The freeze happens at 0:02 when the game is loading a new stage. Setting playback speed to 0.25x makes the difference much easier to spot.