【发布时间】:2019-05-21 19:56:44
【问题描述】:
我有一些简单的 vulkan 应用程序:
每个交换链图像的 3 个命令缓冲区(#1、#2、#3)
1 个带有投影矩阵数据的统一缓冲区
我想绑定一次统一缓冲区。我正在使用命令缓冲区 #1 来绑定统一缓冲区:
begin();
bindDescriptorSets();
end();
submit();
waitIdle();
reset();
然后我为每个交换链图像记录命令(3 次):
begin()
bindVertexBuffers()
beginRenderPass()
bindPipeline()
draw()
endRenderPass()
end();
绘图按预期工作,但验证层记录错误:
[ UNASSIGNED-CoreValidation-DrawState-DescriptorSetNotBound ] Object: 0x1a57aad7910 (Type = 6) | VkPipeline 0x21 uses set #0 but that set is not bound.
如果我将bindDescriptorSets(); 行移动到第二个记录块,如下所示:
begin()
bindDescriptorSets();
bindVertexBuffers()
beginRenderPass()
bindPipeline()
draw()
endRenderPass()
end();
验证没问题,但是渲染没有区别。
所以,问题是:我必须为每个缓冲区记录绑定描述符集吗?如果是,为什么当我绑定描述符集一次时应用程序工作正常?
【问题讨论】:
-
"waitIdle" 这是你应该永远不要做的事情。
标签: vulkan