Я не уверен, как ваш псевдокод относится к вопросу в вашем заголовке. Видите, вы запускаете проход рендеринга, используя cmd1
, который предположительно представляет буфер команд. Затем вы запускаете проход рендеринга, используя cmd2
, который предположительно представляет отдельный буфер команд. Поскольку обе эти команды должны выполняться правильно, это означает, что обе они являются первичными буферами команд (поскольку вы не можете начать передачу рендеринга во вторичном буфере команд).
В сочетании с этим фактом является то, что еслиВы запускаете проход рендеринга в буфере команд, вы должны завершить этот проход рендеринга в том же CB. Таким образом, нет возможности перекрывать проходы рендеринга в разных основных буферах команд с точки зрения порядка отправки команд.
Итак ... в чем вопрос? Единственный порядок команд, который имеет значение для Vulkan, это порядок отправки : порядок, в котором буферы команд отправляются в очередь, и порядок команд в каждом буфере. Vulkan не заботится о порядке, в котором команды в одном CB записываются относительно другого CB.
Таким образом, очередь увидит начало одного из проходов рендеринга, затем оно заканчивается, затемзатем начинается, затем заканчиваетсяКод в вашем вопросе не «вкладывает» проходы рендеринга.
Единственно возможное «вложение» проходов рендеринга может произойти, если вы делаете это с одним и тем же CB. И нет, вы не можете их вкладывать.
И это не будет иметь смысла, если бы вы могли.
Если ваша операция «рендеринг в основную цель» требует, чтобы «рендеринг в неэкранную цель» был завершентогда это идентично двум последовательным операциям рендеринга с соответствующими барьерами / зависимостями. И если ни один из них не зависит от другого, то это идентично двум последовательным операциям прохождения рендеринга с нет барьеров / зависимостей между ними.
Единственное место, где это может иметь смысл, - это если вы рендеритена некоторое время к «главной цели», затем хотите отрендериться до «цели вне экрана», используя результаты «основной цели», а затем вернуться к «основной цели» таким образом, чтобы использовать результаты"вне экрана цели". Но это всего лишь один проход рендеринга , с 3-мя подпроцессами, которые используют разные вложения, вместе с соответствующими зависимостями / входными целями между ними.