我想了解为什么我们需要VkAttachmentReference::layout
?文档说:
layout
是VkImageLayout
值,用于指定附件的布局 在子通道中使用。
换句话说,它告诉附件在子通道开始之前将转换到哪个布局。
但是这些信息已经通过VkAttachmentDescription::initialLayout
提供了。这是文档中的引用:
initialLayout
是附件图片子资源的布局 在渲染过程实例开始时。
VkAttachmentReference::layout
是不是因为它完全重复了VkAttachmentDescription::initialLayout
?
答案 0 :(得分:3)
不,通过initialLayout
您指定布局图像只是之前渲染过程。它可以是任何东西,例如来自先前渲染过程的finalLayout
。或者是新创建的图像的undefined
布局。或者从交换链获取的图像的present_src
布局。
然后,图像自动从initialLayout
转换为为给定子通道指定的布局。如果你有更多的子通道,那么在每个子通道中你可以以不同的方式使用图像而你不必担心手动转换。
这两个布局参数是驱动程序知道它应该执行什么转换所必需的。 Vulkan是一个明确的API,驱动程序不会跟踪任何信息(或跟踪不如可读)。如果没有initialLayout
布局,则无法实现自动转换。