Switch模拟器YUZU进度报告2022-3月
嗨,柚子们~,本月,我们将讨论模拟器中的模拟器、添加的 YFC 项目的部分内容、新旧标题的图形修复等等!
面向 NVIDIA 用户的 PSA:第 4 部分
是的,这一次,我们有好消息也有坏消息。
虽然最新的 5XX.XX 系列驱动程序修复了曲面细分问题,但影响 路易吉洋馆3 并在 Vulkan 中提高了性能,他们还引入了位块 MSAA 图像时的崩溃,这意味着运行游戏像 怪物猎人崛起, 符文工房5, 索尼克色彩:终极版,以及其他几个分辨率与原生不同的情况会导致崩溃。
值得庆幸的是, epicboy 使用 3D 助手解决了这个问题 就像对 AMD 和 Intel 驱动程序所做的那样。
现在,公平地说,blitting MSAA 图像违反了 Vulkan 规范,因此 NVIDIA 有权不再允许它。 对以前允许并有效的东西突然改变行为真是太可惜了。
也为 AMD 用户提供了一个 PSA:最新的驱动程序,22.3.2 及更高版本,增加了对 VK_KHR_workgroup_memory_explicit_layout扩展,并且可能使其它游戏崩溃。 如果您发现这样的问题,请恢复到 22.3.1驱动。
Vulkan 模拟器
byte是 yuzu 的新手,但绝不是艺术新手,带来了一个非常有趣的 Pull Request, 实施 Wii Hagi模拟器支持进入柚子。
这个官方的任天堂模拟器是允许超级马里奥3D全明星运行,这意味着 超级马里奥银河 和超级马里奥阳光 可玩,还有超级马里奥64的支持将在以后推出,因为该游戏需要完整的 JIT 服务实现。
byte并没有止步于此,还实现了其他一些更改。
为寄存器寻址的 const 缓冲区访问实现 SPIR-V 着色器支持 ,其中还包括 LDC.IS访问模式(指令的变体),允许马里奥将他的身体保持在这个维度 超级马里奥银河 和 超级马里奥阳光
超级马里奥银河 使用深度缓冲区和模板缓冲区的组合来“查看”用于拍摄星位的星形指针后面的对象,没错,纹理决定了游戏的物理特性。
正确处理 S8D24 < > ABGR8 纹理转换 解决了与不良星位的不正确碰撞,稍后的修复解决了 NVIDIA 驱动程序的问题 .
着色器错误编译(yuzu 的一个错误假设,哎呀)在 超级马里奥阳光 中造成了有趣的黑洞。 修复 oopsie 为 Delfino Plaza 提供了预期的“阴影”,并且很可能也默默地解决了其他游戏中的问题。
最后,修复缓冲区缓存中的瓶颈,消除了减速并有助于将 超级马里奥银河 中的性能提高约 4.5 倍。 同样,这可能会对其他游戏产生积极影响,但不要指望它同样重要。
Merry 更新 dynarmic 到最新版本以提供更好的支持 超级马里奥银河,增加了对加速SHA256 CPU 指令的支持 ,以及其他变化。这避免了在最后一级软锁定 超级马里奥银河。
星之卡比 探索发现 事实证明,它是最近最好的平台游戏之一,对开发人员来说也是一个很大的挑战。
史诗男孩通过解决在整个游戏过程中非常引人注目的几何弹出式插件来获得成功。
这是通过提高恒定缓冲区上传的准确性来的,此更改还具有修复渲染问题的额外好处。 怪物猎人:崛起,使其可播放,从怪物到怪物猎人的转变。
我们很快意识到的另一个问题是,NVIDIA 硬件会疯狂地消耗 VRAM,甚至在几分钟内就可以填满高端硬件。
在映射内存范围之前取消映射预先存在的光栅化内存 解决了这个问题,让 NVIDIA 用户不需要 RTX 3090 级别的硬件也能获得良好的体验,RTX3090永远不是我们的计划。
但是,epicboy 发布了一个 PSA,该请求可能会引入正在调查的回归,并且通过使用禁用动态分辨率模块可以解决 。
如果游戏在启用异步 GPU 仿真的情况下运行,应该始终保持启用这个选项。
最后,流缓冲区中的一个错误是导致顶点爆炸的原因,解决方案是 简化流缓冲区的实现。由于新的实现一次只能提供一个上传请求,这在某些情况下可能会造成很小的性能损失,但它肯定会在此过程中修复其它几个游戏。
AMD Radeon 用户在运行此游戏时可能会遇到比平时更多的卡顿,问题取决于他们拥有的特定 GPU。 这是因为可用的 Windows AMD 驱动程序不支持VK_EXT_vertex_input_dynamic_state扩展,这有助于将着色器数量减少到原始数量的 3 倍。 正如上个月报道的那样,对扩展的 Mesa RADV 支持在 RDNA2 硬件中被破坏,因此它与英特尔显卡的支持一起仍然被列入黑名单。 Linux 上的 NVIDIA 硬件和较旧的 AMD GPU 提供了适当的支持,并享受了显着减少的着色器数量,以及在构建缓存时相关的减少的卡顿。 CPU 线程数在这里至关重要,至少在 AMD 增加对该扩展的官方支持之前。
图形更改和优化
bunnei 是本月的重头戏,重写了 NVFlinger执行,一部分 Project Y.F.C..
NVFlinger是负责向显示器呈现的服务,因此在这方面的任何改进都将带来更稳定的帧时间,即使帧速率计数保持在稳定的 60 FPS 时也会减少卡顿。
我们最初的实现基本上是在 2018 年完成的猜测工作,在几个方面都缺乏。 例如,yuzu 会阻塞线程,直到准备好呈现最后一帧。 这显然会导致与系统性能无关的不希望出现的卡顿。
新的实现与基于 Android 开源项目,这意味着 yuzu 将其许可证从 GPLv2 更改为 GPLv3 ,以适应 AOSP 使用的 Apache 2.0 许可证。
游戏之类的 ABZU和 龙珠战士Z进步很大,但其它游戏喜欢 异度神剑2 仍在测试中的修复 Project Y.F.C..
享受如黄油般流畅的游戏体验!
asLody 一直致力于优化 LOP3-LUT着色器指令,旨在提高性能并帮助获得 Hades去工作。 可悲的是,这个实现引起了一些问题。
degasus 可能从某个 Dolphin 模拟器中设法实现了一个补丁,后来变成了自己的拉取请求,解决了问题并实现了相同级别的优化。
这还不够 Hades跑起来。 Project Y.F.C.将在不久的将来解决这个问题,但这是一个小的全球性能提升,主要有利于低端 GPU。在执行维护时,它还提供更易于阅读的代码。
我们在之前的进度报告中记录了我们在 Linux Flatpak 构建上的视频解码问题。 添加了一项检查以避免崩溃,但在此过程中,Windows 构建卡在 CPU 解码上! 使用低线程 CPU 的用户可以在视频播放期间立即分辨出差异。
只需在 Windows 上禁用此检查 ,Windows 版本可以再次享受通过 GPU解码 获得的额外性能。 如果视频播放感觉更流畅,您现在知道原因了!
toastUnlimited 开始着手改进 yuzu 的 Vulkan 错误处理。
这是一个非常常见的问题,主要是由 Windows Update 安装的非常过时的 GPU 驱动程序或笔记本电脑制造商提供的自定义较慢驱动程序导致的,这些驱动程序用于依赖电池寿命指标或廉价的冷却解决方案。 这通常会影响 Intel GPU,但基于 Vega 的 Radeon GPU 有时也会受到影响。
这个问题的另一个普遍原因之前的报告是过时的 Vulkan 注入器完全破坏了支持。 像 OBS Studio、OBS Streamlabs、Bandicam、Action!、Overwolf、GShade、iCUE、MSI Afterburner 等软件,或者任何带有叠加层的注入 Vulkan 的软件,如果它已经过时,或者开发人员没有跟上最近的更新,可能会完全破坏渲染Vulkan 发布。
Toast 的修复解决了 2 个不同的场景 . 更改 yuzu 处理 GPU 实例创建和渲染实例创建的行为有助于避免由过时的驱动程序或损坏的 Vulkan 注入器导致的直接桌面崩溃。
还有更多工作要做,但这让我们更接近于在未来提供 Vulkan 作为默认图形 API。
史诗男孩发现 避免双重锁定的互斥锁修复了在 OpenGL 后端使用 Extreme GPU 精度时的崩溃问题,使其成为那些追求最准确渲染的人的安全选择。 此选项只能从 模拟 > 设置 > 图形 > 高级处更改。
他还包括一项优化,重点是消除 if(false) {…}着色器代码中的分支 . 这有一个额外的好处,那就是稍微减少着色器构建时间, 更少的着色器时间就是更少的着色器卡顿!
并非所有变化都对所有人有利
为了减少 yuzu 中的 RAM 使用,Merry 测试了减小代码缓存的大小在动态中。 在内部测试期间,该更改被证明非常好,内存使用量略有减少且没有副作用。
结果上线后,用户开始抱怨,突然的卡顿影响了 任天堂明星大乱斗 在所有的对战中。
Dynarmic 必须模拟 CPU 缺少的任何指令,这需要更多的缓存空间。 较旧的硬件,例如基于 Skylake 的 CPU(10 代及以上)或早期的第一代和第二代 Ryzen CPU,不仅缓存更小,而且缺乏对现代 CPU 提供的某些指令的支持。
一旦缓存用完,就会发生重新编译。 这导致在比赛开始几秒钟的 Smash 战斗中经历了令人印象深刻的滞后感觉,还原更改就是解决问题所需要的一切。
一般错误修正
最近的 Nintendo Switch 固件更新改变了嵌入式屏幕键盘的行为, 更新了柚子的模拟等效项匹配新版本,允许游戏从 怪物猎人 角色创建完成后无需传输保存文件即可播放。
Morph 也致力于 MiiEdit开发的 Mii 创建小程序 German77 开始 Morph 的更改 增加了对需要较旧固件版本的游戏的支持。
我们对关闭时崩溃的优化仍在继续进行, Merry 修复了隐藏在日志线程中的退出死锁 . 就像九头蛇一样,你砍掉一个头,就会出现两个新头。
toastUnlimited 在改进 yuzu-cmd 方面一直很开心。
添加 -c或者 -config参数将允许用户为配置文件指定自定义位置 . 这对于游戏特定设置很有用。
添加了扩展的内存布局支持。
SDL2 有一个限制,即当您进入全屏模式时,它不会自动调整“渲染画布”的大小。 yuzu 之前使用的是原生游戏的分辨率,所以在非停靠模式下为 1280x720,在停靠模式下为 1920x1080。 通过此更改, 将改为使用桌面的分辨率 ,允许适当的全屏独占支持,并让缩放过滤器按应有的方式显示。
v1993 对套接字(LAN 和 LDN)服务进行了一些更改, 允许不精确的地址长度值 . 这可以防止崩溃 Minecraftv1.12.1,因为游戏将零作为地址长度的值。
toastUnlimited 给了我们一个简单但非常重要的生活质量改变, 禁用 Web Applet为默认情况,这是很有必要的,因为许多游戏都存在问题。 这 Web Applet负责阻塞控制器输入,对该服务主要用于的教程感兴趣的用户并不多,因此这是值得的牺牲。 对于任何感兴趣的人,可以从以下位置重新启用 模拟 >设置 >通用 > 调试 >取消勾选Disable Web Applet.
继续变化的话题,柚子现在 将保存全屏状态 为未来的默认记忆。 在全屏模式下关闭或停止游戏,当您开始下一个游戏时,模拟器将自动为您最大化!
German77 不能在没有提供拉取请求的情况下让一个月过去! 他正在努力创造 Flip Wars兼容的。 正确添加信号事件 AcquireNpadStyleSetUpdateEventHandle 使游戏可玩。
未来项目
Merry 正在测试 添加一个 Paranoid CPU 精度 ,一个不适合胆小的人的选择! 它将禁用大多数优化(但不是 fastmem),主要目的是帮助 CPU 优化调试,但我们都知道,如果有空闲的 CPU 性能,它将被用于额外的流畅度。
Project Gaia由于任天堂在最近的固件更新中添加的新功能,正在经历一些轻微的延迟。
而关于 Project Y.F.C.,我们正在测量性能提升,以及首次渲染游戏:哈迪斯!
这就是所有的内容! 感谢您与我们在一起,我们下个月再见!
我们将在下一份报告中包含相关的内核更改。
感谢您的点赞关注!
,