VkAttachmentReference::layout 的目的是什么?
What is the purpose of VkAttachmentReference::layout?
我想了解为什么我们需要 VkAttachmentReference::layout
?文档说:
layout
is a VkImageLayout
value specifying the layout the attachment
uses during the subpass.
换句话说,它告诉附件将在子通道开始之前过渡到哪个布局。
但此信息已通过 VkAttachmentDescription::initialLayout
提供。这是文档中的引述:
initialLayout
is the layout the attachment image subresource will be
in when a render pass instance begins.
VkAttachmentReference::layout
是不是多余的,因为它完全重复了VkAttachmentDescription::initialLayout
?
不,通过 initialLayout
您指定布局,图像仅在 渲染通道之前。它可以是任何东西,例如来自先前渲染通道的 finalLayout
。或新创建图像的 undefined
布局。或从交换链获取的图像的 present_src
布局。
然后图像会自动从 initialLayout
过渡到为给定子通道指定的布局。如果您有更多的子通道,那么在每个子通道中您可以以不同的方式使用图像并且您不必担心手动转换。
驱动程序需要这两个布局参数才能知道它应该执行什么转换。 Vulkan 是显式的 API,驱动程序不跟踪任何信息(或尽可能少地跟踪)。没有 initialLayout
布局自动转换是不可能的。
我想了解为什么我们需要 VkAttachmentReference::layout
?文档说:
layout
is aVkImageLayout
value specifying the layout the attachment uses during the subpass.
换句话说,它告诉附件将在子通道开始之前过渡到哪个布局。
但此信息已通过 VkAttachmentDescription::initialLayout
提供。这是文档中的引述:
initialLayout
is the layout the attachment image subresource will be in when a render pass instance begins.
VkAttachmentReference::layout
是不是多余的,因为它完全重复了VkAttachmentDescription::initialLayout
?
不,通过 initialLayout
您指定布局,图像仅在 渲染通道之前。它可以是任何东西,例如来自先前渲染通道的 finalLayout
。或新创建图像的 undefined
布局。或从交换链获取的图像的 present_src
布局。
然后图像会自动从 initialLayout
过渡到为给定子通道指定的布局。如果您有更多的子通道,那么在每个子通道中您可以以不同的方式使用图像并且您不必担心手动转换。
驱动程序需要这两个布局参数才能知道它应该执行什么转换。 Vulkan 是显式的 API,驱动程序不跟踪任何信息(或尽可能少地跟踪)。没有 initialLayout
布局自动转换是不可能的。