3

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

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

4

2 回答 2

1

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

另一种选择是使用混合来欺骗片段着色器以丢弃片段着色器输出并使用现有颜色。将 ONE 用于 dst,将 ZERO 用于 src 与 OP_ADD 混合。

于 2016-06-09T21:08:11.147 回答
1

Vulkan 1.0.18 现在解决了这个问题。现在它非常清楚地表明:

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

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

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


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

一方面,没有理由不这样做。无论价值是什么,你都在掩盖它,所以它是无关紧要的。

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

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

于 2016-06-09T01:29:04.603 回答