From c04dacb42c08204e2681e9e2a55b23cbd986864e Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Sat, 8 Mar 2025 20:35:07 -0600 Subject: [PATCH] nvk: Flush pushbufs in EndCommandBuffer() Part-of: --- src/nouveau/vulkan/nvk_cmd_buffer.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index 057a365192a..26a6335cc03 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -370,6 +370,13 @@ nvk_BeginCommandBuffer(VkCommandBuffer commandBuffer, return VK_SUCCESS; } +static void +flush_mem_list(struct nvk_cmd_buffer *cmd, struct list_head *mem_list) +{ + list_for_each_entry_safe(struct nvk_cmd_mem, mem, mem_list, link) + nvkmd_mem_sync_map_to_gpu(mem->mem, 0, mem->mem->size_B); +} + VKAPI_ATTR VkResult VKAPI_CALL nvk_EndCommandBuffer(VkCommandBuffer commandBuffer) { @@ -377,6 +384,13 @@ nvk_EndCommandBuffer(VkCommandBuffer commandBuffer) nvk_cmd_buffer_flush_push(cmd, false); + /* We only need to flush the memory objects we own because, if there are + * secondaries, they will have been flushed in their EndCommandBuffer() + * call. + */ + flush_mem_list(cmd, &cmd->owned_mem); + flush_mem_list(cmd, &cmd->owned_gart_mem); + return vk_command_buffer_get_record_result(&cmd->vk); } @@ -1267,4 +1281,4 @@ nvk_CmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer, .pipeline_location = vk_stage_flags_to_nv9097_pipeline_location(stage), .structure_size = STRUCTURE_SIZE_ONE_WORD, }); -} \ No newline at end of file +}