Насколько плохо обновлять UniformBuffer во время его использования? - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно обновлять UniformBuffer (локальное устройство, только для чтения в шейдерах) каждый кадр или около того. Я не эксперт, но я понимаю, что мне нужно:

  • Синхронизировать (забор ...), чтобы не записывать в буфер во время его использования.
  • Запись в другой буфер / смещение, обновление DescriptorSet и перезапись CommandBuffer.

Но, скажем, я не синхронизирую, а просто помещаю некоторые свежие данные в тот же буфер, в то же место (смещение):

Насколько это было бы плохо?

Примечание. Этот вопрос предназначен только для лучшего понимания Вулкана, но определенно не для пропаганды плохих практик.

1 Ответ

1 голос
/ 10 апреля 2019

Это неопределенное поведение:

Зависимости исполнения и памяти используются для устранения опасностей данных, т. Е. Для обеспечения того, чтобы операции чтения и записи происходили в четко определенном порядке.Опасность записи после чтения может быть решена только с помощью зависимости выполнения, но опасности чтения после записи и записи после записи требуют соответствующих зависимостей памяти, которые должны быть включены между ними.Если приложение не содержит зависимостей для устранения этих опасностей, результаты и порядок выполнения обращений к памяти не определены.

Отложив в сторону любые интерпретации «Носовых Демонов» неопределенного поведения, на практике я думаю, что естьхороший шанс, что при рендеринге будут редкие глюки, когда вам не повезло, что конфликт между записью и чтением.Мне кажется маловероятным, что вы могли вызвать аварию, но вы никогда не могли быть на 100% уверены в этом.

...