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".
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.
...instead of having to create an entry for every single game.
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.
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) that for_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.