diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index e824d8d91fe..564ed55d221 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -2637,7 +2637,7 @@ panfrost_initialize_surface(struct panfrost_batch *batch, /* Generate a fragment job. This should be called once per frame. (Usually, * this corresponds to eglSwapBuffers or one of glFlush, glFinish) */ -static mali_ptr +static void emit_fragment_job(struct panfrost_batch *batch, const struct pan_fb_info *pfb) { /* Mark the affected buffers as initialized, since we're writing to it. @@ -2674,8 +2674,7 @@ emit_fragment_job(struct panfrost_batch *batch, const struct pan_fb_info *pfb) pan_pool_alloc_desc(&batch->pool.base, FRAGMENT_JOB); GENX(pan_emit_fragment_job)(pfb, batch->framebuffer.gpu, transfer.cpu); - - return transfer.gpu; + batch->frag_job = transfer.gpu; } #define DEFINE_CASE(c) \ diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index c13cdbe73ad..1dd3a691c22 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -740,9 +740,9 @@ panfrost_batch_submit_jobs(struct panfrost_batch *batch, } if (has_frag) { - mali_ptr fragjob = screen->vtbl.emit_fragment_job(batch, fb); - ret = panfrost_batch_submit_ioctl(batch, fragjob, PANFROST_JD_REQ_FS, 0, - out_sync); + screen->vtbl.emit_fragment_job(batch, fb); + ret = panfrost_batch_submit_ioctl(batch, batch->frag_job, + PANFROST_JD_REQ_FS, 0, out_sync); if (ret) goto done; } diff --git a/src/gallium/drivers/panfrost/pan_job.h b/src/gallium/drivers/panfrost/pan_job.h index 091682432b7..964ed9fafb9 100644 --- a/src/gallium/drivers/panfrost/pan_job.h +++ b/src/gallium/drivers/panfrost/pan_job.h @@ -142,6 +142,9 @@ struct panfrost_batch { /* Job scoreboarding state */ struct pan_scoreboard scoreboard; + /* Fragment job GPU address */ + mali_ptr frag_job; + /* Scratchpad BO bound to the batch, or NULL if none bound yet */ struct panfrost_bo *scratchpad; diff --git a/src/gallium/drivers/panfrost/pan_screen.h b/src/gallium/drivers/panfrost/pan_screen.h index a9d408ec98d..6058b92faa3 100644 --- a/src/gallium/drivers/panfrost/pan_screen.h +++ b/src/gallium/drivers/panfrost/pan_screen.h @@ -71,8 +71,8 @@ struct panfrost_vtable { void (*emit_fbd)(struct panfrost_batch *, const struct pan_fb_info *); /* Emits a fragment job */ - mali_ptr (*emit_fragment_job)(struct panfrost_batch *, - const struct pan_fb_info *); + void (*emit_fragment_job)(struct panfrost_batch *, + const struct pan_fb_info *); /* General destructor */ void (*screen_destroy)(struct pipe_screen *);