Switch模拟器Ryujinx进度报告2022-5月

Switch模拟器Ryujinx进度报告2022-5月

是什么将复古游戏、改装工具和 .NET UI 创建框架结合在一起? 如果你回答了“Ryujinx 5 月进度报告”,那就给自己一枚奖章。

在我们开始讨论 5 月份实施的变化之前,先看看我们的

Patreon目标:

Vulkan GPU 后端 - 仍在进行中。

已交付公共测试版本

ARB 着色器 - 2021 年 4 月达到的目标。

与 Vulkan 一起工作正在进行中,请稍等片刻,直到我们能够将此更新交付到我们满意的状态。

通过使用 OpenGL API 提高 NVIDIA GPU 上的着色器编译速度,ARB 着色器将进一步减少首次运行时的卡顿。

2000 美元/月 - 纹理包/替换功能 - 快到了!

这将有助于替换游戏中的图形纹理,从而实现自定义纹理增强、备用控制器按钮图形等。

一旦目标得以维持,预计到达时间:~3-4 周

2500 美元/月 - 一名全职开发人员 - 尚未见面。

这笔每月捐款将允许该项目的创始人 gdkchan 全职开发 Ryujinx。 我们所有的贡献者目前只在业余时间从事该项目!

5000 美元/月 - 额外的全职开发人员 - 尚未见面。

这笔每月捐款将允许额外的 Ryujinx 团队开发人员全职从事该项目。

大家准备好了吗?

显卡:

唉,GPU 部分从本月开始,进行了回归修复。 幸运的是,他们出现在颇受欢迎的 精灵宝可梦传说 阿尔宙斯 和 异度之刃 2 中,而且我们现在都应该知道,这些人是有 声的 。 第一个回归是在 精灵宝可梦传说 阿尔宙斯 中导致一些相当大的顶点爆炸和其它照明错误,这是由于纹理同步的疏忽,两个或多个线程遇到并试图读取相同的内存区域。 强制两个线程等待存在的数据 可以解决此问题,因此我们希望这些报告之一至少几个月内不会提及“纹理同步”!

宝可梦传说:阿尔宙斯

第二个问题源于上个月提到的顶点缓冲区计算修复,这对于阻止某些标题在启动时使用大量内存并刚刚崩溃至关重要。 不幸的是,虽然该解决方案对 超级马里奥 64 和 绅士解密游戏18+ 鲜活的世界 等游戏非常有效,但其它一些游戏也使用了这些缓冲区,并且以相同的方式计算它们会导致图形问题。 如果绘制没有被索引,那么我们就不能以同样的方式计算顶点缓冲区的大小,因为结果最终是没有意义的。 返回之前的 针对这些特定的未索引不确定性 ,异度之刃 2 中的过场动画将返回到它们之前的形式。

除雾

本月,着色器重新编译阶段的一个错误(由驱动程序更改或缓存版本碰撞触发)也通过 强制 Ryujinx 在开始转换您的着色器缓存之前预取 GPU 功能来解决 。 后端线程只期望一个线程在一次实际提交命令,当许多线程同时请求功能时,是否会发生崩溃真的是运气。

好吧,让我们远离破坏性的东西,转向我们驯服的 GPU 开发人员riperiperi。 有人说,只有 蜿蜒 前行才能让他微笑……或者每周二,正好 12 点,他会看到一个蓝色害羞的家伙执行撒旦仪式的幻象。 我们所知道的是,他本月设法获得了两个新的马里奥赛车游戏,这并非巧合。

让我们从马里奥赛车 64 开始。这款游戏不会冒犯任何儿童时代,但真的很烂。 不得不说。 无论哪种方式,最近的 Nintendo 64 NSO 服务都将这款游戏作为其收藏的一部分,并且很快就发现了某些区域的渲染问题,例如还原点预览、游戏选择屏幕上的模糊效果还有马里奥赛车 64 宽屏问题!

马里奥赛车64

N64 NSO 渲染中使用的官方 Nintendo Switch Vulkan 驱动程序和大量自制应用程序中使用的 Nouveau OpenGL 驱动程序都使用了系统 API 不支持的禁用视口转换。 因此,这需要 通过转换顶点着色器 以匹配提供的视口来手动实现。 如果所有这些都是完整的话,那么只需知道这修复 了许多 过去缺少 HUD 或 UI 元素的游戏。

马里奥赛车64

随着时间的推移,我们最终到达了马里奥赛车 DS,可以使用像 MelonDS 。 这将在稍后出现,但现在我们将不得不忽略它并直接转到 马里奥赛车 7,其中第二个riperiperi 修复程序开始发挥作用。

Citra 确实通过自制软件在 Switch 上运行,但在 Ryujinx 中渲染时出现了一些严重的图形问题。 第一个在上面看到了视口变换,但第二个 替代 StencilOP 枚举值 了 Nouveau OpenGL 驱动程序可以使用的 很难发现,但这确实修复了某些 3DS 游戏和可能的其它自制模拟器中缺少的阴影。

马里奥赛车DS

CPU/内核:

如果您到目前为止一直在关注,您可能会觉得本月对自制软件和一些非常规的事情有相当多的关注,而且您是绝对正确的。 图形的东西只是一个巨大的硬币的一面,涉及从官方和非官方仿真、大量复古游戏和...... 任天堂明星大乱斗特别版的运行。

这些变化的过程已经酝酿了几个月,因此我们有一个地狱般的故事要讲。

故事实际上始于 2020 年末《超级马里奥 3D 全明星》的发布; 至少可以说是一个有趣的版本,因为它包含 3 款游戏,至少部分是可以模拟的! 虽然 马里奥银河 和 马里奥阳光 都可以快速启动并在游戏中运行,但由于依赖固件 10.0.0,特别是它带来的 JIT(即时)服务,超级马里奥 64 在一年多的时间里仍然是个问题程序。

超级马里奥3D全明星

在任天堂进行模拟实验的同时,已经有很多粉丝最喜欢的模拟器被移植到系统中,例如 MelonDS 、 PPSSPP 、 mGBA 等项目 Skyline 和 ARcropolis 在改装社区中获得了成功。 将所有这些联系在一起的实际上是它们如何利用代码内存系统调用,并且可以动态地主动生成或自我修改代码。

所以让我们从开始这一切的游戏开始。 超级马里奥 3D 全明星。 特别是超级马里奥64。

这个游戏需要实现 JIT 服务。

要使这些功能发挥作用,它们还依赖于要实现的代码内存系统调用,并且这些服务还将使许多其它东西正常工作。

听起来不错吧?

无需 Ryujinx 需要支持所谓的“内存别名”,并且需要在快速内存映射模式下支持它(以前只有最慢的软件模式才起作用)。

gdkchan 通过重写大部分内存管理系统来 支持 快速内存管理器模式下的内存别名,从而开始了这一旅程。 不幸的是,或幸运的是,这些更改所需的新主机 API 仅在 Windows 10 及更高版本上实现。 这标志着 Windows 7/8 的首先被淘汰。

有了这个实现, 代码系统调用本身终于可以实现 了,一些真正的结果开始形成。

罪恶装备

来自Citra的深刻问题。。。

马里奥赛车DS

只剩下 JIT 服务,这里 gdkchan 选择了一条独特的路线。 通常,我们对系统服务使用“HLE 方法”(高级仿真),其中服务被逆向工程并直接在软件中重新实现。 然而,这个特定的服务与其它服务完全不同,只有在调用专用的“PrepareForJIT”函数时才会初始化。 在一个非常酷的里程碑中,为了最大限度地减少在实际不需要时运行此类服务的影响,Ryujinx 能够 运行该服务 直接从固件文件 以“LLE”(低级仿真)方式 忽略我们的内核和文件系统精度能够以可播放的速度直接运行真实系统服务是多么的棒,这是 超级马里奥3D全明星 问题中的最后一块拼图。 N64 NSO 模拟器此时也已发布,因此可以一石二鸟。

超级马里奥64

班卓与卡祖的大冒险

星际火狐64

模拟插件系统 Skyline 及其最受欢迎的插件 ARcropolis 也严重滥用这些服务,以将模拟提升到超越简单替换和一些真正狂野的创作。 ARCroplois 需要进一步更改才能启动,这是 GetProcessInfo 气氛扩展的部分实现 ,但现在在核心级别上运行。

任天堂明星大乱斗

由于自制软件的性质,我们不能保证对上面列出的任何程序或插件的未来更改将永远有效,因此我们建议,至少在目前,所有崩溃或意外行为应 始终 交叉引用在使用我们自己的问题跟踪器或工具本身提出问题之前使用硬件。 我们还要感谢 modding 插件背后的团队以及任何对我们缺乏 Web Applet 功能保持耐心的 mod 创建者,并希望将来不需要此类特定支持。 所以谢谢!

希望您不会因为 gdkchan 还没有完成 CPU 更改而筋疲力尽! 在实现内存别名之后,他 迅速解决了 Windows 独有的内存泄漏 ,然后进一步重构(基本上重新组织)CPU 接口以 将其与核心仿真器完全分离。

仿真器由多个部分组成,理想情况下,这些部分中的每一个都应该完全相互移除并通过“接口”访问,以实现非常模块化的设计。 大多数 Ryujinx 都是这样设计的,任何看过我们源代码存储库的人都会知道:

The Matrix 5:源代码

这里的好处是显而易见的,因为这允许人们在需要时使用 Ryujinx 并插入他们自己的 ARMv8 重新编译器,例如 Unicorn 或 Dynarmic 用于调试或专用目的

在本月结束时,gdk 继续 重写 SVC 处理程序 以使用 .NET 6 提供的新源生成器,而不是 Reflection.Emit。 界限凸起:萌情水晶 现在可以在游戏中使用,但主要好处来自从运行时转移到编译时的计算成本。

界限凸起:萌情水晶

一个更抽象的未来好处是,这是使 Ryujinx 为 .NET 7 的原生 Ahead-Of-Time 编译 ; 一项应该减少启动时间并全面提高程序响应能力/延迟的功能。

用户界面:

已经有一段时间没有足够的 UI 工作来为它制作一个完整的部分了,但这是我们日常的工作! May 当然有足够的理由保证一个专门的部分,但是随着 备受期待的搬到 Avalonia 的第一部分的合并。

网格?

还是行?

如上所述,这只是第 1 部分,在 UI 成为默认设置和 GTK 被永远淘汰之前,还需要进行进一步的工作。 Avalonia 的当前路线图:

第 1 部分:UI GPU 后端、主窗口和应用程序主机(22 年 5 月 5 日合并)。

第 2 部分:设置窗口及其所有子窗口和控件( 当前打开 )。

第 3 部分:所有其它与设置无关的窗口和控件。

第 4 部分:(如果需要)一般清理和修复。 GTK 开始了。

尽管如此, 的构建脚本 任何测试我们的拉取请求的人 清理并 与程序的其余部分标准化,并且 删除了 GTK 特定的 DPI 感知解决方法 以提供稍微清晰的图像在具有两个监视器的系统上,因为 Avalonia 可以本地处理这个问题。

不久之后,发现了一个系统缩放错误,如果用户在他们的操作系统中将比例因子设置为 150% 以上,帧缓冲区将只显示最终图像的 1/4。 通过缩放这个最终帧缓冲区以匹配操作系统比例因子 ,这个问题也得到了解决。

星之卡比

基础设施/杂项:

与往常一样,Ryujinx 用于从输入、渲染和文件系统等所有方面的后端基础设施一直在自己的开发路径上。 本月发生了以下基础设施变化:

SDL2 已更新至 2.0.22 ,这带来了对更多控制器类型(G-Shark 垫)和 Linux 上的一些进一步运动修复的支持。

的 工件现在反映了 1.1.0 命名方案 ,而不是旧的 1.0.0 AppVeyor 方案。

删除调试版本中的断言 。 对用户端发布版本没有影响,只是为了让命令行更好!

, Amiibo png 图像路径已修复 因此它实际上显示在窗口中。

音频渲染器错误消息 在记录时的含义更加清晰。

打包在 NSP 中的 Homebrew 现在可以启动了。 以前,模拟器会出错并通知 NSP 没有主 NCA。

还清理和改进了一些 HID 服务, 本月

与以往一样,本月似乎也是模拟器对于 Windows 7/8 的不再支持,这是有充分理由的。 缺乏驱动程序更新、现代内存映射 API 和缺乏 .NET 6/7 支持都是不能永远忽视的问题,因此, 我们在 4 月 24 日宣布 将从 2022 年 6 月 1 日起停止对这些旧系统的支持.

这在网上引发了一些争论,尤其是在 Reddit ,但不幸的是,我们要么继续推进 Switch 仿真,要么支持旧版操作系统。 我们不能两者都做。 所有 Ryujinx 构建现在 在其构建脚本中直接针对 Windows 10 1803 及更高版本,我们不再接受来自旧版本用户的问题或向其提供支持,即使出于某种奇迹该软件仍然可以启动。

结束语:

如果 2 月是 CPU 月,4 月是 GPU 月,那么 5 月肯定是“Cool-Stuff”月。 模拟器中运行的模拟器和自制软件以及改进的修改支持使其成为疯狂的旅程。 我们总是这么说,但是任何通过 patreon 捐赠、代码贡献或在社区中活跃的人加入我们的旅程真的不能得到足够的感谢!我们深表歉意!

如果您正在阅读本文,那么您就是像我们一样的模拟狂热者! 如果您了解一些 C# 和 .NET,我们的大门总是敞开着欢迎新的代码贡献者,他们可以承担从单行拼写错误到整个服务实现的任何事情。 只需向我们提供反馈、在 GitHub 上打开问题或仅报告兼容性也可以极大地帮助我们!

下次见!