azahar 中文文档 下载 App

Vulkan 磁盘着色器缓存如何消除卡顿

传统模拟器的 stutter 怎么来的

每次启动一款 3DS 游戏,模拟器都要「翻译」数以万计的着色器——把 3DS 的 GPU 指令转换成你电脑显卡能执行的着色器。翻译是即时的,所以游戏前几秒(甚至几分钟)会出现明显的帧率抖动和短暂暂停。模拟器社区把这叫「shader stutter」。

之前的方案

Citra / Lime3DS 用了两个办法缓解:

  1. 异步编译:游戏运行时在后台编译着色器,界面不卡但画面可能闪
  2. 着色器预热:打开游戏的 shader cache 菜单,让它在进入游戏前预编译

两者都不能彻底解决问题——异步编译仍然会在游戏过程中出现短暂卡帧;预热需要等很久。

Azahar 2126 的磁盘缓存

Azahar 2126 引入了 Vulkan 原生的磁盘着色器缓存:编译一次,写入磁盘,下次直接加载。

缓存文件放在模拟器用户数据目录的 cache/shaders/ 下。首次玩某款游戏时,你仍然会看到短暂的卡顿(第一次编译),但第二次启动同款游戏时,游戏立刻顺畅,完全没有 stutter。

缓存怎么管

实测效果

有玩家反馈马里奥赛车 7、宝可梦 X、塞尔达时之笛 3D 等大作,首次启动 30 秒后进入游戏,第二次启动只需等加载条消失——游戏内完全没有卡顿。这对 Radeon 老卡和 Intel 集显用户尤其重要。