Я отправляю очередь и указываю забор. Непосредственно перед подачей я печатаю забор:
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.
И приложение зависает, вероятно, в бесконечном ожидании. Но почему?