vkCmdUpdateBuffer перед рендерингом проходить синхронизацию? - PullRequest
0 голосов
/ 04 февраля 2020

Выполняет следующее:

vkCmdUpdateBuffer(c, uniform_buffer, ...);
vkCmdBeginRenderPass(c, ...);
vkCmdBindDescriptorSets(c, ..., uniform_buffer_descriptor, ...);
vkCmdDraw(c, ...);

(ie vkCmdDraw будет использовать VkBuffer, который был только что обновлен vkCmdUpdateBuffer.)

... требуется синхронизация барьером или другим средства? Или обновление буфера завершится до выполнения команды draw? Как ты это понял?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Да, вам нужен барьер, чтобы убедиться, что отрисовка не начинается до завершения обновления буфера, и для обеспечения согласованности. Команды запускаются в порядке их добавления в буфер команд, но могут работать одновременно и завершаться не по порядку. За очень немногими исключениями, каждый раз, когда у вас есть зависимость данных (он же риск ) в форме «чтение после записи», «запись после записи» или «запись после чтения» между две команды, то вам нужно явно установить порядок и последовательность между этими командами.

0 голосов
/ 04 февраля 2020

В Vulkan есть только два исключения, которые имеют неявную синхронизацию. Все остальное должно быть синхронизировано пользователем.

Спецификация файла:

Эта команда [vkCmdUpdateBuffer] рассматривается как операция «передачи» для целей барьеров синхронизации.

...