From 635a40cc5c555b4edc9cd3bd84d58574b8e1621b Mon Sep 17 00:00:00 2001 From: David Heidelberg Date: Mon, 15 Jul 2024 18:14:46 -0700 Subject: [PATCH] freedreno: Introduce emit_blit_fini De-duplicate the code a bit and prepare for using this in clear_buffer function. Reviewed-by: Rob Clark Signed-off-by: David Heidelberg Part-of: --- .../drivers/freedreno/a6xx/fd6_blitter.cc | 84 ++++++------------- 1 file changed, 25 insertions(+), 59 deletions(-) diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_blitter.cc b/src/gallium/drivers/freedreno/a6xx/fd6_blitter.cc index def755ea452..31746d648b2 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_blitter.cc +++ b/src/gallium/drivers/freedreno/a6xx/fd6_blitter.cc @@ -277,6 +277,26 @@ emit_setup(struct fd_batch *batch) fd6_emit_ccu_cntl(ring, screen, false); } +template +static void +emit_blit_fini(struct fd_context *ctx, struct fd_ringbuffer *ring) +{ + fd6_event_write(ctx, ring, FD_LABEL); + OUT_WFI5(ring); + + OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); + OUT_RING(ring, ctx->screen->info->a6xx.magic.RB_DBG_ECO_CNTL_blit); + + OUT_PKT7(ring, CP_BLIT, 1); + OUT_RING(ring, CP_BLIT_0_OP(BLIT_OP_SCALE)); + + OUT_WFI5(ring); + + OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); + OUT_RING(ring, 0); /* RB_DBG_ECO_CNTL */ +} +FD_GENX(emit_blit_fini); + template static void emit_blit_setup(struct fd_ringbuffer *ring, enum pipe_format pfmt, @@ -463,19 +483,7 @@ emit_blit_buffer(struct fd_context *ctx, struct fd_ringbuffer *ring, OUT_RING(ring, A6XX_GRAS_2D_DST_BR_X(dshift + w - 1) | A6XX_GRAS_2D_DST_BR_Y(0)); - fd6_event_write(ctx, ring, FD_LABEL); - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, ctx->screen->info->a6xx.magic.RB_DBG_ECO_CNTL_blit); - - OUT_PKT7(ring, CP_BLIT, 1); - OUT_RING(ring, CP_BLIT_0_OP(BLIT_OP_SCALE)); - - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, 0); /* RB_DBG_ECO_CNTL */ + emit_blit_fini(ctx, ring); } } @@ -541,20 +549,7 @@ fd6_clear_ubwc(struct fd_batch *batch, struct fd_resource *rsc) assert_dt OUT_RING(ring, A6XX_GRAS_2D_DST_BR_X(w - 1) | A6XX_GRAS_2D_DST_BR_Y(h - 1)); - fd6_event_write(batch->ctx, ring, FD_LABEL); - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, batch->ctx->screen->info->a6xx.magic.RB_DBG_ECO_CNTL_blit); - - OUT_PKT7(ring, CP_BLIT, 1); - OUT_RING(ring, CP_BLIT_0_OP(BLIT_OP_SCALE)); - - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, 0); /* RB_DBG_ECO_CNTL */ - + emit_blit_fini(batch->ctx, ring); offset += w * h; size -= w * h; } @@ -742,22 +737,7 @@ emit_blit_texture(struct fd_context *ctx, struct fd_ringbuffer *ring, emit_blit_dst(ring, info->dst.resource, info->dst.format, info->dst.level, dbox->z + i); - /* - * Blit command: - */ - fd6_event_write(ctx, ring, FD_LABEL); - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, ctx->screen->info->a6xx.magic.RB_DBG_ECO_CNTL_blit); - - OUT_PKT7(ring, CP_BLIT, 1); - OUT_RING(ring, CP_BLIT_0_OP(BLIT_OP_SCALE)); - - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, 0); /* RB_DBG_ECO_CNTL */ + emit_blit_fini(ctx, ring); } } @@ -817,6 +797,7 @@ emit_clear_color(struct fd_ringbuffer *ring, enum pipe_format pfmt, } } + template void fd6_clear_lrz(struct fd_batch *batch, struct fd_resource *zsbuf, @@ -915,22 +896,7 @@ fd6_clear_surface(struct fd_context *ctx, struct fd_ringbuffer *ring, i++) { emit_blit_dst(ring, psurf->texture, psurf->format, psurf->u.tex.level, i); - /* - * Blit command: - */ - fd6_event_write(ctx, ring, FD_LABEL); - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, ctx->screen->info->a6xx.magic.RB_DBG_ECO_CNTL_blit); - - OUT_PKT7(ring, CP_BLIT, 1); - OUT_RING(ring, CP_BLIT_0_OP(BLIT_OP_SCALE)); - - OUT_WFI5(ring); - - OUT_PKT4(ring, REG_A6XX_RB_DBG_ECO_CNTL, 1); - OUT_RING(ring, 0); /* RB_DBG_ECO_CNTL */ + emit_blit_fini(ctx, ring); } } FD_GENX(fd6_clear_surface);