2016-10-09 4 views
1

Я пытаюсь отобразить сцену в изображение в Vulkan, которое я хочу попробовать на квадроцикле, который плавает где-то в этой сцене.Отладка черного изображения в Vulkan

Мой подход заключался в том, чтобы в основном делать те же шаги, что и для рендеринга сцены в презентационные изображения, за исключением того, что у меня было бы только одно изображение в формате RGBA8 вместо формата, ориентированного на презентацию. Все, что я вижу, - это чернота. Уровни проверки включены и ничего не сообщают. При отладке с помощью RenderDoc данные кажутся правильными. Он показывает изображение сцены как входной сигнал команды рисования (см. Снимок экрана ниже).

Screenshot of RenderDoc, capturing the second frame. API trace on the left side, render pass input for the second independent pass on the right.

Однако, как вы можете видеть, изображение на поверхности просто черный (центр изображения на правой стороне). Итак, как я мог бы отладить эту проблему? Данные RenderDoc, похоже, я ожидаю, но результата нет. Уровни валидации ничего не сообщают, поэтому я должен сделать что-то неопределенное, по крайней мере, как минимум.


Если вы хотите, чтобы закопать, полный исходный код для этого конкретного примера можно найти на GitHub в Main.cpp и VulkanHelpers.cpp. Ищите Vulkan.RenderTarget2.

ответ

8

Я не получаю такого же результата, как вы, когда снимаете в RenderDoc - у меня есть только один цветный проход, запись в буфер обмена, а также с черным квадратом (What I get when I capture).

Это похоже на код в github. Буфер команды рисования в Vulkan.RenderTarget2.DrawCommandBuffer записывается в функцию VulkanBuildDrawCommands, но затем он никогда не отправляется. Единственные вызовы для vkQueueSubmit предназначены для буферов команд для каждого сервера back-buffer и буферов команд pre/post-present, переходящих с VK_PRESENT_SRC_KHR.

Исходя из предположения, что, возможно, у вас есть локальные изменения, которые передают этот командный буфер, из того, что я могу сказать, оставшаяся проблема на самом деле сообщается уровнями проверки, даже без модификации кода, кроме как включить их:

Err: [DS] Code 52: DS 0x4a encountered the following validation error at 
vkCmdDrawIndexed() time: Descriptor in binding #10 at global descriptor 
index 2 requires an image view of type VK_IMAGE_VIEW_TYPE_2D but got VK_IMAGE_VIEW_TYPE_1D. 

что происходит потому, что вид изображения, созданный для RenderTarget2 (я не могу связать с этим конкретным кодом, потому что у меня нет «10 репутации»? не знаю, что, что БС) не установлен вид изображения type, а 1D - значение '0' от инициализации по умолчанию.

Если вы не получили это сообщение, вы должны проверить, что вы находитесь на последнем SDK. Я также получаю несколько других сообщений, в том числе упоминание макетов. Это связано с тем, что ваша функция записи, связанная выше, кажется, имеет макеты, переключаемые для цели вне экрана, она переходит от COLOR_ATTACHMENT_OPTIMAL в SHADER_READ_ONLY_OPTIMAL до рендеринга (первый параметр OldImageLayout), затем обратно в COLOR_ATTACHMENT_OPTIMAL. Я думаю, что это должно быть отменено или лучше, но переход от UNDEFINED к COLOR_ATTACHMENT_OPTIMAL, затем обратно в SHADER_READ_ONLY_OPTIMAL.

Поскольку вы используете один и тот же помощник записи при рендеринге внеэкранной цели, это означает, что он пытается читать от за пределами экрана, чтобы нарисовать квад. Это, вероятно, не то, что вы хотите, поэтому вам может понадобиться обнаружить этот случай и пропустить квад, или связать другую текстуру, или что-то еще.

+0

Большое спасибо за ваш ввод! Я попробую то, что вы указали, и сообщите об этом как можно скорее. – Manuzor

+0

Да, это правда, у меня есть локальные изменения, которые еще не включены в GitHub. И к моему стыду, уровни валидации были также отключены, что объясняет многое. Возможно, кодирование, будучи усталым, не является хорошей идеей после ... После установки типа представления в 2D, я действительно вижу ожидаемый результат! И теперь, когда уровни проверки снова включены, я могу устранить все предупреждения! @baldurk Еще раз спасибо, ты мне очень помог! – Manuzor

Смежные вопросы