Module: Mesa Branch: staging/23.1 Commit: 3ed532d994ffa344cbf3992e09bc4150d8144ce4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ed532d994ffa344cbf3992e09bc4150d8144ce4
Author: Yiwei Zhang <[email protected]> Date: Wed Jul 19 23:10:22 2023 +0000 turnip: flush cache for dstBuffer in vkCmdCopyQueryPoolResults There can be other writes to the dstBuffer gated by proper barriers beforehand. TEST=dEQP-VK.pipeline.*.timestamp.* with Venus on Turnip Fixes: 487aa807bd1b ("tu: Rewrite flushing to use barriers") Signed-off-by: Yiwei Zhang <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24245> (cherry picked from commit a89752d6300a850537b7f509b5662984b8aae072) --- .pick_status.json | 2 +- src/freedreno/vulkan/tu_cmd_buffer.cc | 2 +- src/freedreno/vulkan/tu_cmd_buffer.h | 3 +++ src/freedreno/vulkan/tu_query.cc | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index d255698955b..1b9294ebf6e 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -517,7 +517,7 @@ "description": "turnip: flush cache for dstBuffer in vkCmdCopyQueryPoolResults", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "487aa807bd1b70602fcb6fbdabd101d4cff7c07b" }, diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 79aff4c243f..88e9fa24205 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -182,7 +182,7 @@ tu6_emit_flushes(struct tu_cmd_buffer *cmd_buffer, } /* "Normal" cache flushes outside the renderpass, that don't require any special handling */ -static void +void tu_emit_cache_flush(struct tu_cmd_buffer *cmd_buffer) { tu6_emit_flushes(cmd_buffer, &cmd_buffer->cs, &cmd_buffer->state.cache); diff --git a/src/freedreno/vulkan/tu_cmd_buffer.h b/src/freedreno/vulkan/tu_cmd_buffer.h index b5ee6c24ee0..4f29777808f 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.h +++ b/src/freedreno/vulkan/tu_cmd_buffer.h @@ -640,6 +640,9 @@ void tu_render_pass_state_merge(struct tu_render_pass_state *dst, VkResult tu_cmd_buffer_begin(struct tu_cmd_buffer *cmd_buffer, const VkCommandBufferBeginInfo *pBeginInfo); +void +tu_emit_cache_flush(struct tu_cmd_buffer *cmd_buffer); + void tu_emit_cache_flush_renderpass(struct tu_cmd_buffer *cmd_buffer); void tu_emit_cache_flush_ccu(struct tu_cmd_buffer *cmd_buffer, diff --git a/src/freedreno/vulkan/tu_query.cc b/src/freedreno/vulkan/tu_query.cc index 74d24d30dfb..006478050c9 100644 --- a/src/freedreno/vulkan/tu_query.cc +++ b/src/freedreno/vulkan/tu_query.cc @@ -614,6 +614,9 @@ emit_copy_query_pool_results(struct tu_cmd_buffer *cmdbuf, VkDeviceSize stride, VkQueryResultFlags flags) { + /* Flush cache for the buffer to copy to. */ + tu_emit_cache_flush(cmdbuf); + /* From the Vulkan 1.1.130 spec: * * vkCmdCopyQueryPoolResults is guaranteed to see the effect of previous
