diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 950a8a35310..db613d6f0de 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -3690,6 +3690,15 @@ screen_destroy(struct pipe_screen *pscreen) pan_blitter_cleanup(dev); } +static void +preload(struct panfrost_batch *batch, struct pan_fb_info *fb) +{ + struct panfrost_device *dev = pan_device(batch->ctx->base.screen); + + pan_preload_fb(&batch->pool.base, &batch->scoreboard, fb, batch->tls.gpu, + pan_is_bifrost(dev) ? batch->tiler_ctx.bifrost : 0); +} + void panfrost_cmdstream_screen_init(struct panfrost_screen *screen) { @@ -3700,6 +3709,7 @@ panfrost_cmdstream_screen_init(struct panfrost_screen *screen) screen->vtbl.emit_fbd = emit_fbd; screen->vtbl.emit_fragment_job = emit_fragment_job; screen->vtbl.screen_destroy = screen_destroy; + screen->vtbl.preload = preload; pan_blitter_init(dev, &screen->blitter.bin_pool.base, &screen->blitter.desc_pool.base); diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index a56e1560d45..a2964766e75 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -29,7 +29,6 @@ #include "drm-uapi/panfrost_drm.h" #include "pan_bo.h" -#include "pan_blitter.h" #include "pan_context.h" #include "util/hash_table.h" #include "util/ralloc.h" @@ -664,16 +663,6 @@ panfrost_batch_to_fb_info(const struct panfrost_batch *batch, } } -static void -panfrost_batch_draw_wallpaper(struct panfrost_batch *batch, - struct pan_fb_info *fb) -{ - struct panfrost_device *dev = pan_device(batch->ctx->base.screen); - - pan_preload_fb(&batch->pool.base, &batch->scoreboard, fb, batch->tls.gpu, - pan_is_bifrost(dev) ? batch->tiler_ctx.bifrost : 0); -} - static int panfrost_batch_submit_ioctl(struct panfrost_batch *batch, mali_ptr first_job_desc, @@ -864,8 +853,7 @@ panfrost_batch_submit(struct panfrost_batch *batch, panfrost_batch_to_fb_info(batch, &fb, rts, &zs, &s, false); - panfrost_batch_draw_wallpaper(batch, &fb); - + screen->vtbl.preload(batch, &fb); if (!pan_is_bifrost(dev)) { mali_ptr polygon_list = panfrost_batch_get_polygon_list(batch); diff --git a/src/gallium/drivers/panfrost/pan_screen.h b/src/gallium/drivers/panfrost/pan_screen.h index eda9a72a5f0..e5261016092 100644 --- a/src/gallium/drivers/panfrost/pan_screen.h +++ b/src/gallium/drivers/panfrost/pan_screen.h @@ -66,6 +66,9 @@ struct panfrost_vtable { /* General destructor */ void (*screen_destroy)(struct pipe_screen *); + + /* Preload framebuffer */ + void (*preload)(struct panfrost_batch *, struct pan_fb_info *); }; struct panfrost_screen {