2016-12-06 43 views
0

當我嘗試通過vkCreateFramebuffer創建幀緩衝區時,在調試報告回調中出現有關VkFramebufferCreateInfo附件中衝突的錯誤。它說我的圖片瀏覽在他們的圖片使用中有衝突,但我不認爲這個錯誤,因爲通常他們中的一個必須是彩色附件,另一個必須是深度模板附件。Vulkan Framebuffer衝突附件鏡像使用

確切的錯誤信息是:

Framebuffer的附件(0)與圖像的IMAGE_USAGE標誌(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)衝突。

我甚至已經看到其他的例子,它們是完全一樣的。

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

回答

1

好吧,我可以解釋錯誤是如何工作的。如有疑問挖成層的源代碼是有用的:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/tree/master/layers

這將在vkCreateFramebuffer()發行。

它會檢查提供的渲染通道及其子通道與圖像視圖。

如果VkImageView使用至少一次作爲輸入附件然後它希望已經VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT創建的VkImageViewVkImage

類似的顏色附件VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT和DS附件VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT

檢查您是否符合這些要求。
圖層錯誤也是一件事情。如果您運行的是最新的人並確認錯誤,然後報告屬於這裏:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues

UPDATE(看到你的源代碼後):
我看不出你設置depth_reference.attachment。您預先將其初始化爲0,這可能意味着您將顏色附件作爲深度分配給子通道。

2

幀緩衝區中圖像的使用由renderpass定義。這意味着如果在渲染通道中將附件0用作深度/模板,那麼圖像需要使用VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT

創建。這意味着您需要仔細檢查傳遞給渲染通道創建的子通道描述,並確保你沒有意外地使用附件0作爲深度。

+0

嗨,我的第一個附件是彩色圖像,第二個附件是深度模板。如果你想你可以在這裏看到我的代碼:https://github.com/Hossein-Noroozpour/vulkust/blob/master/src/vulkan/swapchain.rs#L218 –

+0

@HosseinNoroozpour我找不到你設置'depth_reference'的地方。附件'(和'color_reference.attachment')。 (在看到您的代碼後懷疑現在發生了什麼,以此更新我的答案)。 – krOoze

+0

你的答案@krOoze TNX,現在我的代碼工作正常,但我認爲這是一個小的機會在不久的將來打破,如果沒關係,我會繼續這個問題進行開放性的問題,直到我得到對此肯定。 (乍一看,我會接受你的答案:d。) –