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

Reply via email to