Vulkan创建栅栏

Vulkan创建栅栏
与信号不同,栅栏用于使应用程序与已提交给图形硬件的命令同步。当已提交的作业被处理完后,栅栏会通知应用程序。在使用栅栏前需要先创建栅栏。

具体处理过程

(1)获取已创建逻辑设备的句柄,将该句柄赋予一个VkDevice类型的变量,将该变量命名为logical_device。
(2)创建一个VkFenceCreateInfo类型的变量,将其命名为fence_create_info。使用下列值初始化该变量中的各个成员。
● 将sType成员的值设置为VK_STRUCTURE_TYPE_FENCE_CREATE_INFO。
● 将pNext成员的值设置为nullptr。
● 如果需要创建未发出的栅栏,则应将0赋予flags成员。如果需要创建已发出的栅栏,则应将VK_FENCE_CREATE_SIGNALED_BIT赋予flags成员。
(3)创建一个VkFence类型的变量,将其命名为fence,该变量用于存储已创建栅栏的句柄。
(4)调用vkCreateFence(logical_device,&fence_create_info,nullptr,&fence)函数。将第一个参数设置为logical_device变量;将第二个参数设置为指向fence_create_info变量的句柄;将第三个参数设置为nullptr;将第四个参数设置为指向fence变量的指针。
(5)通过查明该函数调用操作的返回值等于枚举型值VK_SUCCESS,确认该函数调用操作成功完成。

具体运行情况

与其他同步化基元类似,栅栏仅拥有两种状态:已发出和未发出。可以直接创建已发出状态的栅栏,也可以直接创建未发出状态的栅栏,但应用程序可以重置栅栏。重置操作会使栅栏的状态从已发出切换为未发出。
要发出栅栏,需要在提交命令缓冲区的过程中提供栅栏。与信号类似,一旦随栅栏提交的所有作业都被完成后,栅栏的状态会变为已发出,但是栅栏不能用于同步化命令缓冲区。应用程序可以查询栅栏的状态,而且应用程序可以等待栅栏,直到栅栏的状态变为已发出为止。
TIP 信号用于使多个已提交的命令缓冲区同步。栅栏用于使应用程序与已提交的命令同步。
要创建栅栏,需要创建一个VkFenceCreateInfo类型的变量,使用该变量可以决定是创建已发出状态的栅栏,还是创建未发出状态的栅栏。
Vulkan创建栅栏
将上述结构提供给vkCreateFence()函数,该函数会根据设定的参数创建栅栏。
Vulkan创建栅栏

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战