protonscr

Steam client does not recognize shader cache on external partitions.

steamopen Steam client
ValveSoftware/steam-for-linux#11547 · opened 2024-12-06 by jenngra505 · updated 2026-07-29 · 3 comments · github
Jjenngra505 2024-12-06 github

Your system information

  • Steam client version: Mon, Dec 2 2024 4:26 PM UTC -05:00
  • Distribution: Linux Mint
  • Opted into Steam client beta?: No
  • Have you checked for system updates?: Yes
  • Steam Logs: Irrlevant
  • GPU: Nvidia

Please describe your issue in as much detail as possible:

While my issue is briefly mentioned in this comment of issue 8076, I think it's also worth mentioning as a separate issue. As someone who uses a 5 TB external drive to store my Steam games, I would expect the Steam client to either recognize the contents of the partition's shader cache folder or automatically create a symlink to the main Steam installation's shader cache when installing a new game. Instead, the Steam client tries to scan the main Steam installation's shader cache, downloads to the external partition's shader cache, and starts downloading unnecessary texture cache to it whenever I open a game. I solved this by symlinking the external shader cache back to the main Steam installation's shader cache, but the average consumer should not be expected to set up such a hacky workaround.

Steps for reproducing this issue:

  1. Enable Shader Pre-caching
  2. Download a game to an external partition
  3. Open the game once a day and see it download shaders even when it doesn't need to
Kkisak-valve maintainer 2024-12-06 github

Adding a couple keywords for searchability: Shader pre-cache on secondary Steam library folder.

Ttaurenrogue 2025-01-19 github

I had the same problem with a non-default library folder, and after linking it to steam folder shadercache it stopped re-downloading it every reboot.

It took a minute of searching how to do it, and was relatively easy. I would honestly encourage any experienced PC users to try it on their own while waiting for a fix.

PPhaderon 2026-07-29 · hidden on GitHub github

Summary

Steam shader pre-caching is useful, but the current all-or-nothing implementation is causing repeated large shader downloads and background processing for games that have not actually received game updates.

I am not asking for shader pre-caching to be removed. It clearly helps some games. For example, when I disabled shader pre-caching globally and launched Palia, the game was immediately choppy and stuttery. After re-enabling shader pre-caching and allowing Steam to process shaders, Palia ran smoothly again.

The problem is that the same global feature also causes repeated large shader pre-cache updates for games that are already cached and already running smoothly. Users currently have to choose between:

  • enabling shader pre-caching globally and accepting repeated large downloads/background processing/cache growth; or
  • disabling shader pre-caching globally and risking severe stutter in games that genuinely need it.

This needs more granular control and better cache management.

System information

  • OS: Bazzite Linux
  • Desktop: KDE Plasma Wayland
  • GPU: NVIDIA GeForce RTX 2080 Ti
  • NVIDIA driver reported locally: 580.159.04
  • Steam library involved: /var/mnt/LINUX_FILES/SteamLibrary/steamapps/
  • Steam shader pre-caching: enabled
  • Background Vulkan shader processing: enabled

Affected example: Overwatch 2

  • Steam app ID: 2357570
  • Game: Overwatch 2
  • Game install folder:
    /var/mnt/LINUX_FILES/SteamLibrary/steamapps/common/Overwatch
  • Shader cache folder:
    /var/mnt/LINUX_FILES/SteamLibrary/steamapps/shadercache/2357570/

Steam showed Overwatch 2 as updating, but the content log showed this was a shader update, not a game content update. The game was already installed, already cached, and already running smoothly.

Observed behaviour

Steam downloaded and processed shader pre-cache data for Overwatch 2 even though the installed game build did not change.

The update committed into the shader cache folder:

/var/mnt/LINUX_FILES/SteamLibrary/steamapps/shadercache/2357570/

It did not commit new content into the game install folder:

/var/mnt/LINUX_FILES/SteamLibrary/steamapps/common/Overwatch

The Overwatch 2 shader cache folder was approximately 127 GB.

The shader cache folder also shows repeated large FOZ chunks over many days, including multiple large files on the same day.

Relevant Steam log evidence

From Steam content_log.txt, app ID 2357570 entered shader update state:

AppID 2357570 Shader update changed : Running Update
AppID 2357570 Shader update changed : Running Update,Downloading,Staging

Steam downloaded two large shader-cache payloads in one event:

AppID 2357570 update started : download 0/7651001136 ... stage 0/7929288501
Downloading 7562 chunks for depot 2357570 (2990925257385072349)

Then shortly after:

AppID 2357570 update started : download 0/2736801440 ... stage 0/3518479647
Downloading 3361 chunks for depot 2357570 (2223570305417626543)

Steam then committed the data into the shader cache folder:

AppID 2357570 starting commit from "/var/mnt/LINUX_FILES/SteamLibrary/steamapps/shadercache/2357570/downloads/" to "/var/mnt/LINUX_FILES/SteamLibrary/steamapps/shadercache/2357570/" : 1 updated, 0 moved, 0 deleted files

The installed game manifest still showed the game build as unchanged:

"appid" "2357570"
"name" "Overwatch®"
"buildid" "24244212"

After the shader pre-cache download, Steam started fossilize_replay:

Starting replay of FOZ databases for AppID 2357570 with fossilize_replay
Still replaying 2357570

Expected behaviour

If a game is already installed, already cached, and the game build, GPU, driver, Proton version, and local cache state have not meaningfully changed, Steam should avoid unnecessary large shader pre-cache downloads/reprocessing where possible.

At minimum, Steam should provide more user control so this can be managed per game.

Actual behaviour

Steam can download large refreshed remote shader blobs and replay/process them even when:

  • the game itself has not updated;
  • the game is already cached;
  • the game is already running smoothly;
  • the user does not want that specific game to keep receiving shader-cache updates.

The only user-facing control is global, which is too blunt.

Why the global disable option is not enough

Disabling shader pre-caching globally is not a good workaround. In my testing, Palia immediately became choppy/stuttery when shader pre-caching was disabled, then became smooth again after shader pre-caching was re-enabled and Steam processed shaders.

So this is not a request to remove shader pre-caching. The request is for better control and pruning.

Requested improvements

  • Per-game shader pre-cache enable/disable.
  • Per-game background Vulkan shader processing enable/disable.
  • Ability to keep an existing local shader cache while disabling future remote shader blob downloads for a specific game.
  • Per-game shader cache size limits.
  • More robust cleanup/pruning of stale shader cache data.
  • Clearer distinction in the Downloads UI between actual game updates and shader pre-cache updates.
  • Better avoidance of reprocessing when the game build, GPU, driver, Proton version, and existing local cache are unchanged.
  • A way to inspect per-game shader cache size accurately from the Steam UI.

User impact

  • Repeated large downloads for games that have not actually updated.
  • Large shader cache folders, including around 127 GB for Overwatch 2 in this case.
  • Background CPU/disk processing after these downloads.
  • Confusing Downloads UI where shader pre-cache work looks like a game update.
  • No good way to keep shader pre-caching enabled for games that need it while disabling shader-cache churn for games that do not.

Related issues

These appear related:

  • #10492 - Huge shader precaching updates are downloaded again
  • #11547 - Steam client does not recognize shader cache on external partitions
  • #7533 - shadercache disk usage is more than 2 times bigger than reported by Steam client
  • #9803 - Precompiling to unusable shader cache directories on Nvidia
  • #13197 - Daily update of 1-10GB and background processing despite no app updates