I was clearing out disk space last week when I noticed one folder eating almost 100GB of my SSD. Not a game. Not a video project. Not Docker images. A cache folder I'd never opened in my life:
C:\Users\<Username>\AppData\Local\NVIDIA\DXCache
Ninety-something gigabytes of .nvph files with names that mean nothing, sitting quietly on my drive for who knows how long.
What's actually in there
When a game runs, the GPU driver compiles shaders — small programs that tell your graphics card how to render lighting, materials, effects, and so on. Compiling them on the fly causes stutter, so drivers cache the compiled result on disk. Next time you launch the same game, it loads the precompiled shader instead of recompiling it, and you get a smoother experience.
That part, on its own, isn't the problem. The problem is what happens after — and also why there's so much more of it to cache than there used to be.
Why this got so much bigger with modern engines
If it feels like shader compilation stutter became a bigger deal in the last few years, that's not just perception. Unreal Engine 4 titles had this problem too, but it was quieter, for a few concrete reasons:
- DX11 vs DX12/Vulkan. Most UE4 games shipped on DX11, where the driver handles shader compilation itself and hides a lot of the cost. UE5 pushes much harder toward DX12 and Vulkan, and on those APIs, compiling a Pipeline State Object (PSO) is the engine's job, not the driver's. Epic has said outright that runtime hitches from PSO creation are inherent to those APIs in a way they simply aren't on DX11.
- Way more PSO combinations. Nanite and Lumen introduce dynamic lighting and materials that generate far more unique shader/pipeline-state combinations than UE4's more static rendering paths. More unique PSOs means more first-time compilations happening live, mid-gameplay, which is exactly what shows up as a stutter.
- The old fix was manual and incomplete. UE4 relied on developers manually recording and bundling PSOs into the build ahead of time. It worked, but it was tedious for large projects and still left gaps — Epic's own words were that it "could be burdensome for large projects, and still leave gaps in the cache leading to hitches."
- Epic is actively patching this, version by version. UE5.1 introduced Automated PSO Gathering to replace the manual process, and UE5.2 added the ability to skip drawing an object if its PSO isn't ready yet instead of stalling the frame. That's a tacit admission this was a real architectural problem, not a one-off bug.
So it's less "this didn't exist in UE4" and more "UE4 could mostly hide it behind DX11, and UE5's push into DX12/Vulkan plus Nanite/Lumen's sheer number of shader permutations made it impossible to hide anymore." Which also means: modern games are compiling and caching more shader variants than ever, feeding the exact kind of unmanaged, ever-growing cache this whole post is about.
The part nobody tells you
Once a shader is compiled and cached, nothing ever removes it — not when you finish playing the game, not when you uninstall it, not when a driver update makes an old cache entry irrelevant. DXCache just grows. Forever. One direction only.
And by default, the NVIDIA Control Panel setting that controls this — Manage 3D Settings → Shader Cache Size — is set to "Driver Default." The full dropdown looks like this:
- Driver Default
- Disabled
- 128 MB
- 256 MB
- 512 MB
- 1 GB
- 5 GB
- 10 GB
- 100 GB
- Unlimited
Here's the part that surprised me: NVIDIA's own documentation on what "Driver Default" actually resolves to is close to nonexistent. The only official description I could find comes from the driver 495/496.13 release notes, which introduced this setting with a single sentence: "Added Shader Cache Size control to set the maximum amount of disk space to use for storing shader compiles." That's it. No page explaining what number "Driver Default" maps to, no doc on the eviction policy once a limit is hit, nothing on how it interacts with per-game overrides. It's telling that even developers on NVIDIA's own developer forum have publicly asked whether any detailed documentation of the caching policy exists at all — without getting a concrete answer. So "Driver Default" isn't a documented default in the "this is 2GB, here's why" sense — it's a black box that, in practice, behaves like there's effectively no ceiling, which tracks with mine sitting at nearly 100GB without me ever touching the setting.
So the math is simple: every game you've ever installed, played for an hour, and uninstalled left a tip behind in DXCache, and it's still there. I'd been PC gaming for years without ever touching that setting, which is exactly how a folder quietly gets to 100GB without a single warning, notification, or disk-cleanup prompt from Windows.
Why this is worse than it sounds
A few things make this specifically sneaky, rather than just "oh well, cache happens":
- It survives uninstalls. Deleting a game does not touch its shader cache. The game is gone; the cache is forever.
- Windows Disk Cleanup doesn't know about it. It's not temp files in the usual sense — it's driver-managed and lives outside the paths Windows normally offers to clean.
- The default has no limit. Most caching systems assume someone eventually caps them. This one ships wide open by default.
- It's invisible until you go looking. There's no indicator anywhere in the NVIDIA app or Windows that tells you this folder exists, let alone how large it's gotten.
It's not a bug in the "crash" sense. It's a design decision — unlimited-by-default plus no lifecycle management — that quietly behaves like a slow memory leak, except on your disk, and over years instead of hours.
The DX12 caveat, because I got this wrong at first
Worth being upfront about a wrinkle here: the Shader Cache Size setting in the NVIDIA Control Panel primarily governs the DX11 and older cache path. A lot of modern DX12 and Vulkan titles manage their own shader caching independently, sometimes in different folders, sometimes with their own size limits, sometimes with none. So DXCache specifically tends to fill up from DX11 titles, but it's not the whole picture — if you're chasing every byte, check your Vulkan cache and any per-game shader cache folders too (many are under %LOCALAPPDATA% as well, just organized differently per engine).
What I did about it
- Checked the actual size first. Right-click → Properties on the folder, or in PowerShell:
Get-ChildItem "C:\Users\<Username>\AppData\Local\NVIDIA\DXCache" -Recurse | Measure-Object -Property Length -Sum
- Deleted the contents, not the folder itself — NVIDIA will rebuild it as needed. The cost of clearing it is a few seconds of shader recompilation stutter the next time you launch each game, which is a fair trade for 100GB.
- Set an actual limit in NVIDIA Control Panel → Manage 3D Settings → Global Settings → Shader Cache Size. I put mine at 10GB. Plenty for active games, capped for everything I've since uninstalled.
Worth knowing: once the cache hits that limit, the driver doesn't just stop adding new entries — it starts evicting old ones to make room. So if you play a lot of heavy titles at once and set the cap too low, you can end up with cache getting wiped out and rebuilt constantly, which brings back the exact stutter this whole system exists to prevent. 10GB was comfortable for my library; if you've got a dozen big games installed at once, you may want more headroom.
- Made a note to check it again in six months, because "set it once and forget it" is exactly the mindset that got me to 100GB in the first place.
The bigger pattern
This isn't really an NVIDIA-specific story once you zoom out. It's the same shape as a dozen other quiet disk hogs: Docker's dangling image layers, npm's global cache, browser service-worker caches, pip's wheel cache. Anything designed to cache the output of expensive work will keep that output around forever unless something explicitly ties its lifetime to the thing that created it — and "unlimited by default" is a decision, not an oversight, that someone made and shipped.
Caches without owners don't fail loudly. They just sit there, growing, until you go looking for missing disk space and find out where it's been hiding the whole time.
If you're on NVIDIA and haven't checked, it might be worth a look:
C:\Users\<Username>\AppData\Local\NVIDIA\DXCache
You might be surprised what's in there.
Top comments (0)