From 8a5b885c94a6f61e2cf97afb5f4aa6cd24fe33bb Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 8 Oct 2020 10:49:12 +0200 Subject: [PATCH] panfrost: Allocate blit_blend with ralloc() This way we can use blend states as memory context which will help simplify the blend shader creation/destruction logic. Signed-off-by: Boris Brezillon Reviewed-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_context.c | 3 ++- src/gallium/drivers/panfrost/pan_context.h | 2 +- src/gallium/drivers/panfrost/pan_job.c | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 8185640..06afce0 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1608,8 +1608,9 @@ panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags) panfrost_batch_init(ctx); if (!(dev->quirks & IS_BIFROST)) { + ctx->blit_blend = rzalloc(ctx, struct panfrost_blend_state); for (unsigned c = 0; c < PIPE_MAX_COLOR_BUFS; ++c) - ctx->blit_blend.rt[c].shaders = _mesa_hash_table_u64_create(ctx); + ctx->blit_blend->rt[c].shaders = _mesa_hash_table_u64_create(ctx); } /* By default mask everything on */ diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index 50fddff..130989f 100644 --- a/src/gallium/drivers/panfrost/pan_context.h +++ b/src/gallium/drivers/panfrost/pan_context.h @@ -178,7 +178,7 @@ struct panfrost_context { unsigned sample_mask; unsigned min_samples; - struct panfrost_blend_state blit_blend; + struct panfrost_blend_state *blit_blend; }; /* Corresponds to the CSO */ diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index 57abaa2..d07b358 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -854,7 +854,8 @@ panfrost_load_surface(struct panfrost_batch *batch, struct pipe_surface *surf, u if (loc >= FRAG_RESULT_DATA0 && !panfrost_can_fixed_blend(rsrc->base.format)) { struct panfrost_blend_shader *b = - panfrost_get_blend_shader(batch->ctx, &batch->ctx->blit_blend, rsrc->base.format, loc - FRAG_RESULT_DATA0); + panfrost_get_blend_shader(batch->ctx, batch->ctx->blit_blend, + rsrc->base.format, loc - FRAG_RESULT_DATA0); struct panfrost_bo *bo = panfrost_batch_create_bo(batch, b->size, PAN_BO_EXECUTE, -- 2.7.4