Vulkan Framebuffer对附件图像使用的冲突

时间:2016-12-06 08:02:06

标签: attachment conflict framebuffer vulkan

当我尝试通过 _.filter(cities ,function(i){ var f=_.filter(i,function(t){return t>19}); return f.length>2; }); 创建帧缓冲区时,我的调试报告回调中出现了关于vkCreateFramebuffer附件中的冲突的错误。它说我的图像视图在他们的图像使用中存在冲突,而我不期待这个错误,因为通常其中一个必须是颜色附件而另一个必须是深度-stencil attachement。

确切的错误消息是:

  

帧缓冲附件(0)与图像的IMAGE_USAGE标志(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)冲突。

我甚至已经看过其他例子,它们完全一样。

我的源代码(Rust):
https://github.com/Hossein-Noroozpour/vulkust/blob/master/src/vulkan/swapchain.rs#L218

2 个答案:

答案 0 :(得分:2)

帧缓冲区中图像的使用由renderpass定义。这意味着如果在渲染通道中将附件0用作深度/模板,则需要使用VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT

创建图像

这意味着您需要仔细检查传递给渲染通道创建的子通道描述,并确保您没有意外地将附件0用作深度。

答案 1 :(得分:1)

好吧,我可以解释错误是如何工作的。如果有疑问,挖掘层源代码是有用的:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/tree/master/layers

它将在vkCreateFramebuffer()上发布。

它将检查提供的渲染过程及其子视图与图像视图。

如果VkImageView至少使用一次作为输入附件,那么它希望使用VkImage创建VkImageView的{​​{1}}。

同样适用于VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT的彩色附件和VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT的DS附件。

检查您是否符合这些要求 层错也是一件事。如果您正在运行最新的并确认错误,则报告属于此处:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues

更新(看到您的源代码后):
我没看到你设置VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT的位置。您将其预初始化为depth_reference.attachment,这可能意味着您将颜色附件指定为子通道的深度。