Mesa (main): tu: Do not flush ccu in clear/blits during renderpass
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed May 11 08:28:53 UTC 2022
Module: Mesa
Branch: main
Commit: 187d3df52c77b92bb8002f90818b0a9fce8a7e1a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=187d3df52c77b92bb8002f90818b0a9fce8a7e1a
Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date: Thu May 5 20:29:05 2022 +0300
tu: Do not flush ccu in clear/blits during renderpass
For clear/blits ccu flush not only worse for perf, but also messes up
flush_bits when executed in a conditional set of commands.
We already don't flush for 3d blits.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6419
Fixes: 487aa807bd1b70602fcb6fbdabd101d4cff7c07b
("tu: Rewrite flushing to use barriers")
Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16352>
---
src/freedreno/vulkan/tu_clear_blit.c | 4 +++-
src/freedreno/vulkan/tu_cmd_buffer.c | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c
index 0ef9cc8efe0..db7cdcd9eb0 100644
--- a/src/freedreno/vulkan/tu_clear_blit.c
+++ b/src/freedreno/vulkan/tu_clear_blit.c
@@ -333,7 +333,9 @@ r2d_setup(struct tu_cmd_buffer *cmd,
{
assert(samples == VK_SAMPLE_COUNT_1_BIT);
- tu_emit_cache_flush_ccu(cmd, cs, TU_CMD_CCU_SYSMEM);
+ if (!cmd->state.pass) {
+ tu_emit_cache_flush_ccu(cmd, cs, TU_CMD_CCU_SYSMEM);
+ }
r2d_setup_common(cmd, cs, format, aspect_mask, blit_param, clear, ubwc, false);
}
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index 3f1dd3831b6..c82a1a36228 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -159,6 +159,8 @@ tu_emit_cache_flush_ccu(struct tu_cmd_buffer *cmd_buffer,
enum tu_cmd_flush_bits flushes = cmd_buffer->state.cache.flush_bits;
assert(ccu_state != TU_CMD_CCU_UNKNOWN);
+ /* It's unsafe to flush inside condition because we clear flush_bits */
+ assert(!cs->cond_flags);
/* Changing CCU state must involve invalidating the CCU. In sysmem mode,
* the CCU may also contain data that we haven't flushed out yet, so we
More information about the mesa-commit
mailing list