diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c index a7a0df84fa3..e416215cde7 100644 --- a/src/freedreno/vulkan/tu_clear_blit.c +++ b/src/freedreno/vulkan/tu_clear_blit.c @@ -413,8 +413,25 @@ r2d_teardown(struct tu_cmd_buffer *cmd, static void r2d_run(struct tu_cmd_buffer *cmd, struct tu_cs *cs) { + if (cmd->device->physical_device->info->a6xx.magic.RB_DBG_ECO_CNTL_blit != + cmd->device->physical_device->info->a6xx.magic.RB_DBG_ECO_CNTL) { + /* This a non-context register, so we have to WFI before changing. */ + tu_cs_emit_wfi(cs); + tu_cs_emit_write_reg( + cs, REG_A6XX_RB_DBG_ECO_CNTL, + cmd->device->physical_device->info->a6xx.magic.RB_DBG_ECO_CNTL_blit); + } + tu_cs_emit_pkt7(cs, CP_BLIT, 1); tu_cs_emit(cs, CP_BLIT_0_OP(BLIT_OP_SCALE)); + + if (cmd->device->physical_device->info->a6xx.magic.RB_DBG_ECO_CNTL_blit != + cmd->device->physical_device->info->a6xx.magic.RB_DBG_ECO_CNTL) { + tu_cs_emit_wfi(cs); + tu_cs_emit_write_reg( + cs, REG_A6XX_RB_DBG_ECO_CNTL, + cmd->device->physical_device->info->a6xx.magic.RB_DBG_ECO_CNTL); + } } /* r3d_ = shader path operations */ @@ -3189,8 +3206,7 @@ store_cp_blit(struct tu_cmd_buffer *cmd, /* Wait for CACHE_INVALIDATE to land */ tu_cs_emit_wfi(cs); - tu_cs_emit_pkt7(cs, CP_BLIT, 1); - tu_cs_emit(cs, CP_BLIT_0_OP(BLIT_OP_SCALE)); + r2d_run(cmd, cs); /* CP_BLIT writes to the CCU, unlike CP_EVENT_WRITE::BLIT which writes to * sysmem, and we generally assume that GMEM renderpasses leave their diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index f10f4e7dc7d..0f062185747 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -934,7 +934,8 @@ tu6_init_hw(struct tu_cmd_buffer *cmd, struct tu_cs *cs) tu_cs_emit_regs(cs, A6XX_RB_CCU_CNTL(.color_offset = phys_dev->ccu_offset_bypass)); cmd->state.ccu_state = TU_CMD_CCU_SYSMEM; - tu_cs_emit_write_reg(cs, REG_A6XX_RB_DBG_ECO_CNTL, 0x00100000); + tu_cs_emit_write_reg(cs, REG_A6XX_RB_DBG_ECO_CNTL, + phys_dev->info->a6xx.magic.RB_DBG_ECO_CNTL); tu_cs_emit_write_reg(cs, REG_A6XX_SP_FLOAT_CNTL, 0); tu_cs_emit_write_reg(cs, REG_A6XX_SP_DBG_ECO_CNTL, phys_dev->info->a6xx.magic.SP_DBG_ECO_CNTL);