From ab61393bc75d4963ba5a8146a67131a0b323e659 Mon Sep 17 00:00:00 2001 From: "Kristian H. Kristensen" Date: Thu, 2 Jul 2020 04:13:27 -0700 Subject: [PATCH] freedreno/a6xx: Don't emit src state when clearing Part-of: --- .../drivers/freedreno/a6xx/fd6_blitter.c | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c b/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c index 5207a26abfc..8da308556d6 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c @@ -518,22 +518,25 @@ emit_blit_or_clear_texture(struct fd_context *ctx, struct fd_ringbuffer *ring, OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_BLIT2DSCALE)); uint32_t nr_samples = fd_resource_nr_samples(&dst->base); - sx1 = sbox->x * nr_samples; - sy1 = sbox->y; - sx2 = (sbox->x + sbox->width) * nr_samples - 1; - sy2 = sbox->y + sbox->height - 1; + + if (!color) { + sx1 = sbox->x * nr_samples; + sy1 = sbox->y; + sx2 = (sbox->x + sbox->width) * nr_samples - 1; + sy2 = sbox->y + sbox->height - 1; + + OUT_PKT4(ring, REG_A6XX_GRAS_2D_SRC_TL_X, 4); + OUT_RING(ring, A6XX_GRAS_2D_SRC_TL_X_X(sx1)); + OUT_RING(ring, A6XX_GRAS_2D_SRC_BR_X_X(sx2)); + OUT_RING(ring, A6XX_GRAS_2D_SRC_TL_Y_Y(sy1)); + OUT_RING(ring, A6XX_GRAS_2D_SRC_BR_Y_Y(sy2)); + } dx1 = dbox->x * nr_samples; dy1 = dbox->y; dx2 = (dbox->x + dbox->width) * nr_samples - 1; dy2 = dbox->y + dbox->height - 1; - OUT_PKT4(ring, REG_A6XX_GRAS_2D_SRC_TL_X, 4); - OUT_RING(ring, A6XX_GRAS_2D_SRC_TL_X_X(sx1)); - OUT_RING(ring, A6XX_GRAS_2D_SRC_BR_X_X(sx2)); - OUT_RING(ring, A6XX_GRAS_2D_SRC_TL_Y_Y(sy1)); - OUT_RING(ring, A6XX_GRAS_2D_SRC_BR_Y_Y(sy2)); - OUT_PKT4(ring, REG_A6XX_GRAS_2D_DST_TL, 2); OUT_RING(ring, A6XX_GRAS_2D_DST_TL_X(dx1) | A6XX_GRAS_2D_DST_TL_Y(dy1)); OUT_RING(ring, A6XX_GRAS_2D_DST_BR_X(dx2) | A6XX_GRAS_2D_DST_BR_Y(dy2)); @@ -629,7 +632,8 @@ emit_blit_or_clear_texture(struct fd_context *ctx, struct fd_ringbuffer *ring, for (unsigned i = 0; i < info->dst.box.depth; i++) { - emit_blit_src(ring, info, sbox->z + i, nr_samples); + if (!color) + emit_blit_src(ring, info, sbox->z + i, nr_samples); emit_blit_dst(ring, info, dbox->z + i); -- 2.30.2