switch模拟器吧 关注:12,024贴子:7,884
  • 3回复贴,共1

Yuzu进展报告2023年3月【edge浏览器机翻】

只看楼主收藏回复

嗨,你们好!我们一直像往常一样努力工作,今年 3 月在性能、图形、音频、CPU 精度、输入等方面都有所改进!
使CPU与BRRRR相反
本月最大的变化之一是CPU准确性的一系列改进。 这需要一些回溯,所以让我们倒带一点。
早在 7 月,我们就解释了如何使用主机计时器以当前形式运行。 调用的线程用于处理 HLE 事件,例如输入和音频。 但是,其中一些事件(如音频)需要高水平的计时器精度才能按照游戏预期的方式运行,这比 Windows 通常允许的要高。CoreTimingHostTiming
默认情况下,Windows 仅允许 1 毫秒的精度,因为操作系统事件循环以 1000Hz 运行。 这还不够。 但是,运行Linux,BSD和MacOS的设备不会面临此限制,并且可以达到μs(微秒)级别的精度。
如果游戏想要以 16.67 毫秒(60 FPS)的帧时间运行,你可以等待 17 毫秒的三分之二时间,等待 16 毫秒剩下的三分之一时间,但这在过去已经被证明对音频准确性来说是可怕的。 另一种,也是用于Windows的旧方法是等待16ms并繁忙等待0.67ms。 在这 0.67 毫秒期间,CPU 线程没有做任何事情,并且在没有实际工作的情况下消耗功率。
这是删除对Windows 7和8 / 8.1的支持的好处。 Windows 10 SDK具有新的未记录的功能,并且可以将计时器分辨率提高到0.5ms。 这允许柚子等待 16.5 毫秒,只旋转剩余的 0.17 毫秒,比以前的默认方法短四倍。NtSetTimerResolutionNtDelayExecution
通过实现这些新功能,Morph 减少了 CPU 在旋转锁中花费的时间,从而降低了时序繁重的游戏(如 Kirby Forgor 💀) 等 CPU 使用率。 新的免费资源意味着低内核数 CPU(如四核)以及功率预算有限的系统(如笔记本电脑和手持设备)具有更好的性能。 通过这一变化,我们测得 CPU 使用或功耗降低了 24%,具体取决于限制因素。Kirby and the Forgotten LandSuper Smash Bros. Ultimate

左:旧的 1ms 精度;右:电流精度为0.5ms。结果来自您的作家的笔记本电脑,该笔记本电脑运行单语言Windows安装,所以不要介意西班牙语。请注意,两个结果之间的 CPU 使用率存在差异
如果可以在相同的功率范围内执行更多任务,则可以在不牺牲电池寿命的情况下提高性能。 或者,模拟器的更常见方案是,如果天花板是固定帧速率,则可以降低温度。

这就是为什么笔记本电脑中的膝盖是谎言,请注意包装温度(异度之刃编年史 3)
用户报告说,由于计时器精度的提高,游戏的音频卡顿更少。
Windows 10 SDK添加的另一个不错的工具是允许我们将yuzu设置为一个进程,向Windows调度程序暗示,如果有更高性能的内核可用,它们应该优先考虑。 这通过建议使用 CCX 的最佳内核进一步提高了当前锐龙 CPU 的性能,对于英特尔第 12 代及更高版本,通过优先考虑 P 内核(“性能内核”,普通内核),进一步提高了性能。HighQoS
强烈建议使芯片组驱动程序保持最新,以充分利用您的硬件。
如果 CPU 以更高效的方式运行,我们如何走得更远? 好吧,Morph认为下一步是改进CPU计算时间本身的方式!
在使用 x86 体系结构的现代 CPU 上,固定计时器是使用 RDTSC 指令获取的。 RDTSC的事情是...它在较长时间内是不准确的。 它不能在多核处理器上。
RDTSC提供的最佳估计值与实际现实之间的微小差异会导致游戏的时间漂移,例如。 您可能会注意到这个问题将其丑陋的头显示为不准确的比赛时间。 英特尔第 12 代是我们测量的受影响最大的 CPU 架构(也是在 <> 月份),每分钟差一秒。Super Smash Bros. Ultimate
Morph 对此问题的解决方案是生成一个额外的线程,其任务是对 TSC 进行两次测量 10 秒,然后取该差异并应用它来了解在前 10 秒内通过了多少实际即时报价。 如果然后将时钟周期数除以 10,则会得到主机 RDTSC 计时器运行的确切频率。

好在我们不必为此使用旧秒表(超级粉碎兄弟终极版)
结果是,在锐龙和英特尔第 11 代及更早的系统上几乎是完美的时序,在第 12 代桤木湖系统上几乎是完美的时序。 对于这个特定的应用程序来说,在 CPU 内部同时计算时间的完全不同的内核并不漂亮。 我们无法击败英特尔设计的混合不对称性质,但我们设法将漂移从每分钟一秒减少到每 5 分钟一秒左右。
“好吧,这很好”Morph说,但你怎么能更深入呢? 剩下的唯一选择是下降到组装。
有问题的优化目前仅适用于第 12 代及更新的英特尔 CPU;AMD尚未添加对它的支持。 我们正在谈论 TPAUSE(CPUID 名称),这是 Team Blue 的新指令,它允许 CPU 进入低功耗状态并空闲,直到经过精确的时间。WAITPKG
需要进行一些测试以指定等待期的正确周期数;错误的值会在一个极端过度降低精度,或者在另一个极端不会产生任何好处。 100000 个周期是 Morph 测试中的神奇数字,除了之前的好处之外,它还将 CPU 使用/功耗降低了多达 20%。
如果只有英特尔 GPU 驱动程序可以工作,他们配备 Xe 的笔记本电脑/掌上电脑现在将成为非常可行的柚子游戏机...... 哦,好吧,运行 NVIDIA 或 AMD 实际工作 GPU 驱动程序的第 12/13 代用户将从所有这些工作中受益匪浅。
图形更改
CPU的改进就足够了。图形呢? 好吧,我们有很多话要谈。
用户报告了有趣的色带。Maide深入研究了这个问题,并确定了颜色格式的罪魁祸首,例如和。 通过一些试验和错误,以及来自伟大章程(来自Skyline模拟器)的一些大帮助,Maide设法解决了问题,在不破坏其他游戏的情况下提供了准确的显色性。STORY OF SEASONS: A Wonderful LifeS8_UINTD32_FLOAT_S8_UINTS8_UINT_D24_UNORM

现在,您可以享受这款具有所有鲜艳色调的农业模拟器,而不必担心色带。这不是哞哞唱吗?(四季物语:精彩人生)
Epicboy 再次推出他的忍者更新。这一次,他给仍然蓬勃发展的OpenGL团伙带来了一些爱,带来了我们在上一份报告中讨论过的AccelerateDMA的所有好东西。
这意味着OpenGL用户,特别是那些使用费米和开普勒GPU的用户,可以享受这种伪Y.F.C的速度提升。2.改变,使游戏等运行得更快。 再也不用等萨穆斯装填她的臂炮了。Metroid Prime Remastered
我们强烈建议没有良好 Vulkan 支持的旧硬件用户升级到更新的硬件,因为对 OpenGL 的支持即将结束。话虽如此,多亏了epicboy,那些无法升级的人不会在使用旧的但黄金的OpenGL API时遭受糟糕的性能。
但这还不是全部,epicboy还增加了一个优化,略微提高了性能。 您的作者观察到性能提高了 3-5%,这是为数不多的在具有 NVIDIA 硬件的 OpenGL 上运行速度更快的游戏之一,如果您忽略着色器卡顿。GL_SYNC_STATUSThe Legend of Zelda: Breath of the Wild

在游戏中最重的地方之一从 54 到 57 FPS,OpenGL 仍然有生命力!目前...(塞尔达传说:旷野之息)
章程再次出手相救,指出我们旧的 Vulkan 调度程序实现在去年 10 月有一些回归,当时 byte[] 致力于使自制应用程序与 Vulkan 一起工作。
这意味着游戏和自制软件在开始渲染之前必须等待帧显示在屏幕上,这在某些情况下是反馈循环的最坏情况的坏例子。
通过在后台等待队列被清空而不必等待帧呈现,byte[] 修复了回归。 谢谢章程!
还记得我们上个月谈到的那个可爱的游戏吗?适合所有年龄段的!与家人一起玩完全安全。
Vonchenplus决定让它变得可玩,这样世界各地的Weebs玩家就可以享受到惊人的游戏玩法,通过修复柚子处理内联索引和绘制纹理命令的一些错误。Moero Crystal H

文化游戏(莫埃罗水晶H)
Steam Deck最近的系统更新搞砸了许多游戏中的图形。罪魁祸首?一些问题,帮助减少着色器构建卡顿的 Vulkan 扩展之一。VK_EXT_extended_dynamic_state3
柚子期待 NVIDIA 驱动程序行为的结合,以及 Deck 上最新 Mesa 实现的差异导致了您接下来看到的情况:

看起来像有人在屏幕上洒了一些油漆(塞尔达传说:荒野之息)
byte[] 暂时禁用了导致问题的功能,但我们将来会重新考虑再次打开它,因为 Mesa 很可能已经解决了这些问题。
这里有几个针对异度之刃粉丝的重要修复,Maide 花了很多时间研究。
由于采样器中的 sRGB 边框颜色转换问题,着色器在游戏中被破坏。 这是一个将颜色从一个颜色空间转换为另一个颜色空间的过程。 这将导致不准确,使受影响的着色器上的某些检查失败,从而导致丢弃错误的像素作为阴影。
我们需要更多信息来充分理解这个问题,但就目前而言,忽略sRGB采样器上的色彩空间转换可以实现硬件精确的渲染。

雷克斯知道他的未来会怎样,眨眨眼(异度之刃编年史2)
另一个影响异度之刃三部曲(好吧,最终版和至少 2)的另一个长期存在的问题自传奇的纹理缓存重写以来一直困扰着柚子。 这是随机的“彩虹模式”,可以在游戏过程中的任何时候发生,或者在特定的游戏后期过场动画中,因为我不会剧透新玩家。 如果你在柚子中玩过,你就知道是哪一个。 这让你怀疑你是否在狂喜中。Xenoblade Chronicles 2

某处,在(云)海之外!(异度之刃编年史2)
另一个观察到的问题是过度照明使整个场景无法阅读(特别是在夜间使用HDR显示屏,而不是令人愉快的突然闪光)。

我的眼睛!(异度之刃编年史2)
Maide 发现该问题是由于将新的来宾数据替换为环境照明立方体贴图中的过时主机数据引起的。 解决方案是仅按照缓冲区缓存重写的行为复制已标记为 GPU 修改的数据。

这不是2009年,我们不需要这么多的花朵,非常感谢(异度之刃编年史:最终版)
通过这些更改,影响《异度之刃编年史》传奇的图形问题很少,使其成为从头到尾在柚子上享受的绝佳选择。 然后你可以和你的作家一起辩论哪个女王是最好的。

由于此问题仅在过场动画第一次渲染时发生,因此我会使用错误报告图片作弊,咬我(异度之刃编年史 2)
新人rschlaikjer,我希望我说得对,一直在深入挖掘纹理缓存,试图弄清楚为什么像简单的视觉小说在改变场景时会卡顿。 也许是因为游戏太情绪化,模拟器无法处理。Tsukihime -A Piece of Blue Glass Moon-
罪魁祸首是捕获 GPU 页表时缺少引用运算符,导致表每秒被一遍又一遍地复制数千次。这会让任何人口吃,更不用说模拟器了。将捕获转换为引用解决了这个问题,它也可能解决其他游戏中的类似问题。
我们很高兴rschlaikjer在它失控之前抓住了这个错误。我们不想像那把椅子一样结束。
用户界面更改
有些问题是如此难以捉摸,以至于多年来一直没有引起人们的注意。有些问题非常复杂,需要深入了解所涉及的所有层才能找到正确的解决方案。他们让许多放弃的开发人员感到沮丧,希望其他人会有更好的运气。
有些问题简直是愚蠢的。就像游戏因默认用户配置文件损坏而崩溃一样。
German77 为数十款游戏中的崩溃找到了一个简单的修复方法:将默认个人资料图片设置为真实的 32x32 分辨率而不是0x0。 就是这样。
继续致力于UI改进,german77 还将最后一个音频设置移到了它所属的音频部分。不再为此选项在一般情况下徘徊。Mute audio when in background

良好,适当的顺序
下一个是UX(用户体验)的一个很大的改进,对我个人来说是一个巨大的安慰。 以前,在使用每游戏控制器配置文件时,如果在开始游戏之前忘记更改输入设置,则会在游戏关闭时丢失它们,下次必须重新设置它们。
Epicboy修复了这个烦人的问题,German77合并了这些更改。 非常感谢您的修复程序。
German77 也在努力改进配置文件选择小程序。 当前的变化只是一个开始,我们将在未来为您提供最新进展。
输入改进
让我们谈谈输入,德国77继续闪耀的地方。
由于不满意游戏时的鼠标和键盘体验,German77 将默认鼠标灵敏度设置为 50%,并删除了平滑过滤器,在获得银河战士粉丝的宝贵反馈后,提高了高 DPI 游戏鼠标的性能。 他还降低了运动阈值,钳制了转速,并累积了所有输入直到交付,从而修复了先前实现的延迟和断断续续。Metroid Prime Remastered

你有没有注意到萨穆斯缺乏领先指标?她的西装不能为此多一点处理能力吗?(银河战士总理重制版)
由于这些变化,表明它可能是一款出色的 PC 游戏。要是任天堂能把它放出地牢就好了。Metroid Prime Remastered
我们得到的一个常见问题是“这个第三方交换机控制器可以工作吗? 简短的回答是也许,但长答案有点复杂。
根据任天堂的API,Joy-Cons有两种模式:主动和被动。 官方 Joy-Con 使用主动模式,但某些第三方控制器使用被动模式,通常是因为它们没有正确遵循 API,并且不支持任何配置命令。 它们只是使用默认设置运行,无论好坏。
这并不意味着被动控制器毫无用处。他们仍然在交换机上工作。但这确实意味着它们的工作方式不同。主动控制器每 15 毫秒更新一次其状态,而被动控制器仅在发生某些事情(例如按下或松开按钮)时才更新。
好吧,事实证明,柚子直到现在才支持被动模式!所以 german77 的更改让很多第三方控制器用户感到高兴。 考虑到有多少非官方控制器,这非常方便。
与振动的战斗还在继续! 在进行常规研究时,german77 发现,如果您有多个玩家使用相同类型的控制器,或者如果您使用带有单个控制器的双 Joy-Con 设置,您最终可能会连续向同一个控制器发送两个振动命令。 这可能很烦人,并且还会占用蓝牙连接的有限带宽。
解决方案很简单:只获取每个控制器的冷振动队列中的最新元素,检查控制器是否可以处理请求的振动,并忽略其余元素。
我们都喜欢生活质量的变化,对吧?即使它们不是很华丽。
让我们谈谈 ,它负责在游戏请求时要求玩家选择他们的输入设置。 到目前为止,小程序是不可跳过的;您必须给出有效的答案才能继续游戏。 虽然这还过得去,但它很麻烦且不准确。 有些游戏会回到上一个菜单,而不是在玩家无法或不会确认其输入风格时陷入无限循环。Controller Applet

你会过去的!
German77 解决了这种行为,同时也解决了玩家数量不正确的错误。
德国77实施了...等等,让我先喘口气,服务电话。 他实现了它,希望使可玩性,但不幸的是,还有更多问题。SetNpadJoyAssignmentModeSingleWithDestinationLet’s Get Fit
将话题转移到Amiibo支持,这个月发生了很多事情。
首先,German77设法编写了正确的CRC,使柚子写入的Amiibo数据与Switch兼容;不再有无效信息。
接下来,如果您在扫描Amiibo时尝试连接控制器,则无法识别该控制器。通过说明这一点并初始化或最终确定控制器,他解决了这个问题。
最后但并非最不重要的一点是,为了结束 Amiibo 传奇,德国谢尔曼赫尔曼添加了对普通 Amiibo 文件的支持。 一些 Amiibos,例如以 为主题的 ,可以在不需要键的情况下进行编辑。现在,柚子可以正确读取您的 Amiibos 中的非加密游戏数据!Super Smash Bros. Ultimate
音频修复
Maide 设法发现了混响预延迟线读取方式中的一个错误,导致输出出现问题。 通过输入而不是输出正确读取来解决问题,可以得到像正确音频这样的游戏。 现在,您可以在没有任何回声的情况下享受马里奥的声音。妈妈咪呀!New Super Mario Bros. U Deluxe
Bylaws 一直在深入研究音频同步,在这里和那里改进代码库,并通过将客人样本跟踪链接到主机来设法避免停滞。
此更改导致一些回归,因为某些游戏对音频调度要求非常敏感。 用户报告合并后出现爆裂声,因此章程通过在样本计数报告中增加恒定的 15 毫秒延迟来改善这种情况。
其他代码更改
《火焰之纹章》的粉丝们在游戏中一直遇到冻结,经过一番调查,Morph 发现罪魁祸首是有界的线程安全队列,这是由 behunin 的拉取请求引入的。
队列的工作是将事件从事件生产者(如 CPU 内核)传递到事件使用者(如 GPU 线程)。 behunin 替换的先前实现不断分配和释放内存,导致周期性延迟峰值。
解决此问题的方法是将队列转换为有界队列,这意味着不需要内存分配,因为有固定数量的可用资源。 这就是behunin所做的,但新的队列实现似乎有问题。 Morph 添加了简化的实现,修复了新的游戏卡顿影响和 .Fire Emblem: Three HousesFire Emblem Engage
继上次对 Windows 所做的更改之后,您的编写器为 GCC 构建重新启用了 LTO,但仅将优化应用于核心和video_core子项目,从而为 Linux 用户提供了不错的免费性能提升。
硬件部分AMD 23.3.2 及更高版本的驱动程序
一个坏消息和两个好消息。
从积极的方面来说,AMD终于在其最新的Windows驱动程序版本中增加了对缺少的动态状态扩展的支持,这改善了着色器构建时间并减少了Radeon GPU上的卡顿,使它们的性能与NVIDIA相当。
但是,从不利的一面来看,此驱动程序更新还引入了严重的回归:

这可能会影响您的整个桌面(银河战士Prime重制版)
某些游戏(例如 和 )会触发似乎是越界崩溃的情况,从而导致桌面损坏和驱动程序崩溃。 我们建议用户暂时使用驱动程序版本 23.3.1 或更早版本。一些较旧的 Radeon 卡也可能受益于使用 23.2.2。Metroid Prime RemasteredPokémon Legends: Arceus
我们向 AMD 报告了此问题,他们立即确认、重现,并通知我们他们正在努力修复。
现在这就是您提供客户支持的方式。
说到这里...
做英特尔的工作
在测试我们将在下个月讨论的关键渲染修复时,Morph 进行了一些功能测试,以调查是什么让英特尔 Windows 驱动程序运行得如此糟糕。The Legend of Zelda: Breath of the Wild
他的发现既令人意料之中,又令人失望。 大约 95% 的崩溃的罪魁祸首是驱动程序中的计算着色器阶段故障。 像我们过去对旧英特尔硬件所做的那样禁用计算着色器会使大多数游戏运行,但不是全部。 在 中打开菜单时,我们仍然不知道崩溃的原因。Xenoblade Chronicles 3
我们现在试图找出是什么触发了计算着色器像这样使驱动程序崩溃,但这也引发了一个困境。 我们应该自己修补这个问题,使游戏渲染变得更糟,让英特尔摆脱困境,还是我们应该让它坏掉,以便他们必须正确修复它?
在调查继续进行的同时,解决方案是使用可靠的Linux,或者避免购买仅依赖Intel GPU的硬件。叹息。
未来项目
我们甚至还没有过半,我已经对下一份进度报告中的内容感到兴奋。 开发人员着火了,他们不会很快停止。
Maide正在为Xenoblade系列进行更多改进,例如修复云层闪烁,修复粒子效果,以及影响整个传奇和其他一些游戏的纹理闪烁。 但是,这些修复是以性能为代价的,因此他需要另一位 GPU 开发人员的帮助来优化它们。 也许眨眼鹰可以伸出援手?Xenoblade Chronicles 2Xenoblade Chronicles 3
任天堂为发布Vulkan扩展的圣杯做出了贡献,VK_EXT_shader_object。 正如其依赖项所建议的那样,此扩展有望显着减少构建着色器所需的工作量,需要支持所有以前的动态状态扩展。
任天堂很可能打算将其用于其内部模拟器,也许是为了“向后兼容”。 无论如何,我们还有很多工作要做,以添加对此扩展的支持。
但足够了。让我们谈谈一些令人兴奋的项目。

长笛增强
关于盖亚计划: 它仍在开发中。
哦,Project Lime处于发布候选状态,正在进行严格的内部测试。
这就是所有人!感谢您一直坚持到本进度报告结束。
感谢Bing Chat的可怕笑话。


IP属地:湖北1楼2023-04-13 14:44回复
    IP属地:湖北2楼2023-04-13 14:48
    回复
      太长不看


      来自Android客户端3楼2023-04-15 01:08
      回复
        还会不定时闪退吗


        IP属地:广东4楼2023-04-17 22:39
        回复