Vulkan:在后续的RenderPasses中读取附件数据的方式
Vulkan: Ways of reading attachment data in subsequent RenderPasses
给定 2 个渲染通道 A 和 B,以及两者都访问的附件 X,如果 A 在其最后一个子通道上对 X 执行 .storeOp=store
,而 B 在其最后一个子通道上对 X 执行 .loadOp=load
第一个子通道,B 可以从 X 读取作为输入附件吗?
此外,我可以想到 3 种从以前的 RenderPass 读取附件数据的方法。
- 使用采样器。
- (可能)作为输入附件。
- 作为存储映像。
还有其他方法吗?
渲染通道实例结束后,所有附件都不再是附件。从那时起,它们只是常规图像。图像的内容由渲染通道的存储操作控制。但是一旦存储操作完成(取决于正确使用依赖项),图像具有存储操作产生的数据。
所以没有“来自以前的 RenderPass”的附件这样的东西。只有图像及其数据。该图像如何获取其数据(同样,取决于正确使用依赖项)与您现在将如何使用它无关。数据就在那里,可以通过访问任何图像的任何方式访问它,仅受您选择施加的限制。
因此,如果图像有一些数据,并且您将其用作附件,并且使用加载操作,则该附件中的数据将具有成为附件之前图像中的图像数据不管 数据是如何到达那里的。这就是加载操作的工作方式。
给定 2 个渲染通道 A 和 B,以及两者都访问的附件 X,如果 A 在其最后一个子通道上对 X 执行 .storeOp=store
,而 B 在其最后一个子通道上对 X 执行 .loadOp=load
第一个子通道,B 可以从 X 读取作为输入附件吗?
此外,我可以想到 3 种从以前的 RenderPass 读取附件数据的方法。
- 使用采样器。
- (可能)作为输入附件。
- 作为存储映像。
还有其他方法吗?
渲染通道实例结束后,所有附件都不再是附件。从那时起,它们只是常规图像。图像的内容由渲染通道的存储操作控制。但是一旦存储操作完成(取决于正确使用依赖项),图像具有存储操作产生的数据。
所以没有“来自以前的 RenderPass”的附件这样的东西。只有图像及其数据。该图像如何获取其数据(同样,取决于正确使用依赖项)与您现在将如何使用它无关。数据就在那里,可以通过访问任何图像的任何方式访问它,仅受您选择施加的限制。
因此,如果图像有一些数据,并且您将其用作附件,并且使用加载操作,则该附件中的数据将具有成为附件之前图像中的图像数据不管 数据是如何到达那里的。这就是加载操作的工作方式。