-
Notifications
You must be signed in to change notification settings - Fork 60
Description
Проявляется в семпле forward, скорее всего есть и в shadowmap.
Рендеринг с гуи идёт в 2 рендер пасса: первый рисует сцену, второй рисует ГУИ.
Первый рендер пасс создаётся тут: https://github.com/msu-graphics-group/vk_graphics_basic/blob/main/src/samples/simpleforward/simple_render.cpp#L79
Он переводит атачмент из лейаута UNDEFINED в лейаут PRESENT_SRC_KHR.
Второй рендер пасс создаётся тут: https://github.com/msu-graphics-group/vk_graphics_basic/blob/main/src/render/render_imgui.cpp#L48
Он во-первых загружает атачмент операцией DONT_CARE, во-вторых переводит его из лейаута UNDEFINED в лейаут PRESNT.
Очевидно, что-то здесь не так.
На некоторых GPU (в том числе на всех моих) операция DONT_CARE не определённая стандартом превращается в LOAD, на некоторых (в том числе моих однокурсников) превращается в CLEAR. С лейаутами та же проблема. На некотором хардвере UNDEFINED и PRESENT совпадают и всё работает нормально, на некоторых -- нет, и сцена превращается в тыкву. Среди симптомов у однокурсников видел и артефакты в углу окна и чёрный экран вместо сцены (т.е. отображалось только ГУИ).
Вероятно следующая последовательность действий должна решить проблему, но так как на моих GPU оно не воспроизводится, с уверенностью сказать не могу.
В рендерере в зависимости от включённости GUI делать выходной лейаут либо COLOR_ATTACHMENT_OPTIMAL, либо PRESENT_SRC_KHR, в GUI делать операцию загрузки LOAD, входной лейаут COLOR_ATTACHMENT_OPTIMAL, выходной PRESENT_SRC_KHR.
В общем вас посетила полиция undefined behavior. В этот раз обойдёмся без штрафа, но в преть будьте осторожнее.