你好余星人。真是一年啊!我们在 2022 年结束时推出了更多的柚子炸鸡、Vulkan 更改、新的输入驱动程序、大量的内核工作、更高的性能、更好的视觉效果等等!
Y.F.C项目.part...1.5 和缓存失效
Blinkhawk也一直在努力完成他心爱的项目,发布了Y.F.C. PART 1.5。基本上是完整“第 2 部分”版本预期的删节版本。 此拉取请求中的更改包括对实现的返工,以包含用于间接绘制和配置的各种新宏。MacroHLE
如前几篇文章所述,宏是实现间接绘制和实例化绘制等功能的小型 GPU 程序。它们必须被效仿。 MacroHLE(高级仿真)是避免执行请求的宏,而是将其直接转换为它将生成的代码(如实例化或间接绘制)的过程。 这与 MacroJIT 形成对比并并行,MacroJIT 的工作原理是实时模拟宏程序中包含的循环和控制流。
现在,为什么要同时保留两者?好吧,每个人都执行自己的专业任务。 与MacroJIT相比,MacroHLE的优势与间接调用的模拟有关。 间接调用(例如绘制)使用通过某些着色器在 GPU 中的某处生成的数据,以建立绘制参数及其绘制计数。 传统上使用 MacroJIT,我们必须同步主机 GPU 和来宾 GPU 以获取间接数据,以便正确执行宏。 使用 MacroHLE,我们在主机 GPU 中创建一个间接绘制命令,该命令指向 GPU 生成数据应位于的转换地址。 从而跳过同步。
由于这些改进,yuzu 现在能够更有效地执行宏,大大减少了 CPU 开销,并且无需更改任何设置。 我们内部喜欢称之为“被动技能”。
由于这些更改,多个游戏的性能得到了改进,包括由 Koei Tecmo 开发的游戏、、、 和(版本 12.0.0 除外,它仍然需要进一步修复)仅举几例。 崩溃也已修复。 我们测得部分游戏的性能提升了 5-20%,但在具有大量缓存的 CPU 上,性能提升可能更高。根据我们的测试,5800X3D在某些游戏中可以达到30%以上。 以更高分辨率渲染的性能成本也大大降低。Pokémon Scarlet and VioletBayonetta 3Monster Hunter RiseFire Emblem: Warriors
R5 5600X - 2x16GB 3933MHz CL18 - RX 6600
但好东西还不止于此!Blinkhawk 还增加了对 和 Vulkan 扩展的支持,减少了游戏过程中需要构建的着色器的数量和大小。VK_EXT_extended_dynamic_state2VK_EXT_extended_dynamic_state3
这个相对“新”的对,以及已经实现的和,是负责大大减少着色器构建卡顿的四个扩展。 但正如往常一样,消费者GPU中对这些扩展的支持充其量是参差不齐的,最坏的情况是支持混乱。 特别是仅受 NVIDIA Vulkan Beta 驱动程序(撰写本文时的版本 527.86)和最近的(2021 年末及更新)RADV Mesa 驱动程序支持。 我们建议任何有兴趣测试新着色器缓存性能的人都可以尝试这些驱动程序。VK_EXT_extended_dynamic_stateVK_EXT_vertex_input_dynamic_stateState3
别无选择,实现这些扩展迫使我们执行另一个可怕的缓存失效。
证明柚子最好的GPU仍然是适用于操作系统的NVIDIA或Linux上的AMD的
大多数驱动程序至少涵盖了 4 个扩展中的 3 个,没有任何问题,只有一个明显的例外,AMD Windows 驱动程序。 与使用 RADV 的 Linux 上运行同一张卡或使用任何其他品牌相比,在处理新着色器时,这样做的代价是更高的卡顿。
一个小的旁注,Linux RADV用户应该将他们的Mesa版本更新到最新版本(或者如果需要,使用更新的发行版版本),因为在21.2之前的版本中,对的支持被破坏了。state2
作为最后一秒的更改,Blinkhawk测试删除了在NVIDIA Ampere和更新的GPU(RTX 3000系列及更高版本)上强制执行的16位浮点(FP16)黑名单。如果它有效,它将允许他们在这方面类似于图灵和AMD Radeon产品。然而,NVIDIA重新设计了他们的FP32和FP16装置在安培和更新设备上的操作方式,两者都提供相同的性能。不幸的是,即使它更快,最终也无关紧要,因为安培和艾达上的 FP16 仍然在驱动程序中被窃听,在许多游戏中产生图形问题。
唯一可以从启用列入黑名单的 FP16 支持中受益的架构是 Windows 上的英特尔,但它们的驱动程序是关于 FP16 的垃圾箱火灾。因此,他们继续以与Ampere和Ada相同的方式以32位模拟16位精度,在这种情况下,它始终存在性能损失。当然,可以从此更改中受益最大的最弱架构是唯一仍然损坏的架构......
此迭代的另一个额外好处是 GPU 精度使用起来更安全。 粒子将继续变得更好,但像 、 和许多其他游戏可以更频繁地准确地玩,而不会出现故障,这提供了巨大的性能优势(特别是仍然需要它的标题屏幕,但游戏玩法是安全的)。Y.F.C.NormalHighPokémon Scarlet/VioletBayonetta 3NormalBayonetta 3HighNormal
其他令人敬畏的 GPU 更改,以及更多的缓存失效
这个月并不止于此,在我们的GPU代码库中也有很多值得一提的变化。
哦,天哪,这个月肯定很忙。
首先,他负责为我们的 Vulkan 和 OpenGL 后端实现 SMAA 抗锯齿滤波器。 但这还不是故事的全部,所以让我们进一步阐述。
SMAA,或增强的亚像素形态抗锯齿,是由西班牙萨拉戈萨大学和以孤岛危机闻名的视频游戏工作室 Crytek 开发的 MLAA 的改进。
BreadFish实现了最初的OpenGL版本,打算将其作为分辨率缩放器的一部分发布。事实证明,为 Vulkan 实现可不是开玩笑的,在被你的作家唠叨之后,byte[] 不得不工作 2 周才能让它成形。SMAA
SMAA,基于 ,旨在成为一种后处理(又名基于着色器)的选项,通过分析相邻像素来专注于质量而不是性能,这与它只是模糊整个屏幕不同。 筛选器是使用渲染通道实现的,当与 FSR 筛选结合使用时,它会产生最佳结果。 AMD 建议在其官方概述集成指南中正确消除映像锯齿。 结果不言自明:MLAAFXAASMAA
并列JS
在这里,您可以看到SMAA的理想测试用例,即简单的死亡三角形
绳索和电源线,抗锯齿测试的经典示例(神奇宝贝猩红)
3D游戏中的精灵元素受益于它(异度之刃编年史3)
对于那些感兴趣的人,我们使用了预设,测试显示即使使用 GT 1030 的性能损失也很低,因此我们更愿意关注质量。 只有使用旧集成 GPU 的用户才应避免 。对于其余部分,打开并忘记这是一个安全的选择。 您可以在 中找到该功能。ULTRASMAAEmulation > Configure > Graphics > Anti-Aliasing Method
并列JS
SMAA没有FXAA(塞尔达传说:旷野之息)的可怕色带
并列JS
对于运行低分辨率乘数的用户来说,这是一个很大的帮助。这个例子是 0.5x 单独双线性与 0.5x FSR + SMAA(神奇宝贝猩红)
完成的特写镜头(异度之刃编年史3)
作为旁注,NVIDIA 的 FSR 版本 NIS 也经过了测试,但结果是如此丑陋和过度锐化,以至于我们决定保留两者中的最佳选择 FSR。
byte[] 还修复了各向异性过滤的问题。如果用户在 Linux 上运行 RADV 驱动程序,则 以外的各向异性过滤值会导致 中出现明显的“类似痤疮”的呈现问题。在其他各向异性过滤和分辨率乘数值上,该问题仍然存在,但 byte[] 继续解决此问题。DefaultSuper Mario Odyssey
并列JS
所谓的RADV痤疮(超级马里奥奥德赛)
此更改还解决了在 Lavapipe(Mesa、Linux)上使用自动各向异性过滤时的错误水渲染问题,尽管错误仍然发生在其他各向异性过滤值处。Super Mario Sunshine
并列JS
有点让它看起来更老(超级马里奥阳光)
byte[] 还更正了内存中数据缓存管理操作的语义。
以前,当来宾请求缓存失效时,实现只会使硬件上的缓存失效,而不是按预期使内存对 GPU 可见。
另一方面,他还推广了各种 Vulkan 扩展使用核心方法。在 Vulkan API 中,供应商扩展是由特定硬件供应商或驱动程序提供的可选功能,可能并非在所有系统上都可用。相比之下,核心方法是 Vulkan 规范的基本组成部分,并保证在所有支持 API 的系统上可用。因此,提升扩展以使用核心方法可以提高其可靠性和可移植性。
byte[] 对 Vulkan API 进行了进一步的初始化调整。这些更改包括 和 的恢复,这些内容在之前的 PR 中被错误地删除了。他还在结构中添加了标志,以便被检测为可用的Vulkan设备。VK_KHR_timeline_semaphoreVK_EXT_host_query_resetVK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHRVkInstanceCreateInfoMoltenVKMoltenVK
请记住,要在macOS设备上获得柚子渲染还需要做更多的工作。这只是早期的初步工作。
vonchenplus已经为Maxwell3D实施了绘图管理器,旨在消除解决方法并重新组织绘图过程以更准确地枚举绘图行为。 由于这些更改,某些 3D 模型无法正确渲染的问题已得到修复。Dragon Quest Builders
并列JS
不再缺少东西!(勇者斗恶龙建造者)
没有盔甲是最好的盔甲(黑暗之魂)
在这些更改之后,vonchenplus 还改进了拓扑更新逻辑的代码,以便实现更加准确。为了使用 Vulkan 实现特殊拓扑,此更改是必要的。
这包括对 的支持,这需要使用三角形来模拟它们,以及模拟索引和非索引模式的功能。 在非索引模式下,固定映射表用于连接顶点,而在索引模式下,计算着色器用于动态映射原始图形索引。 Vonchenplus还实现了对线环的支持,前者需要使用三角形列表来模拟它们,后者需要使用三角形扇形。quad strips
这些更改修复了 中英雄的路径以及 中的状态摘要图形,它们还给了我们另一个着色器缓存失效,耶!Legend of Zelda: Breath of the WildPokémon Scarlet and Violet
并列JS
不要弄乱统计数据!没有统计数据就无法繁殖!(宝可梦猩红)
并列JS
当Sheika GPS信号返回时(塞尔达传说:旷野之息)
Y.F.C项目.part...1.5 和缓存失效
Blinkhawk也一直在努力完成他心爱的项目,发布了Y.F.C. PART 1.5。基本上是完整“第 2 部分”版本预期的删节版本。 此拉取请求中的更改包括对实现的返工,以包含用于间接绘制和配置的各种新宏。MacroHLE
如前几篇文章所述,宏是实现间接绘制和实例化绘制等功能的小型 GPU 程序。它们必须被效仿。 MacroHLE(高级仿真)是避免执行请求的宏,而是将其直接转换为它将生成的代码(如实例化或间接绘制)的过程。 这与 MacroJIT 形成对比并并行,MacroJIT 的工作原理是实时模拟宏程序中包含的循环和控制流。
现在,为什么要同时保留两者?好吧,每个人都执行自己的专业任务。 与MacroJIT相比,MacroHLE的优势与间接调用的模拟有关。 间接调用(例如绘制)使用通过某些着色器在 GPU 中的某处生成的数据,以建立绘制参数及其绘制计数。 传统上使用 MacroJIT,我们必须同步主机 GPU 和来宾 GPU 以获取间接数据,以便正确执行宏。 使用 MacroHLE,我们在主机 GPU 中创建一个间接绘制命令,该命令指向 GPU 生成数据应位于的转换地址。 从而跳过同步。
由于这些改进,yuzu 现在能够更有效地执行宏,大大减少了 CPU 开销,并且无需更改任何设置。 我们内部喜欢称之为“被动技能”。
由于这些更改,多个游戏的性能得到了改进,包括由 Koei Tecmo 开发的游戏、、、 和(版本 12.0.0 除外,它仍然需要进一步修复)仅举几例。 崩溃也已修复。 我们测得部分游戏的性能提升了 5-20%,但在具有大量缓存的 CPU 上,性能提升可能更高。根据我们的测试,5800X3D在某些游戏中可以达到30%以上。 以更高分辨率渲染的性能成本也大大降低。Pokémon Scarlet and VioletBayonetta 3Monster Hunter RiseFire Emblem: Warriors
R5 5600X - 2x16GB 3933MHz CL18 - RX 6600
但好东西还不止于此!Blinkhawk 还增加了对 和 Vulkan 扩展的支持,减少了游戏过程中需要构建的着色器的数量和大小。VK_EXT_extended_dynamic_state2VK_EXT_extended_dynamic_state3
这个相对“新”的对,以及已经实现的和,是负责大大减少着色器构建卡顿的四个扩展。 但正如往常一样,消费者GPU中对这些扩展的支持充其量是参差不齐的,最坏的情况是支持混乱。 特别是仅受 NVIDIA Vulkan Beta 驱动程序(撰写本文时的版本 527.86)和最近的(2021 年末及更新)RADV Mesa 驱动程序支持。 我们建议任何有兴趣测试新着色器缓存性能的人都可以尝试这些驱动程序。VK_EXT_extended_dynamic_stateVK_EXT_vertex_input_dynamic_stateState3
别无选择,实现这些扩展迫使我们执行另一个可怕的缓存失效。
证明柚子最好的GPU仍然是适用于操作系统的NVIDIA或Linux上的AMD的
大多数驱动程序至少涵盖了 4 个扩展中的 3 个,没有任何问题,只有一个明显的例外,AMD Windows 驱动程序。 与使用 RADV 的 Linux 上运行同一张卡或使用任何其他品牌相比,在处理新着色器时,这样做的代价是更高的卡顿。
一个小的旁注,Linux RADV用户应该将他们的Mesa版本更新到最新版本(或者如果需要,使用更新的发行版版本),因为在21.2之前的版本中,对的支持被破坏了。state2
作为最后一秒的更改,Blinkhawk测试删除了在NVIDIA Ampere和更新的GPU(RTX 3000系列及更高版本)上强制执行的16位浮点(FP16)黑名单。如果它有效,它将允许他们在这方面类似于图灵和AMD Radeon产品。然而,NVIDIA重新设计了他们的FP32和FP16装置在安培和更新设备上的操作方式,两者都提供相同的性能。不幸的是,即使它更快,最终也无关紧要,因为安培和艾达上的 FP16 仍然在驱动程序中被窃听,在许多游戏中产生图形问题。
唯一可以从启用列入黑名单的 FP16 支持中受益的架构是 Windows 上的英特尔,但它们的驱动程序是关于 FP16 的垃圾箱火灾。因此,他们继续以与Ampere和Ada相同的方式以32位模拟16位精度,在这种情况下,它始终存在性能损失。当然,可以从此更改中受益最大的最弱架构是唯一仍然损坏的架构......
此迭代的另一个额外好处是 GPU 精度使用起来更安全。 粒子将继续变得更好,但像 、 和许多其他游戏可以更频繁地准确地玩,而不会出现故障,这提供了巨大的性能优势(特别是仍然需要它的标题屏幕,但游戏玩法是安全的)。Y.F.C.NormalHighPokémon Scarlet/VioletBayonetta 3NormalBayonetta 3HighNormal
其他令人敬畏的 GPU 更改,以及更多的缓存失效
这个月并不止于此,在我们的GPU代码库中也有很多值得一提的变化。
哦,天哪,这个月肯定很忙。
首先,他负责为我们的 Vulkan 和 OpenGL 后端实现 SMAA 抗锯齿滤波器。 但这还不是故事的全部,所以让我们进一步阐述。
SMAA,或增强的亚像素形态抗锯齿,是由西班牙萨拉戈萨大学和以孤岛危机闻名的视频游戏工作室 Crytek 开发的 MLAA 的改进。
BreadFish实现了最初的OpenGL版本,打算将其作为分辨率缩放器的一部分发布。事实证明,为 Vulkan 实现可不是开玩笑的,在被你的作家唠叨之后,byte[] 不得不工作 2 周才能让它成形。SMAA
SMAA,基于 ,旨在成为一种后处理(又名基于着色器)的选项,通过分析相邻像素来专注于质量而不是性能,这与它只是模糊整个屏幕不同。 筛选器是使用渲染通道实现的,当与 FSR 筛选结合使用时,它会产生最佳结果。 AMD 建议在其官方概述集成指南中正确消除映像锯齿。 结果不言自明:MLAAFXAASMAA
并列JS
在这里,您可以看到SMAA的理想测试用例,即简单的死亡三角形
绳索和电源线,抗锯齿测试的经典示例(神奇宝贝猩红)
3D游戏中的精灵元素受益于它(异度之刃编年史3)
对于那些感兴趣的人,我们使用了预设,测试显示即使使用 GT 1030 的性能损失也很低,因此我们更愿意关注质量。 只有使用旧集成 GPU 的用户才应避免 。对于其余部分,打开并忘记这是一个安全的选择。 您可以在 中找到该功能。ULTRASMAAEmulation > Configure > Graphics > Anti-Aliasing Method
并列JS
SMAA没有FXAA(塞尔达传说:旷野之息)的可怕色带
并列JS
对于运行低分辨率乘数的用户来说,这是一个很大的帮助。这个例子是 0.5x 单独双线性与 0.5x FSR + SMAA(神奇宝贝猩红)
完成的特写镜头(异度之刃编年史3)
作为旁注,NVIDIA 的 FSR 版本 NIS 也经过了测试,但结果是如此丑陋和过度锐化,以至于我们决定保留两者中的最佳选择 FSR。
byte[] 还修复了各向异性过滤的问题。如果用户在 Linux 上运行 RADV 驱动程序,则 以外的各向异性过滤值会导致 中出现明显的“类似痤疮”的呈现问题。在其他各向异性过滤和分辨率乘数值上,该问题仍然存在,但 byte[] 继续解决此问题。DefaultSuper Mario Odyssey
并列JS
所谓的RADV痤疮(超级马里奥奥德赛)
此更改还解决了在 Lavapipe(Mesa、Linux)上使用自动各向异性过滤时的错误水渲染问题,尽管错误仍然发生在其他各向异性过滤值处。Super Mario Sunshine
并列JS
有点让它看起来更老(超级马里奥阳光)
byte[] 还更正了内存中数据缓存管理操作的语义。
以前,当来宾请求缓存失效时,实现只会使硬件上的缓存失效,而不是按预期使内存对 GPU 可见。
另一方面,他还推广了各种 Vulkan 扩展使用核心方法。在 Vulkan API 中,供应商扩展是由特定硬件供应商或驱动程序提供的可选功能,可能并非在所有系统上都可用。相比之下,核心方法是 Vulkan 规范的基本组成部分,并保证在所有支持 API 的系统上可用。因此,提升扩展以使用核心方法可以提高其可靠性和可移植性。
byte[] 对 Vulkan API 进行了进一步的初始化调整。这些更改包括 和 的恢复,这些内容在之前的 PR 中被错误地删除了。他还在结构中添加了标志,以便被检测为可用的Vulkan设备。VK_KHR_timeline_semaphoreVK_EXT_host_query_resetVK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHRVkInstanceCreateInfoMoltenVKMoltenVK
请记住,要在macOS设备上获得柚子渲染还需要做更多的工作。这只是早期的初步工作。
vonchenplus已经为Maxwell3D实施了绘图管理器,旨在消除解决方法并重新组织绘图过程以更准确地枚举绘图行为。 由于这些更改,某些 3D 模型无法正确渲染的问题已得到修复。Dragon Quest Builders
并列JS
不再缺少东西!(勇者斗恶龙建造者)
没有盔甲是最好的盔甲(黑暗之魂)
在这些更改之后,vonchenplus 还改进了拓扑更新逻辑的代码,以便实现更加准确。为了使用 Vulkan 实现特殊拓扑,此更改是必要的。
这包括对 的支持,这需要使用三角形来模拟它们,以及模拟索引和非索引模式的功能。 在非索引模式下,固定映射表用于连接顶点,而在索引模式下,计算着色器用于动态映射原始图形索引。 Vonchenplus还实现了对线环的支持,前者需要使用三角形列表来模拟它们,后者需要使用三角形扇形。quad strips
这些更改修复了 中英雄的路径以及 中的状态摘要图形,它们还给了我们另一个着色器缓存失效,耶!Legend of Zelda: Breath of the WildPokémon Scarlet and Violet
并列JS
不要弄乱统计数据!没有统计数据就无法繁殖!(宝可梦猩红)
并列JS
当Sheika GPS信号返回时(塞尔达传说:旷野之息)