From 45c59db732528652ec70a7409af1f77d48b23325 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 24 Aug 2020 12:07:59 -0400 Subject: [PATCH] panfrost: Drop blend indirection We don't need to ralloc/memcpy/free, we can emit all at once when we have proper write ordering gaurantees. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 259478f0ada..34c6f42784f 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -719,7 +719,6 @@ panfrost_emit_frag_shader_meta(struct panfrost_batch *batch) struct panfrost_device *dev = pan_device(ctx->base.screen); unsigned rt_count = MAX2(ctx->pipe_framebuffer.nr_cbufs, 1); - void *rts = NULL; struct panfrost_transfer xfer; unsigned rt_size; @@ -731,28 +730,19 @@ panfrost_emit_frag_shader_meta(struct panfrost_batch *batch) rt_size = sizeof(struct midgard_blend_rt); unsigned desc_size = MALI_STATE_LENGTH + rt_size * rt_count; - - if (rt_size) - rts = rzalloc_size(ctx, rt_size * rt_count); + xfer = panfrost_pool_alloc_aligned(&batch->pool, desc_size, MALI_STATE_LENGTH); struct panfrost_blend_final blend[PIPE_MAX_COLOR_BUFS]; for (unsigned c = 0; c < ctx->pipe_framebuffer.nr_cbufs; ++c) blend[c] = panfrost_get_blend_for_context(ctx, c); - if (!(dev->quirks & MIDGARD_SFBD)) - panfrost_emit_blend(batch, rts, blend); - else - batch->draws |= PIPE_CLEAR_COLOR0; - - xfer = panfrost_pool_alloc_aligned(&batch->pool, desc_size, MALI_STATE_LENGTH); - panfrost_emit_frag_shader(ctx, (struct mali_state_packed *) xfer.cpu, blend); - memcpy(xfer.cpu + MALI_STATE_LENGTH, rts, rt_size * rt_count); - - if (rt_size) - ralloc_free(rts); + if (!(dev->quirks & MIDGARD_SFBD)) + panfrost_emit_blend(batch, xfer.cpu + MALI_STATE_LENGTH, blend); + else + batch->draws |= PIPE_CLEAR_COLOR0; return xfer.gpu; }