Vulkan Cookbook 第三章 14 等待直到提交到队列的所有命令都完成

等待直到提交到队列的所有命令都完成

译者注:示例代码点击此处

当我们想要将应用程序与提交到选定队列的工作同步时,并不总是需要使用围栏。应用程序可以等待,直到提交到选定队列的所有任务都完成为止。

怎么做...

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;

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值