From e6a97a2b4ace0653d5774657fb0e81de55141453 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Wed, 4 Oct 2023 10:49:40 +0200 Subject: [PATCH] panfrost: Add a cleanup_batch() method to panfrost_vtable We have to do some cleanup on v10+. Let's add a new hook to allow per-arch batch cleanup procedures. Signed-off-by: Boris Brezillon Reviewed-by: Antonino Maniscalco Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 1 + src/gallium/drivers/panfrost/pan_jm.h | 6 ++++++ src/gallium/drivers/panfrost/pan_job.c | 3 +++ src/gallium/drivers/panfrost/pan_screen.h | 3 ++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 51da41c8054..33ae3040a8c 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -3777,6 +3777,7 @@ GENX(panfrost_cmdstream_screen_init)(struct panfrost_screen *screen) screen->vtbl.context_init = JOBX(init_context); screen->vtbl.context_cleanup = JOBX(cleanup_context); screen->vtbl.init_batch = JOBX(init_batch); + screen->vtbl.cleanup_batch = JOBX(cleanup_batch); screen->vtbl.submit_batch = submit_batch; screen->vtbl.get_blend_shader = GENX(pan_blend_get_shader_locked); screen->vtbl.get_compiler_options = GENX(pan_shader_get_compiler_options); diff --git a/src/gallium/drivers/panfrost/pan_jm.h b/src/gallium/drivers/panfrost/pan_jm.h index 02fa7eb4190..47d99cf3eda 100644 --- a/src/gallium/drivers/panfrost/pan_jm.h +++ b/src/gallium/drivers/panfrost/pan_jm.h @@ -60,6 +60,12 @@ GENX(jm_cleanup_context)(struct panfrost_context *ctx) } void GENX(jm_init_batch)(struct panfrost_batch *batch); + +static inline void +GENX(jm_cleanup_batch)(struct panfrost_batch *batch) +{ +} + int GENX(jm_submit_batch)(struct panfrost_batch *batch); void GENX(jm_preload_fb)(struct panfrost_batch *batch, struct pan_fb_info *fb); diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index d46ee5823d4..c427b29ab73 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -113,6 +113,7 @@ static void panfrost_batch_cleanup(struct panfrost_context *ctx, struct panfrost_batch *batch) { + struct panfrost_screen *screen = pan_screen(ctx->base.screen); struct panfrost_device *dev = pan_device(ctx->base.screen); assert(batch->seqnum); @@ -120,6 +121,8 @@ panfrost_batch_cleanup(struct panfrost_context *ctx, if (ctx->batch == batch) ctx->batch = NULL; + screen->vtbl.cleanup_batch(batch); + unsigned batch_idx = panfrost_batch_idx(batch); pan_bo_access *flags = util_dynarray_begin(&batch->bos); diff --git a/src/gallium/drivers/panfrost/pan_screen.h b/src/gallium/drivers/panfrost/pan_screen.h index af67ba3d9fb..ba3efbb710b 100644 --- a/src/gallium/drivers/panfrost/pan_screen.h +++ b/src/gallium/drivers/panfrost/pan_screen.h @@ -74,8 +74,9 @@ struct panfrost_vtable { void (*context_init)(struct panfrost_context *ctx); void (*context_cleanup)(struct panfrost_context *ctx); - /* Device-dependent initialization of a panfrost_batch */ + /* Device-dependent initialization/cleanup of a panfrost_batch */ void (*init_batch)(struct panfrost_batch *batch); + void (*cleanup_batch)(struct panfrost_batch *batch); /* Device-dependent submission of a panfrost_batch */ int (*submit_batch)(struct panfrost_batch *batch, struct pan_fb_info *fb);