我提交一个队列并指定一个围栏。就在提交之前,我打印了栅栏:
qDebug() << "submitting fence: " << cmdFence;
vkQueueSubmit(gfxQueue, 1, &submitInfo, cmdFence);
以下是最近3次提交的结果:
submitting fence: 0x145
submitting fence: 0x142
submitting fence: 0x145
qDebug() << "waiting for fences";
for(auto f : activeFences)
qDebug() << "fence " << f;
if(vkWaitForFences(m_moduleData.deviceData.device,
static_cast<uint32_t>(activeFences.size()),
activeFences.data(),
VK_TRUE,
UINT64_MAX) != VK_SUCCESS)
{
throw std::runtime_error{"failed to wait for fences"};
}
可以看到,我在等待之前也在打印栅栏,这就是我之前得到的
vkWaitForFences
呼叫:
waiting for fences
fence 0x142
同样的篱笆
0x142
之前提交的!但验证层会发出警告:
vkWaitForFences called for fence 0x142 which has not been submitted on a Queue or during acquire next image.
应用程序可能会在无限的等待中冻结。但为什么呢?