有没有办法解决Vulkan中的subpassInput?

时间:2017-07-17 21:50:21

标签: vulkan glsles

片段着色器隐式地处理SubpassInput。 我想用我自己的纹理Coords来解决输入问题。 与texture(sampler,texCoord)类似

1 个答案:

答案 0 :(得分:4)

这是不可能的。如果要在着色器中对图像进行采样,则(通常)有两种可能性:

  1. 您可以使用带有采样图像组合图像采样器类型描述符的描述符集。这样你可以随意解决它。但是,在渲染过程中充当附件的图像不能用于将它们用作附件的同一渲染过程中的此类描述符。为此,您需要结束渲染过程并启动另一个。在第二个渲染过程中,您可以使用此类图像并在着色器中对其进行采样。

  2. 如果要将图像用作渲染过程中的附件,并且如果要在同一渲染过程中(但在稍后的子通道中)对此类图像进行采样,则只能使用输入进行附件描述符(着色器内的subpassInput)。这样您就不需要结束渲染过程并启动另一个过程,但是您只能对与片段着色器坐标关联的位置进行采样。

    这种限制来自渲染高度并行的事实。在完成前一个子通道的所有操作之前,下一个子通道的某些部分可能已经开始处理(想想平铺的渲染器)。如果您开始从先前子通道中渲染的图像中读取数据,并且对于图像的某些部分尚未完成此渲染,则可能会得到不正确的值。这就是为什么你只能从渲染过程中的单个位置读取(使用输入附件时)。

  3. 也许有一个扩展可以解除这些限制,但我没有读到任何此类扩展。核心规范仅允许以上两个选项。