yuzu模拟器吧 关注:183,025贴子:765,450

yuzu Progress Report April 2022

只看楼主收藏回复


一楼祭,柚子也有轨迹粉,真好。和吧主同道中人


IP属地:韩国1楼2022-05-26 08:58回复
    进度报告2022年4月
    由...所写GoldenX86和CaptV0rt3x2022年5月11日
    你好,yuz-ers,四月真是太棒了!我们将讨论CPU和内核性能的改进,几个GPU仿真的变化,用户界面的调整,等等!
    再次拯救桃子公主
    继续他的工作以更好地支持正式的GameCube/Wii和任天堂64模拟器(代号Hagi和Hovercraft分别),字节[]引入了几个新的PRs,以进一步提高中包含的标题的兼容性Super Mario 3D All-Stars.
    byte[]第一次实现对GLSL的支持是在Super Mario Sunshine,因为不是每个人都能运行Vulkan。这是通过添加以下内容实现的支持间接寻址在OpenGL中。
    https://github.com/yuzu-emu/yuzu/pull/8133
    这一变化目前不包括对GLASM的支持,因为我们的开发人员不太喜欢处理NVIDIA汇编着色器代码。想象一下,你被要求修理一个汽车引擎的问题,而唯一给你的工具是一块石头和一根棍子。
    然而,这只是成功的一半。正确的OpenGL支持Super Mario Sunshine和Super Mario Galaxy需要解决老化API的一个老限制:破碎的Z标度反转。
    大多数Switch游戏要么使用流行的免费图形OpenGL,要么使用游戏机专有的NVIDIA API。可以说,NVN在操作方式上比Vulkan更接近OpenGL。
    交换机上的Tegra X1 GPU足够灵活,允许游戏开发人员随意更改坐标系。虽然大多数游戏的行为更接近OpenGL的预期,但Z轴背向相机,Hagi和Hovercraft仿真游戏(使用Vulkan渲染,并且只在Switch上的少数游戏中使用)的坐标是反向的,Z轴面向相机,这是Vulkan游戏原本期望的渲染方式。

    byte[]的Z轴图
    如果你想玩,这不是问题Super Mario Galaxy或者Super Mario Sunshine在yuzu和yuzu的Vulkan后端,因为行为符合游戏的预期。但是如果你尝试使用OpenGL来玩,yuzu将不会正确地解释由于Z比例反转而翻转的面,因此只渲染物体的背面。
    解决方案非常简单,翻转正面当Z轴反转时。
    https://github.com/yuzu-emu/yuzu/pull/8149


    欢迎来到影子王国度假村(超级马里奥阳光)


    IP属地:韩国2楼2022-05-26 09:02
    回复
      接下来,你可能已经注意到了Super Mario Sunshine在底部呈现一个黑条。这是因为Wii和GC游戏本身使用的长宽比不同于我们习惯的16:9。相反,游戏以5:3的纵横比呈现。Super Mario Galaxy通知系统将屏幕明确裁剪为其原始分辨率1920x1012,但是Super Mario Sunshine不会,所以yuzu以前没有尝试裁剪游戏,结果在渲染底部出现了一个显眼的黑条。

      裁剪过程图
      而游戏的比例Super Mario Sunshine可以说,黑条看起来更正确,但这不是任天堂想要的游戏玩法。为了准确起见,byte[]解释游戏的隐式裁剪请求,该请求拉伸图像以匹配开关的原生1920x1080分辨率,两者都是为了Vulkan和对于OpenGL .
      https://github.com/yuzu-emu/yuzu/pull/8150
      https://github.com/yuzu-emu/yuzu/pull/8152


      不要调整你的设置(超级马里奥阳光)


      IP属地:韩国3楼2022-05-26 09:03
      回复
        但你玩了PC版,你会发现无论是画质还是帧数明显高于ns版。


        IP属地:山东来自Android客户端4楼2022-05-26 09:21
        收起回复
          在之前的报告中,我们提到了S8D24 < > ABGR8纹理转换如何允许Super Mario Galaxy启动位以正确运行。嗯,这是轮到OpenGL了来凑热闹。
          https://github.com/yuzu-emu/yuzu/pull/8161

          S8D24到ABGR8纹理转换图
          我们上个月提到过Super Mario 64对在yuzu上运行有特殊要求。大多数游戏编译他们的代码ahead-of-time (前嗅结节),也就是在发货给你之前。操作系统的工作是执行预编译的二进制代码,然后你就可以玩游戏了。
          Super Mario 64另一方面,运行just-in-time(JIT),以使开发Hovercraft模拟器,并允许重用相同的Hovercraft不同游戏的二进制。这Hovercraftemulator加载超级马里奥64的一个原生任天堂64 ROM,然后它的JIT编译器获取ROM并翻译原文每秒百万条指令(任天堂64的CPU的架构)指令到AArch64(交换机的CPU架构)即时指令。只有这样,操作系统才会执行游戏代码。

          提前与及时编译图
          这类似于yuzu如何在的帮助下将AArch64指令翻译成AMD64指令动态的.
          在零售游戏上使用JIT编译所需的JIT服务是yuzu没有实现的功能,原因很简单,因为没有其他游戏需要它。此外,以直接的方式实现它有一些障碍,因为它需要调用游戏提供的自定义代码,这是任何以前的服务实现都不需要的。所以,除了一些初步的存根,字节[]实施HLE JIT服务允许Hovercraft仿真器功能和Super Mario 64启动。
          https://github.com/yuzu-emu/yuzu/pull/8164
          https://github.com/yuzu-emu/yuzu/pull/8199
          在单独的PR中,byte[]添加了JIT服务接口如何操作的文档。如果需要的话,这应该有助于其他开源项目。
          https://github.com/yuzu-emu/yuzu/pull/8261
          当然,这还不够Super Mario 64可玩,因为还有渲染问题要解决。
          从来没有那么简单…但是让我们试着简单的解释一下。任天堂Switch游戏在每个游戏中都捆绑了自己的GPU驱动程序。这样做是为了增加兼容性,如果一个驱动版本有问题,你不需要更新世界上的每一个控制台。
          由于未知的原因Hovercraft模拟器或捆绑的GPU驱动程序报告顶点缓冲区太大,尤其是与游戏实际使用的相比。这是包含在模拟器中的一个问题还是仅仅是一个驱动程序错误,我们不能确定,但是我们确实需要解决这个问题。

          错误的顶点缓冲区大小图


          IP属地:韩国5楼2022-05-26 10:01
          回复
            因此,byte[]没有使用报告的疯狂的缓冲区大小,而是说没有!和使用后备内存大小相反。
            https://github.com/yuzu-emu/yuzu/pull/8205

            是-一个他!(超级马里奥64)
            Vulkan上的性能现在还不是很好,但你最终可以享受所有3个Super Mario 3D All-Stars两种API的游戏。
            最后,变体实施了对的修复保持web小程序在前台打开,作为Super Mario 3D All-Stars游戏需要它,否则它们会在游戏开始几分钟后崩溃。
            https://github.com/yuzu-emu/yuzu/pull/8135
            常规图形修复
            继上个月的NVFlinger重写之后,邦内继续跟踪问题和错误报告。他修复了报告的问题,并进一步清理了代码以提高代码质量。请在此处查看NVFlinger重写的代码更改 .
            Xenoblade Chronicles 2和Hyrule Warriors: Age of Calamity会经历由新的GPU Garbage Collector作为的一部分引入Project Y.F.C.。我们早在1999年就讨论过这些变化一月.
            正如你在下面的顶栏上看到的,Xenoblade Chronicles 2会在OpenGL中使用过多的VRAM(顶栏)。底部的横条显示了实施修复后的结果。
            https://github.com/yuzu-emu/yuzu/pull/8137

            不是测试你整个VRAM的最好方法
            Age of Calamity会显示有趣的随机间隔的图形:


            这就是为什么你不要把卡拉梅尔德森炸得太重


            IP属地:韩国6楼2022-05-26 10:02
            回复
              补楼




              IP属地:韩国7楼2022-05-26 10:06
              回复
                希望作者多关注独占游戏


                IP属地:广东8楼2022-05-26 10:09
                收起回复
                  Blinkhawk 修复回归这两款游戏都恢复了运营。
                  https://github.com/yuzu-emu/yuzu/pull/8128
                  通常在仿真中,当您解决一个问题时,另一个问题又会出现。为实现的裁剪固定字节[]Super Mario 3D All-Stars有可爱的意想不到的副作用,破坏了Vulkan中自制程序的渲染。谢天谢地,墨菲补充道代码的魔法线解决了这个回归问题。
                  https://github.com/yuzu-emu/yuzu/pull/8267
                  Skyline框架:第3部分
                  取得了重要进展地平线正在修改框架。以下是这两个链接如果你错过了我们之前的进度报告。
                  科技股一直很忙进行最后的润色。最新的变化包括:
                  较好的LayeredExeFs支持,这导致更容易的mod分发和自我更新能力。
                  对的支持SO_KEEPALIVE套接字选项,允许Skyline TCP记录器运行。
                  实施域名服务器(Domain Name Server)地址解析,这是使用HTTPS请求的插件所需要的。
                  我们必须提到,虽然Skyline内核支持基本完成,但yuzu代码库中的错误阻止了modding框架的正常运行。例如,由于潜在的仿真问题,阿克罗波利斯不会工作,直到Project Gaia已经完成,前面提到的一些更改需要我们进行一些微调才能正常工作。
                  https://github.com/yuzu-emu/yuzu/pull/8171
                  还有更多工作要做,但我们已经很接近了。我们可以看到终点线了!
                  UI改进
                  愉快的,的核心开发者Dynarmic, 对附加组件游戏属性窗口做了一些修改,提高列宽。
                  https://github.com/yuzu-emu/yuzu/pull/8140


                  热键配置窗口也得到一些爱,更改最小列宽。
                  https://github.com/yuzu-emu/yuzu/pull/8141


                  这对GNOME用户来说也很棒
                  这两个变化对于臃肿或大小未经优化的桌面环境,如GNOME Shell,都是非常有益的。
                  塔奇107 修正了我们日志中一些令人尴尬的错别字,以及更新了关于yuzu的窗口为了恰当地提及我们的新执照,GPLv3.0+。这+这是因为我们想为新的修订敞开大门。
                  https://github.com/yuzu-emu/yuzu/pull/8142
                  https://github.com/yuzu-emu/yuzu/pull/8225

                  yuzu About框截图


                  IP属地:韩国9楼2022-05-26 11:42
                  回复
                    不止于此,太极对Flatpak构建进行了一些清理和改进,包括使用合适的app ID,修复一些错别字,增加一个启动参数,让yuzu在Linux上默认使用专用GPU,而不是集成GPU。
                    https://github.com/yuzu-emu/yuzu/pull/8283
                    Docteh也对改进yuzu的UI有很大的帮助。
                    通过一点人工思考,他们设法绕过一些Qt限制,以便显示可读性更强的超链接在我们黑暗的主题中。
                    https://github.com/yuzu-emu/yuzu/pull/8190


                    大家好像都忘了超链接是干什么用的了,点一下就好!
                    感谢GillianMC在我们的不和谐服务器,Docteh发现Qt API中的一些怪癖导致所列游戏的兼容状态无法翻译。原因在于QObject,您可以在拉取请求的描述。现在,状态会以相应的语言正确报告。
                    https://github.com/yuzu-emu/yuzu/pull/8204


                    西班牙语示例
                    同样,D-Pad方向也没有正确翻译。同一个嫌疑犯,再一次。来人啊,请发一张逮捕令要求拘留卡门·桑迪戈。
                    https://github.com/yuzu-emu/yuzu/pull/8224


                    法语示例


                    IP属地:韩国10楼2022-05-26 11:44
                    回复
                      内核和CPU仿真变化
                      先说三月份发生的两个变化。
                      我们的常驻bunnei rabbit继续他的工作,重写yuzu的内核内存管理,使其准确到最新的系统更新。这一次,他解决并改进了如何映射和取消映射内核代码内存 .
                      https://github.com/yuzu-emu/yuzu/pull/7974
                      在Switch的上下文中,代码内存支持允许游戏和应用程序动态加载和卸载代码的较小部分。由于这些变化,Super Smash Bros. Ultimate加载/卸载nro时不再导致内存访问问题,使游戏在长时间游戏中保持稳定。
                      邦内也来宾(交换机)内核对象的已迁移板堆从主机堆内存到模拟客户内存。通过这一改变,yuzu的内存布局现在与主机更加匹配。
                      https://github.com/yuzu-emu/yuzu/pull/8013
                      一块代表一块连续的内存。堆是一个通用术语,用于任何动态随机分配的内存。
                      板坯堆是用于存储客户内核对象的空间。通过将这些从主机(PC)堆内存(RAM)转移到模拟的客户(交换机)内存,我们可以确保内核对象永远不会超出系统限制并导致主机(PC)上的内存泄漏。
                      线程本地存储(TLS)是一种机制,给定多线程进程中的每个线程都通过这种机制为线程特定的数据分配存储,这种机制也被重新编写,使其能够准确地适应最新的HorizonOS行为。
                      通过这些改变,我们现在已经完全修复了影响一些游戏的内核内存对象泄漏,但由于以前的实现允许无限分配,所以很大程度上没有被注意到。
                      回到四月变化列表,bunnei也重新实现了yuzu如何处理线程分配对于HLE服务接口。
                      https://github.com/yuzu-emu/yuzu/pull/8122
                      服务是在后台运行的系统进程,它等待传入的请求。交换机的HorizonOS具有执行各种任务的各种服务,例如音频、蓝牙等。
                      以前,我们习惯于为每个HLE服务接口分配一个主机线程,因为-
                      一些服务例程可能需要等待很长时间才能完成,比如网络或文件系统访问,以及
                      我们不支持从主机线程重新调度来宾线程。
                      被阻塞的线程将不得不等待阻塞它的动作完成,比如I/O或简单地休眠一段时间。
                      这种方法的问题是,由于是主机(Windows或Linux)调度服务线程,yuzu可能会产生奇怪的行为,特别是在有硬件限制的系统上,因为每个服务产生一个线程,而且我们模拟的服务实现数量非常多。
                      通过重写,yuzu现在有一个单一的“默认服务线程”,用于99%的非阻塞服务方法。对于对时间敏感的服务和需要阻塞的服务,我们仍然允许线程创建(例如音频、BSD、文件系统、nvdrv)
                      这使得服务线程数从两位数降到了一位数,从而提高了稳定性和一致性——尤其是在内核较少的系统上。拥有4线程CPUs核+ HT/SMT或4核)的用户应该会在大多数游戏中看到性能和稳定性的提高。
                      另一场关于正确关机行为的战斗打响了,并取得了胜利。yuzu目前没有模拟HorizonOS内核的多进程能力,因为它不需要模拟任何游戏。然而,游戏使用的多进程API仍然需要以它们期望的方式进行管理。所有的HorizonOS服务都有一个端口(用于客户端和服务器),用作游戏进程和服务进程之间的通信通道。为它们两者的每个通信接口打开一个会话,并且它们由它们各自的内核对象管理。当游戏关闭客户端端口,服务关闭服务器端口,一切都关闭了。
                      我们以前实现的问题是yuzu没有正确地跟踪所有的KServerPort和KServerSession每个服务的对象。正因为如此,服务没有被正确关闭,这反过来又导致了进一步的问题。
                      这最初工作得很好,但是当我们将客户内核对象迁移到模拟的客户内存时,就退化了,正如我们前面提到的。邦内很快发现了这个问题重新实现了我们如何跟踪这些内核对象 .
                      https://github.com/yuzu-emu/yuzu/pull/8165
                      通过拥有一个可以注册/注销开放端口和会话的单一位置,我们现在可以更好地跟踪这些内核对象。通过确保在我们拆除所有服务和内核时关闭它们,我们可以获得更好的模拟关闭行为。
                      输入更改和一般错误修复
                      如果用户在使用鼠标平移时为鼠标设置了非常高的DPI值,光标可能会跳出渲染窗口。IamSanjid实现了必需的修复,包括更好的居中计时来解决这个问题。谢谢!
                      https://github.com/yuzu-emu/yuzu/pull/8170
                      德国77为我们准备了几个补丁。
                      先说一个有趣的。yuzu的截图捕捉功能允许以缩放器当前设置的分辨率轻松保存瞬间。截图的热键可能会被发送,如果发送了几个截图请求,会导致yuzu崩溃。如果渲染分辨率设置为较高的值,情况可能会更糟。为了解决这个问题,yuzu现在处理捕获时忽略新请求,并在日志中打印一条警告。
                      https://github.com/yuzu-emu/yuzu/pull/8192
                      仿真总是有改进的空间,因为没有什么是真正完整的。这一次,german77重点关注在我们的输入仿真中发现的不准确性。
                      IsSixAxisSensorFusionEnabled已实现通过对所有Sixaxis功能进行逆向工程,并通过与在交换机上完成的单元测试自制结果进行比较来验证。这可能会提高运动精度。
                      https://github.com/yuzu-emu/yuzu/pull/8222
                      这(hide的过去式)隐藏ˌ遮蔽负责处理输入命令的服务,用于通过复制分配给它的共享内存并报告更改来进行操作。这导致输入过程中的不匹配或延迟,并可能使游戏读取完全不正确的数据。
                      显然这并不理想,所以德国77消除内存复制并使用最神奇的*指针而是直接访问共享内存。这可以修复影响无数游戏的错误,最大的例子就是Pokémon: Let’s Go检测控制器有困难的游戏。
                      https://github.com/yuzu-emu/yuzu/pull/8229
                      热键按下现在将是通过使用队列触发。这样做的好处是不必等待UI响应,减少了延迟。
                      https://github.com/yuzu-emu/yuzu/pull/8249
                      模拟棒得到了一些爱,在它们的映射中有几个重要的变化:
                      https://github.com/yuzu-emu/yuzu/pull/8272
                      默认的最大范围现在设置为95%,以确保游戏可以使用整个范围。例如,这一改变避免了游戏中操纵杆处于特定角度时角色的行走Pokémon Legends: Arceus。最小范围从50%降低到25%,提供了更高的精确度,特别是对于试图用匹配的轮子玩赛车游戏的人来说。自动中心校正现在更强,避免漂移,而不必依赖更强的死区值。如果按钮是手动映射的,现在可以手动删除单个轴值。
                      以前,只有玩家1可以通过按下按钮来自动重新连接控制器。其他玩家只有在使用键盘时才能这样做。德国77的拉动式请求旨在解决这一问题,允许剩余的7个玩家中的任何一个重新连接他们的控制器。等级制度中的高层不再享有特权。
                      https://github.com/yuzu-emu/yuzu/pull/8277
                      在撰写本文时,这一变化正在测试中,因为它可能会导致倒退。请务必使用状态悬浮卡,过几天再来查看!
                      未来项目
                      Project Y.F.C.离发行两部计划中的第一部不远了。
                      Project Gaia继续缓慢但稳定地发展,现在导致一些以前坏掉的游戏终于第一次启动。


                      《我的世界》和真人快打11号正在启动!
                      那都是乡亲们!我们仍然在追赶一些内核和CPU优化的变化,所以期待下一次更广泛的部分。谢谢你的陪伴,下个月见!


                      IP属地:韩国11楼2022-05-26 11:46
                      收起回复
                        补楼2






                        IP属地:韩国12楼2022-05-26 12:19
                        回复
                          天天群里看到你


                          IP属地:广东来自Android客户端13楼2022-05-26 15:59
                          收起回复
                            问问有没有群


                            IP属地:广东14楼2022-06-23 18:50
                            回复
                              楼主.玩剑盾会玩着玩着卡死,怎么解决啊


                              IP属地:内蒙古来自Android客户端15楼2022-06-28 19:42
                              回复