Switch模拟器YUZU进度报告2023-11月
大家好,yuz-ers!11月为我们带来了许多GPU修复,紧随其后的是驱动程序修复,重大的Android/ARM变化,更多的小应用程序工作,新的输入项目等等!
马里奥扮演马里奥!好像还不够,一部经典的作品回归了,而且还有改进的图形! Super Mario RPG 超级马里奥RPG 给老款SNES时代的游戏带来了浓缩的怀旧感(我们仍然坚挺),所以发布当天他们嘴边的问题就是:“它能在yuzu上运行吗?”
通常情况下,确实有一些但是。为了使这个丰富多彩的角色阵容完美无缺,需要解决两个问题:一个影响所有人的音频问题,以及一个专门针对NVIDIA用户的修复。
她在那座城堡里吗?(超级马里奥RPG)
用户立即注意到游戏的背景音频完全被静音,大大减少了游戏体验。在进行了一次交叉审查后,包括音乐在内,byte[] 发现问题的原因是 Maide 在九月份重写 Opus 时留下的遗留问题。修复了这个特定的问题后,游戏开始正常播放音频。
与此同时,epicboy对NVIDIA损坏渲染的着色器重新编译器进行了单独的调查。
想象一下如果Switch能够支持HDR(超级马里奥RPG)
对于不熟悉yuzu和其他模拟器着色器管线的人:
游戏已经编译了为特定游戏机架构设计的着色器 - 在这种情况下是Switch。这些着色器对于其他设备是无用的,因此模拟器必须在运行时拦截这些着色器,将它们转换为所选图形API能够理解的着色器格式(在yuzu的情况下,选项是SPIR-V、GLSL和GLASM),然后才能将这些转换后的着色器发送到GPU驱动程序进行渲染。经过多个转换步骤,Switch着色器最终被转换为,例如,Ampere着色器,或Adreno,或RDNA3。(现在你知道为什么着色器抖动这件事了。)
NVIDIA驱动程序针对着色器中的各种代码模式进行了大量优化。当您遇到这些优化中的错误时,无论设置、API或着色器后端如何,都可能发生奇怪的事情。没有逃脱的可能。在这种情况下,这导致菜单中字符颜色被交换,因为NVIDIA驱动程序不喜欢游戏菜单中使用的特定模式―与大多数其他驱动程序错误不同,它在每个后端都出现了问题!
这是epicboy提供的一个通用示例:
uint low = uint(bitfieldExtract(some_number, 0, 16));low <<= 16U;uint high = uint(bitfieldExtract(some_number, 16, 16));uint swapped = low high;
epicboy的解决方案是在yuzu中检测到这种特定模式,然后将最后一行替换为按位或操作:
uint swapped = low | high;
这样可以让NVIDIA编译器满意,并在游戏中提供准确的彩色角色 - 皆大欢喜。
瓦力欧?(超级马里奥RPG)
解决了这两个问题,现在只剩下一件事要说了:愉快的踩踏!
Project NiCE 奈斯项目到了!是时候从兼容安卓的PC模拟器毕业,转向“原生”安卓模拟器了。
NCE支持,或者说,由GPUCode和byte[]做出的巨大努力,使Skyline能够在ARM设备上原生运行游戏代码,无需重新编译以减慢速度。
这在理论上听起来很不错,但对用户意味着什么呢?使用JIT重新编译器的优势在于确保兼容性,无论使用何种设备―这就是AMD64计算机可以运行64位ARM游戏的原因。虽然这种方法对于AMD64台式机和笔记本电脑来说已经足够好(也是少数可能的方法之一),但在安卓手机和平板电脑上非常慢,更不用说非常耗费资源,因为重新编译的代码效率较低,使用了大量资源,并且需要更多的电力来执行,导致产生了更多的热量。
由于 JIT 的翻译开销降低,NCE 的性能与用户设备上可用的功率和热量余量成正比增加。NCE 还可以每个客户 CPU 核心节省高达 128MB 的内存(Switch 有四个核心),这意味着通过取消 JIT 可以节省高达 512MB 的 RAM。
使用具有主动冷却功能的设备仍然会产生最佳效果,但使用NCE,性能更高,电池续航时间更长,散热量更低,游戏加载更快。FPS提升通常在20-100%之间,取决于游戏和设备。
两台设备的结果不可比较,Mali的运行速度降低到0.5倍以减少瓶颈。
遗憾的是,一如既往,一切都不完美――“可能会有限制”。并非所有游戏都能充分利用NCE。由于Linux内核的限制和在非常受限的内存地址空间上运行的要求,一些早期的Switch游戏需要安装更新才能使用NCE运行。像 The Legend of Zelda: Breath of the Wild 塞尔达:旷野之息 和 ARMS 这样的游戏在其原始v1.0.0版本中使用了已弃用的36位地址空间,而NCE需要39位才能运行。在这种情况下,模拟器会自动恢复到JIT以允许启动游戏。只有在安装了各自的更新后,这些游戏才能获得完整的39位支持。您可以在启用帧率计数器时确认这一点,它将显示NCE或JIT的使用情况:(安装游戏的升级补丁还是很有必要的)
就这么简单(塞尔达传说:荒野之息)
另一个限制是32位游戏。 Mario Kart 8 Deluxe 马车8豪华版 和 Captain Toad: Treasure Tracker 前进吧!奇诺比奥队长 等等,将无法在NCE上运行,仿真器将自动回到使用DynARMic JIT,就像36位游戏一样。
尽管有办法能够在32位游戏中使用NCE,但我们的调查发现这将需要一个次要的32位构建目标,而我们从未支持过这一点,而且在Android 11或更高版本的Android API上已不再可行,而这恰好是我们的最低要求。
也有极少数游戏拒绝与NCE一起运行,因为Linux系统比Switch操作系统更严格。一个例子是 Paper Mario: The Origami King纸片马力欧:折纸国王 ,目前需要手动禁用NCE才能正确运行。
这些限制适用于Android设备和其他ARM设备,如Linux ARM开发板或笔记本电脑。
我们在最新的GitHub和Play Store版本中默认启用了NCE。该选项可以在 Settings > Advanced settings > Debug > CPU backend 中找到。
不妨再确认一下
对于那些设置了“优化器”的人来说,禁用Fastmem也会禁用NCE,因此我们不建议禁用它,除非你无法以其他方式运行想要的游戏。如果你看到禁用Fastmem后仍然在帧率计数器下显示NCE的游戏旧图片,那是因为计数器最初没有考虑到这种情况;后来已经修补以纠正这一问题。
安卓的更多变化但为什么止步于此呢?Android构建中还有更多的工作―这是本月的清单:
byte[]已经上传了FPS计数器。文本颜色已更改为白色,其读数现在持续更新,并且现在提到了正在使用的CPU后端是JIT还是NCE。在运行游戏时,可以通过从左侧拖动并选择 Overlay options > FPS counter 来启用FPS计数器。
由于t895的贡献,设置选项卡进行了许多改进。添加了图标和描述,并且改变了元素的顺序和一些设置的位置。
设置选项卡和关于页面已进行调整,以添加横向布局。t895的工作改进了平板电脑、可折叠设备和其他大型设备的可用性。看来是时候购买一个8gen2的平板或者横折手机了,嘿嘿。
谢谢Alphonsokurukuchu提供的平板电脑照片
t895添加了一个下拉阴影到FPS计数器以提高可读性,并允许设备的字体样式控制FPS读数的文本大小。
启用后,t895现在在启动或关闭过程中阻止画中画,提高了稳定性。
Blinkhawk 在运行 Turnip 驱动程序的 Android 设备上禁用了写入同步,修复了 Red Dead Redemption 和 Luigi’s Mansion 3 等游戏中的崩溃问题。
根据用户的民主决定,t895已默认禁用画中画功能。
Blinkhawk在Android上重新启用了多线程管道编译,减少了启动时加载缓存和游戏中构建新着色器时的卡顿。这得益于NCE下更低的资源消耗。
在天玑处理器的Mali GPU上发现了另一个导致崩溃的原因:它们不支持多视口渲染。(禁用小窗模式)禁用此功能可以大大提高Mali设备的稳定性。(Mali不支持的功能列表也在不断增加。)
上限速度提高到400%,t895发现使用高限速比完全禁用更稳定。祝你基准测试愉快!
在访问搜索选项卡时,t895设置在过滤之前将第一个结果设置为您最近玩过的游戏。
由于 t895,您现在可以使用文件选择器将保存的导出文件存储在本地。
另一个 Mali 限制,byte[] 的另一个解决方法。这次 nullDescriptor 获得了一个特殊的较慢的代码路径,因此 Mali 设备可以运行 Super Smash Bros. Ultimate 任天堂明星大乱斗。天玑有福了!
byte[] 也修复了查询缓存中的一个边缘情况,该情况导致 Turnip 驱动程序崩溃。
用户报告 Redmagic (红魔手柄,现在它的知名度好高)控制器上的面 ABXY 按钮被翻转,因此 german77 解决了该问题。
t895 在 UI 中添加了对多个游戏文件夹的支持以及扫描子目录的功能。现在,你可以随心所欲地变得杂乱无章;我们不会评判。
最后,在解决了影响 Mali 和 Turnip 的问题后,byte[] 决定轮到高通被砍了。顶点输入动态 Vulkan 扩展被标记为大多数官方高通驱动程序和设备支持,但在较旧的 600 系列 GPU 上它完全损坏,导致游戏仅显示黑屏。排除此扩展可以解决问题,并暴露高通如何仅在非常基本的一致性测试中测试其驱动程序,而没有其他测试。做最少的工作,让社区为你做剩下的事情......
图形变化Force maximum clocks (强制最大时钟)设置似乎会在用户中引起很多混乱,不幸的是,这导致它在不打算使用的情况下被启用,特别是功率/热量受限的设备。
该设置最初是为了解决 AMD 的问题:在模拟许多游戏时,基于 RDNA 的卡会遭受严重的降频,或者您的作者所说的“慢性降频综合症”。模拟器产生的 GPU 负载通常非常低,其工作负载无法被检测为游戏,从而导致卡将其时钟速度设置为极低的值。正如您所料,这会导致性能非常低。
输入 Force maximum clocks ,在桌面版 yuzu 上,它只是生成一个虚拟计算负载以在 GPU 上运行,从而触发卡强制计时。虽然这解决了问题并使 AMD 卡的性能与 NVIDIA 相当(甚至在某些情况下有助于 NVIDIA 卡),但运行这样的计算负载对于集成 GPU 来说并不是一个可行的选择。移动设备的冷却和功率预算有限:CPU 和 GPU 可以共享的功率有限,启用该设置会将预算的优先级转移到 GPU,而用户想要运行模拟游戏,这几乎是CPU总是严重瓶颈。计算负载所需的额外功率会导致热量增加,当冷却达不到标准时,这将导致性能下降。
因此,我们所说的意思是,不要在 Steam Deck、仅集成 GPU 且冷却能力有限的便携式计算机或集成 GPU 台式电脑等手持设备上使用 Force maximum clocks 。该设置将导致性能下降和额外烦人的风扇噪音,并且它仅适用于具有适当冷却的专用 GPU。并非每个在线指南都知道他们在说什么。
为了帮助解决这个问题,byte[] 扩展了此设置的阻止列表,以包括最近发布的 Steam Deck OLED。由于 Steam Deck 中没有硬件差异,因此可以安全地阻止。
在运行 Wayland 显示服务器的 Linux NVIDIA 用户报告使用最新驱动程序时崩溃后,新人 lucasreis1 找到了原因:新驱动程序似乎需要在询问或系统信息之前分配窗口资源。在正确的位置添加正确的线条会使世界变得不同。 Wayland NVIDIA 用户现在可以无崩溃地加载游戏。谢谢!
byte[] 和 Maide 一直致力于视频解码性能的改进,旨在不完全依赖 FFmpeg 来完成此任务。最初的更改已经完成,但在结果到达最终用户之前还需要做更多的工作。
Blinkhawk 设法捕获并修复了影响新查询缓存引入的 Pokémon Scarlet/Violet 的几个回归问题。
再次可玩(宝可梦朱紫)
有点悲伤的消息是,byte[] 不得不禁用对深度偏差 Vulkan 扩展的支持,该扩展旨在解决影响 Linux 上 AMD 卡的 D24 问题(Windows 驱动程序尚不支持它,并使用了不同的解决方法)。 RADV 用户(AMD GPU 的 Linux Mesa Vulkan 驱动程序)注意到 Super Smash Bros. Ultimate 中某些阶段存在问题。调查原因表明,即使使用扩展程序,您也只能修复一些游戏并在此过程中破坏其他游戏。当我们研究针对这种情况的替代方案时,旧的解决方法又回来了,允许玩家在 Nintendo 64 Zelda 舞台上战斗,而不会因眩光而失明。
回到绘图板(任天堂明星大乱斗特别版)
不要忘记古老的 OpenGL,epicboy 本月也列出了它的更改列表。
首先,他实现了异步下载,这一功能此前仅在 Vulkan 上提供,使得使用旧 API 时性能提升了 11%。
接下来,epicboy 修复了使用 GLASM 着色器后端时影响 Xenoblade Chronicles: Definitive Edition 和 Xenoblade Chronicles 3 的渲染问题 - 这两个游戏严重依赖变换反馈来渲染。即使您仍在使用 Kepler GPU,Monado 看起来也不错。
继续致力于提高 OpenGL 的性能,epicboy 实现了 glBindVertexBuffers 和 glBindBuffersRange 命令的使用,从而使之前的 GL_NV_vertex_buffer_unified_memory 扩展的使用变得过时。这减少了 OpenGL 中臭名昭著的 API 调用开销,从而减少了 CPU 使用。
最后,作为本节的结束语,epicboy 帮助缓解了 OpenGL 的一个令人烦恼的缺点,即着色器构建时间,但仅限于用户运行 NVIDIA 硬件时。通过将声明中常量缓冲区的大小降低到着色器实际使用的大小,可以提高着色器编译性能!它不如 Vulkan,但对于那些 OpenGL 是唯一选择的情况来说,它无疑是一个非常受欢迎的补充。
小程序、输入和其他服务本月,Macj0rdan 与 german77 一起回归,他们是合作伙伴,致力于实施控制器菜单小程序。目前功能有限,但您现在可以按预期查看连接的控制器。与往常一样,启动任何小程序都需要固件转储。
虽然这很有趣,但暂时不要指望它很有用
german77 凭借自己的努力,成功修复了所有当前可用的系统小程序的个人资料图片,例如在个人资料选择期间。 Switch 需要精确的 256x256 图像,因此包装中包含一个缩放器,可以为小程序提供所需的内容。
They’re multiplying! 它们正在成倍增加!
german77 继续他之前关于红外恶作剧的工作(幸运的是不涉及爆炸物或自我制导),完成了 moment image processor 的实现。这意味着像 Trombone Champ 长号冠军 和 WarioWare: Put a lid on it 这样的游戏现在可以使用 Joy-Con 来玩。随意打开音量旋钮,尽情折磨你的邻居。这是 german77 自己的一个例子,大家欣赏一下:
吉他英雄对此一无所知(长号冠军)
german77 对输入进行了一些切换,修复了有关单个 Joy-Con SL 和 SR 按钮的输入代码中的遗漏,从而允许 WarioWare: Plug your leaks 的迷你游戏之一可以玩。哎呀~
有特氟龙胶带吗? (WarioWare:堵住漏洞)
这破坏了与单右 Joy-Con 保存的输入配置文件的向后兼容性——这对于大多数游戏来说是不太可能的配置。如果您使用此配置,您可能必须重新绑定控制器,但其他配置文件不受影响。
感谢新人dima-xd的工作,原生软件键盘小程序可以运行了。遗憾的是,目前还无法在游戏中使用它,因为它还无法按需启动——为此需要多进程支持。作为道歉,它看起来是这样的:
触觉开关?触摸开关!
由于 yuzu 现在可以在 AMiibos 内处理 Mii 数据,因此代码还将自动验证其完整性。感谢 german77 的努力,模拟器现在可以检测损坏的 Amiibos 并自动加载备份。这可以避免对 Amiibo 完整性敏感的游戏崩溃,例如 Super Smash Bros. Ultimate 。
Macj0rdan 这次单独工作,为我们提供了一个单独的修复程序。固件 17.0.0 发布后,控制器小程序开始崩溃。新固件,要实现的新功能 - 在这种情况下,实现 SetTouchscreenDimensions 解决了问题。
其中一个调用 SUPER BOMBERMAN R 2 超级炸弹人R2 对被阻止的用户进行检查。由于模拟器尚未存储该信息,也没有任何用处,因此可以安全地存根,这正是新手 daisymlleung 所做的。谢谢你!
游戏目前仅启动,尚未进入游戏(超级炸弹人 R 2)
为了结束本节,toastUnlimited 必须处理 Qt 的恶作剧。 Qt 的文本解析不喜欢 yuzu 的前端字符串存储方式,导致它错过了许多 UI 翻译。 Unlimited Toast 进行了一些*,我们又恢复了营业。
杂项变更为了帮助用户检查固件安装的状态,并且由于固件版本对系统小程序有影响,german77 在用户界面的状态栏中添加了固件版本指示器。 “我上次更新此内容是什么时候?”的困惑已经消失了。
现在YUZU也可以看到固件版本号了
鼠标模拟和键盘模拟是 yuzu 中用户为少数支持它的游戏提供的选项。这些在 Emulation > Configure… > Settings > Controls > Advanced 中可用,并向游戏报告 USB 键盘和/或鼠标已插入控制台。
为了帮助鼠标玩家 - 我们的意思不是“使用鼠标作为瞄准杆”,我们的意思是模拟连接的 USB 鼠标 - german77 确保操作系统的实际本机光标不会离开 yuzu 窗口。如果您讨厌在焦点之外单击自己的游戏,那么您会喜欢此更改。
在继续改进 yuzu 的文件系统模拟的同时,byte[] 解决了一个错误,该错误导致安装游戏的 RomFS mods 时导致 MONSTER HUNTER GENERATIONS ULTIMATE 怪物猎人GU 无法启动。
但这只是开胃菜而已。这是主菜。 byte[] 提高了解析和构建 RomFS mod 的性能,将高性能 CPU(本例中为 Ryzen 9 5950X)上应用 mod 的 The Legend of Zelda: Tears of the Kingdom 补丁时间从 2.8 秒降低到 0.3 秒。这在测试中非常明显。
那里的改装者,请填写该列表 - 您现在不会浪费时间等待游戏加载。
Super Mario RPG 超级马里奥RPG 所需的修复完全相同,但在不同的位置,允许 Star Ocean: The Second Story R 星之海洋2 第二个故事 R 启动和播放。到底用了什么伎俩呢?允许立体声计数为零或更高并修复拼写错误。编码恶作剧。
最后,还有什么比列举 byte[] 为提高关机稳定性而赢得的一些战斗更好的结束方式呢!
音频获得第一个。当足够的流数据仍在输出队列中等待时,音频渲染器将等待,直到有空间添加更多数据。但在关闭期间,可能永远无法提供更多空间,这将永远阻塞音频渲染器并挂起。修复此封锁可修复 Android 上的关闭操作。
下一个涉及更多,因为它涉及*死终止进程所需的过程,詹姆斯·邦德风格。对于已终止进程中的每个线程,此过程由两个步骤组成:
该线程被标记为终止,并且如果该线程可运行,则将中断发送到具有该线程关联性的所有内核。
然后内核等待线程实际终止。
标记为终止的可运行线程不会从调度优先级队列中删除。这意味着它们可以在终止期间得到调度,即使核心在前一个线程终止时已经清除了中断。像 Switch 一样,在再次运行线程之前检查终止情况,修复了 Android 上非常常见的关闭死锁。
最后,计时事件队列导致了问题。关闭时,系统调用以清除挂起的事件,即使计时线程可能仍在从事件队列中删除项目。锁定对事件队列的访问解决了本月最后的关闭崩溃问题。
硬件部分AMD, mixing drivers AMD,混合驱动程序上个月,我们报道了 AMD 将停止对 Polaris 和 Vega 产品的驱动程序支持,并推测这将如何影响 yuzu。
我们没有考虑混合配置会发生什么,例如运行 Vega iGPU 和 RDNA2 dGPU。这种配置相当常见,因为 AMD 仍在销售集成 Vega GPU 的新设备,而笔记本电脑供应商可以销售专用 RDNA2 或 RDNA3 产品的配置。
与英特尔不同的是,英特尔刚刚决定在没有任何警告的情况下向其 Gen 9/9.5/11 图形用户群说“祝你好运,再见”,AMD 实现了一个仍然可以运行混合配置驱动程序的系统。由于在全 AMD 笔记本电脑上,您无法为两个 GPU 使用不同的供应商驱动程序,因此这基本上是强制性的。
AMD 所做的是提供两种不同的驱动程序,一种用于基于 RDNA 的硬件,另一种用于 Vega 和 Polaris。如果您有混合设备,您可以先安装基于 RDNA 的硬件的驱动程序,然后再安装 Vega 和 Polaris 的驱动程序。这允许您访问驱动程序的所有软件功能,并允许您让两个 GPU 正常运行。
但这是要付出代价的:Vega 和 Polaris 驱动程序中的 Vulkan 驱动程序比基于 RDNA 的硬件驱动程序中的驱动程序更旧,并且运行这种混合配置的所有 AMD GPU 都将运行单个 Vulkan 驱动程序。这导致基于 RDNA 的 GPU 的功能出现倒退,并为了保持兼容性而进行了修复。
如果您在运行此配置时遇到 yuzu 问题,您现在知道原因了。遗憾的是,唯一的解决方案是运行 Linux,它有一个统一且最新的 Vulkan 驱动程序:RADV。
英特尔,修复驱动程序(WIP)英特尔确认,影响多个游戏的几何着色器崩溃已在内部修复,驱动程序推出并实施修复只是时间问题。截至撰写本文时,最新版本 101.5122(第 2 代 Iris Xe 产品的第一个版本驱动程序)尚未包含修复程序。
我们希望当我们在下一份进度报告中提到这一点时,该问题能够得到解决。
未来的项目我们已经过了 12 月中旬,我们已经知道下一份报告将会很有趣,仅从已经单独合并的更改来看。一些值得期待的事情包括节省内存、缩短加载时间和提高性能。布林克霍克正在策划一些事情,你的作家真的应该停止破坏它。也许一些圣诞礼物?只有尼禄皇帝知道。
这就是大家!这首民谣蓝调结束了,下个月见,太空牛仔。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved