摧毁信号量
译者注:示例代码点击此处
信号量可以多次重复使用,因此通常我们不需要在应用程序执行时删除它们。但是当不再需要信号量时,如果我们确定设备没有使用它(没有待处理的等待,也没有待处理的信号操作),我们就可以销毁它。
怎么做...
1.获取逻辑设备的句柄。将此句柄储存在名为logical_device的VkDevice类型变量中。
2.使用应该销毁的信号量句柄初始化名为semaphore的VkSemaphore类型变量。
3.进行一下调用vkDestroySemaphore( logical_device, semaphore, nullptr ),为其提供逻辑设备句柄,信号量的句柄和nullptr值。
4.处于安全原因,请为信号量变量分配VK_NULL_HANDLE值。
这个怎么运作...
删除信号量非常简单:
if( VK_NULL_HANDLE != semaphore ) {
vkDestroySemaphore( logical_device, semaphore, nullptr );
semaphore = VK_NULL_HANDLE;
}
提示:在我们销毁信号量之前,必须确保任何已执行的队列提交都不在引用它。
如果执行销毁操作的信号量在要发信号的信号量列表中或者在给定提交应该等待的信号量列表中,则必须确保已提交的命令已经完成。为此我们需要应用程序等待正在等待队列完成的围栏,或等待所有操作提交给给定队列或调用等待整个设备完成的其中一个函数。(参见等待围栏、等待直到提交到队列的所有命令都完成以及等待所有提交的命令完成的内容)。