
shadPS4 如何把游戏着色器从 SPIR-V 反编译为 GLSL 并替换修改后的版本【免费下载链接】shadPS4PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4shadPS4 运行时加载的游戏着色器以 SPIR-V 二进制.spv形式存在直接查看或修改并不方便。documents/patching-shader.md 给出了一条完整的修改路径先让模拟器把着色器转储到本地用spirv-cross把 SPIR-V 反编译为可读的 GLSL 文本改完再用glslc编译回 SPIR-V把同名的.spv文件放进shader/patch目录最后开启patchShaders选项让模拟器加载修改后的版本。本文按这条路径逐步说明操作。前置条件安装 Vulkan SDK 并确保工具在 PATH 中反编译和重新编译两步都依赖外部工具这是文档明确要求的唯一前置条件安装 Vulkan SDK并确保spirv-cross和glslc都在 PATH 中。spirv-cross负责 SPIR-V → GLSL 的反编译glslc负责 GLSL → SPIR-V 的编译。安装完成后在终端直接输入这两个命令应能调用工具若提示找不到命令说明 PATH 未配置好后续步骤无法继续。第一步开启转储让模拟器导出着色器在config.toml中启用dumpShaders选项。启动模拟器并运行游戏模拟器会把加载到的着色器写到转储目录。根据 documents/Debugging/Debugging.md 的配置说明dump_shaders对应 GPU 配置项转储路径为../user/shader/dumps即user目录下的shader/dumps子目录。文档中着色器文件的示例命名为fs_0x000000.spv其中前缀标识着色器阶段例如fs_对应 fragment片段着色器。转储完成后在该目录下找到你要修改的那个.spv文件。第二步用 spirv-cross 反编译为 GLSL对目标.spv文件执行文档给出的反编译命令spirv-cross -V fs_0x000000.spv --output fs_0x000000.glsl-V指定输出为 Vulkan 风格的 GLSL输入为你在shader/dumps中找到的.spv文件名--output指定生成的 GLSL 文件名。命令执行后会得到一份可读的 GLSL 源码文件其中的变量和数值都可以正常编辑。第三步编辑 GLSL 并重新编译回 SPIR-V按需要在文本编辑器中修改 GLSL 文件然后把改动编译回 SPIR-Vglslc --target-envvulkan1.3 --target-spvspv1.6 -fshader-stagefrag fs_0x000000.glsl -o fs_0x000000.spv这里需要特别注意-fshader-stage参数文档明确要求把它改为着色器对应的阶段例如片段着色器用frag。示例中的frag与文件名前缀fs_对应编译顶点等其他阶段的着色器时该参数要与着色器实际阶段一致否则产物无法被正确识别。-o之后是输出的.spv文件名文档要求它与原始着色器同名。第四步放入 patch 目录并启用 patchShaders把重新编译出的.spv文件放到shader/patch目录中文件名与原始着色器完全一致例如仍是fs_0x000000.spv。模拟器正是按阶段与哈希生成的同名规则去shader/patch目录查找补丁文件参见 vk_pipeline_cache.cpp 中PipelineCache::GetShaderPatch的实现补丁目录为GetUserPath(PathType::ShaderDir) / patch。在config.toml中启用patchShaders选项。重新启动模拟器运行游戏修改后的着色器即会替代原版被加载。验证与结果判断反编译是否成功spirv-cross命令执行后生成了非空的.glsl文本文件内容是可读的 GLSL 代码。编译是否成功glslc命令执行后生成了新的.spv文件。补丁是否会被采用确认.spv文件已存在于shader/patch目录且与转储目录中的原始文件同名并且config.toml中patchShaders已启用。文档给出的流程到此即告完成游戏画面中的实际效果需要自行对照修改内容判断。限制与注意整条流程依赖spirv-cross和glslc两个外部工具缺少其中任一步都无法完成。-fshader-stage必须与着色器阶段匹配这是文档特别强调的一点。补丁文件命名规则是阶段前缀加哈希值重命名或漏掉哈希位都会导致模拟器查不到对应补丁请严格沿用转储出来的原文件名。修改 GLSL 后的行为完全取决于你写入的代码文档没有对修改内容做任何限制说明若编译后的着色器无法工作先检查glslc命令的阶段参数是否选对。相关文档documents/patching-shader.md、documents/Debugging/Debugging.md。【免费下载链接】shadPS4PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考