计算着色器写入交换链图像,图像布局验证错误

Compute shader writing to swapchain image, image layout validation error

提问人:RefuX 提问时间:11/14/2023 更新时间:11/15/2023 访问量:29

问:

我正在尝试从计算着色器写入 Swapchain 图像。

到目前为止,我有:

  • 将交换链映像绑定到存储映像 (VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)

  • 添加了对 Swapchain 上图像使用VK_IMAGE_USAGE_STORAGE_BIT

但现在我似乎陷入了第 22 条军规。

  • 如果我将 DescriptorImageInfo 定义为具有 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR 的布局,则会出现验证错误,指出允许的布局为:VK_IMAGE_LAYOUT_GENERAL (spec)

  • 如果我将布局定义为VK_IMAGE_LAYOUT_GENERAL,则会得到 InvalidImageLayout,指出 CommandBuffer 期望图像位于布局VK_IMAGE_LAYOUT_GENERAL中,但它是VK_IMAGE_LAYOUT_PRESENT_SRC_KHR

武尔坎

评论

2赞 Nicol Bolas 11/15/2023
"我正在尝试从计算着色器写入 Swapchain 图像。请注意,Vulkan 实现不必允许您这样做。您需要询问实现是否允许您将交换链映像用作存储映像。

答:

1赞 solidpixel 11/15/2023 #1

您需要使用布局过渡。

将交换链图面转换为LAYOUT_GENERAL,以便可以使用计算着色器写入该图面,然后在计算传递后使用布局转换将其转换为VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,以将图像放回交换链的可呈现布局中。

评论

0赞 RefuX 11/15/2023
所以当你说“布局过渡”时,你指的是 ImageBarrier 吗?
1赞 solidpixel 11/16/2023
是的,对于计算,您需要使用图像屏障;对于渲染通道,您可以使用通道设置。