代码之家  ›  专栏  ›  技术社区  ›  nikitablack

等待围栏会导致警告和应用程序冻结

  •  0
  • nikitablack  · 技术社区  · 6 年前

    我提交一个队列并指定一个围栏。就在提交之前,我打印了栅栏:

    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.
    

    应用程序可能会在无限的等待中冻结。但为什么呢?

    0 回复  |  直到 6 年前