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 <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7066>
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_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 @@
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 @@
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,