Обновить константу push в первичном буфере команд, но использовать во вторичном? - PullRequest
0 голосов
/ 07 июня 2018

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

С одной стороны pushконстанты являются частью состояния конвейера (указанной в макете состояния конвейера), которая не наследуется вторичными буферами команд.Но с другой стороны, есть так называемая «Совместимость компоновки конвейера», которую я не до конца понимаю, но похоже, что она позволяет один раз обновить константу нажатия и использовать обновленные значения в последующих командах.

1 Ответ

0 голосов
/ 07 июня 2018

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

Итак да, вам нужно установить значения констант push в каждом буфере команд отдельно .

Что касается совместимости компоновки конвейера Это означает, что когда вы устанавливаете какое-либо состояние конвейера для данного конвейера, а затем когда вы связываете другой конвейер с совместимой компоновкой , Вам не нужно снова устанавливать то же состояние.Он сохраняется между конвейерами с совместимыми макетами .Итак, еще раз, да, вы можете "обновить push-константу один раз и использовать обновленные значения в последующих командах" . Но это должно происходить в том же буфере команд. Вы можете использовать обновленные значения в конвейерах, привязанных к одному и тому же буферу команд.Но если вы находитесь в другом буфере команд, вам нужно снова установить соответствующее состояние.Более того - после того, как вы выполняете вторичные буферы команд из первичного буфера команд, вам необходимо снова установить состояние в этом первичном буфере команд.Другими словами, основной буфер команд забывает свое состояние после выполнения дополнительных буферов команд.

...