Often when I launch a game through Steam that “processing Vulkan shaders” window appears and loads for a couple minutes. Sometimes it takes no time, sometimes it takes several minutes. But then, for larger games like Dune Awakening or Outer Worlds 2, the game needs to sit and process shaders for another couple minutes anyway. But for some games, like Enshrouded, I can skip the Vulkan processing with no problems in the game (I do that because the Vulkan processing doesn’t go anywhere). So what is that Vulkan processing for?
Shaders are the tiny programs that generate a lot of the graphics you see in modern games. They have to be compiled into machine instructions in order to run on whatever hardware you have. Compiling each one takes a little time. Some games compile them all at once when you launch the game, so that they’re ready to go when needed during gameplay, while others let the graphics driver compile them on demand, which can lead to unpleasant frame rate hitches.
Steam’s Proton tries to help with this process by keeping tabs on the shaders that a game needs, compiling them for your hardware before launching the game, and collecting the compiled versions for use by other players with similar hardware. If someone has played the game with Proton before you, then Steam will give you copies of their shaders, so you don’t have to spend as much time waiting for your machine to compile them. (If this processing step is taking forever, it’s possible that you’ve encountered a bug, or a problem with the network or Steam’s servers.)
You can skip that step and jump right into the game, but then you might find the game’s frame times feeling stuttery or even pausing for seconds at a time while the shaders compile on demand. It won’t harm your system, but it can be annoying and make it hard for you to perform well in competitive action games. If you play through it for long enough, all the shaders that get used will eventually be compiled, and things will run smoothly thereafter.
Well, the problem I have is that the games that need pre-processing do it every time I launch the game.
It wouldn’t surprise me if it processed vulkan shaders briefly every time, to check for recently used ones and upload them to Steam.
If it’s taking more than a few seconds every time, I would guess that either your last play session triggered a bunch of new shaders (for example if you explored a new area that used different visual effects), or you’ve stumbled upon a bug.
If you think it’s a bug, you should consider checking for reports on Valve’s issue tracker entry for that game, or on the Steam for Linux issue tracker if it affects many games. If there are no reports already, consider creating one.
Shaders have to be processed when the video drivers are updated, and time to process will depend from game to game, how many shaders there are. After they are processed, shaders can be cached and recalled without a performance hit. But the cache will be invalidated after a driver update.
If you skip preprocessing, you may see a hitch the first time a shader is used in a game scene. Like if you pick up a gun that shoots blue flames, and the game hasn’t used the blue flames before - it has to process that immediately before displaying the blue flames - which takes a split second.
This realtime impact can be small or large, depending how many shaders load into a scene simultaneously. Loading a new map with lots of unique textures and unprocessed shaders is generally when you’ll see the big hitches as it scrambles to compile them.
Any idea why this happens constantly without driver updates?
I ended up turning off shader-preprocessing because some games would sit and cook shaders for 10 minutes every time I boot them up, update or no.
I dont know the specific answer unfortunately, I suspect there is another layer to the caching story with Proton/Wine Prefixes/DXVK in Linux. If the translation layer gets an update independent of the graphics driver, that could maybe also cause a cache invalidation to occur. I notice that behavior more often when I’m using Proton Experimental.
Huh, that could be exactly it, actually. Experimental is usually my default Proton fork that I try first. Makes sense that it would catch frequent updates and then invalidate the cache. I’ll try this again with GE-Proton and report back later if I remember to.
Experimental gets updated waaay more often than the other, stable branches, they don’t push out a whole announcement every time.
So, every time one of those updates comes in, even if its just like 2.6 mb?
Time to potentially recompile all your shaders, for potentially everything.
I also use Experimental, but you gotta realize that by using it, … you’re a guinea pig.
It is the first thing I disable after a new Steam installation, I have been dpoig that for years and i don’t see much difference, ay least in the titles i play and the hardware I have (R5 5600X now 7600X with RX6800 and 16 now 32GB RAM)
If shaders don’t get preprocessed, then a lot of the same work has to happen later, it just shows up as a seemingly random frame that takes particularly long to render.
(edit to add:) or a section where some of the rendering doesn’t look quite right initially, if they do asynchronous rendering.
In the limit, the sum of all these delays can add up to the same amount of time that the preprocessing WOULD have taken, but you also don’t necessarily use every shader every time you play every game, so YMMV.
Well, you can play the game without it, as others have stated, you should really leave it on. First of all, all of that work needs to happen then later when you’re playing the game, which is just going to lead to a subpar experience with random framerate drops that cannot be explained. From Software’s Elden Ring had a problem at launch with that. Every time a new effect or literally anything in the game was done, you’d wait for half a second and that would sometimes make your game into a slideshow for seemingly no reason. Or the Nier replicant remake wouldn’t play the pre-rendered cutscenes if you didn’t enable it. Most games don’t care, however. But for the sake of stability, my recommendation is to leave it on. It only takes a long time when you boot something up the first time, and with modern games being unoptimised as well, do yourself a favour and leave it on.
When I was on windows I also had to recompile shaders after a driver update. I also experience this, and have just assumed it was from a driver update.
Yeah, I’d be interested in that as well!





