【发布时间】:2018-07-17 10:03:38
【问题描述】:
我正在尝试学习 Vulkan(主要来自 vulkan-tutorial.com),因为我编写了一个混合图形/计算应用程序(我需要渲染一个深度缓冲区并对其执行一些计算,没有显示)。我几乎要渲染我的第一个(深度)图像,我需要做的就是弄清楚如何将单个 vec4 作为唯一参数传递给我的顶点着色器(除了位置属性)。
我读到的所有地方都说推送常量比制服快,所以它们似乎是我的参数的明显选择,但似乎我需要在每个渲染图像处重置命令缓冲区,以便使用 @987654324 更改我的推送常量@,而使用制服时,我可以保持命令缓冲区固定,并在使用 vkQueueSubmit() 提交渲染任务之前简单地更新映射的内存区域(如果不连贯,则刷新)。
重写整个命令缓冲区真的比映射内存写入快吗?或者说推送参数更快的人假设命令缓冲区将在每个渲染图像时重建,所以大部分成本已经支付了?
最后,我可以更新另一个命令缓冲区中的推送常量吗? (我想不是,但我不清楚常量推送的有效时间,也不清楚管道保持绑定的时间。)如果可能,这是一个好方法吗?
编辑:不,那是不可能的,刚刚发现here那个:
每个命令缓冲区独立于其他命令缓冲区管理状态。
和
当命令缓冲区开始记录时,该命令中的所有状态 缓冲区未定义。
因此我的问题仍然存在。
【问题讨论】:
标签: vulkan