flutter [叶轮]在ShaderStageIOSlot中为静态接口匹配转储精度信息,

iecba09b  于 6个月前  发布在  Flutter
关注(0)|答案(3)|浏览(53)

在PowerVR GE 8320(以及可能所有PowerVR设备上),我们发现,着色器阶段IO插槽中的不匹配的RelaxedPrecision限定符会导致渲染问题。@jonahwilliams在flutter/engine#51974中解决了这个问题,但这个问题很难测试,也没有验证,因为PowerVR的行为违反了规范中关于接口匹配的行为(参见https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html#interfaces-iointerfaces-matching 关于RelaxedPrecision的注解)。

然而,自从这个补丁发布以来,@gaaclarke已经在flutter/engine#52174中实现了对着色器接口的静态检查。现在,不匹配的阶段应该会导致编译错误,而不是运行时链接错误(或者像PowerVR那样,导致图形损坏)。

关于松散精度的信息是一个装饰,编译器可以在ShaderStageIOSlot结构中输出。然后,可以修补静态Assert以检查这个额外的字段。这样,我们应该能找到任何剩余的此类问题示例(如果有的话),并且将来会有一个硬性检查来防止引入这种bug(这只是PowerVR上才会被捕捉到)。当我们试图压缩着色器数量并共享更多阶段时,这可能会派上用场。

对于这个功能的测试方法是,撤销@jonahwilliams早先的补丁是否会破坏现在的构建。

h43kikqp

h43kikqp1#

这也将有助于iOS,我们在那里遇到了实数浮点16位和32位不匹配的错误,以及Vulkan,如果我们将来实现真正的半精度支持。

n1bvdmb6

n1bvdmb62#

这些现在不会被现有的静态检查捕捉到,因为bit_width字段不同。无论如何,是的,我们可以使这些检查尽可能严格。

nkoocmlb

nkoocmlb3#

哦,可能值得检查一下!

相关问题