Rule to allow tearing for all games launched via Steam in Sway and Hyprland
So both Sway and Hyprland now support Waylands' tearing protocol. I was wondering whether it is possible to create window rules for these WMs that allow tearing in all games launched via Steam. Something like: For Sway for_window [class="steam_app_*"] allow_tearing yes
and for Hyprland windowrulev2 = immediate, class:^(steam_app_*)$
Does anybody know whether something like this would work? You know, instead of having to create an entry for every single game.
Edit: As mranderson17 said, allow tearing isn't in the latest release versions of Sway or Hyprland at the time of writing.
Edit2: mranderson17 gave what could possibly be the right answer:
For Sway for_window [class="steam_app_.*"] allow_tearing yes
For Hyprland (maybe) windowrulev2 = immediate, class:^(steam_app_.*)$
I haven't tested it yet. But unless you think he's wrong give him your "thumbs up".
If I may ask, why do we want to enable tearing now? There are pages and pages across the wikis on how to fix tearing...
In general you are right. We want to avoid screen tearing. Gaming doesn't have to be but can be an exception. If you were to play some fast paced game like a competitive shooter for example. Then permitting tearing would reduce latency. In my case, I can feel the difference when tearing is allowed in The Finals. It is easier to follow the target with your crosshair. That doesn't mean everyone would feel the same. Nvidia's driver version 560 also got released recently. That might have something to do with me perceiving the gameplay as more smooth. All I'm saying is, smooth and enjoyable gameplay not only depends on a high fps count. Framerate, frame pacing, and latency are all factors in this.
Oh, and by the way. this doesn't at all mean that one is going to see/perceive any screen tearing when this is enabled. I haven't noticed any at all. I'm sure one could find some when one was to go and really look for it. I'm simply not too sensitive about that stuff.
This reminds me of the time I got my first 160hz monitor. Games felt buttery smooth. Like there was some friction that I never thought was present was magically gone. Days later I found out that the monitor was set at a whooping 60Hz in the settings.
I agree. It's not only placebo, though. I will gladly admit that I'm not very sensitive to these things and can't immediately tell if something is wrong. I had this experience and I even had it in reverse. After days of playing very badly I realised Sway all of the sudden was running my monitor at 60Hz. After fixing it with kanshi (which I didn't have to use prior to that) everything in game was so much easier.
You really put it well: A friction that you didn't even know was there.
I think I might be shot and burnt alive in a cross for saying this, but... have you tried adding class="*" instead of restricting it to the steam client only? Oh, and I tried this on my opi zero 3 and it works. The performance boost was really noticeable.
I think that would enable tearing for all windows no matter what they are as long as they are fullscreen. I'm not sure that would be desirable. Although I lack the knowledge to judge this. So sure, that is an option. I would really like to restrict this to games only, though.
Are your games all wine/proton games? For me in sway they all have the same class followed by some uid thing:
Or gamescope:
EDIT: Also allow_tearing was added to master 3 weeks ago, so this is definitely not in the current release. FYI to anyone who might try it.
I usually don't use gamescope. So I'm looking at the first of your two examples and I'm not sure I follow. The class is "steam_app_1066890", right? The number at the end should change with every game installed by Steam. It's a unique identifier Steam seems to use for all the games on Steam. So how does the class stay the same for your games? And thanks for noting that allow_tearing isn't in any current release at the time of writing. It's the same for Hyprland. I should have mentionend that.
Ah, I should have been more clear. The
CRITERIA
section of the sway documentation states that class matches support regex, so instead of using a*
as you did in your example you'd use a regex any.*
. So I think (untested of course) thatfor_window [class="steam_app_.*"] allow_tearing yes
should work.The comment in the code for allow_tearing notes that it must be enabled on the output as well. Here is the relevant output documentation. There are several other notes/recommendations there as well you should probably pay attention to.
Thank you, I will add this to my Sway config (and change it for Hyprland as well).