Vulkan Programming Guide第11章——同步

2022-10-03  本文已影响0人  zenny_chen

你将在本章所学到的内容

Vulkan被设计为在一个设备上含有多个队列中进行异步、并行地运行作业,并且与主机一起协同,以保持物理资源始终在使用状态且繁忙。在你应用程序中各种不同的点处(时间与代码位置),你需要保持主机与设备各种不同部分的同步状态。在本章,我们将为此目的会讨论对Vulkan应用程序可用的几种同步原语。

Vulkan中的同步通过对各种不同的同步原语的使用加以实现。Vulkan中有几种类型的同步原语并且它们意为在一个应用程序中的不同用途。三种主要类型的同步原语是:

栅栏(Fences)

栅栏是一种中等量级的同步原语,它一般需要操作系统的帮助进行实现。栅栏被放置到与操作系统进行交互的命令,诸如 vkQueueSubmit(),并且当这些命令所发起的作业完成时,该栅栏将会接受到信号。

因为栅栏通常对应于由操作系统提供的本地的同步原语,一般当主机端的线程等待栅栏时,将该线程置为睡眠状态是有可能的,而这可以用于省电。然而此同步原语的意图是为那些可能会花费一些时间进行等待的操作,比如,等待一些命令缓存执行完成;或是等待将一个已完成的帧呈现给用户。

要创建一个新的栅栏对象,调用 vkCreateFence(),其原型为:

// Provided by VK_VERSION_1_0
VkResult vkCreateFence(
    VkDevice                                    device,
    const VkFenceCreateInfo*                    pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkFence*                                    pFence);
上一篇 下一篇

猜你喜欢

热点阅读