Vulkan创建信号

Vulkan创建信号
在提交命令并利用设备的处理能力前,需要了解使操作同步的方式。信号是实现同步的基元之一,它使我们能够调整提交给队列的操作,这些调整不仅可以应用于一个队列中的操作,还可以应用于逻辑设备中的各个队列。
在将命令提交给队列时可使用信号。因此,在提交命令缓冲区的过程中使用信号前,需要先创建信号。

具体处理过程

(1)获取逻辑设备的句柄,将该句柄存储在一个VkDevice类型的变量中,将该变量命名为logical_device。
(2)创建一个VkSemaphoreCreateInfo类型的变量,将其命名为semaphore_create_info。使用下列值初始化该变量中的各个成员。
● 将VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO赋予sType成员。
● 将nullptr赋予pNext成员。
● 将0赋予flags成员。
(3)创建一个VkSemaphore类型的变量,将其命名为semaphore,该变量用于存储已创建信号的句柄。
(4)调用vkCreateSemaphore(logical_device,&semaphore_create_info,nullptr,&semaphore)函数。将第一个参数设置为logical_device变量;将第二个参数设置为指向semaphore_create_info变量的指针;将第三个参数设置为nullptr;将第四个参数设置为semaphore变量。
(5)通过查明该函数调用操作的返回值等于VK_SUCCESS,确认创建信号的操作成功完成。

具体运行情况

作为同步化基元,信号仅拥有两种状态:信号已发出和信号未发出。信号用于提交命令缓冲区的过程中。当将信号添加到已发出信号列表中后,一旦批处理命令中的所有已提交作业全部完成,信号就会将自身的状态转换为已发出。与此类似,当将命令提交给队列时,可以设定当指定信号列表中所有信号的状态都变为已发出之前,已提交的命令应该等待。这样我们就可以调整已提交给队列的作业,根据其他命令的结果延时处理命令。
TIP 当信号已经发出并且等待这些信号的所有命令重新开始被执行时,这些信号就会自动重置(将自身的状态切换为未发出),而且可以重用。
当从交换链获取图像时,也可以使用信号。在这种情况中,当提交引用了已获得图像的命令时,就必须使用这样的信号。当显示引擎正在使用这些交换链图像时,这些命令必须等待,当显示引擎不再使用这些交换链图像时(通过发出信号的操作表明),这些命令才能被执行。

Vulkan创建信号
通过调用vkCreateSemaphore()函数可以创建信号。创建过程中所需的参数由VkSemaphoreCreateInfo类型的变量提供。

Vulkan创建信号
要创建信号,可使用下面的代码。

Vulkan创建信号
信号只能用于同步化已提交给队列的作业,因为它们是从内部调整图形硬件的,应用程序无法访问信号的状态。如果需要使应用程序与已提交的命令同步,就需要使用栅栏。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战