编译好的着色器为什么需要缓存
着色器是 GPU 针对每个顶点或像素执行的小程序,必须先针对你具体的 GPU 和驱动版本编译才能运行。这次编译并不便宜——每个着色器耗时几十到几百毫秒,而一款现代游戏包含成千上万个。新着色器在游戏中途出现时,编译就表现为一次卡顿:许多游戏开场那一个小时里臭名昭著的“首次游玩卡顿”。
因此驱动程序会把编译结果存到磁盘,之后的启动直接复用。这就是着色器缓存的全部工作:把编译卡顿变成一次性成本。这也是缓存越大通常越好的原因——里面的每一条,都是你不再经历的卡顿。
缓存存放在磁盘的哪里
Windows 自身在 %LOCALAPPDATA%\D3DSCache 下保存 Direct3D 缓存,各驱动厂商又各自追加文件夹。在游戏电脑上它们合计常常达到几个 GB——也正是人们开始注意到它们的时候。
- %LOCALAPPDATA%\D3DSCache — Windows 的 Direct3D 着色器缓存,供应用和游戏使用
- %LOCALAPPDATA%\NVIDIA\DXCache — NVIDIA 的 DirectX 着色器缓存
- %LOCALAPPDATA%\NVIDIA\GLCache — OpenGL 游戏用的同类缓存
- %LOCALAPPDATA%\AMD\DxCache — AMD 的 DirectX 着色器缓存
- %LOCALAPPDATA%\AMD\DxcCache — AMD 的 DX12/DXIL 着色器缓存
- %LOCALAPPDATA%\Intel — Intel 核显把着色器缓存放这里的子文件夹中
清理何时有用——何时只是浪费时间
正当的场景很有限。如果 GPU 驱动更新在缓存里留下了损坏条目,游戏可能启动即崩溃、出现画面破损,或在原本流畅的地方卡顿——删除缓存会强制干净地重新编译,恰好修复这类问题。磁盘清理里有“DirectX 着色器缓存”复选框,设置 → 系统 → 存储 → 临时文件中列有同一项;两者都会安全删除这些文件夹的内容。
清理做不到的是提升性能。健康的缓存让游戏更流畅而不是更慢——一旦抹掉,每个游戏都要在接下来的最初几次运行中重新支付编译成本。把它当药,而不是仪式:驱动变更后出现症状时再清,其余时间别动它。
常见问题与解答
删除 DirectX 着色器缓存安全吗?
安全。驱动会自动重建它,唯一代价是重新编译着色器——在缓存重新填满之前,游戏的首次运行会短暂再现一些卡顿。
为什么游戏第一次玩的时候会卡?
游戏运行时正在为你的 GPU 和驱动编译新着色器。一旦编译版本进入着色器缓存,之后的运行就直接从磁盘回放,不再卡顿。
继续阅读
联系我们: [email protected]