Vulkan 记录指令缓存,指令缓存的记录需要通过函数vkBeginCommandBuffer()
和vkEndCommandBuffer()
来完成。这两个函数定义了一个范围,在这个范围之内的所有Vulkan指令都会被记录下来。如图所示记录了渲染通道实例的创建过程,它就是通过这两个API定义了起始和结束的范围区间的。
有关渲染通道创建的更多信息,可以参考酷客教程的渲染通道。
起始位置
指令记录的起始位置是通过函数vkBeginCommandBuffer()
设置的。它定义了一个起始位置,在它之后的所有指令调用都会被记录下来,直到我们设置了结束位置(即vkEndCommandBuffer()。
下面给出了这个API函数的语法定义,以及对参数的解释说明:
这个函数有两个参数。第一个参数是指令缓存的句柄,我们将记录指令到这个缓存当中。第二个参数是一个VkCommandBufferBeginInfo结构体,它定义了一些额外的参数,可以设置指令缓存记录过程开始时的不同状态。
下面给出结构体VkCommandBufferBeginInfo
的具体语法定义:
这个结构体中所涉及的参数如表所示:
指令缓存的记录是通过函数vkEndCommandBuffer()
来结束的。它只需要一个参数,其中设置了指令缓存对象的句柄。以下给出这个函数的语法定义:
VkResult vkEndCommandBuffer(VkCommandBuffer commandBuffer);
队列提交
将指令记录到指令缓存(VkCommandBuffer)之后,就可以将它提交给一个队列了。函数vkQueueSubmit()可以帮助我们将工作内容提交给对应的队列。它的语法定义如下:
它的参数定义如表所示:
我们仔细看一看结构体VkSubmitInfo
的内容。这个结构体中封装了各种各样的信息。而这些信息是提交过程中被用来管理独立的VkCommandBuffer对象的,其中包含了单个或者一组指令缓存。下面给出了这个结构体的语法定义:
结构体中每个参数以及简单的解释如表所示:
队列等待
当应用程序将指令缓存提交到队列中以后,它会等待队列完成提交工作并且准备好接收下一个批次的内容。等待队列完成的API函数为vkQueueWaitIdle()
。这个函数在当前队列中所有的指令缓存和稀疏绑定操作全部完成之前会一直被挂起。这个函数只有一个参数,即需要等待的队列的句柄。以下给出了这个函数的语法定义:
VkResult vkQueueWaitIdle(VkQueue queue);
酷客网相关文章:
评论前必须登录!
注册