shadPS4 编译教程:PS4 模拟器从源码到《血源诅咒》开荒的完整搭建指南
shadPS4 编译教程:PS4 模拟器从源码到《血源诅咒》开荒的完整搭建指南
【免费下载链接】shadPS4PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C++项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4
shadPS4 是一个用 C++ 实现的 PS4 模拟器,《血源诅咒》《黑暗之魂 重制版》《荒野大镖客:救赎》都已经在 Windows、Linux、macOS 上跑通。官方定位很直白:早期开发阶段,别指望完美体验。但能玩,是真的能玩。
为什么你的 PC 能原生跑 PS4 游戏
先破一个迷思。很多人以为模拟器要逐条翻译 CPU 指令,其实 PS4 的 CPU 本来就是 x86-64。游戏代码在 PC 上原生执行,一步翻译都不用走。
真正要重写的是 PS4 的系统层:内核和系统库,代码就在 src/core/libraries/kernel/,那是 PC 上根本不存在的一整套环境。
最难的是 GPU。PS4 用的是 AMD 的 GCN 架构芯片,代号"利物浦"。游戏着色器是这种 GPU 自己的机器码,PC 显卡看不懂,中间必须过一道重编译。整条链路是这样的:
前端解码 GCN 字节码,转成中间表示(IR,一种"通用中间形态",后续所有优化都基于它);跑一串优化 pass;最后产出 SPIR-V 交给 Vulkan 执行。代码都在 src/shader_recompiler/:解码在frontend/,优化 pass 在ir/passes/,Vulkan 后端在backend/spirv/。设计参照了 yuzu 的 Hades 着色器编译器,省下了从零写优化器的工作量,能专心解决模拟 AMD GPU 本身的问题。
GPU 模拟本体在 src/video_core/:amdgpu/liverpool.cpp逐条解释 GPU 的寄存器级命令,renderer_vulkan/负责 PC 这一侧的队列、帧图和交换链。音频输入走原生代码,手柄、键盘、鼠标统一由 src/input/ 处理,开销可以忽略。
Linux 下从 clone 到第一帧:三步编译
第一步,装依赖。Clang、CMake、SDL2、Vulkan 等一共约 20 个包,完整列表在官方 documents/building-linux.md。编译器推荐 Clang 18,用 GCC 可能撞上未知问题。装完后clang --version和cmake --version能正常输出,就可以往下走。
第二步,克隆仓库。这一步在干什么:把源码连同全部第三方依赖拉下来。
git clone --depth 1 --recursive https://gitcode.com/GitHub_Trending/sh/shadPS4--recursive不能省。所有第三方库都用 Git 子模块管理(子模块就是挂在主仓库里、各自独立版本化的第三方库),漏了它,clone 下来的仓库是空的壳。拉完之后externals/目录下应该能看到一堆已经填充的库目录。
第三步,两条 cmake 命令编译。先配置,指定用 Clang 编:
cd shadPS4 && cmake -S . -B build/ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++配置成功后,开始构建:
cmake --build ./build --parallel $(nproc)如果编译阶段卡死电脑,把--parallel $(nproc)去掉,单线程慢慢跑。跑完会在build/下产出可执行文件shadps4。
启动命令很简单:
./build/shadps4 CUSA00900CUSA00900是《血源诅咒》美版的 ID。游戏目录在配置里指好,直接传 ID 就能启动,然后应该看到《血源诅咒》的加载画面。Windows 的构建步骤见 documents/building-windows.md,用 Visual Studio 配 CMake;macOS 需要 26.0 以上系统,Intel Mac 不支持。
开玩之前:固件文件和键位怎么准备
⚠️ 固件是第一道坎。模拟器要加载一批来自 PS4 官方固件的.sprx模块,放进sys_modules文件夹:libSceCesCs.sprx、libSceFontFt.sprx、libSceJson2.sprx、libSceLibcInternal.sprx、libSceUlt.sprx等文件,模拟器本体不带。需要你从合法持有的 PS4 主机上 dump,文件来源不合法时别折腾。
没有手柄?内置映射够用。WASD 是左摇杆,IJKL 是右摇杆,三角、圆圈、叉、方块对应小键盘 8/6/2/4(也可以按 C/B/N/V),方向键就是方向键。F11 切换全屏,F10 看帧数,F12 触发 RenderDoc 抓帧。Xbox 和 DualShock 手柄即插即用;自定义绑定按游戏保存,单个按键最多绑三个键,还支持把鼠标移动映射到摇杆。
卡住时:查兼容性列表和 Debugging 文档
选游戏之前,先去项目维护的官方兼容性列表查一眼。它逐个记录了各作的运行情况,直接盲选一款没人验证过的游戏,大概率是在浪费别人已经记录过的崩溃时间。
真崩了,看 documents/Debugging/Debugging.md。里面讲了怎么用 RenderDoc 看一帧里到底发生了什么、bug 报告该带什么信息。Linux 上用 RenderDoc,要记得设SDL_VIDEODRIVER=x11,否则抓帧直接失败。
《战神》这类大作现在还跑不了。但每发一个版本,"能玩的游戏"就近一步——去兼容性列表挑一款已验证的开局,卡住了就把日志丢进 issue。
【免费下载链接】shadPS4PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C++项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考