Dolphin仿真器 - 海豚Mega进度报告:4月和5月2021年

2021-06-06 19:34:30

完成MacOS M1后,博客工作人员花了一点休息。然后他们看到了日期。

然而,在看实际的变更日间,事情变得明显:这是一个进度报告;这将是一个大型进度报告。漫长的狂热时间的开发者时代终于通过了一切。我们为Super Mario Galaxy和Luigi' S Mansion,Star Wars的崩溃修复有图形修复:Rogue Squadron III,XenoBlade Chronicles,Ultimate Spider-Man,塞尔达的传说:Skyward Sword(AARCH64)和新功能玩游戏更愉快!关于AARCH64,有一连串的优化和修复程序将改变大部分图书馆的东西。

我们可以继续:边界框,翻译,GBA到GCN连接,GPU同步,鼠标锁定,还有更多!在那里甚至是一个冗长的开发日记,最后是衡量神话盒的伟大奥秘如何解决问题。它司法的唯一方法是做对。因此,为4月和May Mega进度报告准备好准备。

这种变化足以让它获得自己的文章。如果你没有,请检查一下。

长话短说:海豚已被移植到利用我们的AARCH64 JIT自然地运行M1硬件。 M1已被证明是一种相当强大的设备,可以超出X86级设备,并已证明该臂和X86-64计算机可以在一些游戏中集中在一起!但是文章中有一个挥之不去的问题:M1是特别的吗?因为Android' s(赢得了)声誉,许多改进海豚' s aach64 jit在雷达下飞行。它难以看到在手机和平​​板电脑上生动的性能改善,具有弱的处理器,积极的州长和令人讨厌的驱动器虫,妨碍了。所以为了对错了,我们' ve带来了最好的窗户在arm设备上:surface pro x!

注意:我们拥有Surface Pro X 2019可用于测试。从技术上讲,Surface Pro X 2020是"最好的" ARM设备上的Windows,但是该机器使用完全相同的芯片(8CX),只需轻微超频。在单核基准中,它比2019版本快于9%,因此只需将9%添加到这些结果,以粗略估计2020模型将如何执行。

那么它如何表演?漂亮地嘛。 Surface Pro X交易与我们的高端2018英特尔MacBook Pro交易,这是我们从未预期的我们' D只是两年前的臂设备。然而,表面Pro X中的8CX只是苹果硅的原始力量,通常得到M1的性能的一半。仍然是,如果你'重新希望在AARCH64设备上运行海豚,更喜欢Windows,你' LL发现Surface Pro X是一个非常有用的小型仿真机。作为奖励,Pro X使用D3D12(尽管仅D3D12),它支持Moltenvk中缺少的几何着色器等功能,这意味着像Mega Man网络传输等游戏将正确呈现。

无论哪种方式,它是计算和仿真中的激动人心的时刻。由于近期ARM设备的相当大,我们'现在终于能够通过游戏看到AARC64 JIT咀嚼,就像我们总是希望它会这样做。在那张笔记上,让' S只是说我们的AARCH64 JIT最近在其工作中得到了更好的。

现在我们有高性能的AARCH64设备,已提出对我们的AARCH64 JIT的期望。虽然用户仍然倾向于首先优先考虑性能,但是在AARCH64 JIT上增加了压力,以提供与桌面构建相同的准确度。为此,Josjuice已经采取了将AARC64 JIT带到平价的项目,X86-64 JIT,这一变化是迈向兼容性差距的巨大一步。

您可以看到,GameCube和Wii中的PowerPC CPU允许软件配置用于浮点计算的舍入模式,以及是否应自动冲洗(非常少量的数字)(非常少量的数字)。我们的AARCH64 JIT直接忽略了这个功能,而我们的X86-64 JIT尊重它,所以Josjuice决定实施它。但是,这揭示了另一个问题。有时,JIT需要能够往返(反向)单曲到双打浮点转换 - 以单精度(32位)开始的浮点数先前被转换为双精度(64位),现在需要被转换为单精度。我们的AARCH64 JIT非常简单地通过刚刚发出转换两种精度级别之间的指令来实现这一目标。然而,现在AARCH64尊重游戏可以选择将非常小的数字选择为零,但该指令不能再扭转了非风体的精度变化。该数据现在为零。

所以Josjuice借了X86-64 JIT' s解决这个问题,并且AARCH64 JIT通过一堆整数操作手动执行浮点精度转换。这不仅解决了尊重游戏和#39; S圆形模式和非正式设置而引入的问题,它还使我们的浮点舍入比在AARC64之前更准确。像Super Mario 64中的慢慢上升平台这样的困难圆形怪癖现在在我们的AARCH64 JIT中正常工作!

至于初始修复尊重舍入模式和Byormal刷新,它可以解决仅在AARCH64 JIT中存在的许多崩溃,悬垂和物理错误。

塞尔达的传说:Skyward剑 - 在第三次监禁后修复了崩溃。

这确实具有较小的性能惩罚,但它们是兼容性目的所必需的。 josjuice而不是试图在没有绩效的情况下实施这一点,而不是在没有绩效的情况下在其他地方获得更多的性能,这将在其他地方获得成本准确性。

浮点结果标志(FPRF)是GameCube的一个功能,让游戏检查标志,以查看上一个浮点结果的信息。通过这种功能,游戏可以访问浮点是否是负,正,积极的无限,负无穷大等。很少有游戏依赖这种行为,因此特征是实际在AARCH64 JIT中实现的。任何使用它的标题都必须退回以解释到许多浮点指令,以获得相当萎靡的绩效罚款。

在AARCH64中实施这一点提高了许多SEGA开发的游戏中的预期CPU性能,包括F-Zero GX,超级猴球和超级猴球2。

由于FPRF的工作方式,获得在图形上看起来漂亮的稳健性能编号' t真的很容易。在F-Zero GX中,Android设备已经是GPU Limited在此优化和Don' t增益表现之前。即使在M1上,绩效差异也仅在比赛中记录,其中帧率会与29辆AI汽车疯狂而随机变化。然而,测试人员确实报告说,这场比赛在整个大奖赛中略有滞后。

不满足于刚刚制定影响几个游戏的变化,Josjuice决定在AARCH64中实施一些更困难的指示。浮动互惠估计单(FRES)和浮动互惠方根估计(FRSQRTE)是流行游戏中使用的常用说明,有时依赖于物理计算。如果你十年前使用了海豚,你可能会遇到超级马里奥阳光,超级马里奥银河的游戏中的错误,以及塞尔达的传说:由于我们的伪劣实现,这是风奶奶。这些指令无处不在!在AARCH64中,而不是创建这些指示的原油实现,它们只是在所有实施中进行了,而且根本实施并倒回口译员。

也许更令人兴奋地,Josjuice还修复了物理学中使用的另一个常见指令,称为浮动乘法(FMUL)。该指令在AARCH64 JIT中不准确地实施,这意味着结果Weren' t相当正确。不幸的是,该指令也用于游戏物理到处。我们了解的一些人都知道的是Mario Kart:双划线!!,Mario Kart Wii,超级猴子球,超级猴子球2,F-Zero GX和Doney Kong国家退货。

我们知道这些游戏受到舍入差异的影响,因为它们都具有某种"输入重播"系统允许它们保存输入并稍后重放它们。因为这些重播被保存到存储卡或与游戏一起发布,我们可以看到海豚和控制台上的重播!这主要允许物理的硬件验证!除了打破重放之外,FMUL错误也可以在尝试玩游戏时给你头痛。如果您通过备份服务器在线播放Mario Kart Wii,则这些不准确会导致过多的橡皮筋。它也意味着你不能在任何这些游戏中对员工鬼魂进行比赛,并且在一些罕见的情况下,可以使其成为众所周知的控制台策略,' t工作。和我们'在其他游戏中,在其他游戏中,我们将无法验证的其他游戏造成的错误造成了更多的错误,因为他们没有重播。

或者我们是吗?!所以从技术上讲,这是海豚' S翻译的修复程序......但是由于AARC64 JIT并在实现这条指令,它使用解释器回退!

这一点被忽视的主要原因是这是一个相当罕见的指导。浮动转换为整数字(FCTIWX)将浮点数转换为整数。这通常是一个简单的任务......除了我们必须模拟PowerPC版本的此指令的行为。值得庆幸的是,海豚已经在迅速的革命期间将此指令进行了准确的程度,X86-64 JIT修复程序带来了海豚重播验证时代。一切都很好,对吧?

但我们的宏伟成功有点疏忽。虽然我们测试的所有游戏都在X86-64 JIT工作,但我们测试的唯一游戏是由于幻想鬼魂,我们每次测试的每个CPU后端都是Mario Kart Wii。还记得我们如何提到FCTIWX很少见?嗯,马里奥卡丁车Wii不使用该指令,所以它从未在解释器上测试过!

快进7年。 Josjuice正在经历所有AARCH64 JIT缺陷,并试图将其与X86-64 JIT置于平价。最后一个已知问题之一是F-Zero GX中的物理在某些重放中不同步。所以我们挖出了古代视频中使用的原始重播进行验证。虽然它仍然在x86-64 jit上同步良好,但无论什么是Josjuice都无法让它在AARCH64 JIT上同步。甚至掉回每一个指令,以解释员不够' t。

在审查旧的测试数据后,测试人员意识到他们从未实际测试过F-ZER GX'在翻译中的重播。为了使事情发生在曾经出错的情况下,测试率在翻译下持续时间。

神秘解决 - 它不是一个JIT BUG,但是由X86-64 JIT实现FCTIWX隐藏的解释器错误。 josjuice在几天的过程中挖掘了这个问题,慢慢弄清楚为什么它被打破了。 x86-64和PowerPC实际上表现得足够了,FCTIWX指令不需要严重调整,但解释器需要自定义算法尝试精确复制,而无论架构如何。不幸的是,自定义代码缺陷导致可能会流血为游戏行为差异的不正确舍入。在众多失败的尝试之后,Josjuice终于发现了缺陷并修复了解释器实现。现在,您最终可以验证您最喜爱的AARCH64设备上的重播,或者如果您'重新疯狂,您可以使用纯粹的翻译和浪费一天中的一半。

至于AARCH64 JIT上的FCTIWX,Josjuice Hasn' T实施了这条指令,因为它将是相当复杂的。根据所需的舍入模式,AARCH64架构没有1个不同版本的FCTIWX。我们的解释器现在可以在ARM上处理此指令。

好的,现在我们'重新完成了JITS。我保证。除了Dolphin NONN与Pumply Pipeline完美地模拟CPU管道的事实,这种变化几乎没有任何关系。我们在过去介绍了这一点,但模拟了GameCube / Wii处理器缓存行为是我们'重复不确定的巨大性能问题,可以快速处理以保持游戏可玩。最重要的是,它的未知数意味着需要有很多硬件测试,并且可能重构海豚如何工作。除非设计了一种巧妙的解决方案,否则它不太可能在合理的速度下达到多疱疹' jits将获得超过基本的气相模拟。纯粹解释器的原因如此缓慢,更准确的ICACH仿真是其中的一部分。

我们目前处理ICACH / DCACHE物质的罕见案例的方法是通过修补游戏,或者按摩物品进入足够的工作以避免面向用户的错误。为了帮助解决原因,Pokechu22增加了禁用海豚'按照游戏的基础禁用了ICACH仿真。这是一个真正的性能措施,因为它不会影响性能,但它确实影响了几款游戏的行为。关闭海豚的JIT版本和#39; S的Micache仿真修复挂在几个游戏中。

如果您认为,如果您有一个患有ICACH问题的游戏,则可以使用新的禁用符号选项禁用任何标题中的ICACH仿真。只需进入游戏属性页面,该页面在游戏INI的[Core]部分下。但是,这完全禁用了ICACH仿真,没有解释器后备或任何东西,因此任何需要ICACH仿真的游戏都将失败。例如,Gamecube主菜单。因此,我们and#39; ve disable从gamecube主菜单中引导上面的gamecube标题。

马里司机对人类是一个谜。他们以凡人不能而不应该理解的方式做事。值得庆幸的是,进度报告SSPacelynx的新人可能是一个来自空间的Lynx,这是众所周知的外国概念。

落下宏伟一会儿,马里司机慢慢改善,但仍然有很多严重的问题。虽然这不影响大多数游戏中的海豚,可能是他们在CPU上实现了最达到的最大诅咒的事情。这应该让你了解我们&#39的挑战是什么样的挑战;在试图在Android上获得良好的表现时重新启动。

忽略了许多绩效挑战,也有Mali' s glsl着色器编译器的主要错误。虽然我们'在细节上没有完全确定为什么和如何,它似乎能够在两个整数向量之间处理两个整数时的操作,当其中一个是非常数时。一旦SSPACLYNX知道出了什么问题,它是难以修复的。值得称道的部分是他们做了所有调试,实际缩小它。为了他们的努力,他们在马里固定了大量的图形错误。

在Android上的海豚有时必须跳过循环才能正常工作。其中一个相当有问题的事情是配置以非常奇怪和令人讨厌的方式分裂。在过去几个月里,已经报告了海豚' t保存控制器配置,除非用户将其添加到每比赛INI。这一问题很困惑和混淆了Josjuice一段时间,直到JMC47最终转载了行为。

要重现错误,必须映射一个控制器或其他设备,然后尝试映射别的东西。海豚会说它覆盖了设置,但实际上它没有#39; t。由于控制器设置存储在Android上的两个不同位置,因此GUI设置将显示所有已配置的所有内容。不幸的是,仿真器从WASN读取的实际设置; T获得更新。一分思想揭示了一个相当好奇的原因 - settings.section_ini_android和settings.section_bindings都有值" android"因为它们共享相同的值,Dolphin认为设置.section_Bindings是当其实际移植到底时新的Android分层配置系统的一部分。因此,它无法覆盖旧值。

Josjuice快速修复了这个问题,现在用户将能够在最新的播放商店发布中正确配置控制器并将配置保存!

如果你没有使用Android上的控制器,你可能已经注意到海豚'触摸控制现在看起来有点更好。 Mayimilae注意到5.0-13545增加了不透明度控制,让用户更自由地配置触摸界面。但是,当她最初设计了屏幕上的按钮时,Android上的海豚没有实际调整不透明度的功能。她不得不选择一个默认情况,在大多数情况下看起来不错,并使不透明度是50%的魅力。然而,5.0-13545也将不透明度设置为50%,这意味着基本图像的不透明度为50%,然后海豚在其上使它们更加透明。这使得按钮更难看到默认情况下。

为了解决问题,Mayimileae返回并优化了按钮,使它们更友好地变化,具有更高的基础透明度。她还调整了默认不透明度,以匹配按钮在无意中回归之前的样子。

这种特殊的变化已在碳酸咖矿中冷冻两年。回路然后,Stenzek找到了一种方法来修复海豚,足以运行星球大战罗伊上级Squadron III:反叛罢工而不会崩溃。现在,您可能会记住游戏正在为Dolphin 5.0发布工作,但短时间内,海豚' S GPU时间稍微变得稍好,游戏停止工作。 STENZEK'解决回归的解决方案很简单,有意义。只有问题?它需要更多GPU同步。他不是舒适地合并它,因为绩效回归潜力并寻求找到另一种解决方案。

他从未找到过一个,所以改变聚集了灰尘,因为仿真器在没有它的情况下进化而被堕落。然而,对于那些接近项目的人来说,我们内心的洞。自5.0-583以来,Rogue Squadron III Hadn'它能够在开发建设中运行,这只是不可接受的。

虽然Stenzek WANN'愿意合并如此风险的变化,JMC47要求Stenzek绑定变化,以便在现代建筑物上进行测试。没有乐观的乐观效应,但Stenzek认为它是无害的并重新折扣,而不是意识到黑暗面的裹尸布已经下降。

令人遗憾的是现代时代,拉拉请求由一连串的参与者测试,寻求表现回归和准确性效益,并且他们发现盗贼中队III在他们到达时是非常操作的。在没有崩溃的情况下,它不仅仍然使反叛者罢工仍然是反叛者,而且在扩展戏剧期间,它也消除了XenoBlade Chronicles和Star Fox冒险的随机撞车。它甚至修复了星球大战罗伊中队II:Rogue Leader的令人惊叹的克雷什瞄准电脑。这是什么样的神秘能源领域这更改它可以解决这么多?

要了解如何使事情更准确,您还必须了解Dolphin如何在单核和SyncGPU模式下运行CPU和GPU。 5.0-583之前,海豚' S单核模式具有无限快的模拟GPU。 它会立即完成所有任务。 这对于保持同步的事情很好,但造成的问题 ......