From 4e2030cc6820338a8133b2e56010cc627f06af5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis-Francis=20Ratt=C3=A9-Boulianne?= Date: Wed, 2 Oct 2024 14:42:17 -0400 Subject: [PATCH] panfrost: create a backend-specific hook for `emit_fbds` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using CSF backend, we might want to create multiple versions of the framebuffer descriptor to support incremental rendering. Signed-off-by: Louis-Francis Ratté-Boulianne Reviewed-by: Boris Brezillon Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 3 +-- src/gallium/drivers/panfrost/pan_csf.c | 8 ++++++++ src/gallium/drivers/panfrost/pan_csf.h | 3 +++ src/gallium/drivers/panfrost/pan_jm.c | 8 ++++++++ src/gallium/drivers/panfrost/pan_jm.h | 3 +++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index bf0995bd45b..0ddaf166934 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -2605,8 +2605,7 @@ emit_fbd(struct panfrost_batch *batch, struct pan_fb_info *fb) panfrost_sample_positions_offset(pan_sample_pattern(fb->nr_samples)); #endif - batch->framebuffer.gpu |= - GENX(pan_emit_fbd)(fb, 0, &tls, &batch->tiler_ctx, batch->framebuffer.cpu); + JOBX(emit_fbds)(batch, fb, &tls); } /* Mark a surface as written */ diff --git a/src/gallium/drivers/panfrost/pan_csf.c b/src/gallium/drivers/panfrost/pan_csf.c index 4ebf7230a71..a8cd2cf4438 100644 --- a/src/gallium/drivers/panfrost/pan_csf.c +++ b/src/gallium/drivers/panfrost/pan_csf.c @@ -465,6 +465,14 @@ GENX(csf_preload_fb)(struct panfrost_batch *batch, struct pan_fb_info *fb) (&dev->fb_preload_cache, &batch->pool.base, fb, batch->tls.gpu, NULL); } +void +GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb, + struct pan_tls_info *tls) +{ + batch->framebuffer.gpu |= + GENX(pan_emit_fbd)(fb, 0, tls, &batch->tiler_ctx, batch->framebuffer.cpu); +} + void GENX(csf_emit_fragment_job)(struct panfrost_batch *batch, const struct pan_fb_info *pfb) diff --git a/src/gallium/drivers/panfrost/pan_csf.h b/src/gallium/drivers/panfrost/pan_csf.h index 5667e212575..529dd16ad91 100644 --- a/src/gallium/drivers/panfrost/pan_csf.h +++ b/src/gallium/drivers/panfrost/pan_csf.h @@ -67,6 +67,7 @@ struct panfrost_csf_context { struct panfrost_batch; struct panfrost_context; struct pan_fb_info; +struct pan_tls_info; struct pipe_draw_info; struct pipe_grid_info; struct pipe_draw_start_count_bias; @@ -79,6 +80,8 @@ void GENX(csf_cleanup_batch)(struct panfrost_batch *batch); int GENX(csf_submit_batch)(struct panfrost_batch *batch); void GENX(csf_preload_fb)(struct panfrost_batch *batch, struct pan_fb_info *fb); +void GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb, + struct pan_tls_info *tls); void GENX(csf_emit_fragment_job)(struct panfrost_batch *batch, const struct pan_fb_info *pfb); void GENX(csf_emit_batch_end)(struct panfrost_batch *batch); diff --git a/src/gallium/drivers/panfrost/pan_jm.c b/src/gallium/drivers/panfrost/pan_jm.c index 75830f1f99a..ebcf740fb31 100644 --- a/src/gallium/drivers/panfrost/pan_jm.c +++ b/src/gallium/drivers/panfrost/pan_jm.c @@ -253,6 +253,14 @@ GENX(jm_preload_fb)(struct panfrost_batch *batch, struct pan_fb_info *fb) } } +void +GENX(jm_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb, + struct pan_tls_info *tls) +{ + batch->framebuffer.gpu |= GENX(pan_emit_fbd)( + fb, 0, tls, &batch->tiler_ctx, batch->framebuffer.cpu); +} + void GENX(jm_emit_fragment_job)(struct panfrost_batch *batch, const struct pan_fb_info *pfb) diff --git a/src/gallium/drivers/panfrost/pan_jm.h b/src/gallium/drivers/panfrost/pan_jm.h index 734b74554b2..f6cbb7b78be 100644 --- a/src/gallium/drivers/panfrost/pan_jm.h +++ b/src/gallium/drivers/panfrost/pan_jm.h @@ -45,6 +45,7 @@ struct panfrost_jm_batch { struct panfrost_batch; struct panfrost_context; struct pan_fb_info; +struct pan_tls_info; struct pipe_draw_info; struct pipe_grid_info; struct pipe_draw_start_count_bias; @@ -70,6 +71,8 @@ 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); +void GENX(jm_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb, + struct pan_tls_info *tls); void GENX(jm_emit_fragment_job)(struct panfrost_batch *batch, const struct pan_fb_info *pfb);