Как выбрать Push Constant и Uniform Buffer в Vulkan? - PullRequest
0 голосов
/ 08 июля 2019

Как выбрать Push Constant и Uniform Buffer в Vulkan?

Если я хочу отправить матрицу mvp в каждом кадре, я прочитал несколько статей о том, что использование Push Constant быстрее.Но, насколько я знаю, если вы хотите использовать Push Constant, вы должны вызывать его каждый раз:

vkBeginCommandBuffer()
vkCmdSetViewport()
vkCmdSetScissor()
vkCmdBindPipeline()
...
vkCmdPushConstants()
vkCmdBindVertexBuffers()
vkCmdBindIndexBuffer()
vkCmdDrawIndexed()
vkEndCommandBuffer()

Как пишет https://github.com/brenwill/Vulkan/tree/master/multithreading, существует множество моделей, которые необходимоотображается так, что каждый раз процессор должен выполнять большое количество операций записи в CommandBuffer.

Если мы используем: VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |VK_MEMORY_PROPERTY_HOST_COHERENT_BIT VkMemoryPropertyFlags Создайте UniformBuffer, тогда нам нужно только каждый раз вызывать memcpy (mvpData, & mvp, sizeof (map));скопируйте mvp в Uniform, чтобы процессор не требовался для всей записи CommandBuffer.Например: https://vulkan -tutorial.com / Loading_models

Стоит ли более интенсивно использовать VK_MEMORY_PROPERTY_HOST_COHERENT_BIT UniformBuffer, чем каждый раз использовать PushConstant для записи всего CommandBuffer?

Как мне выбрать?

...