yuzu模拟器吧 关注:183,573贴子:768,399

7月10日重大更新-着色器反编译器重写

只看楼主收藏回复

New Feature Release - Shader DecompilerRewrite
7月10日新功能发布-着色器反编译器重写


IP属地:北京1楼2021-07-10 14:50回复
    我在上次翻译帖中提到的Project Hades今天终于发布了,给yuzu带来了非常大的提升,这里把今天的发布内容翻译一下,供大家参考
    【7.10重大更新-着色器反编译器重写】
    作者:CaptV0rt3x发布日期:2021年6月8日
    柚子粉们好!期待已久的一天终于到来,我们在这里非常高兴地向您介绍——Project Hades,我们的着色器反编译器重写!此次的重大更新包括了巨大的性能提升,巨量的bug修复,以及更多内容。让我们来看看吧!
    Project Hades已加入最新的yuzuEA版本中。按照惯例,希望你能使用这些版本来对各个游戏进行测试,如果遇到了如何问题、BUG、崩溃,请通过官方Discord频道联系我们。
    【译者注:下载地址我会附在帖子最后】
    【【【请注意!
    整个着色器生成的过程已经被完全重写,因此现有的着色器缓存已经失效。更新至ProjectHades之后,用户需要从头开始,重新积累缓存。】】】


    IP属地:北京2楼2021-07-10 14:52
    回复
      Hades计划是什么?
      Project Hades(哈迪斯计划、黑帝斯计划)最开始是我们着色器反编译器代码重写的项目代号,不过到了现如今,它已经远不止此了。
      对于那些不知道着色器反编译器是什么的人,你可能需要先了解游戏是如何将所有的东西渲染(或者说显示)出来的。着色器(Shaders)是一类特殊的程序,用于在GPU(显卡)上执行各类任务,特别是关于将图像内容渲染并显示的任务。着色器一般使用高级着色器语言编写(high-level shader language,HLSL),并与现有的各类图形API兼容——例如OpenGL Shading Language (GLSL),Standard Portable Intermediate Representation - V (SPIR-V),还有 OpenGL ARB Assembly language (GLASM)。游戏通常会通过成百上千个着色器,来告诉GPU要渲染什么东西,以及如何渲染。

      (yuzu的着色器生成过程)
      对于Switch游戏而言,在Switch上渲染游戏画面也同样是用的着色器。但是,这些着色器是为Switch的GPU预编译的,yuzu没法直接把这些着色器用在你电脑的GPU上。因此,yuzu先要把这些着色器反编译出来,转换成中间表示(Intermediate Representation,IR),才能接着用中间表示生成高级的GLSL/SPIR-V/GLASM着色器,这些着色器才是你的GPU能识别的。
      着色器反编译,是将Switch的GPU的机器码,翻译成你的电脑的GPU可以编译的形式的过程,而着色器编译,则是将翻译出来的中间表示,发送到你电脑的GPU驱动,使其成功进行编译和执行的过程。


      IP属地:北京4楼2021-07-10 14:54
      回复
        【目标】
        Project Hades 主要目标是重新设计反编译器和着色器生成代码,将它们变得更为简单和精确。它旨在使反编译和编译过程在总体上变得更快,从而提升性能。重写反编译器让我们可以通过单元测试的形式来对其进行核查,使其拥有和dynarmic【译者注:上篇文章提到过的】相近的设计思路,允许对快速发射的中间表示进行适当的程序分析和优化。

        (黑魂)

        (勇者斗恶龙11)
        借鉴dynarmic的经验,开发者们选择使用SSA表示,因为它可以很好地和着色器所使用的SPIR-V IR进行配合,这要归功于它对SSA的原生支持。至于单元测试,Rodrigo为硬件编写了自制的测试,帮助开发人员准确模拟硬件行为。
        但这只是一个开始。在接下来的几个月时间里,开发人员将继续面对并克服代码重写的许多障碍,Project Hades的目标也进一步扩大,容纳进更多的内容。


        IP属地:北京5楼2021-07-10 14:55
        回复
          【变化概览】
          Project Hades 是开发人员Rodrigo、Blinkhawk和epicboy的合作成果。 他们在各自之间分配需要进行的工作,并在编码、单元测试、游戏测试和性能验证上花费了无数个小时。
          Blinkhawk主要致力于实现杂项指令,包括反编译所需的纹理采样指令。他添加了对Nvidia的 VertexA 着色阶段的支持,这是一种在Nvidia硬件上可用的非标准着色阶段,在常规 VertexB 着色阶段之前执行。
          这使得《凯瑟琳:Full Body》、《勇气默示录2》,以及《时光之帽》终于能渲染出画面了。Blinkhawk还修复了一个yuzu的纹理缓存的问题,这个问题与UE4(虚幻4)引擎使用的纹理流送有关,因此解决了许多使用UE4的游戏的画面渲染问题。


          (凯瑟琳:Full Body)

          (时光之帽)


          (勇气默示录2)


          IP属地:北京6楼2021-07-10 14:57
          回复
            epicboy实现了几乎所有的运算、逻辑和浮点指令,并开发了整个GLSL后端。如果在yuzu的设置中选择OpenGL,GLSL会是默认后端。
            GLSL 后端重写不是Project Hades最初计划里的一部分,开发者们原本只计划完成GLASM和SPIR-V的工作。但后来由于某些OpenGL SPIR-V编译器充满BUG,而且效率低下,因此不得不将这部分工作加入进来。因此,由于SPIR-V着色器的应用,部分OpenGL驱动将获得很大的收益,因此在设置中的实验性选项里,提供了在OpenGL上使用SPIR-V的选择。

            (马里奥+疯兔)

            (单色世界)
            Rodrigo设计了整体结构以支持这些变化,并开发了多个优化通道以尽可能提高性能。除此之外,他重写了整个 GLASM(GL Assembly)后端,并将现有的前端光栅化器与新的后端集成。
            GLASM后端是一条特殊的路径,反编译的着色器(汇编语言)在这里跳过主机GPU上的着色器编译步骤,从而提高性能。不幸的是,GLASM 【仅有Nvidia的GPU支持】,因而限制了这一性能提升所涉及的范围。

            (古惑狼4)

            (最终幻想:世界)
            虽然这些是主要的变化,但还有许多其他方面的小改进。改变着色器的生成方式,也意味着改变着色器信息呈现给渲染器的方式。为简单起见,对其进行了彻底改写,从而带来了一些新功能和更轻松的缓存过程。


            IP属地:北京7楼2021-07-10 14:59
            回复
              【Vulkan管线缓存】
              生成管线所需的所有信息现在都缓存到了硬盘上,因此现在在【Vulkan模式】下,几乎完全消除了着色器缓存过程所造成的卡顿。相比之下,由于无法预测或未记录的状态变化的存在,【OpenGL模式】下仍然会有由于着色器缓存而造成的卡顿。当检测到新的着色器时,Vulkan仍然会出现轻微的卡顿,但在我们的测试中并不明显。
              【异步管线创建】
              yuzu已经支持异步着色器,即在着色器还没编译好时,关于它的绘制调用会被跳过(暂停相关的渲染),直到着色器——在Vulkan下则是管线——被编译好。在一些情况下, 这是个很好的功能,因为它使得渲染的过程中更为稳定和一致,降低了着色器编译过程造成的卡顿。但它也有一个很大的缺点:它会带来图像BUG,有时甚至会在整个游戏过程中持续存在。虽然通过重启游戏、把着色器缓存好这些方式可以解决这个问题,但这带来了不好的体验。
              为 Vulkan 实现这一功能的更好方法是在不跳过绘制调用的情况下,并行地构建管线。换句话说,在构建管线的同时继续处理 GPU 命令。这使得在游戏过程中可以每条CPU线程构建一条管线(降低了一条线程的需求)。这样做的最终结果与跳过绘制调用类似,都能减少卡顿。


              IP属地:北京8楼2021-07-10 15:00
              回复
                【图像修复】
                由于我们对整个着色器生成的代码进行了重新的设计和实现,开发者们终于可以对许多图像BUG的原因进行调查和定位了。实际上,一些游戏,例如《耀西的手工世界》、《圣剑传说》、《我的世界:地下城》,等等,都几乎可以完美显示了。《塞尔达传说:旷野之息》现在在Vulkan模式下完全可玩了。

                旷野之息(Vukan模式下修复的符文效果)


                塞尔达传说:旷野之息(上一版本vs. Hades版本)

                (耀西的手工世界)

                (勇气默示录2)


                (我的世界:地下城)


                IP属地:北京9楼2021-07-10 15:02
                回复
                  在《超级马里奥:奥德赛》中造成沙漠与雾不能正确渲染的失效的bloom,现在已经完全修复!




                  超级马里奥:奥德赛(上一版本vs. Hades版本)
                  多亏了曲面细分着色器的应用,《路易吉鬼屋3》里的沙漠终于修复了!


                  IP属地:北京10楼2021-07-10 15:03
                  回复
                    许多《火焰纹章:风花雪月》、《塞尔达无双:灾厄启示录》、《漫威终极联盟3》、 《女神异闻录5》、《异度之刃》里的图像BUG、崩溃、稳定性问题,也已被修复。
                    【译者注:这里原帖插了非常多的截图,我就不一一搬运了,大家自己去体验吧;点击可查看大图】


                    《异度之刃》(上一版本 vs. Hades版本)

                    《空洞骑士》纹理透明的纹理也已经修复。


                    IP属地:北京11楼2021-07-10 15:05
                    回复
                      《星之卡比:新星同盟》、《马里奥赛车:豪华版》、《托尼霍克职业滑板》、《牧场物语》、《Clubhouse》,以及其他的许多游戏,都有许多画面BUG的修复。《符文工坊4》现已能完美渲染,《符文工坊5》的画面也有很大提升
                      【译者注:这里原帖插了非常多的截图,我就不一一搬运了,大家自己去体验吧;点击可查看大图】




                      IP属地:北京12楼2021-07-10 15:05
                      回复
                        【还有更多更多!!】
                        【译者注:这里原帖插了非常多的截图,我就不一一搬运了,大家自己去体验吧;点击可查看大图】



                        IP属地:北京13楼2021-07-10 15:06
                        回复
                          【好了,现在让我们看看具体数字!】
                          Project Hades 重写了绝大多数 GPU 代码,并进行了大量改进和优化以提高性能。 由于这些变化涉及 GPU 模拟的许多领域,我们观察到许多游戏的性能提升。
                          下面的对比图是基于我们的推荐配置,运行在Vulkan模式下,yuzu EA 1860版和Project Hades版之间的比较。注意,EA 1860版与目前的主线版并无显著差异。
                          【下图标*的是在OpenGL模式下测试】

                          不止如此,Project Hades 中对Vulkan后端的改进极大地提高了Linux上AMD显卡用户的性能(RADV版本)。
                          这些只是Hades带来的性能提升的一个小证明。我们将在下一篇进度报告中分享更多性能图表。


                          IP属地:北京14楼2021-07-10 15:07
                          收起回复
                            【结语】
                            我们的测试人员大大加快了我们的开发工作,他们测试了数十个游戏的BUG、修复和性能水平。由于我们的测试无法真正涵盖所有游戏,因此我们要求您在yuzu中测试和游玩自己喜欢的游戏,并亲自体验提升。在测试过程中,如果您遇到任何退步、BUG或崩溃,请通过我们的Discord Patreon频道与我们联系。这将帮助我们识别和修复Project Hades可能出现的任何潜在问题。
                            这就是本次的全部内容了,下次再见!祝你模拟愉快!


                            IP属地:北京15楼2021-07-10 15:07
                            收起回复
                              所以Project Hades版和ea分开了?


                              IP属地:山东16楼2021-07-10 15:14
                              收起回复