nik*_*ack 4 graphics rendering vulkan
我试图理解为什么我们需要VkAttachmentReference::layout?文档说:
layout是VkImageLayout指定附件在子通道期间使用的布局的值。
换句话说,它告诉在子通道开始之前附件将转换到哪个布局。
但是这些信息已经可以通过VkAttachmentDescription::initialLayout. 这是文档中的引用:
initialLayout是渲染过程实例开始时附件图像子资源将处于的布局。
是不是VkAttachmentReference::layout冗余,因为它完全重复VkAttachmentDescription::initialLayout?
不,通过initialLayout您指定图像在渲染过程之前的布局。它可以是任何东西,例如finalLayout来自先前渲染通道的。或者undefined新创建的图像的布局。或者present_src从交换链获取的图像布局。
然后图像会自动从 过渡initialLayout到为给定子通道指定的布局。如果您有更多子通道,那么在每个子通道中您可以以不同的方式使用图像,而不必担心手动转换。
驱动程序需要这两个布局参数才能知道它应该执行什么转换。Vulkan 是一个显式 API,驱动程序不跟踪任何信息(或跟踪尽可能少)。没有initialLayout布局自动过渡是不可能的。