Recently we wrote about a new feature for Linux in the Steam Client Beta, where Steam can now sort out Vulkan shaders before running a game. With the latest build, it gets better.
The idea of it, as a brief reminder, is to prepare all the shaders needed for Vulkan games while you download and / or before you hit Play. This would help to stop constant stuttering seen in some games on Linux, mostly from running Windows games in the Proton compatibility layer, as native / supported Linux games would usually do it themselves. Just another way Valve are trying to get Linux gaming on Steam in all forms into tip-top shape.
Here's what's changed in the latest Steam Beta:
Linux Shader Pre-Caching
- Added support for merging NVIDIA per-thread cache files after processing new Vulkan pipelines and after a game exits
- Adjusted core count of background Vulkan pipeline processing to a quarter of logical cores by default
- Changed processing tasks to idle priority
- Updated Vulkan layer API version
Want to try out the latest Steam Beta? Go into Settings on Steam and it's on the first section you see:
Steam will then restart to do the update.
Will be great when this is rolled out to everyone, as it's a very clever way to get around the Proton shader stuttering issue using the open source Fossilize library and Vulkan layer.
This is interesting.
I've seen this Vulkan shader pre-compile feature try to compile shaders for OpenGL games like Deus Ex Mankind Divided?
It also tries to do it with Proton games that have other launchers like Uplay behind them and just get stuck at 0%.
Hmm... For me, the processing got stuck at 0% trying to pre-compile games that weren't even installed. My theory was that the issue got triggered when uninstalling a game as I reported on Steam for Linux Github
But there could be more to this problem than that, so anyone seeing problems with processing getting stuck infinitely at 0% should probably report it on Github to get to the bottom of this. I think it should at least time-out, and move on to the next game if for whatever reason it is unable to process a game.
If I have understood what a shader is, I can not fathom how this works?
Shaders are programs that run on your graphics card. When GPUs first became programmable, rather than fixed-function hardware pipelines, the first programs they could handle were for light calculations, so they're called shaders, but every part is programmable now.
The programs are written in whatever language and compiled to a portable Intermediate Representation, which is compatible with whichever cards follow the relevant standards. Those IRs are generally what get distributed with games, but they still can't be run directly. They need to be compiled into a form that will run on the specific hardware.
Once you've compiled the programs it would be handy if you could save them somewhere so that you didn't need to compile them again; that's the shader cache.
Last edited by CatKiller on 31 May 2020 at 4:07 am UTC
Last edited by randyl on 30 May 2020 at 10:54 pm UTC
Is there a way to check which games are using Vulkan shader preloading? When I first enabled it I saw Borderlands 3, No Man's Sky, ARK, and maybe Elite Dangerous, but I'm not sure about the last one.
Every game that can be used with DXVK+vkd3d ( D3D9,10,11, even d3d8 titles that people use with d3d8on9 with Proton ) + native Vulkan games are suitable canditates.
So you can even see some shader compiling for native OGL games on your system despite you're not using them with dxvk etc, because some people ran those via Proton and and they have Foz pipelines on Steam's servers.
Anyone else having problems with the background processing getting stuck at 0% processing shaders with certain games?
I experience that in STRIDER
Very cool, but I also realized that if you use proton without steam you will not get any advantage, so this is a way to lock Linux players to steamThat's a silly baseless claim. Proton is a custom wine compile and has nothing to do with shader pre-loading or its advantages. Lock-in means something can only be accessed through that lock or gate. Pre-caching shaders in no way locks anyone into anything. There is no lock-in here.
I can't properly play games like War Thunder or ARMA3 under Linux Proton atm due to it, and yes I know WarThunder has a OpenGL3.1 old client that works, its pretty dated and not fun to use! (their vulkan test client crashes/blacks out).
We need EAC and BE! If that can be made to happen (hell I'd pay money to help it happen!) it would be a HUGE game changer for Linux and Proton! (and by extension Wine I'd take a gander, unless its something specially done within Steam Client itself!)
It is truly an amazing time for anyone to give Linux desktop a go when looking into alternatives to Windows.
Do they cache it for each existing GPU architecture?
Foz pipelines are gpu and driver agnostic , which client utilize them to build shaders.
There is also shader cache sharing system too. That is gpu and driver specific. Mostly viable for OGL games because they don't have a shader building mechanism like Vulkan has on the client.
With aco, shader compilation stuttering became a non issue practically anyway.
I can't agree to this statement.
Games like Quake Champions ( has absurd amount of shaders and game is online ) are still a pain without Fossilize.
For my case ( i'm on NV but ACO and NV are not too far when it comes to shader compiling ) , Quake Champions basically gone from stutter fest to perfectly smooth. Literally at first run ; it is perfectly smooth.
For my case ( i'm on NV but ACO and NV are not too far when it comes to shader compiling
How did you compare that? In my experience ACO made stutter a non issue. Especially combined with general shader cache and dxvk pipeline cache.
Last edited by Shmerl on 31 May 2020 at 3:07 pm UTC
For my case ( i'm on NV but ACO and NV are not too far when it comes to shader compiling
How did you compare that? In my experience ACO made stutter a non issue. Especially combined with general shader cache and dxvk pipeline cache.
Do you play a game like QC , Overwatch , Warframe,Dishonored etc?
If you don't , try one of them without any cache and see if ACO is enough or not.
Clearly not enough.
If you don't , try one of them without any cache and see if ACO is enough or not.
Star Citizen is pretty shader heavy. Before aco it was stuttering a lot, with aco it became very playable. I don't have access to any others you mentioned.
Last edited by Shmerl on 31 May 2020 at 5:17 pm UTC
Do they cache it for each existing GPU architecture?
Foz pipelines are gpu and driver agnostic , which client utilize them to build shaders.
I am using an optimus laptop with prime render offload (Which means my desktop and Steam runs on intel gpu but games run on Nvidia), does that mean my system will benefit from this as well?
For my case ( i'm on NV but ACO and NV are not too far when it comes to shader compiling
How did you compare that? In my experience ACO made stutter a non issue. Especially combined with general shader cache and dxvk pipeline cache.
As far as I understood that is exactly the point: to provide an already built-up shader- and/or (not sure) dxvk pipeline cache for games that have never been touched. Of course the effect differs per games, but for some the already built-up cache can make quite a difference when starting for the first time or entering certain areas for the first time (and only then afaik).
Last edited by jens on 31 May 2020 at 6:34 pm UTC
I'm waiting CS:GO with Source 2 under Vulkan to thank them :3
Probably very soon.
See more from me