I saw this issue was still open and I wanted to post because this is still happening in 2026. I will post both here and the related NVIDIA forum. (ValveSoftware/steam-for-linux#11392 | internal NVIDIA bug 4932793)
I think this must be happening to most people attempting to play Overwatch, or any game with really large shaders, on most linux distros with NVIDIA gpus. From my research, AMD gpus have a bigger shader cache allocation by default and don’t have this issue. I tried many launch options, using DX12, and different proton versions and other things in a attempt to get this working. The solution below (See “Fix:”) was the only thing that worked.
System:
- GPU: RTX 3060 Ti
- Driver: 610.43.03 (also happened on earlier 5xx drivers)
- OS: Fedora 44 (x86_64)
- CPU: Ryzen 5700G
- Game: Overwatch 2 via Steam, GE-Proton11-1
- Steam Launch Options: DXVK_HUD=compiler - Displays a message when shaders are compiling
DXVK_CONFIG=“dxvk.trackPipelineLifetime = True” - Fixes a separate memory leak issue
PROTON_ENABLE_NVAPI=1 - DLSS Compatability
gamemoderun - for linux gamemode
%command%
Reproduction:
Every game launch triggers a full shader recompile — 100% CPU for 15+ minutes on all cores. The game is unplayable during this period. After the compile finishes, gameplay has occasional hitching as additional shaders compile on-demand. This happens on every boot, not just after driver/game updates.
Steam’s shader pre-caching also does not work: it takes ~3 hours to complete, has zero effect on the in-game compile, and re-runs the full 3-hour process on every subsequent boot. Steam’s precache was about 20GB on my machine and persisted, but it still wanted to rerun the preaching each time the game started.
What I believe to be the root cause:
The NVIDIA driver’s shader disk cache (~/.cache/nvidia/GLCache/) is limited to 1GB by default. Overwatch has a lot of shaders, which may or may not exactly be optimized, and it’s shader cache exceeds this limit. From my monitoring of the folder during shader compilation, it builds until it reaches exactly 1GB and then is capped there (even though the game reports shader compilation). My guess is it continues to replace existing shaders as it continues to compile. The game then runs with poor performance and frequent hitching. My guess is it continues to compile missing shaders, and replacing old ones at the same time, staying in a bad loop.
I was also able to capture the deletion of the shaders upon game boot with: inotifywait -m -r ~/.cache/nvidia/GLCache/ -e delete --format ‘%w%f %e’
I’m assuming the cache is invalidated due to it not being imcomplete and rewritten over in the above mentioned loop, so the game just recompiles from scratch.
System reboots seemed to mostly clear out the shader directory when I checked on the folder.
Fix:
Setting this system-wide in /etc/environment and rebooting fixed the issue completely:
__GL_SHADER_DISK_CACHE_SIZE=10737418240
__GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1
The game had to compile shaders for about 15 minutes as usual, but now there are no issues and no hitching in the game. This fix persists even when restarting the game, or rebooting the machine. I also tested afterwards removing this entry and it reproduced the problem.
Note: This must be set system-wide. Setting them in Steam’s per-game launch options had did not have the same effect. The __GL_SHADER_DISK_CACHE_PATH variable in launch options also did not help. Additional details below:
Steam Launch Options Effects:
10 gb cache size only - Would grow above 1GB but be cleaned out between game startups and system reboots.
10 gb cache size and skip cleanup - Would grow above 1GB and persist between game startups. Gets cleaned with system reboot though.
/etc/environment effects:
10gb cache size only - grows above 1GB and persists between game start ups. Restarting the machine left the cache in place, but booting the game caused it to compile shaders again. The old shaders seemed to remain, but they were ignored.
10 gb cache size and skip cleanup - Fixes the issue as described above