From e11240228b7a2f1e94b9a491d7de9950bc35992c Mon Sep 17 00:00:00 2001 From: Aitor Camacho Date: Tue, 16 Dec 2025 00:31:51 +0900 Subject: [PATCH] kk: Remove signal and end from upload writes not to end compute encoders Not ending the compute encoder allows us to concatenate next commands into the same encoder if a compute encoder is requested. Acked-by: Arcady Goldmints-Orlov Signed-off-by: Aitor Camacho Part-of: --- src/kosmickrisp/vulkan/kk_encoder.c | 3 --- src/kosmickrisp/vulkan/kk_event.c | 10 ++++------ src/kosmickrisp/vulkan/kk_query_pool.c | 3 ++- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/kosmickrisp/vulkan/kk_encoder.c b/src/kosmickrisp/vulkan/kk_encoder.c index a972d45c87b..eeb91c561c5 100644 --- a/src/kosmickrisp/vulkan/kk_encoder.c +++ b/src/kosmickrisp/vulkan/kk_encoder.c @@ -167,9 +167,6 @@ upload_queue_writes(struct kk_cmd_buffer *cmd) } enc->copy_query_pool_result_infos.size = 0u; } - - /* All immediate write done, reset encoder */ - kk_encoder_signal_fence_and_end(cmd); } static void diff --git a/src/kosmickrisp/vulkan/kk_event.c b/src/kosmickrisp/vulkan/kk_event.c index 3a16d19e49e..9cee3051ff7 100644 --- a/src/kosmickrisp/vulkan/kk_event.c +++ b/src/kosmickrisp/vulkan/kk_event.c @@ -96,10 +96,9 @@ kk_CmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent _event, VK_FROM_HANDLE(kk_cmd_buffer, cmd, commandBuffer); enum kk_encoder_type last_used = cmd->encoder->main.last_used; kk_cmd_write(cmd, event->bo->map, event->addr, VK_EVENT_SET); - if (last_used != KK_ENC_NONE) - kk_encoder_signal_fence_and_end(cmd); - else + if (last_used == KK_ENC_NONE || last_used == KK_ENC_COMPUTE) upload_queue_writes(cmd); + kk_encoder_signal_fence_and_end(cmd); /* If we were inside a render pass, restart it loading attachments */ if (last_used == KK_ENC_RENDER) { @@ -119,10 +118,9 @@ kk_CmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent _event, VK_FROM_HANDLE(kk_cmd_buffer, cmd, commandBuffer); enum kk_encoder_type last_used = cmd->encoder->main.last_used; kk_cmd_write(cmd, event->bo->map, event->addr, VK_EVENT_RESET); - if (last_used != KK_ENC_NONE) - kk_encoder_signal_fence_and_end(cmd); - else + if (last_used == KK_ENC_NONE || last_used == KK_ENC_COMPUTE) upload_queue_writes(cmd); + kk_encoder_signal_fence_and_end(cmd); /* If we were inside a render pass, restart it loading attachments */ if (last_used == KK_ENC_RENDER) { diff --git a/src/kosmickrisp/vulkan/kk_query_pool.c b/src/kosmickrisp/vulkan/kk_query_pool.c index 60d252c1573..987b9299893 100644 --- a/src/kosmickrisp/vulkan/kk_query_pool.c +++ b/src/kosmickrisp/vulkan/kk_query_pool.c @@ -424,6 +424,7 @@ kk_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, util_dynarray_append(&cmd->encoder->copy_query_pool_result_infos, info); /* If we are not mid encoder, just upload the writes */ - if (cmd->encoder->main.last_used == KK_ENC_NONE) + enum kk_encoder_type last_used = cmd->encoder->main.last_used; + if (last_used == KK_ENC_NONE || last_used == KK_ENC_COMPUTE) upload_queue_writes(cmd); }