卡顿修复 DX12 异步编译

创作者: AliRemi
已更新:2026-08-23 21:15:45
266KB

关于此 MOD

一个原生DirectX 12管线状态编译修复,旨在减少《寂静岭f》中首次着色器和PSO卡顿。
描述

《寂静岭f》在首次编译DirectX 12管线状态对象时可能会出现卡顿或停顿。此模组将符合条件的管线编译工作从游戏主线程中移出,使新区域、特效、战斗遭遇、过场动画和场景过渡更加流畅。

这是基于原生路线映射和代表性玩法测试构建的游戏专用实现,并非通用DLL封装或简单的配置调整。

该模组会保持大型启动和预编译阶段同步执行以确保稳定性。只有在初始负载稳定后,异步编译才会启用。

其灵感来源于Phroster在《最终幻想VII:重制版》和《重生》中的DX12异步编译工作,该工作展示了异步PSO编译对于减少虚幻引擎着色器卡顿有多么有效。


如果这个模组改善了你的游戏体验,并且你愿意支持我的工作:

在Ko-fi上支持我

下载、点赞并享受我的模组,我已经非常感激了。


主要功能

  • 减少首次DX12着色器和管线编译卡顿
  • 使用专为《寂静岭f》优化的异步PSO编译
  • 保持初始启动和预编译工作负载同步
  • 使用有效的原生管道状态对象,而非合成的PSO指针
  • 在启用异步工作之前,验证所有已知的游戏专用管线绑定路由
  • 对于不支持或不安全的情况,会自动回退到同步编译。
  • 使用有界工作线程和待处理工作限制
  • 包含内存和磁盘PSO缓存
  • 不跳过绘制、调度、命令列表、捆绑或间接工作
  • 不修改共享驱动程序或DirectX运行时的虚函数表
  • 包含对链式加载另一个DX12代理的兼容性支持
  • 使用静态链接的C++运行时,因此不需要Visual C++ Redistributable

安装

将这些文件解压到旁边 SHf-Win64-Shipping.exe:

寂静岭f\SHf\Binaries\Win64

所需文件:

  • d3d12.dll
  • shf-dx12-proxy.ini

正常启动游戏。

你应该会短暂看到:

  • SHF DX12修复已加载 当代理初始化时
  • DX12 异步编译已启用 当启动门控释放且异步编译真正开始时

第二条消息不会立即出现。该模组会特意等待游戏的初始PSO工作负载先完成。

普通版和记录版

普通版

推荐用于常规游戏。它会移除每个事件的诊断日志记录,以避免不必要的文件 I/O。

已登录版本

报告问题时请使用此版本。它会创建:

shf-dx12代理.log
shf-dx12-status.log

请重现该问题,如果可能的话正常退出游戏,并在报告中附上这两个文件。

与其他DX12代理的兼容性

如果另一个模组也使用 d3d12.dll,将该 DLL 重命名为:

d3d12_chain.dll

把它放在这个模组旁边。它会自动被检测到。

你也可以通过以下方式手动指定另一个代理: 链式加载动态链接库 在……里 shf-dx12-proxy.ini.

只能命名一个文件 d3d12.dll 在游戏目录中。

重要提示

  • 此模组适用于《寂静岭f》的DirectX 12版本。
  • 它针对的是管线编译卡顿,无法消除无关的CPU、流送、遍历、存储或引擎卡顿。
  • 首次启动可能仍包含编译工作,因为初始预编译阶段有意保持同步。
  • 如果游戏更新改变了受支持的可执行文件或其所需的管线路径,异步行为会自动保持禁用,而不是应用未经验证的补丁。

测试与安全

本次版本已通过启动、加载、跑图、战斗、过场动画、菜单及玩法切换等环节的测试。

在代表性验证运行期间:

  • 604个异步PSO已排队
  • 全部604项已成功完成
  • 关闭时无待处理工作
  • 没有发生编译失败
  • 没有发生待处理的超时
  • 未发生未解决的管线使用情况
  • 未检测到不安全或未受保护的命令列表执行
  • 不支持的管道描述正确使用了同步回退

卸载

从可执行文件目录中删除以下文件:

d3d12.dll
shf-dx12-代理.ini

你也可以删除生成的日志、状态和缓存文件。

请勿移除 d3d12_chain.dll 如果它属于另一个已安装的模组。

制作人员

特别感谢Phroster在《最终幻想VII 重制版》和《重生》中的DX12异步编译工作,为本项目提供了灵感。

感谢所有测试、反馈问题、推荐并支持我模组的每一个人。

Ko-fi: ko-fi.com/aliremi

使用 Xmod 解锁 寂静岭 f 的全部潜力 — 今天就探索这些顶级 MOD!