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