panfrost: Drop blend indirection
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 24 Aug 2020 16:07:59 +0000 (12:07 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 28 Aug 2020 14:53:53 +0000 (14:53 +0000)
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 <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6476>

src/gallium/drivers/panfrost/pan_cmdstream.c

index 259478f0adab897c76e37ef9df23795746be6049..34c6f42784f7aa0cadbd4d9b3271fe4fb91ae5c7 100644 (file)
@@ -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);
 
         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;
 
         struct panfrost_transfer xfer;
         unsigned rt_size;
 
@@ -731,29 +730,20 @@ 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;
                 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);
 
 
         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);
 
+        panfrost_emit_frag_shader(ctx, (struct mali_state_packed *) xfer.cpu, blend);
+
         if (!(dev->quirks & MIDGARD_SFBD))
         if (!(dev->quirks & MIDGARD_SFBD))
-                panfrost_emit_blend(batch, rts, blend);
+                panfrost_emit_blend(batch, xfer.cpu + MALI_STATE_LENGTH, blend);
         else
                 batch->draws |= PIPE_CLEAR_COLOR0;
 
         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);
-
         return xfer.gpu;
 }
 
         return xfer.gpu;
 }