查看: 1916|回复: 1

自己动手丰衣足食:编译一个修复了地底贴图bug的yuzu版本

[复制链接]

201

主题

1万

帖子

2万

积分

Lv.11

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

目前yuzu模拟器没有Ryujinx的一些贴图(比如石头白点)和音频(爆裂音,双声道不均衡,音效明显右声道更响)错误,然而:
1.闪屏:原因不明,触发条件不明,纯玄学,目前只能选择性无视。
2.内存泄漏:OpenGL模式下运行游戏有严重的内存泄漏问题,内存无法被正常释放,这导致不管你有多大内存最后迟早会爆,只是时间问题。而且和Ryujinx的问题不一样,内存泄漏是没法靠自动内存清理软件来解决的,所以你玩着玩着就会变卡、出错然后崩掉。
3.地底贴图错误:Vulkan模式下虽然没有内存泄漏问题,但是地底贴图一团糟,基本没法玩。不过已经有人给出了解决方案(下面会贴出原帖),需要修改模拟器的一行源代码然后自己编译。
虽然也有人发布了现成的修复版exe,但被怀疑含毒(似乎是因为会向一个远程IP发送数据),为了用的安心,不妨选择自己动手搞定编译过程。
VS2022:https://visualstudio.microsoft.com/zh-hans/vs/
CMake:https://cmake.org/
Vulkan SDK:https://vulkan.lunarg.com/sdk/home#windows
Git:https://git-scm.com/
为了防止跳过太多步有人看不懂,安装的部分我也写下来吧,首先是VS2022:
1.下载后按步骤执行,会打开一个叫Visual Studio Installer的程序,在上方标签页选择”可用“,然后找到”Visual Studio Community 2022“,安装。
2.在选择安装组件时,一定要确保勾选了”通用Windows平台开发“、”C++桌面开发“和”Visual Studio拓展开发“三个选项,注意要较大硬盘空间。
3.完成后根据提示信息重启。
CMake安装:没啥好说的,一直下一步。
Vulkan SDK安装:也是一直点下一步,但是选择可选功能时建议全勾上,反正我不勾是缺依赖。
Git安装:安装过程中,需要选择”Git from the command line and also from 3rd-party software“,同时建议勾选将Git集成到资源管理器右键菜单的功能(Git Bash Here),之后操作会更方便。
这些东西都装上后,首先你需要克隆最新的yuzu EA以及yuzu主分支的源码(之后说为什么两个都要):
1.找到你要放源码的地方,然后右键-Git Bash Here,会打开一个终端。这里先说一下基本的终端使用方式:输入命令然后回车,粘贴时候要右键然后点Paste,Ctrl+V是没用的。
2.用git clone --recursive 命令克隆项目,因为怕吞,所以完整的命令我会尝试放在本楼回复下。
PS:如果你之前没有选择继承资源管理器,那你就得自己手动导航到路径,方法是:
①先使用“cd [盘符]”切换盘符。
②“cd [你希望的目录路径]”注意是相对于你当前目录的路径,所以盘符是不需要加的。
举例:cd d→cd abc/1
根据官方文档的说明,externals文件夹中应该以及包含了所需依赖,但不知道为什么EA分支仓库里的依赖是不全的,所以我们要用主分支里的依赖替换yuzu EA源码文件夹里的依赖:
1.删除yuzu EA(pineapple-src)文件夹中的externals文件夹。
2.打开yuzu主分支(yuzu)的文件夹,将其中的externals文件夹复制到yuzu EA的文件夹中。
这还没完,我用CMake生成配置的时候发现vcpkg还是会出问题,排查了一下日志后我选择简单粗暴地把这个仓库重新克隆一份,之后就好了:
1.删除yuzu EA\externals\vcpkg文件夹。
2.在externals目录下右键打开Git Bash终端,然后使用git clone命令克隆vcpkg的仓库,完整命令怕吞还是放在本楼回复。
至此,准备工作就完成了,接下来打开CMake(cmake-gui),找不到直接在开始菜单里搜索。接着你会看到下图的界面。


1.“Where is the source code”这一栏填入你的(yuzu EA)源码文件夹路径。
2.“Where to build the binaries”这一栏填入你要存放输出文件的路径,建议是直接在源码文件夹里新建一个build文件夹。
3.点击下面的Configure,会弹出一个新的窗口,如下图所示。只需要改一下第一栏和第二栏,按图中这么设置就可以了(选择VS2022,架构选x64)。.


搞定之后点击Finsh,就会开始生成配置文件,所需的时间依你的配置而定,且中途可能会弹红字告诉你语法过时之类的,只要配置过程没有停止就可以忽略不管。
如果爆红且配置过程失败停止了,就要根据错误信息分析原因:
1.提示缺少某依赖(例如boost、vcpkg):是否按照之前的教程用主分支的依赖文件夹替换EA的?
2.提示vcpkg安装失败:是否按照之前的教程重新克隆vcpkg?
3.提示找不到Visual Studio:首先检查你的VS版本设置的对不对,然后如果还是找不到,请重新打开VS安装程序,然后在“已安装”选项卡里选择“更多”-“修复”,VS就会自动重装,然后根据提示重启电脑,这样一般都能解决此问题。
4.其他问题:看日志推断原因(看不懂英文用翻译软件),复制具体的错误信息用搜索引擎查找,实在不行直接拿着错误日志去问ChatGPT都行。
差点忘了要改代码
接下来打开源码文件夹里的src\shader_recompiler\backend\spirv\emit_spirv_context_get_set.cpp文件,如果问你打开方式选VS就可以了。
定位到第391行,将"return ctx.OpISub(ctx.U32[1], index, base);"改为"return ctx.OpLoad(ctx.U32[1], ctx.vertex_index);"。
注意:
1.缩进要和上面对齐。
2.所有标点都必须用英文的半角标点,包括括号。
3.句尾的分号别忘了。
4.改完这行爆红或者高亮说明你写错了,如果怕弄错就直接复制粘贴,但注意我加的引号不是代码的一部分。
回到CMake的窗口,点击Configure旁边的Generate按钮,然后继续等吧...
好消息是,如果生成配置那步过了,这步一般也不会出啥问题。
坏消息是,你可能得等更久,建议喝杯茶耐心等待。
如果卡在某一步,很可能只是因为这一步需要的时间比较长,而不是出了啥问题,不要急着把程序关了重来。
完成之后:
1.打开你的输出文件夹,双击打开yuzu.sln文件,问你打开方式就选VS,然后在右侧解决方案资源管理器处,右键单击“yuzu”(如果你不想要图形界面也可以选yuzu-cmd),在下拉菜单里选择“设为启动项目”,如下图所示。
2.在上方工具栏中选择编译类型,默认可能是Debug,建议选Release,如下图所示。
3.再次右键单击右侧的“yuzu”,选择“生成”开始编译,还是如图所示。
4.等待编译完成。






最后,在输出文件夹下的bin\Release里找到编译完的模拟器,就可以愉快地体验没有地底贴图错误的Vulkan模式了。
不过遗憾的是这么编译出来的模拟器没有中文,在官方出修复之前就凑合着用吧。
顺带一提,之后出了新版本,如果问题还是没有修复都可以这样自己编译,毕竟只是改了一行代码。
由于提供修复方式的原帖的链接怎么都发不出来,只好上点狠活了:


被吞了无数次,还是只好...


回复

使用道具 举报

0

主题

143

帖子

337

积分

Lv.2

Rank: 2Rank: 2

复杂了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛合作、疑问请点击给我发信息 点击链接加入群聊【17173有料社区】