当我尝试通过vkCreateFramebuffer
创建framebuffer时,我在调试报告回调中会出现有关VkFramebufferCreateInfo
附件中冲突的错误。它说我的图像视图在他们的图像使用情况下有冲突,而我不希望此错误,因为通常,其中一个必须是颜色附件,另一个必须是深度模板附件。
确切的错误消息是:
framebuffer附件(0)与image的image_usage标志发生冲突(vk_image_usage_depth_stence_tencil_attachment_bit)。
我什至已经看过其他示例,它们完全相同。
我的源代码(Rust):
https://github.com/hossein-noroozpour/vulkust/blob/master/src/src/vulkan/swapchain.rs#l218
框架中图像的用法由RenderPass定义。这意味着,如果附件0用作RenderPass中的深度/模板,则需要使用VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
这意味着您需要仔细检查您传递给RenderPass创建的子通道描述,并确保您没有意外使用附件0作为深度。
好吧,我可以解释错误的工作方式。如有疑问,请挖掘层源代码:
https://github.com/khronosgroup/vulkan-loaderandvalidationlayers/tree/master/layers
它将在vkCreateFramebuffer()
上发出。
它将检查提供的渲染通行证及其子通过与图像视图。
如果至少使用一次VkImageView
作为输入附件,则希望使用VkImageView
创建CC_7的VkImage
。
类似于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
上,因此这可能意味着您将颜色附件分配给了子通道。