等待直到提交到队列的所有命令都完成
译者注:示例代码点击此处
当我们想要将应用程序与提交到选定队列的工作同步时,并不总是需要使用围栏。应用程序可以等待,直到提交到选定队列的所有任务都完成为止。
怎么做...
1.获取提交任务的队列句柄。将其储存在名为queue的VkQueue类型变量中。
2.滴啊用vkQueueWaitIdle(队列)并提供队列变量。
3.通过检查返回值是否等于VK_SUCCESS,我们可以确保没有发生错误。
这个怎么运作...
vkQueueWaitIdle()函数暂停应用程序,直到完成提交给定队列的所有工作(处理完所有命令缓冲区)。这样我们不需要创建围栏。
但是这种同步应该只在非常罕见的情况下进行。图形硬件(GPU)通常比通用处理器(CPU)快得多,并且可能需要不断提交工作以使应用程序充分利用其性能。
提示:在应用程序端执行等待可能会在图形硬件的管道中引入停顿,这会导致设备的使用率低下。
要等待队列直到完成所有提交的工作,我们需要准备以下代码:
VkResult result = vkQueueWaitIdle( queue );
if( VK_SUCCESS != result ) {
std::cout << "Waiting for all operations submitted to queue failed." << std::endl;
return false;
}
return true;