yuzu模拟器吧 关注:174,888贴子:731,905

yuzu 2022年7月进度报告(机翻)

只看楼主收藏回复


一楼祭


IP属地:上海1楼2022-08-26 19:37回复
    进度报告2022年7月
    由...所写GoldenX862022年8月15日
    你好,年轻人,我们度过了多么美好的一个月啊!伟大的图形变化,惊人的音频重写,LDN支持的初步工作,测试新的OpenGL驱动程序,和大量的修复!请继续阅读,了解更多信息。
    Y.F.C .项目第1部分
    因为我们在以前的文章中已经戏弄了你几个月(并且我们将继续这样做),你知道Blinkhawk一直致力于一堆杂七杂八的GPU相关修复和性能改进。在不久的将来,我们将在一篇专门的文章中提供更多信息,请欣赏下面的简要概述。
    随着项目范围的扩大,团队决定将其分成两部分,发布的第一部分更多地关注游戏修复和提高准确性。虽然这并不意味着第1部分没有提高性能,但第2部分将专门讨论这一点。


    变得可玩!(《哈迪斯与马里奥高尔夫:超级冲刺》)


    IP属地:上海2楼2022-08-26 19:38
    回复
      这个故事开始于很久以前.令人敬畏的开发人员正在研究Skyline仿真器完成实现他们的NVDRV服务(NVIDIA驱动服务),他们提供给我们,因为它比我们的旧实现更准确。


      友凯手表4,前后
      Y.F.C .项目第1部分实施的变更包括:
      GPU驱动程序的完全返工,基于Skyline Emulator的逆向工程和代码,并得到相应团队的完全许可。
      GPU内存管理的全面返工。
      GPU通道的初始实现,修复Super Smash Bros. Ultimate“光的世界”模式,Deltarune,以及其他几个游戏。
      GPU DMA引擎的错误修复和性能改进。
      Vulkan、GPU缓冲区缓存和着色器反编译器的几个修复,所有这些都会影响多个游戏。
      重新制作的主机帧显示更加流畅(改进Xenoblade Chronicles游戏)。


      IP属地:上海3楼2022-08-26 19:39
      回复

        光之世界单人模式现在可以玩了!(超级粉碎兄弟终极版)
        可悲的是,像这样的一大串关键变化带来了倒退。我们正在努力解决这些回归问题,但是Blinkhawk正忙于IRL的事情,所以在我们整理东西并为第2部分铺平道路的时候,期待看到这些变化被实现到主线中的延迟。(记住:你可以检查一下hovercard或者PR本身,看看它的合并状态!)


        并非所有游戏都处于完美状态...还没!(《巫师3:疯狂狩猎》)


        IP属地:上海4楼2022-08-26 21:31
        回复
          安迪欧项目
          我们以前没提过这个名字,对吧?嗯,对我们来说也是一个惊喜!舞出是这个奇妙礼物的背后:yuzu的音频引擎几乎完全重写。
          这个项目背后的主要驱动力是解决多年来的老问题,这些问题是由于我们非常古老的初始音频实现而积累起来的。yuzu失去了许多播放功能,如音频效果。但是旧的代码太难维护,使得它不可能跟上这些年来交换机的更新。
          这是之前和之后的Metroid Dread在水下的时候。你可以注意到在第一段录音中效果消失了,好像萨姆斯就在外面。
          https://yuzu-emu.org/entry/yuzu-progress-report-jul-2022/audiobug.mp3
          https://yuzu-emu.org/entry/yuzu-progress-report-jul-2022/audiofix.mp3
          更干净的代码允许开发人员更容易地保持最新(当前实现使用固件版本14.0.0中引入的更改),并且应该有助于在将来引入通过逆向工程发现的更改。
          修复列表如此之大,几乎数不清。虽然超过15个官方问题已被修复,但不可能知道有多少未记录的问题已被解决。
          我们计划在不久的将来为Andio写一篇专门的文章,深入探讨引入的变化。
          所有用户都可以享受Project Andio的好处,主线和早期访问都有!
          伦敦项目的准备工作
          是的,邦内,是伦敦。
          对于那些不理解项目这个名字的人来说L在don我们的工作是为yuzu提供LDN(本地无线)支持,包括用于在线连接的托管房间。
          这样的房间以及它们相应的用户界面,什么鸢一直在努力。

          可以创建多人聊天室,带有聊天功能。


          IP属地:上海5楼2022-08-26 21:34
          回复
            补楼:


            IP属地:上海6楼2022-08-27 20:57
            回复
              实施基于奇特拉,虽然它的功能已经非常完善,但在网络后端准备就绪之前,用户无法使用它。

              SEGA最近怎么样?(普约普约俄罗斯方块)
              谢天谢地,正如你在上面看到的,内部测试在理想条件下是积极的,所以“唯一”剩下的工作就是调整和修复错误。要是有那么简单就好了…
              像这样的在线服务需要传输网络数据包,所以下载频道作为依赖项添加。
              请继续关注这项正在进行的工作的未来改进!
              核心计时,不然怎么受这么多的折腾
              对于yuzu代码库的一个长期被诽谤的角落来说,这是一个多事之月,在开发者中通常被称为CoreTiming。内核计时可能是yuzu中许多计时相关仿真问题的原因。
              在审查Project Andio时,Blinkhawk指出,他的一个长期开放的pull请求实现了一个更精确的CoreTiming版本,修复了模拟游戏中的一些音频损坏问题,甚至修复了一些以前有冻结问题的游戏,例如Mario Strikers: Battle League.随着新的音频代码几乎准备就绪,团队决定对这个拉请求进行重新调整和合并,这样我们就可以拥有一个新的音频系统,而不会有任何倒退。新的CoreTiming实现将使用多个主机线程来等待事件,理论上应该会好得多。
              然而,它并没有解决所有问题。Maide发现,音频回调仍然存在一些挥之不去的问题,不能像他们需要的那样精确地循环。在yuzu中,循环事件以前使用CoreTiming在它们执行后重新安排它们自己的确切毫秒数,而不是它们被打算执行的时间。这导致了新的音频渲染器出现明显的漂移和问题。通常的受害者是受影响最大的,只有4个线程运行CPU的用户。
              为了解决这个问题,梅德修改了循环事件的处理方式。现在,CoreTiming自动计算重新安排循环事件的正确时间,使这些类型的事件的实现更加精确。随着循环事件的变化,并注意到Blinkhawk添加的其他变化导致了严重的回归,团队选择移除多线程主机核心计时实现,然后Blinkhawk的大部分新实现,因为它仍然会给部分用户带来严重的性能问题。
              但这还不是本月时间发生变化的全部。Windows上的英特尔Alder Lake(第12代)CPU用户长期以来一直报告在Super Smash Bros. Ultimate,但自从几个月前NVNFlinger重写以来,情况变得更糟了。如前所述,常驻bunnei rabbit在2005年修复了这个问题后续拉取请求这恢复了旧实现的(不准确)行为,并且对于这些用户来说,时钟漂移问题得到了显著改善。
              Maide不满足于仅仅改善音频,他发现yuzu的NVNFlinger实现等待缓冲区的方式会漂移,由于之前在CoreTiming中修复的相同问题!他没有在这里重新实现修复,而是修改了NVNFlinger,使用定时回调,修复了SSBU的漂移问题,还解决了许多长期存在的帧时间不一致问题。由于保持了帧时间表示的一致性,这也在许多游戏中提供了显著的性能提升,并且允许Fire Emblem Warriors: Three Hopes才可以玩。

              神经质的,明显的口吃

              平坦,光滑如丝


              IP属地:上海7楼2022-08-27 20:59
              回复


                是时候粉碎那些攻击按钮了(火徽战士:三个希望)
                最后,面包鱼64 实现了一种读取主机CPU的精确TSC频率的方法。这TSC(时间戳计数器)是一个高精度计时器,用于测量自启动以来英特尔或AMD处理器执行的基本时钟滴答数。CoreTiming使用这个值来模拟ARM物理计数寄存器,它的作用类似于TSC对于ARM设备,如开关。得到确切的TSC频率,而不仅仅是估计它,允许核心计时避免由于主机频率(取决于您的CPU)和客户时钟频率(固定为19.2MHz)之间的不匹配而产生的漂移。
                更高的精度和更快的启动时间从来都不是坏事!
                内核更改
                在游戏和自制软件上使用新的调试器时,纽约商品交易所发现了一个问题,导致yuzu错过已经运行的代码中的断点,或者命中已经删除的断点。愉快的调查并发现了一个错误丹纳米克的代码块的缓存。正确修复缓存清除和计算块哈希修复了命中断点的问题。
                comex还发现了观察点的一个问题,在观察点中断后恢复执行似乎无法以正确的状态恢复。字节[]调查了该问题,发现当Dynarmic未能更新watchpoint回调中的PC寄存器时会发生这种情况。Merry通过以下方式再次修复了此问题完全重写了Dynarmic对观察点的支持,现在,在必要时立即中断,并避免了几乎所有启用观察点的性能损失。不错!
                byte[]在整个六月都在努力修复各种内核问题和不一致,这个月也不例外。这一次,在寻找一种神秘冷冻虫的来源时Super Mario Galaxy,他重写了整个调度程序,并使其符合交换机内核逆向工程的当前技术水平。这修复了许多游戏中的问题,但最显著的是修复了用户在Mario Strikers: Battle League(一旦您使用了简介-跳过模式),并允许Mononoke Slashdown第一次开机。

                目前预计会有一些图形错误(马里奥前锋:战斗联盟)


                IP属地:上海8楼2022-08-27 21:00
                回复
                  补楼





                  IP属地:上海9楼2022-08-27 21:56
                  回复

                    猫怪砍杀
                    在为发布准备新的调度程序时,byte[]还注意到模拟客户线程的方式效率低下。为了解决这个问题,他改变了开始纤维的过程使用支持C++语言的功能,并大大简化了实现。
                    GPU的变化
                    上月,贝胡宁贡献了一个新的GPU队列实现,旨在提高模拟游戏提交处理的性能。一段时间后,冻结问题Fire Emblem: Three Houses开始突然出现。经过长时间的搜寻,byte[]认为问题已经被pull请求找到并修复了#8483和#8538,但更仔细的调试发现,导致冻结的原因不幸来自新的GPU队列实现!变体站出来恢复了新队列实现的使用,最终解决了这个问题,至少目前是这样。

                    不要问(火徽:三宅)
                    Xenoblade Chronicles 3的发布让yuzu社区沮丧的是,当使用Vulkan时,它会在启动时崩溃。由于时区的差异,Maide是我们第一个拿到新游戏的开发者,byte[]落后了。Maide发现有一些Vulkan着色器在编译时导致GPU驱动崩溃。yuzu与大多数Vulkan程序不同,它直接生成二进制格式的着色器来响应游戏着色器的需求,当yuzu翻译着色器的方式与GLSL编译器翻译着色器的方式不同时,这可能会导致问题。byte[]迅速帮助Maide确定了这些着色器编译崩溃的根源,并一起修复了这两个问题FSwizzleAdd和ConvertDepthMode, 允许用户在Vulkan中运行游戏。


                    IP属地:上海10楼2022-08-27 21:58
                    回复




                      IP属地:上海11楼2022-08-27 21:59
                      回复

                        谢谢你晚上给我的精彩照片!(《异刃编年史3》)
                        我们知道运行在Windows上的AMD镭龙GPU在启动时仍然会遇到Vulkan崩溃。这是因为这些驱动程序缺乏对VK_FORMAT_R16G16B16_SFLOAT纹理格式。我们实现了一个替代路径,用一个类似的路径来模拟这个格式,以解决这个问题。我们将在下一个进度报告中更深入地讨论它,以及这个令人惊奇的游戏的其他几个错误修正。
                        影响这个新版本的另一个问题是在OpenGL中运行时内存使用的荒谬水平。yuzu,在过去,在处理着色器后清理着色器源。现在,出于某种原因,这个游戏设法跳过了检查。为了改善荒谬的内存使用率,byte[]执行 glDetachShader,一种更“官方”的方式来达到同样的效果。虽然这并不能完全解决问题,但测试表明,仅增加一行代码就可以减少5GB的内存使用。
                        让我们在GPU仿真的主题上停留久一点。在过去的进度报告中,我们解释了如何toastUnlimited 实施状态检查系统以确保第一次打开yuzu时良好的Vulkan兼容性。
                        最初的实现是通过在启动时运行一个小的Vulkan实例,检测它是否崩溃,并将结果保存在配置文件中。在崩溃后的下一次启动时,yuzu通知用户并锁定自己只提供OpenGL。这需要两次启动来获得完整的画面,并且需要用户的手动干预来重新启用Vulkan作为一个选项,在yuzu的配置中按下一个按钮。
                        这种新方法使用仅负责启动Vulkan加载程序的子进程。如果子进程崩溃,父进程将当前运行的yuzu实例标记为与Vulkan不兼容。这样做的好处是只需运行一次yuzu就可以检测到当前状态。如果用户解决了问题(更新驱动程序或任何导致问题的Vulkan层应用程序),只需要重新启动yuzu,因为现在配置文件中没有任何更改。
                        这一改变有助于用户识别问题并阻止潜在的崩溃,但一般建议仍然适用:手动更新你的GPU驱动程序(永远不要相信Windows Update),并将任何运行覆盖或记录屏幕的应用程序更新到最新版本。
                        继续讨论与山羊无关的更具体的游戏修正Xenoblade Chronicles 3我们的常驻克隆Kirby Morph,实现了纹理格式 MONSTER HUNTER RISE一直在要求:ASTC_10x6_UNORM.没错,另一个ASTC格式。你的GPU会一边解码一边恨你。
                        这并没有解决我们在这个游戏中面临的渲染错误,但是它让事情看起来好一点了!

                        起来吧,你们玷污了!等等,错误的游戏(怪物猎人崛起)
                        Linux Flatpak(发现)和AppImage修复
                        虽然Flatpak不是我们的用户在Linux上享受他们最喜欢的交换机产品的推
                        荐方式,但由于性能较低和一些缺少桌面集成功能,对于许多默认安装了Flatpak并希望以低摩擦方式访问yuzu的Linux用户来说,它是一个很好的选择。自发布以来,它一直是Steam Deck用户的首选。随着来自用户的报告越来越多,该团队本月修复了一些值得注意的Flatpak专用回归。
                        但是为什么这些问题是Flatpak独有的,而不是在常规的Linux AppImage构建中发现的呢?Flatpak在C++标准库中启用了额外的检查,目的是在缓冲区溢出错误发生之前捕捉它们,以帮助调试。不幸的是,如果检查失败,它会导致yuzu立即崩溃,这使得仅从yuzu的日志文件中调试问题变得更加困难。
                        默认情况下切换到Vulkan会导致使用任何基于CPU渲染的游戏崩溃。如果一个游戏想把一个图像从CPU渲染到屏幕上,而不是GPU,它会先把图像转换成Switch GPU理解的优化布局,然后要求GPU渲染优化后的图像。为了处理这种情况,yuzu撤销了这种布局转换,并将数据上传到主机GPU进行演示。byte[]发现,由于优化布局和非优化布局的大小不同,用于非优化布局的子跨度会溢出,导致检查失败。解决办法很简单:只要为转换的层使用优化的大小,因为它总是更大。

                        谢谢湿熊的照片!


                        IP属地:上海12楼2022-08-27 22:37
                        回复
                          如果没有看似不相关的回归,这就不是一个合适的yuzu拉请求。Pokémon: Let's Go, Pikachu!/Eevee!byte[]之前的变化导致了一个奇怪的性能退化,当试图玩皮卡丘或Eevee时,帧率会下降到大约每秒7帧。byte[]对此进行了研究,发现使用更大的尺寸会导致重新优化游戏读回帧的过程变得更慢,因为它现在处理的是更大的图像。然后他把它修好了对优化和未优化的图像使用不同的尺寸,最终解决了这些愚蠢的性能问题。
                          Project Andio也在Flatpak版本中引入了一些新的回归。其中一个问题在合并前已在拉请求中得到解决。
                          当解码从模拟游戏输入的缓冲区时,span操作可能会溢出。Maide通过在解码输入时更加小心地处理样本缓冲区解决了这个问题。从用户报告来看,仍然有崩溃,Maide发现了一个问题这DepopPrepare命令,导致另一个溢出跨度。修复这个问题后,用户终于可以再次享受Flatpak的构建了。Flatpak Linux用户欢欣鼓舞!

                          简单方便
                          Flatpak不是唯一一个分一杯羹的人,AppImage也收到了一些爱!
                          漏洞检测不仅是Windows的问题,也可能发生在免费土地.toastUnlimited发现libQt5Multimedia库导致AppImage构建中的Vulkan出现问题。由于使用了该库,不包括libwayland-client目前的解决方法是否到位。我们将评估用户对此变化的反应,并考虑保留还是删除libQt5Multimedia一共。
                          Docteh开始研究改善环境变量在我们的构建过程中用来给AppImages一个合适的标题栏。一旦这项工作完成,标题栏应该看起来与Windows版本相同。
                          输入改进
                          任天堂Switch的一个独特之处是能够使用安装在正确的Joy-Con上的红外摄像机。摄像机的主要功能是检测形状和测量到物体的距离,但它也可以用来将信号传输到屏幕上,让你将Joy-Con变成一个热寻的怪物。福克斯-2!
                          有兴趣在yuzu中加入这一令人敬畏的特性,并为游戏提供全面支持,如Game Builder Garage或者Nintendo Labo收藏,德国77 模拟集群处理器要求让游戏访问Joy-Cons上的摄像机或用户想要提供的任何摄像机,即使它是从OBS Studio获得的桌面捕获。

                          虽然这看起来像一个自制的应用程序,但事实上它是任天堂为其游戏提供的真正的红外界面
                          想要尝试这个设置的用户可以在Emulation > Configure… > Controls > Advanced tab > Infrared Camera.

                          多漂亮的小菜单啊


                          IP属地:上海13楼2022-08-27 22:39
                          回复
                            补楼




                            IP属地:上海14楼2022-08-27 23:25
                            回复
                              这项工作不包括所需的力矩处理器1-2-Switch!只是暂时的。
                              Steam Deck用户报告在使用外部控制器时出现问题,但在使用集成Deck控制时没有问题。toastUnlimited跳到了这个问题上,并发现原因是包含的预发行版SDL2我们一直使用的版本。恢复到稍旧的版本解决了问题。
                              最近一项非常有趣的社区工作是专注于为单人游戏添加在线功能,允许在原始游戏中不可能的有趣合作机会。Super Mario Odyssey最近收到了允许此在线功能的mod,而yuzu不支持它的一个原因是屏幕键盘缺乏输入IP地址的方法!幸运的是,墨菲接手了这个案子实现了必要的符号通过在线模式输入所需的IPv4地址。

                              一次最多10个人!(超级马里奥奥德赛)
                              链接4565 实现了一些必需的修复在yuzu的网络服务中提高与这个牛逼mod的兼容性。非常感谢!
                              祝你破坏布瑟的婚礼愉快!
                              用户界面更改
                              从20世纪90年代以来的一个小倒退输入重写刚刚显露出来。WebApplet的输入位被错误地假定,导致用户输入被完全忽略。谢天谢地,墨菲找到原因了并实施了修复。
                              上个月,医生改名状态栏的停靠状态(冗余,耶!).为了一致性,这个愚蠢的作家决定对控件配置窗口进行同样的操作,为了一致性。

                              无聊的改变,这是谁的责任?
                              有时候,从用户的角度来看,由于UX(用户体验)的呈现方式,一些“按设计运行”的东西可能看起来停滞不前,例如,问问任何一个新的Linux用户。在这种情况下,当加载应用程序时,如果游戏启动时没有先前的管道缓存,或者如果启动了自制程序,着色器进度条在启动时会出现停滞。由于这导致了混乱,byte[]决定最好重置状态栏也不要让它一直卡在那里,直到程序完成加载。如前所述,细节决定成败。
                              中可用的可配置热键选项之一Emulation > Configure… > General > Hotkeys存在Audio Volume Up/Down.用户要求调整音量变化的曲线,使其在较低值时更敏感。人类的听觉是对数地感知音量,而不是线性地感知,所以这很有意义。德国77增加了增量步骤你越接近0%的音量,就越能更好地模仿我们的肉体和骨骼感知世界的方式。
                              常规错误修复和改进
                              紧密集成系统的一个美丽特性是它们对挂起和恢复的奇妙控制,Steam Deck也不例外。如果你曾经经历过暂停和恢复的问题,你知道我的意思。经验丰富的开发人员德夫斯内克希望帮助yuzu在三年内利用这一特性不同的 拉请求。这包括模拟交换机的实际挂起/恢复机制,因为一些游戏利用它作为他们的游戏特性之一。有了这些改变,用户只需按下面板的电源按钮就可以暂停他们的游戏,就像在开关上一样。
                              对于我们这些生活在偏远地区,遭受可怕的互联网服务提供商,或两者兼而有之(FML),我们有神奇的消息!toastUnlimited将每个yuzu下载的大小减少了大约24MB只包括属于yuzu的东西在它的源头。那些对构建安装程序附带的捆绑源代码感兴趣的人现在必须运行git submodule update --init --recursive以便能够编译项目。
                              硬件部分
                              这是一个新的部分,交流和讨论新的相关错误,修复,以及与特定硬件相关的发现,这些都会影响yuzu的用户体验。
                              英伟达,错过了472.12的完美
                              我们上个月提到过516系列驱动如何对麦克斯韦和帕斯卡用户不利,使得Vulkan不稳定。我们仍在调试这个问题,因为它不容易捕捉,但一个可能的原因是怀疑:GPU加速ASTC纹理解码。如果你有一个Maxwell或Pascal GPU,必须保持最新的驱动程序更新,并想测试你是否可以使Vulkan再次稳定,请尝试禁用Accelerate ASTC Texture Decoding在Emulation > Configure… > Graphics.请在我们的上报告您的结果论坛或者不和谐服务器.
                              由516系列驱动程序引起的另一个已知问题是KOEI TECMO游戏中树上的一些有趣闪烁,如Hyrule Warriors: Age of Calamity.
                              日间派对!NVIDIA Vulkan左:516.94和右:512.95 (Hyrule勇士:灾难时代)
                              这些问题可能是回归,也可能是未记录的行为变化,可能是在更严格地遵循API规范后引起的。
                              还有一些性能相关的问题会影响G-SYNC/FreeSync显示器的用户,导致低帧率(通常游戏会卡在24-30 FPS)。我们有几种方法可以绕过这个问题:
                              每次启动游戏时,都要重新聚焦yuzu的窗口。
                              在yuzu,禁用View > Single Window Mode.
                              使能够Exclusive Fullscreen从Emulation > Configure.. > Graphics > Fullscreen Mode.然后只需按F11全屏玩游戏。
                              问题的根源是由于在另一个窗口中运行Qt窗口,以及NVIDIA检测窗口应用程序帧率的方式的一些不良组合造成的。移除这两个因素中的任何一个都可以解决低帧速率,同时仍然利用可变刷新率。
                              AMD OpenGL,25年的历程
                              地狱冻结了,猪学会了飞,从Windows驱动程序版本22.7.1开始,AMD引入了一个全新的OpenGL驱动程序,使Windows上的镭龙卡成为使用这两种API的可行选项,而不仅仅是酷小子Vulkan。性能提高了近100%,在某些游戏中甚至更高,并且修复了许多渲染错误。但是为什么要写出来,让数字来说话:

                              谢谢你罗德里格!


                              IP属地:上海15楼2022-08-27 23:27
                              回复