Switch模拟器YUZU进度报告2022-12月

Switch模拟器YUZU进度报告2022-12月

你好yuz-ers。又是一年啊!我们在 2022 年结束时推出了更多的柚子炸鸡、Vulkan 更改、新的输入驱动程序、大量的内核工作、更高的性能、更好的视觉效果等等!

Y.F.C项目.part...1.5 和缓存失效

Blinkhawk也一直在努力完成他心爱的项目,发布了Y.F.C. PART 1.5。基本上是完整“第 2 部分”版本预期的删节版本。此拉取请求中的更改包括对现实的返工,以包含用于间接绘制和配置的各种新宏。

如前几篇文章所述,宏是实现间接绘制和实例化绘制等功能的小型 GPU 程序。它们必须被效仿。MacroHLE(高级仿真)是避免执行请求的宏,而是将其直接转换为它将生成的代码(如实例化或间接绘制)的过程。这与 MacroJIT 形成对比并并行,MacroJIT 的工作原理是实时模拟宏程序中包含的循环和控制流。

现在,为什么要同时保留两者?好吧,每个人都执行自己的专业任务。与MacroJIT相比,MacroHLE的优势与间接调用的模拟有关。间接调用(例如绘制)使用通过某些着色器在 GPU 中的某处生成的数据,以建立绘制参数及其绘制计数。传统上使用 MacroJIT,我们必须同步主机 GPU 和来宾 GPU 以获取间接数据,以便正确执行宏。使用 MacroHLE,我们在主机 GPU 中创建一个间接绘制命令,该命令指向 GPU 生成数据应位于的转换地址。从而跳过同步。

由于这些改进,yuzu 现在能够更有效地执行宏,大大减少了 CPU 开销,并且无需更改任何设置。我们内部喜欢称之为“被动技能”。

由于这些更改,多个游戏的性能得到了改进,包括由 Koei Tecmo 开发的游戏 精灵宝可梦朱/紫 猎天使魔女3 怪物猎人:崛起和(版本 12.0.0 除外,它仍然需要进一步修复)火焰纹章无双 仅举几例。崩溃也已修复。我们测得部分游戏的性能提升了 5-20%,但在具有大量缓存的 CPU 上,性能提升可能更高。根据我们的测试,5800X3D在某些游戏中可以达到30%以上。以更高分辨率渲染的性能成本也大大降低。Pokémon Scarlet and Violet Bayonetta 3 Monster Hunter Rise Fire Emblem: Warriors

R5 5600X - 2x16GB 3933MHz CL18 - RX 6600

但好东西还不止于此!Blinkhawk 还增加了对 和 Vulkan 扩展的支持,减少了游戏过程中需要构建的着色器的数量和大小。VK_EXT_extended_dynamic_state2 VK_EXT_extended_dynamic_state3

这个相对“新”的对,以及已经实现的和,是负责大大减少着色器构建卡顿的四个扩展。但正如往常一样,消费类GPU中对这些扩展的支持充其量是参差不齐的,最坏的情况是支持混乱。 特别是仅受 NVIDIA Vulkan Beta 驱动程序(撰写本文时的版本 527.86)和最近的(2021 年末及更新)RADV Mesa 驱动程序支持。我们建议任何有兴趣测试新着色器缓存性能的人都可以尝试这些新驱动程序。VK_EXT_extended_dynamic_state VK_EXT_vertex_input_dynamic_stateState3

别无选择,实现这些扩展迫使我们执行另一个可怕的缓存失效。

证明柚子最好的GPU仍然是适用于操作系统的NVIDIA或Linux上的AMD的

大多数驱动程序至少涵盖了 4 个扩展中的 3 个,没有任何问题,只有一个明显的例外,AMD Windows 驱动程序。与使用 RADV 的 Linux 上运行同一张卡或使用任何其他品牌相比,在处理新着色器时,这样做的代价是更高的卡顿。

一个小的旁注,Linux RADV用户应该将他们的Mesa版本更新到最新版本(或者如果需要,使用更新的发行版版本),因为在21.2之前的版本中,正确的支持被破坏了。

作为最后一秒的更改,Blinkhawk测试删除了在NVIDIA Ampere和更新的GPU(RTX 3000系列及更高版本)上强制执行的16位浮点(FP16)黑名单。如果它有效,它将允许他们在这方面类似于图灵和AMD Radeon产品。然而,NVIDIA重新设计了他们的FP32和FP16装置在Ampere和更新设备上的操作方式,两者都提供相同的性能。不幸的是,即使它更快,最终也无关紧要,因为Ampere和Ada上的 FP16 仍然在驱动程序中被窃听,在许多游戏中产生图形问题。

唯一可以从启用列入黑名单的 FP16 支持中受益的架构是 Windows 上的英特尔,但它们的驱动程序是关于 FP16 的垃圾箱火灾。因此,他们继续以与Ampere和Ada相同的方式以32位模拟16位精度,在这种情况下,它始终存在性能损失。当然,可以从此更改中受益最大的最弱架构是唯一仍然损坏的架构......

此迭代的另一个额外好处是 GPU 精度使用起来更安全。粒子将继续变得更好,但像精灵宝可梦朱紫 猎天使魔女3 和许多其它游戏可以更频繁地准确地玩,而不会出现故障,这提供了巨大的性能优势(特别是仍然需要它的标题屏幕,但游戏玩法是安全的)。Y.F.C.NormalHighPokémon Scarlet/Violet Bayonetta 3 NormalBayonetta 3 HighNormal

其它令人敬畏的 GPU 更改,以及更多的缓存失效

这个月并不止于此,在我们的GPU代码库中也有很多值得一提的变化。

哦,天哪,这个月肯定很忙。

首先,他负责为我们的 Vulkan 和 OpenGL 后端实现 SMAA 抗锯齿滤波器。但这还不是故事的全部,所以让我们进一步阐述。

SMAA,或增强的亚像素形态抗锯齿,是由西班牙萨拉戈萨大学和以孤岛危机闻名的视频游戏工作室 Crytek 开发的 MLAA 的改进。

BreadFish实现了最初的OpenGL版本,打算将其作为分辨率缩放器的一部分发布。事实证明,为 Vulkan 实现可不是开玩笑的,在被你的作家唠叨之后,byte[] 不得不工作 2 周才能让它成形。SMAA

SMAA,基于 ,旨在成为一种后处理(又名基于着色器)的选项,通过分析相邻像素来专注于质量而不是性能,这与它只是模糊整个屏幕不同。筛选器是使用渲染通道实现的,当与 FSR 筛选结合使用时,它会产生最佳结果。AMD 建议在其官方概述集成指南中正确消除映像锯齿。结果不言自明:MLAA FXAA SMAA

对于那些感兴趣的人,我们使用了预设,测试显示即使使用 GT 1030 的性能损失也很低,因此我们更愿意关注质量。只有使用旧集成 GPU 的用户才应避免 。对于其余部分,打开并忘记这是一个安全的选择。您可以在 中找到该功能。ULTRA SMAA Emulation > Configure > Graphics > Anti-Aliasing Method

作为旁注,NVIDIA 的 FSR 版本 NIS 也经过了测试,但结果是如此丑陋和过度锐化,以至于我们决定保留两者中的最佳选择 FSR。也就是说NVIDIA现阶段的FSR并不如AMD的FSR来的优秀。但不代表未来不会赶上,毕竟AMD的FSR是开源的,所以显卡驱动这个东西终究还是新的好。

byte[] 还修复了各向异性过滤的问题。如果用户在 Linux 上运行 RADV 驱动程序,则 以外的各向异性过滤值会导致 中出现明显的“类似痤疮”的呈现问题。在其他各向异性过滤和分辨率乘数值上,该问题仍然存在,但 byte[] 继续解决此问题。Super Mario Odyssey超级马里奥奥德赛

此更改还解决了在 Lavapipe(Mesa、Linux)上使用自动各向异性过滤时的错误水渲染问题,尽管错误仍然发生在其它各向异性过滤值处。Super Mario Sunshine

byte[] 还更正了内存中数据缓存管理操作的语义。

以前,当来宾请求缓存失效时,实现只会使硬件上的缓存失效,而不是按预期使内存对 GPU 可见。

另一方面,他还推广了各种 Vulkan 扩展使用核心方法。在 Vulkan API 中,供应商扩展是由特定硬件供应商或驱动程序提供的可选功能,可能并非在所有系统上都可用。相比之下,核心方法是 Vulkan 规范的基本组成部分,并保证在所有支持 API 的系统上可用。因此,提升扩展以使用核心方法可以提高其可靠性和可移植性。

byte[] 对 Vulkan API 进行了进一步的初始化调整。包括一系列的更改和恢复,这些内容在之前的 PR 中被错误地删除了。他还在结构中添加了标志,以便被检测为可用的Vulkan设备。VK_KHR_timeline_semaphore VK_EXT_host_query_reset VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR VkInstanceCreateInfo MoltenVK MoltenVK

请记住,要在macOS设备上获得柚子渲染还需要做更多的工作。这只是早期的初步工作。

vonchenplus已经为Maxwell3D实施了绘图管理器,旨在消除解决方法并重新组织绘图过程以更准确地枚举绘图行为。由于这些更改,某些 3D 模型无法正确渲染的问题已得到修复。Dragon Quest Builders勇者斗恶龙:建造者

在这些更改之后,vonchenplus 还改进了拓扑更新逻辑的代码,以便实现更加准确。为了使用 Vulkan 实现特殊拓扑,此更改是必要的。

这包括对 quad strips的支持,这需要使用三角形来模拟它们,以及模拟索引和非索引模式的功能。在非索引模式下,固定映射表用于连接顶点,而在索引模式下,计算着色器用于动态映射原始图形索引。Vonchenplus还实现了对线环的支持,前者需要使用三角形列表来模拟它们,后者需要使用三角形扇形。

这些更改修复了 塞尔达旷野之息 中英雄的路径以及 精灵宝可梦朱紫 中的状态摘要图形,它们还给了我们另一个着色器缓存失效,耶!Legend of Zelda: Breath of the Wild Pokémon Scarlet and Violet

Blinkhawk 已将 alpha 添加到覆盖范围中,将 alpha 添加到我们的 Vulkan 后端。

Alpha to coverage是一种多重采样技术,用于提高透明或部分透明像素的质量。它的工作原理是混合从同一像素获取的多个样本的 alpha 值,以产生单个更准确的结果。这有助于减少渲染透明像素时可能发生的锯齿和其他渲染伪影。

Alpha to one另一方面,是一种用于通过将每个像素的 alpha 值设置为最大值来提高部分透明像素质量的技术。这有助于减少需要执行的 Alpha 混合量,从而提高渲染管线的性能。1.0

这些更改修复了在 精灵宝可梦朱紫 中近距离或远处查看时树木和草的阴影问题。Pokémon Scarlet and Violet

Vonchenplus纠正了柚子错误检测绘制类型造成的错误。过去,柚子会在每次绘制后将每个顶点和索引计数寄存器设置为零,以确定下一次是常规绘制还是索引绘制。 向我们证明,这些寄存器根据以前的值发起了一些绘制调用。更改此行为可部分修复 异度之刃3 中存在的粒子。您现在可以更轻松地履行您的非先知职责。Xenoblade Chronicles 3

视频加载中...

CPU 要求更改,免费提供性能

我们通常不在这里介绍编译更改,但这次我们不得不这样做,因为它会影响兼容性。

您的作者(或本进度报告中的联合作者,我的搭档这次做了大部分工作)一直在玩编译标志以获得更多的免费性能,继 Blinkhawk 前段时间所做的工作之后。

Microsoft Visual C++(MSVC,Visual Studio)非常简单(我们稍后会讨论Linux)。你启用完整的程序优化,优化性能而不是大小,这里一点,那里一点,你获得了不错的 3%,但我想要更多。上个月,Epicboy改进了构建过程,节省了时间和内存。这创造了一个足够大的“差距”,以实现大的,链接时间优化(LTO),过去必须丢弃这种优化,以消耗我们构建机器人的所有可用RAM。

Windows测试进展顺利,在某些情况下,性能提升高达12%。问题是Linux。LTO本质上是激进的,不能保证项目的所有部分都会对此做出良好的反应。在这种情况下,问题是Qt,UI看起来完全乱码。所以 LTO 必须离开,但取而代之的是,我们现在需要 Dynarmic 已经做了一段时间的事情,x86-64-v2 硬件。

GCC 和 Clang 构建现在将编译,假设 CPU 的功能与构成 x86-64-v2 一部分的指令集兼容,最高的指令集是 SSE4.2。这意味着yuzu在Windows和Linux中工作而不会崩溃所需的最低CPU现在是第一代Core i系列(500-900系列),已经快15岁了,而AMD的FX和APU系列已经快12岁了。GCC 和 Clang 的性能提升高达 7%。

第一个系统运行 i7-12700H - 2x16GB 4800MHz CL40 - RTX 3080 移动版 16GB 175W,第二个系统运行 R7 5800X3D - 2x16GB 3600MHz CL16 - RTX 4090

我们最初想强制执行 x86-64-v3 以获得更大的性能提升,并确保最低级别的性能,因为任何缺少 AVX、AVX2,尤其是 FMA 的 CPU 都会非常慢,无论其时钟速度或内核数量如何。所以那些志强神教可以洗洗睡了,框框再多缺少指令集没有用。垃圾就是垃圾。

是的,这意味着您花 8 美元购买的 20 核常春藤至强神教不足以完成这项任务。

然而,问题在于,根据我们的遥测,这样做会使近 9% 的洋垃圾用户群失去支持。如此多的用户数量相当可观,因此我们决定等到更多用户采用更现代的 CPU 后再实施此更改。我们将在未来重新评估 OpenGL 最终也进入砧板后强制执行 x86-64-v3。

虽然此更改也适用于Windows,但MSVC不够灵活,无法让我们为x86-64-v2构建,它要么支持SSE2,要么直接跳到第一个AVX。Dynarmic已经手动使用x86-64-v2扩展,因此无论使用何种操作系统,任何缺少SSE4.2的CPU都被视为不稳定。可以用CPU-Z自查。

x86-64-v4 在很多年内都不会成为一种选择,主要是因为英特尔无法决定自己制造的 AVX-512 是否应该允许他们的用户实际使用。

如果一个老派用户如此强烈地在几十年前的CPU上运行yuzu,那么Flatpak版本仍然是通用的,或者总是可以选择手动构建yuzu,允许您配置任何要求。

新的 Joy-Con 驱动程序和其它输入改进

German77 再次做到了这一点,给了我们一份惊人的圣诞礼物,这是 Joy-Cons 的新输入驱动程序 这是一个不依赖 SDL 的内部开发,因此它为我们提供了更大的自由来添加以前不可用的功能。

涵盖了基础知识。提供单和双 Joy-Con 模式,按钮、摇杆、动作映射的工作方式与以前相同。但这并不令人兴奋,这是添加的所有新内容:

启动柚子时,控制器播放器 LED 将显示闪烁模式,表示模拟器已获得控制权。进入游戏后,LED 将反映玩家编号。

HD Rumble现已完全实现,完全与原生配对相同。

模拟器现在可以在自动和自定义校准配置文件之间自动选择,避免摇杆漂移(尽管Joy-Con可以物理做,但我们无法解决任天堂的问题)并提供更准确的运动。

添加了颜色读数,现在控制器的实际颜色反映在UI和游戏中,就像在Switch上一样。

Amiibos现在可以像在Switch上一样加载Joy-Con。

现在完全支持健身环控制器,无需外部程序。

对红外摄像机的初步支持已经完成,像 Night Vision Game Builder Garage Nintendo Labo 这样的游戏,并且可以在正确的 Joy-Con 的基础上利用这个简洁的功能。

所有这些额外的准确性突出了我们以前不经常遇到的问题:PC蓝牙连接非常容易饱和。更便宜的英特尔蓝牙芯片组或具有大量干扰的区域特别容易出现这种情况。避免买太便宜的蓝牙模块及英特尔芯片的蓝牙,因此,HD Rumble 可能会导致延迟,具体取决于用户的具体情况。在这些情况下,我们建议取消映射/禁用精准震动。

说到饱和度,红外摄像头在某些游戏中可能会很慢。原因是我们目前只实现了图像传输模式,该模式保存了320x240张图片。一些游戏喜欢以分辨率为代价的更快帧速率,低至 40x30。添加所有模式后,断断续续的帧速率将消失。

Amiibo数据写入是一项正在进行的工作。

German77对令人难以置信的输入改进的渴望并不止于此。

German77实现了MIFARE服务,允许游戏读写普通的MIFARE标签。像这样的游戏小龙斯派罗:幻想者 利用了这个功能。唯一缺少的功能是对加密读写的支持。Skylanders Imaginators

说到SDL,最近的更新打破了它处理GUID的方式,GUID是几个控制器的标识符,包括集成到Steam Deck中的控制器,给Deck用户带来了许多烦恼。因此,由于手头别无选择,German77 不得不实施自定义过滤器来解决这个问题。

最后,作为一项非常重要的生活质量变化,German77 让输入设备列表自动刷新,确保 yuzu 无需人工干预即可检测到控制器。再见了小小的“刷新”按钮!

为了结束这一部分,MonsterDruide1通过对用户输入的范围和死区进行硬编码,提高了TAS模拟摇杆的准确性。

内核、构建和核心更改

随着 Dynarmic 和 SDL2 的更新,byte[] 启用了对 ARM64 编译的支持。这意味着所有 Switch 游戏都可以在具有兼容 Vulkan 驱动程序的 Linux ARM64 设备上进行测试。

作为这项工作的一部分,我们开始为ARM64 Linux设备实现Flatpak支持。这需要使OpenGL在构建过程中成为可选的,因为Flatpak的Qt构建仅支持OpenGL ES,而不是我们需要的完整OpenGL 4.6兼容性配置文件。

这些更改的一部分修复了macOS的编译,但情况保持不变,没有支持,将不会呈现任何内容。MoltenVK

Epicboy实施了一系列更改,目的是最大限度地减少动态内存分配的开销,该任务涉及从操作系统请求内存,并且在某些情况下可能会降低性能。

特别是纹理缓存是导致此问题的重要因素,因为它在将纹理传输到 GPU 和从 GPU 传输纹理时会不断分配然后解除分配内存。为了解决这个问题,Epicboy优化了纹理缓存,预先分配了一个缓冲区来存储旋转数据,并尽可能重用它,而不是每次都执行动态内存分配。此更改应可减少卡顿,因为现在只有在缓冲区不够大以容纳数据时,才会从操作系统请求内存。

Epicboy也做了类似的改变来优化ReadBuffer函数,它同样采用了类似的方法:不是分配和解除分配内存,而是创建一个缓冲区一次来保存内存中的数据,并且它只在需要增长时才重新分配。

此外,他还引入了一个 ScratchBuffer 类来充当堆分配的内存缓冲区的包装器。

此类的优点在于,它消除了初始化存储值的需要,以及在缓冲区需要增长时复制数据的需要。因此,它将有助于通过最大限度地减少在内存管理任务上花费的时间来加快速度。

German77 实现了 FreeThreadCount 信息类型,这是诸舞力全开2023如此类的游戏所必需的(尽管该游戏需要额外的更改才能工作)。Just Dance 2023 Edition

Saalvage 注意到 yuzu 的内核实现存在错误,并在销毁之前进行了必要的更改以解锁线程互斥锁,因为不这样做会导致未定义的行为。“这里是龙”等等。

byte[] 提交了一项更改,该更改改进了对系统启动失败的处理,以防止在 GPU 初始化失败时/如果出现死锁和崩溃。

他还添加了KHardwareTimer。此组件旨在修复线程请求某些操作超时时事件注销不正确的问题。

如果未进行该修复,线程将从操作成功返回,但无法取消超时,这将导致计时器错误地在线程上触发并取消随机的不相关操作。

此更改修复了困扰我们数月的随机卡死,以及 。The Legend of Zelda: Breath of the Wild塞尔达传说:旷野之息 Persona 5 Royal女神异闻录5皇家版

byte[] 还引入了一种解决方法,用于解决由于未分配内存而导致的崩溃,因为注意到 Yuzu 总是使用内存块而不将它们标记为已分配,导致它与游戏使用的内存重叠。他通过确保我们现在在使用内存之前分配内存来修复该错误。这是为了缓解这种情况,同时内核的其他部分正在被熨平。

这更多地与错误处理有关,但仍然很重要。byte[] 添加了一个选项,用于在发生无效内存访问时强制模拟器中断。这意味着如果/当游戏在后台爆炸时,模拟器将崩溃,而不是慢慢吞噬所有可用的系统 RAM。像这样的问题可能是由仿真问题、损坏的游戏转储甚至一些不稳定的模组引起的,因此避免整个模拟器崩溃总是一个更好的选择,如果用户没有足够的 RAM,会使操作系统受到影响。

除了这里没有提到的无休止的无声更改外,lioncash 还对输入代码进行了一些更改,以减少内存使用。

用户界面和音频更改

我们已经实施了一些有趣的用户界面生活质量更改!lioncash使SPIR-V着色器后端元素可翻译,因此它并不总是以英语显示给每个人。从事翻译工作的社区现在可以获取标签并相应地更新它。

几个月前,随着核心时间的变化,我们允许用户在社区的持续请求下解锁帧率启动游戏。事实证明,什么都没有改变。有几款游戏讨厌以解锁的帧率启动,支持渠道让相当一部分人询问为什么他们的游戏不想启动。因此,简单的修复,在启动权限被拒绝时解锁帧速率。默认情况下,切换解锁帧速率的热键只是一个小麻烦。Ctrl + U

用户报告说,他们在窗口模式下无法录制或流式传输他们的柚子窗口。byte[] 发现原因是为所有平台设置 Qt 属性,而不仅仅是为 Wayland 设置。发行下来,主播欢欣鼓舞。WA_DontCreateNativeAncestors

Discord 用户 piplup 报告说,柚子在访问游戏的自定义配置窗口后没有保存设备名称(你称之为控制台)。German77修复了这个问题(这个特定的设置缺少自定义配置等效项),并且还修复了Qt 6构建问题。

German77 的另一个非常好的生活质量改进是让柚子记住最后选择的目录。如果您将转储保存在同一个文件夹中,那么现在更新游戏所需的点击次数将减少。Install files to NAND…

byte[] 在关闭/停止游戏时与崩溃的战争中取得了惊人的胜利。他致力于使关机不会明显冻结柚子,避免在游戏退出时使模拟器崩溃,并在游戏时显示一条很好的弹出消息!

Morph 通过隐藏按钮对话框帮助实现这一目标,允许创建添加的对话框覆盖 byte[]。

在这方面进行的另一场战斗与自制应用程序有关。 byte[] 现在也负责让他们正确退出。

ChrisOboe突然出现了,为基于终端的yuzu-cmd构建提供了光荣的生活质量修复。将构建标记为“Windows”应用程序而不是“控制台”应用程序可确保不会不必要地弹出空命令行窗口。这可以帮助设置为使用 yuzu-cmd 运行特定游戏的流媒体程序,因为这可以防止突然出现的空黑框出现在其他窗口前面。

对于我们本月的单个音频更改,Maide 在音频停止时正确发出缓冲事件信号,修复了影响游戏的早期软锁。Pokémon Brilliant Diamond/Shining Pearl精灵宝可梦钻石、珍珠

未来项目

我们距离2023年只有几天的时间,我们已经想发布下一份进展报告。这么短的时间内发生了这么多事情!

此外,Blinkhaw,bunnei和byte[]正在做一些事情,我们迫不及待地想告诉你更多。是的,还会有更多的缓存失效。一切都以进步的名义。

这就是所有人!期待下次有一些但非常关键的 Vulkan 改进,希望届时见到你!

大梅西

展开阅读全文

页面更新:2024-03-20

标签:各向异性   柚子   模拟器   缓存   驱动程序   进度   分配   内存   性能   版本   报告   用户   游戏

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top