From 6393ebbdbbb4bdcc18cdb8a4cebf0f36956474fa Mon Sep 17 00:00:00 2001 From: Ludvig Lindau Date: Tue, 8 Apr 2025 10:49:54 +0000 Subject: [PATCH] panvk: Get flush_id once per submit Get flush_id once per command buffer in the submit and use it for all subqueues instead of getting a new flush_id for every subqueue. Reviewed-by: Boris Brezillon Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/panfrost/vulkan/csf/panvk_vX_queue.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_queue.c b/src/panfrost/vulkan/csf/panvk_vX_queue.c index 27dd24c34a2..31ed4350bee 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_queue.c +++ b/src/panfrost/vulkan/csf/panvk_vX_queue.c @@ -928,6 +928,8 @@ panvk_queue_submit_init_cmdbufs(struct panvk_queue_submit *submit, struct panvk_cmd_buffer *cmdbuf = container_of( vk_submit->command_buffers[i], struct panvk_cmd_buffer, vk); + uint32_t flush_id = panthor_kmod_get_flush_id(dev->kmod.dev); + for (uint32_t j = 0; j < ARRAY_SIZE(cmdbuf->state.cs); j++) { struct cs_builder *b = panvk_get_cs_builder(cmdbuf, j); if (cs_is_empty(b)) @@ -938,10 +940,13 @@ panvk_queue_submit_init_cmdbufs(struct panvk_queue_submit *submit, .queue_index = j, .stream_size = cs_root_chunk_size(b), .stream_addr = cs_root_chunk_gpu_addr(b), - .latest_flush = panthor_kmod_get_flush_id(dev->kmod.dev), + .latest_flush = flush_id, }; } + if (util_bitcount(submit->utrace.queue_mask) > 0) + flush_id = panthor_kmod_get_flush_id(dev->kmod.dev); + u_foreach_bit(j, submit->utrace.queue_mask) { struct u_trace *ut = &cmdbuf->utrace.uts[j]; @@ -971,7 +976,7 @@ panvk_queue_submit_init_cmdbufs(struct panvk_queue_submit *submit, .queue_index = j, .stream_size = cs_root_chunk_size(&clone_builder), .stream_addr = cs_root_chunk_gpu_addr(&clone_builder), - .latest_flush = panthor_kmod_get_flush_id(dev->kmod.dev), + .latest_flush = flush_id, }; ut = &clone_ut;