点击注册
点击注册
.

真人棋牌游戏 入门调试VulkanSamples(五)——CommandBuffer

发布日期:2022-03-07 07:51    点击次数:143
Command bufferCommand buffer用于记录(record)GPU指令(command)。在Vulkan中,指令是通过类似于vkCmdxxx()的接口来写入到Command buffer,驱动会负责生成适配当前GPU的二进制指令内容。VkCmdSetLineWidth示意图Vulkan用command buffer池来管理command buffer对象。command buffer池可以进行更好的内存管理和效率更高的粒度控制。创建Command buffer创建command buffer需先创建command buffer池:VkCommandPoolCreateInfo cmd_pool_info = {}; cmd_pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; cmd_pool_info.pNext = NULL; cmd_pool_info.queueFamilyIndex = info.graphics_queue_family_index; cmd_pool_info.flags = 0; res = vkCreateCommandPool(info.device, &cmd_pool_info, NULL, &info.cmd_pool); Command buffer池与queue簇是一一对应的关系真人棋牌游戏,创建command buffer池需指定使用的queue簇类型。Command buffer池创建好之后真人棋牌游戏,就可以分配command buffer:VkCommandBufferAllocateInfo cmd = {}; cmd.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; cmd.pNext = NULL; cmd.commandPool = info.cmd_pool; cmd.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; cmd.commandBufferCount = 1; res = vkAllocateCommandBuffers(info.device, &cmd, &info.cmd);Command buffer分配好之后,就可以记录GPU指令了。vkBeginCommandBuffer()用于开启Command buffer的记录状态,vkCmdxxx()用于记录指令,比如:vkCmdSetLineWidth()、vkCmdDraw(),完成记录后用vkEndCommandBuffer()关闭记录状态,变成可提交状态。具体使用后面的章节会介绍。销毁Command buffer销毁command buffer池会自动释放command buffers,手动调vkFreeCommandBuffers是一个良好的习惯:VkCommandBuffer cmd_bufs[1] = {info.cmd}; vkFreeCommandBuffers(info.device, info.cmd_pool, 1, cmd_bufs); vkDestroyCommandPool(info.device, info.cmd_pool, NULL);


栏目分类
相关棋牌游戏技巧