Vulkan Framebuffer 附件图像使用冲突
Vulkan Framebuffer conflict on attachments image usage
当我尝试通过 vkCreateFramebuffer
创建帧缓冲区时,我在调试报告回调中收到有关 VkFramebufferCreateInfo
附件冲突的错误。它说我的 图像视图 在图像使用上有冲突,但我不希望出现此错误,因为通常其中一个必须是颜色附件,另一个必须是深度模板附件。
确切的错误信息是:
Framebuffer Attachment(0) conflicts with image's IMAGE_USAGE flags (VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT).
我什至已经看到其他例子了,它们完全一样。
我的源代码 (Rust):
https://github.com/Hossein-Noroozpour/vulkust/blob/master/src/vulkan/swapchain.rs#L218
好吧,我可以解释错误是如何发生的。如果有疑问,深入了解图层源代码很有用:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/tree/master/layers
将于 vkCreateFramebuffer()
发布。
它将检查提供的渲染通道及其子通道与图像视图。
如果 VkImageView
至少被用作输入附件一次,则它期望 VkImageView
的 VkImage
是使用 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
创建的。
与 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
的颜色附件和 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
的 DS 附件类似。
检查您是否满足这些要求。
图层错误也是一回事。如果您是 运行 最新的并确认了一个错误,那么报告属于这里:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues
更新(在看到您的源代码之后):
我没看到你在哪里设置 depth_reference.attachment
。您将其预初始化为 0
,这可能意味着您将颜色附件作为深度分配给子通道。
帧缓冲区中图像的使用由 renderpass 定义。这意味着如果附件 0 在 renderpass 中用作 depth/stencil,则需要使用 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
创建图像
这意味着您需要仔细检查您传递给渲染通道创建的子通道描述,并确保您没有不小心使用附件 0 作为深度。
当我尝试通过 vkCreateFramebuffer
创建帧缓冲区时,我在调试报告回调中收到有关 VkFramebufferCreateInfo
附件冲突的错误。它说我的 图像视图 在图像使用上有冲突,但我不希望出现此错误,因为通常其中一个必须是颜色附件,另一个必须是深度模板附件。
确切的错误信息是:
Framebuffer Attachment(0) conflicts with image's IMAGE_USAGE flags (VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT).
我什至已经看到其他例子了,它们完全一样。
我的源代码 (Rust):
https://github.com/Hossein-Noroozpour/vulkust/blob/master/src/vulkan/swapchain.rs#L218
好吧,我可以解释错误是如何发生的。如果有疑问,深入了解图层源代码很有用:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/tree/master/layers
将于 vkCreateFramebuffer()
发布。
它将检查提供的渲染通道及其子通道与图像视图。
如果 VkImageView
至少被用作输入附件一次,则它期望 VkImageView
的 VkImage
是使用 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
创建的。
与 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
的颜色附件和 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
的 DS 附件类似。
检查您是否满足这些要求。
图层错误也是一回事。如果您是 运行 最新的并确认了一个错误,那么报告属于这里:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues
更新(在看到您的源代码之后):
我没看到你在哪里设置 depth_reference.attachment
。您将其预初始化为 0
,这可能意味着您将颜色附件作为深度分配给子通道。
帧缓冲区中图像的使用由 renderpass 定义。这意味着如果附件 0 在 renderpass 中用作 depth/stencil,则需要使用 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
这意味着您需要仔细检查您传递给渲染通道创建的子通道描述,并确保您没有不小心使用附件 0 作为深度。