Пропускает ли трафарет запись в буфер цвета?

Я изучал образец drawsubpasses в образцы LunarG (файл: API-Samples / drawsubpasses / drawsubpasses.cpp) .

В этом примере активный подпроход, когда вызывается самый первый vkCmdDraw (), не имеет прикрепления цвета, а только прикрепления глубины / трафарета. Используемый фрагментный шейдер имеет выходную переменную.

Не прочитал spec, Помогите мне понять, является ли такое использование «безопасным» или как драйвер справится с этим.


person hiddenbit    schedule 28.04.2016    source источник


Ответы (1)


Похоже, что Vulkan 1.0.16 исправил это. В нем явно указано, что никакие записи не выполняются в индексы вложений, превышающие подпроходы attachmentCount или явно объявленные VK_ATTACHMENT_UNUSED. Выходная переменная будет неопределенной, но в соответствии с описанием текущего подпрохода в нее ничего не будет записано.


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

Вы можете отправить отчет об ошибке спецификации Vulkan.

Я предполагаю, что правильное поведение будет таким же, как у OpenGL: эффективно игнорировать такие выходные данные.

person Nicol Bolas    schedule 28.04.2016
comment
Я думаю, это просто игнорируется. Как и в другой похожей ситуации, которую я заметил в том же примере. - person hiddenbit; 28.04.2016
comment
@hiddenbit: Нет, это четко прописано в спецификации (в отличие от этой конкретной проблемы). Конвейер, не имеющий доступа к дескрипторам, имеет компоновку, совместимую с любым набором дескрипторов. И поэтому имеет четко определенное поведение с любым набором дескрипторов. - person Nicol Bolas; 28.04.2016