Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VRR broken in Hyprland #4436

Open
Tractix opened this issue Jan 13, 2024 · 12 comments
Open

VRR broken in Hyprland #4436

Tractix opened this issue Jan 13, 2024 · 12 comments
Labels
bug Something isn't working

Comments

@Tractix
Copy link

Tractix commented Jan 13, 2024

Hyprland Version

System/Version info
Hyprland, built from branch HEAD at commit 03ebbe18ed8517ee22591eac82cd54322f42cb7d  (props: bump ver to 0.34.0).
Date: Mon Jan 1 12:03:15 2024
Tag: v0.34.0

flags: (if any)

Bug or Regression?

Bug

Description

I've noticed VRR doesn't seem to be working properly.

In Quake II RTX if I lower the graphical settings and get around 80ish fps, the refresh rate will constantly stay at 165hz on my monitor (checked using monitor's OSD) which it shouldn't. The monitor's refresh rate should match the game's fps.
If I up the graphical settings and get to 40 - 50fps (still within VRR range), the monitor's refresh rate will go wild switching quickly between 165hz to either 50/60 or 70 hz and will keep switching between those refresh rates and the screen backlight will sometimes flash.

On both Baldur's Gate 3 and FFXIV I get around 120 - 150 fps but the refresh rate will stay at 165hz all the time and not syncing up at all.

My VRR range is between 20hz and 165hz (check rtings link below). 165hz is my max refresh rate.

I've used VRR before on my older GPU (2060 Super) and when in VRR mode, the refresh rate always synced up with the game's fps staying similar both on Windows and X11 meaning it's not a monitor or cable issue.

I am on Arch Linux, I use 7900XT gpu and I have this monitor https://www.rtings.com/monitor/reviews/msi/optix-mag274qrf-qd hooked up via display port. This happens when VRR is set to 2 or 1 in hyprland config. In-game fps was checked using both mangohud and in-game fps counter. Vsync was turned off in-game. I also only use 1 monitor (the monitor listed above).

I've used env --unset=SDL_VIDEODRIVER %command% to launch BG3. I also use these enviromental variables if it matters:

EDITOR=/usr/bin/nano
DXVK_FRAME_RATE=160

QT_QPA_PLATFORM="wayland;xcb"
QT_QPA_PLATFORMTHEME=qt6ct
KITTY_ENABLE_WAYLAND=1
CLUTTER_BACKEND=wayland
GDK_BACKEND=wayland,x11
XDG_SESSION_TYPE=wayland
EGL_PLATFORM=wayland
#SDL_VIDEODRIVER=wayland
SDL_VIDEODRIVER="wayland,x11"

XDG_CURRENT_DESKTOP=Hyprland
XDG_SESSION_TYPE=wayland
XDG_SESSION_DESKTOP=Hyprland

QT_AUTO_SCREEN_SCALE_FACTOR=1
QT_WAYLAND_DISABLE_WINDOWDECORATION=1

How to reproduce

Run Quake II RTX, set settings graphical settings to high or low and notice how the in-game fps won't match the refresh rate on your monitor's OSD.

Run FFXIV or Baldur's Gate 3 and refresh rate will stay at max refresh rate.

Crash reports, logs, images, videos

My hyprland config: hyprland.txt
Hyprland log when I was running Quake II RTX at lower graphical settings and refresh rate was stuck at 165hz: hyprland.log

@Tractix Tractix added the bug Something isn't working label Jan 13, 2024
@varris1
Copy link

varris1 commented Jan 14, 2024

I have tested several games and I also have the same problem. It depends from game to game if VRR works or not.

Version: Hyprland, built from branch at commit c4da4b026deefd58f532353b64e9f17130e760ca (). Date: 2024-01-12
Config: https://git.froggi.es/varris/nixos-dotfiles/src/branch/master/user/configs/wayland/hyprland/settings.nix

Games I've tested so far:

Factorio (Native) - doesn't work
Satisfactory (UE5, Proton) - works
Subnautica (Unity, Proton) - works
Dyson Sphere Program (Unity, Proton) - works
Avorion (Native) - doesn't work
Team Fortress 2 (Native) - doesn't work
Deep Rock Galactic (UE4, Proton) - doesn't work
Skyrim (Creation Engine, Proton) - works
X4: Foundations (Native) - works

@zakk4223
Copy link
Contributor

It might be worth trying sway and seeing if the same issues persist. Sway has also had on-and-off issues with VRR framerates, and it seems to vary based on wlroots version/kernel version/mesa etc. It's kind of a mess, really.

A few things that may or may not help: try disabling direct scanout, try enabling software cursors, try disabling the atomic modesetting KMS api. scanout you can change with a hyprland config, and the other two are WLR_ environment variables

@NoisyFlake
Copy link

I have the same issue here on a 2070 Super, using the 535 dkms drivers. Anything below 144 FPS feels sluggish, because the monitor doesn't adjust correctly and just stays at 144Hz. It's definitely a Hyprland/wlroots issue, because it works fine on KDE X11 and KDE Wayland.

Things I've tried so far:

vrr = 1
allow_tearing = true
env = WLR_NO_HARDWARE_CURSORS,1
env = WLR_DRM_NO_ATOMIC,1
env = __GL_GSYNC_ALLOWED,1

I've verified that both vrr and tearing are active (via hyprctl monitors), so it should be working, but for some reason it doesn't. Right now I'm playing everything on lowest settings to achieve 144 FPS so that it doesn't feel sluggish, but of course that's not a long-term solution.

@Tractix
Copy link
Author

Tractix commented Jan 31, 2024

I have the same issue here on a 2070 Super, using the 535 dkms drivers. Anything below 144 FPS feels sluggish, because the monitor doesn't adjust correctly and just stays at 144Hz. It's definitely a Hyprland/wlroots issue, because it works fine on KDE X11 and KDE Wayland.

Things I've tried so far:

vrr = 1 allow_tearing = true env = WLR_NO_HARDWARE_CURSORS,1 env = WLR_DRM_NO_ATOMIC,1 env = __GL_GSYNC_ALLOWED,1

I've verified that both vrr and tearing are active (via hyprctl monitors), so it should be working, but for some reason it doesn't. Right now I'm playing everything on lowest settings to achieve 144 FPS so that it doesn't feel sluggish, but of course that's not a long-term solution.

wlroots's (which is what Hyprland and Sway use) developers refuse to support NVIDIA so VRR and other features don't work at all.
Switch to KDE instead since they care about getting NVIDIA working on Wayland and from speaking to people on NVIDIA hardware using KDE (on wayland) it works well. VRR should also work on KDE (https://www.gamingonlinux.com/2024/01/nvidia-550-40-07-beta-driver-released-with-fixes-for-vrr-and-wayland/) but if it doesn't atleast you will get support in the near future even if it doesn't work now.

Also use a newer driver. Your driver is very outdated. VRR support landed only in 550 beta.
I recommend using https://github.com/Frogging-Family/nvidia-all to install the newest possible driver.

@Ricky12Awesome
Copy link

VRR works for me on nvidia 550, but only with 1 monitor enabled, same goes for KDE

Monitor 1: 2560x1440@170 freesync, connected via displayport (M27Q specifically)
Monitor 2: 3840@2160@60 idk, connected via hdmi (because the displayport on the monitor broke somehow)

@NoisyFlake
Copy link

NoisyFlake commented Feb 13, 2024

Also use a newer driver. Your driver is very outdated. VRR support landed only in 550 beta. I recommend using https://github.com/Frogging-Family/nvidia-all to install the newest possible driver.

Using a newer driver on Wayland is not suitable for gaming until this is merged: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/967

Everything above 535 results in black flickering every few ms, thus making every game unplayable. It seems there is no workaround for it yet, except manually compiling and installing this merge request.

@BlueskyFR
Copy link

@NoisyFlake the PR you mentionned applies to XWayland, so I guess Wayland-only stuff will remain broken even after it is merged right?

@NoisyFlake
Copy link

AFAIK yes, this only affects Xwayland.

Quick update from me: I've installed the latest 550 driver and the linked merge-request. While this improves the black flickering and performance, it's still more or less unplayable. IIRC, one of the NVIDIA devs said that a change in the NVIDIA drivers is also necessary for the issue to be completely fixed.

What I don't understand is why VRR seems to work just fine with the 535 drivers on e.g. KDE (both X11 and Wayland).

@freaky1337
Copy link

I am on kernel 6.8.1 with mesa 24.0.3 with the same gpu and I experience this too. In RDR2 it changes correctly, in Dead by Daylight it stays at max refresh rate. There is also a weird case with Robocop rogue city, I am getting around 70-100 fps there and according to my monitor's OSD, the refresh rate fluctuates between double of that, it's like LFC was kicking in or something.

@varris1
Copy link

varris1 commented Apr 27, 2024

I think I found out what causes VRR to not work on many games on my machine:

I have This animation rule set. The "loop" keyword seems to cause the problems on my end. Replacing "loop" with "once" (or removing the keyword entirely) completely fixed my VRR woes.

@Atemu
Copy link

Atemu commented Jun 19, 2024

Please ensure you're not running into https://gitlab.freedesktop.org/drm/amd/-/issues/1500.

echo 4 | sudo tee /sys/class/drm/card1/device/pp_power_profile_mode

@Atemu
Copy link

Atemu commented Oct 28, 2024

On the newest master with with #6877 and with a fix or workaround for https://gitlab.freedesktop.org/drm/amd/-/issues/1500, I cannot reproduce this issue.

VRR is still subtly broken but not nearly as massively as described here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

8 participants