Skip to content

Некорректная работа с рендер пассами -- чёрные экраны и артефакты у некоторых студентов #20

@Mrkol

Description

@Mrkol

Проявляется в семпле 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. В этот раз обойдёмся без штрафа, но в преть будьте осторожнее.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions