如何在Vulkan中选择推送常量和统一缓冲区?

时间:2019-07-08 08:08:03

标签: vulkan

如何在Vulkan中选择“推送常数”和“统一缓冲区”?

如果我想在每个帧中提交mvp矩阵,我已经读过一些文章说使用Push Constant更快。但是据我所知,如果要使用Push Constant,则必须每次都调用它:

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

https://github.com/brenwill/Vulkan/tree/master/multithreading写道,需要渲染许多模型,以便每次CPU需要在CommandBuffer上执行大量记录操作时。

如果我们使用:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT VkMemoryPropertyFlags创建UniformBuffer然后我们只需要每次调用memcpy(mvpData,&mvp,sizeof(map));将mvp复制到Uniform,以便所有CommandBuffer记录都不需要cpu。 例如:https://vulkan-tutorial.com/Loading_models

使用VK_MEMORY_PROPERTY_HOST_COHERENT_BIT UniformBuffer是否比每次使用PushConstant记录所有CommandBuffer的花费都要大?

我应该如何选择?

0 个答案:

没有答案