Switch模拟器Ryujinx进度报告202211月
Switch模拟器Ryujinx进度报告2022-11月
LDN被引入数字3,macOS满足图形要求苛刻的程序,Ryujinx面临其最终对手......
总而言之,我们度过了一个忙碌的月份,发布了两个主要功能,讨厌的公司GameFreak决定推出这些新的独立游戏。他们叫什么?红色和蓝色?哦,对不起,Scarlet & Violet。当新旧游戏看起来像这样时,很难区分它们,是吧?!
显卡:
本节怎么能从神奇宝贝以外的任何东西开始?我们连续第 1 天就可玩的游戏仍在继续,尽管并非没有障碍。在图形和性能部门,一些问题立即显现出来。首先,Vulkan 上的分辨率缩放有点中断,如下所示:
这是与 Vulkan 隔离的,是由 SPIR-V 缩放助手无法找到数组纹理引起的。 随着这个问题的解决,海滩和湖床不再被永久的草覆盖。
Mesa Radeon Vulkan驱动程序RADV也显示出一些相当有趣的行为,尽管是随机的,偶尔,在启动时,整个屏幕会被一个明亮的白色过滤器覆盖。Switch 将始终将初始虚拟纹理采样为 0,但 Ryujinx 并没有强制这样做。通过在创建时将纹理清除为 (0,0,0,0),可以消除可变性,炼狱的圣光也会消失。
虽然拥有较新显卡的用户和Linux用户享受了所有的乐趣,但Nvidia的GTX 700(甚至一些移动900系列)卡的所有者根本没有图形输出。与大多数此类错误一样,我们通常可以将它们追溯到不受支持的功能或扩展。这一次,需要变通办法的是VK_EXT_shader_viewport_index_layer及其OpenGL等效物。如果 GPU 不支持扩展,则将gl_Layer从顶点移动到几何体,这些较旧的卡不再像它们的弟弟妹妹一样呈现得那么好。
最终朱/紫图形错误修复被压缩到 11 月,解决了神奇宝贝统计图的一个问题,其中部分将被完全切断并且无法渲染。事实证明,毫不奇怪,GameFreak正在使用极其过时的渲染方法。多边形拓扑用于绘制六边形,但大多数 Vulkan 驱动程序和相当多的 OpenGL 驱动程序不再支持所需的扩展。Nvidia 仍然支持兼容模式下的GL_POLYGON,但在 Vulkan 中不存在这样的等效物。幸运的是,凸多边形可以通过三角形扇形(想象一下围绕单个点的三角形扇形)进行相同的渲染,正如之前的报告中所述,这对于现代计算机图形渲染器来说轻而易举。
为了结束我们的朱紫问题,解决了随机崩溃;但是,我们仍然有前面提到的那些讨厌的性能问题要讨论。值得庆幸的是,这些问题影响的不仅仅是这些游戏,因此我们可以从所有这些神奇宝贝谈话中喘口气。
第一站:神奇宝贝剑与盾。什么?我们在那里快速呼吸。不是吗?
撇开玩笑不谈,它们只是几款游戏,由于GPU仿真部门的大量活动,本月出现了一些相当惊人的性能改进。鉴于这里的变化种类繁多,为了我们的所有时间,给他们个人关注是不明智的,但这里有一个快速的概述。请参阅下面的图表以获取。
实现了 DrawElementsIndirect 的 HLE 宏。这有助于在一些游戏中的表现,例如:怪物猎人崛起,NieR Automata和Pokémon Scarlet/Violet。
冗余缓冲区更新不再触发更新。使用Vulkan时,异度之刃游戏的性能提高了约25%。
再次允许从多区域句柄设置_volatile标志。修复了使用Vulkan时Pokémon Sword & Shield的性能回归。再次将Vulkan和OpenGL在这些游戏中的表现相提并论。
解析存储缓冲区访问时,CB0 访问已被消除。将异度之刃游戏和塞尔达传说林克的觉醒性能提高多达 30%。
预加载命令缓冲区不再在 Vulkan 上的渲染通道之外创建。将神奇宝贝朱/紫的性能提高约 15%。
现在,所有缓冲区分配将同时发送,而不是一次发送一个。将 GPU 瓶颈游戏(如超级马里奥奥德赛)的性能提高约 7%。
现在可以直接访问非预取命令缓冲区。可以提高超级马里奥奥德赛和神奇宝贝剑与盾的性能高达3%。
缓冲区缓存上的锁定已大大放松。进一步改进了 GPU 绑定游戏,如超级马里奥奥德赛高达 5%。
这是很多包含超级马里奥奥德赛和神奇宝贝的要点。不过不要失望,这些只是我们开发人员目前测试任何 GPU 线程改进的首选游戏,因为它们在 CPU 端相对容易。将所有这些捆绑在一起;以下是一些热门游戏在 11 月初与 12 月初的表现的快速图表:
这里最大的赢家是两个神奇宝贝参赛作品,Scarlet/Violet 在发布后不到两周内获得了惊人的 81% 的性能提升。即使是在其他地方存在可怕瓶颈的游戏,例如《塞尔达传说:旷野之息》,仍然取得了约10%的健康进步。值得注意的是,Xenoblade Chronicles和Sword/Shield在OpenGL上已经达到了类似的帧速率。11 月消除了这一差距,并允许两个后端为任何可能仍需要在 OpenGL 和 Vulkan 之间切换的用户达到新的性能高度。
从所有这些数字和统计数据转移到更直观的东西上,几个月前提到了一个变化,允许命运Extella:The Umbral Star在OpenGL上渲染。我们声称 Vulkan 的类似修复正在进行中,十一月确实提供了。
由于 Vulkan 需要一些额外的工作,即实现对深度模板解析的支持以及对纹理兼容性规则的一些更改,因此 Sonic Colorss Ultimate 现在也使用 Vulkan 在英特尔 GPU 上进行渲染。这款游戏已经适用于NVIDIA,但似乎英特尔的驱动程序更加挑剔。
《蔚蓝之夜2:新月新娘》凸显了Ryujinx本月处理实例抽奖方式的一个缺陷。最初,我们试图推迟绘制,直到我们可以确认总实例计数,这似乎是确保准确渲染的最安全方法。不幸的是,在极少数情况下,例如在 Azure 2 之夜中,在抽奖仍处于"挂起"状态时执行计算调度。因此,当抽奖最终触发时,状态完全错误,并导致所有GPU供应商出现硬崩溃。通过确保在任何计算调度发生之前强制完成所有挂起的绘制,即使在这些利基场景中,我们的流程也适用。
除了对 Vulkan 管道管理系统的一些小改进外,影响 AMD 和英特尔的长期转换反馈错误最终被消除。如果任何使用这些GPU的用户尝试玩Xenoblade Chronicles Definitive Edition,问题将立即显现出来:
也许田野里的草一直都是关于 GPU 驱动程序的隐喻......无论哪种方式,它都不应该看起来像那样。在像Xenoblade这样的情况下使用矢量输出可以绕过问题的根源,即:丢失数据或数据被写入英特尔情况下的错误偏移量。无论如何,草!
我看到一些神秘地下城粉丝了吗?就我自己…?好吧,如果你是一个拥有英特尔GPU的神秘地下城粉丝,那么这个月你吃得很好。为了在Vulkan中渲染Pokémon Mystery Dungeon: Rescue Team DX,我们使用了OpenGL约定,如gl_VertexID和gl_InstanceID。虽然英伟达甚至AMD都有足够的一致性,这不是问题,但英特尔就没有那么幸运了。Vulkan 确实有各种各样的等价物,但它们不是直接的 1:1 映射;他们添加了更多信息。通过纠正这种差异并从字面上减去一些值,视觉上的血腥终于成为过去的遗物。
本月完成了对GPU仿真的改进:解决了两个崩溃,第二个应该有一些额外的播放时间,因为它消除了MoltenVK和macOS的一些扩展要求。《时间之帽》、《异度之刃编年史3》和《超级粉碎兄弟:终极版》中的回归被迅速清理,一个有趣的小错误得到了解决,其中超级马里奥奥德赛可以在缓冲区缓存中收集数千个条目中的10个!
内核/服务:
继续前进,走向黑洞,即Switch内核和Horizon OS。
各种用户名的服务HLE大师在11月为我们提供了一些服务实现和清理,包括在sfdnsres(吸引人!)服务的反序列化过程中的一个相当奇怪的错误。当地址为空时,旧实现无法反序列化 AddrInfoSerialized,从而导致崩溃。有了这个场景,一个非常酷的自制软件终于启动了!
更多同样令人难忘的名字的服务,如"IFriendService: 1(取消)"和"GetSaveDataSizeMax"都被存根了,其中第一个允许SnowRunner在遇到另一个朋友服务崩溃之前进一步进入游戏玩法。一步一个脚印。
音频和文件系统的两个较大的服务实现已更新到其固件 15.0.0 变体,并附加了各种错误修复。
在音频方面,这解决了《纸马里奥:折纸之王》中的音频渲染器崩溃问题,并实现了新的音频渲染器功能,例如 15.0.0 中添加的语音参数支持。像 Delay 这样的旧效果器在 14.0.0 中的初始实现中也解决了其他错误。
用于我们的Switch文件系统仿真的库LibHac也升级到了最新版本,该版本增加了对固件15.0.0解密密钥的支持,并实现了固件14.0.0中引入的一些新的保存数据服务。"一般系统稳定性改进以增强用户体验"也会列出,如果这让你的船漂浮。
春季秋季大扫除继续进行,修复了 IPsmSession、bsd 服务中的 eventfd 逻辑,甚至达到了软件键盘。似乎没有人注意到,当面对异国情调的角色时,它根本不知道该怎么做。
嗯嗯,是的。这个角色是由...乐高积木?不用担心,这被证明是一个非常愚蠢的错误,其中显示的文本在显示之前没有过滤掉 unicode 控制字符。Unicode 控制字符基本上是一个字符,指示您的计算机执行作为用户不需要看到的操作,例如输入词尾或换行符。通过添加一种方法将原始 unicode 输出剥离为我们希望看到的内容,这样的文本变得更加清晰。
用户界面/用户体验:
11 月,Avalonia 通过大量的清理工作和 Linux 错误修复,更接近聚光灯。我们对此投入了如此多的信心,以至于我们专门为macOS版本提供了Avalonia,而其他操作系统距离效仿只有几英寸之遥。
到目前为止,主要的障碍是GUI上几个Linux独有的渲染错误,例如对话框和弹出窗口无法绘制。更糟糕的是,使用 Vulkan 时渲染窗口是纯黑色的,当我们确信大多数用户(即使在 Linux 上)更喜欢使用 Vulkan 进行着色器编译时,我们实际上无法推出。
值得庆幸的是,这个问题被追踪到我们初始化 X11 窗口的方式,并且在此过程中来回切换并破坏了 OpenGL,现在一切正常。虽然对话框仍然被破坏,但显然这不是同一个问题。
真正的原因是我们使用的Avalonia风格,称为"FluentAvalonia",它实际上是Fluent WinUI设计和控件移植到Avalonia中。我们必须直接向他们的 repo 打开拉取请求才能解决这个问题,但那里的维护人员非常慷慨地将更改合并得非常迅速。然后,我们所要做的就是更新到新的FluentAvalonia版本。
对任何 Linux 用户来说都是最后的福音;Ryujinx现在也可以直接在Wayland中启动,如果设置两百个环境变量不是你喜欢的!
关于不针对特定操作系统的更一般的更改:从历史上看,我们需要一个 RenderTimer 来保持 GUI 和游戏同步,然后再切换回嵌入式窗口(之前介绍了几个进度报告!这仍然在踢来踢去,并且仍然迫使 GUI 以 60hz 刷新,无论您的显示器刷新率如何。删除计时器和其他一些遗留的位和鲍勃现在允许 GUI 以完全刷新率进行动画处理。
我们花了这个月的时间解决一般用户体验的一些怪癖,并简化了组织库的一些基础知识。DLC管理器已针对Avalonia进行了完全重新设计,现在具有启用或禁用所有已添加文件的功能。任何拥有《超级粉碎兄弟:终极版》所有DLC的人都可以告诉你,这是天赐之物。
只是DLC窗口?当然不是,通过所有这些努力而不对游戏更新窗口给予相同的待遇是相当愚蠢的......虽然,我们不能让您一次启用所有更新版本;我们被告知,这将导致时空连续体结构的某种撕裂......
对于那些不知道的人,Ryujinx也可以从终端或命令窗口完全无GUI启动。这对于前端启动器或具有非常特殊工作流程的人非常有用!直到本月,从终端启动游戏时,还无法设置首选的图形后端OpenGL或Vulkan,这对于许多想要特定于游戏的设置的人来说是一个很大的烦恼。这是命令行启动过程的一些重构的主要焦点,这也减少了一些重复的代码。现在是成为键盘侠的最佳时机。
最后,就像愤怒的父母一样,我们不得不重命名"将DRAM大小扩展到6GB"选项,以不包括"扩展","DRAM"或"6GB"等字样,因为太多人启用了它。我们把它放在"HACKS(可能导致不稳定)"下,你认为我们在Scarlet&Violet推出时收到的90%的支持请求是什么?对呵。
整个团队现在在他们的眼球背面纹上了"禁用DRAM扩展"。
杂项:
这次我们看的是一个相当琐碎的杂项部分,但有一头非常大的大象。
.NET 7 是 .NET 运行时的最新版本,于 11 月 8 日发布到全世界,作为我们最前沿的软件项目,我们几乎立即跳上了它。使用正在开发的语言开发软件的众多优势之一是,我们经常看到其他人为我们编写的新功能和性能提升!在主要运行时更新的情况下,这可能相当重要。只是运行时的更新让我们在《超级马里奥奥德赛》中又提高了 6% 的性能(上图中跳跃的一部分!),当启用名为分层 PGO (TPGO) 的新 .NET 功能时,我们看到比 .NET 6 提高了 13%。
TPGO(分层配置文件引导优化)是开发团队对进入 .NET 7 最感兴趣的功能,因为它有效地允许运行时实时优化常见代码路径。这是一个开放的目标,因为它要求Ryujinx端的零变化,并且只是提供了更多的性能。有什么不喜欢的?
本节中的大量其他工作都围绕着我们可以利用的新技巧,或者我们可以删除的旧部分,这要归功于 .NET 7 和 C#11。新的 LINQ 方法、Random.Shared、ReadOnlySpan 和字符串文本是主要的快速添加。
本报告的很大一部分涉及Linux,我们正在以完全相同的方式完成。一些新的 Fedora 安装不是符号链接所需的依赖项,所以我们现在尝试导入这些库作为后备。FFmpeg 5.1.x不满足于止步于此,决定打破我们的视频解码,而是呈现一个绿屏。
事实证明,FFmpeg 维护者恢复了他们在 5.0.x 版本中所做的一些 AVCodec 更改,但我们没有得到备忘录。将解码器调整回旧格式可以修复这些错误。
结语:
如果这就是她写的,那么仅此而已!仅靠这份报告确实无法为11月份伸张正义。查看我们单独的博客文章,了解 LDN3 的发布和我们全球首个 macOS 端口!这是最近经常说的一句话,但确实没有比现在更好的时间来模仿Switch了。
再一次,这是报告的招聘部分!如果您了解一些 C#、.NET、3D 图形或低级工程,您也可以帮助 2022 年剩余时间尽可能顺利和无错误。如果这对你来说都是炼金术和魔法,那么捐赠给我们的patreon,或者积极参与测试和错误报告确实会有所帮助。
直到12月,还有新年!