2016-12-06 17 views
0

Когда я пытаюсь создать фреймбуфер через vkCreateFramebuffer, я получаю сообщение об ошибке в моем обратном вызове отладочного отчета о конфликте в приложениях VkFramebufferCreateInfo. В нем говорится, что у моих изображений изображения есть конфликт в их образе использования, в то время как я не ожидаю этой ошибки, потому что, как правило, один из них должен быть прикреплением цвета, а другой должен быть привязкой глубины-трафарета.Vulkan Framebuffer конфликт при использовании вложений изображения

Точное сообщение об ошибке:

Framebuffer Attachment (0) конфликты с IMAGE_USAGE флагами изображения (VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT).

Я даже уже видел другие примеры, они точно такие же.

Мой исходный код (Rust):
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 используется по крайней мере один раз в качестве входного Attachment затем ожидает, что VkImage из VkImageView были созданы с VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT.

Аналогичным образом для цветного навесного оборудования с VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT и DS Attachment with VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT.

Убедитесь, что вы отвечаете этим требованиям.
Ошибки слоя тоже. Если вы работаете в последние из них и подтвердить ошибку, а затем отчеты принадлежат здесь:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues

UPDATE (после просмотра исходного кода):
Я не вижу, где вы установили depth_reference.attachment. Вы инициализируете его до 0, так что это может означать, что вы назначаете привязку цвета как глубину к subpass.

2

Использование изображений в фреймбуфере определяется обработкой. Это означает, что если привязка 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. attachment' (и 'color_reference.attachment'). (Обновлен мой ответ с подозрением на то, что происходит сейчас, после просмотра кода). – krOoze

+0

@krOoze tnx для вашего ответа, пока мой код работает нормально, но, я думаю, есть небольшой шанс прорваться в ближайшем будущем, если это не имеет значения, я буду держать этот вопрос открытым, пока не получу уверен в этом. (На первый взгляд, я отвечу на ваш ответ.: D) –