【问题标题】:Vulkan pipeline + color attachmentsVulkan 管道 + 颜色附件
【发布时间】:2016-06-26 10:08:28
【问题描述】:

是否有可能有一个不写入通道的所有颜色附件的管道(带有适当的片段着色器)?例如Pass 有 2xColor + 1depth 附件。有的fragment程序可能同时写color01+depth,有的只写color0+depth。

仅将未使用附件的 colorWriteMask 设置为 none 是不成功的。我一直无法找到将通过验证层的管道配置。它总是抱怨额外的附件不是由片段着色器编写的。

【问题讨论】:

  • 正如 Nicol 所说,规范中没有明确允许这样做的内容,因此这可能是错误的验证。您使用的是最新的验证层还是 SDK 中的那些?我缺少两件事:您是否使用子通行证?您是否收到验证错误或警告?如果您确定这是一个错误的验证,最好在at the valdation layer repo 报告问题。
  • 如果我们不知道层报告的什么“未通过验证”也无济于事。此外,查看一些失败尝试的代码也会很有帮助。
  • 已阐明 Vulkan 规范;有关详细信息,请参阅我的答案。简短版:是的,这是一个验证层错误。

标签: gpu vulkan


【解决方案1】:

如果这是在单独的子通道中,那么您只需将颜色附件添加到pPreserveAttachments

另一个选项是use blending 欺骗片段着色器丢弃片段着色器输出并使用现有颜色。使用 ONE 表示 dst,使用 0 表示 src 并使用 OP_ADD 混合。

【讨论】:

    【解决方案2】:

    Vulkan 1.0.18 现在解决了这个问题。现在它使perfectly clear 成为:

    对于不对应于片段着色器输出的组件,混合或颜色附件写入的输入未定义。

    因此,将写入掩码设置为 none 应该没问题,因为值本身是未定义的,但它确实存在。而且由于不会写入任何内容,因此没有理由认为状态无效。

    因此,请务必将此作为错误提交给相关验证层的维护人员。


    好吧,这带来了一个问题。

    一方面,没有理由不这样做。无论价值是什么,您都将其掩盖了,因此无关紧要。

    另一方面... Vulkan 规范没有说明当您的 FS 不写入输出时会发生什么。它没有说它是合法的还是非法的。它没有说明该输出是否仅仅是未定义的,或者整个管道是否产生未定义的行为。

    因此,要么验证层错误,要么不允许您尝试执行的操作。但在 Vulkan 规范明确这一点之前,无法确定是哪一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多