From 2a7085584e1de921379ac7853f50a90e952e3099 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Sat, 9 Mar 2024 19:05:54 -0800 Subject: [PATCH] venus: simplify vn_cmd_reset and apply more code sharing Signed-off-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_command_buffer.c | 75 +++++++++------------------ 1 file changed, 24 insertions(+), 51 deletions(-) diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c index 48537252356..7cb6d2e1105 100644 --- a/src/virtio/vulkan/vn_command_buffer.c +++ b/src/virtio/vulkan/vn_command_buffer.c @@ -678,6 +678,27 @@ vn_CreateCommandPool(VkDevice device, return VK_SUCCESS; } +static void +vn_cmd_reset(struct vn_command_buffer *cmd) +{ + vn_cs_encoder_reset(&cmd->cs); + + cmd->state = VN_COMMAND_BUFFER_STATE_INITIAL; + cmd->draw_cmd_batched = 0; + + /* reset cmd builder */ + vk_free(&cmd->pool->allocator, cmd->builder.present_src_images); + list_splicetail(&cmd->builder.query_records, + &cmd->pool->free_query_records); + memset(&cmd->builder, 0, sizeof(cmd->builder)); + list_inithead(&cmd->builder.query_records); + + if (cmd->linked_qfb_cmd) { + vn_query_feedback_cmd_free(cmd->linked_qfb_cmd); + cmd->linked_qfb_cmd = NULL; + } +} + void vn_DestroyCommandPool(VkDevice device, VkCommandPool commandPool, @@ -698,21 +719,9 @@ vn_DestroyCommandPool(VkDevice device, list_for_each_entry_safe(struct vn_command_buffer, cmd, &pool->command_buffers, head) { + vn_cmd_reset(cmd); vn_cs_encoder_fini(&cmd->cs); vn_object_base_fini(&cmd->base); - - if (cmd->builder.present_src_images) - vk_free(alloc, cmd->builder.present_src_images); - - list_for_each_entry_safe(struct vn_cmd_query_record, record, - &cmd->builder.query_records, head) - vk_free(alloc, record); - - if (cmd->linked_qfb_cmd) { - vn_query_feedback_cmd_free(cmd->linked_qfb_cmd); - cmd->linked_qfb_cmd = NULL; - } - vk_free(alloc, cmd); } @@ -726,31 +735,6 @@ vn_DestroyCommandPool(VkDevice device, vk_free(alloc, pool); } -static void -vn_cmd_reset(struct vn_command_buffer *cmd) -{ - vn_cs_encoder_reset(&cmd->cs); - - cmd->state = VN_COMMAND_BUFFER_STATE_INITIAL; - cmd->draw_cmd_batched = 0; - - if (cmd->builder.present_src_images) - vk_free(&cmd->pool->allocator, cmd->builder.present_src_images); - - list_for_each_entry_safe(struct vn_cmd_query_record, record, - &cmd->builder.query_records, head) - list_move_to(&record->head, &cmd->pool->free_query_records); - - if (cmd->linked_qfb_cmd) { - vn_query_feedback_cmd_free(cmd->linked_qfb_cmd); - cmd->linked_qfb_cmd = NULL; - } - - memset(&cmd->builder, 0, sizeof(cmd->builder)); - - list_inithead(&cmd->builder.query_records); -} - VkResult vn_ResetCommandPool(VkDevice device, VkCommandPool commandPool, @@ -862,21 +846,10 @@ vn_FreeCommandBuffers(VkDevice device, if (!cmd) continue; - vn_cs_encoder_fini(&cmd->cs); list_del(&cmd->head); - if (cmd->builder.present_src_images) - vk_free(alloc, cmd->builder.present_src_images); - - list_for_each_entry_safe(struct vn_cmd_query_record, record, - &cmd->builder.query_records, head) - list_move_to(&record->head, &cmd->pool->free_query_records); - - if (cmd->linked_qfb_cmd) { - vn_query_feedback_cmd_free(cmd->linked_qfb_cmd); - cmd->linked_qfb_cmd = NULL; - } - + vn_cmd_reset(cmd); + vn_cs_encoder_fini(&cmd->cs); vn_object_base_fini(&cmd->base); vk_free(alloc, cmd); }