代码之家  ›  专栏  ›  技术社区  ›  zzyzy

如何交错内核/顶点金属着色器

  •  0
  • zzyzy  · 技术社区  · 7 年前

    我遇到了将金属渲染循环部署为多个 KCS(内核/计算)着色器和VFS(顶点/片段)着色器:

    texture -> [KCS -> VFS -> KCS -> VFS] --\
                                             --->[KCS -> KCS] --> presentable
    texture -> [KCS -> VFS -> KCS -> VFS] --/
    

    一个着色器的输出是下一个着色器的输入。两组4个交替着色器在靠近末端处组合,如图所示。

    如果我正确地考虑了这一点,我将需要多达10个不同的管道描述符才能实现这一点,同时需要大量调用完成处理程序,在其中调度下一个着色器。

    我也没有指出,但对presentable的最后一个调用也会将其输出的子区域馈送到单独的MTKView(通过顶点/片段着色器)。

    如有任何提示,我们将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ken Thomases    7 年前

    只有当描述符具有不同的值时,才需要不同的描述符。也就是说,如果您显示的任何KCS步骤使用相同的计算着色器函数,则它们通常可以共享一个描述符。(还有其他属性 MTLComputePipelineDescriptor ,但它们不太常用。)

    对于VFS步骤,描述符更复杂,因此它们必须在所有要共享的属性中相等。

    你肯定 不要