diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 17 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_job.h | 3 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index f3950b05391..745d42e314f 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -163,18 +163,16 @@ panfrost_clear( } static mali_ptr -panfrost_attach_vt_mfbd(struct panfrost_context *ctx) +panfrost_attach_vt_mfbd(struct panfrost_batch *batch) { - struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); struct bifrost_framebuffer mfbd = panfrost_emit_mfbd(batch, ~0); return panfrost_upload_transient(batch, &mfbd, sizeof(mfbd)) | MALI_MFBD; } static mali_ptr -panfrost_attach_vt_sfbd(struct panfrost_context *ctx) +panfrost_attach_vt_sfbd(struct panfrost_batch *batch) { - struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); struct mali_single_framebuffer sfbd = panfrost_emit_sfbd(batch, ~0); return panfrost_upload_transient(batch, &sfbd, sizeof(sfbd)) | MALI_SFBD; @@ -191,12 +189,15 @@ panfrost_attach_vt_framebuffer(struct panfrost_context *ctx) } struct panfrost_screen *screen = pan_screen(ctx->base.screen); - mali_ptr framebuffer = screen->require_sfbd ? - panfrost_attach_vt_sfbd(ctx) : - panfrost_attach_vt_mfbd(ctx); + struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx); + + if (!batch->framebuffer) + batch->framebuffer = screen->require_sfbd ? + panfrost_attach_vt_sfbd(batch) : + panfrost_attach_vt_mfbd(batch); for (unsigned i = 0; i < PIPE_SHADER_TYPES; ++i) - ctx->payloads[i].postfix.framebuffer = framebuffer; + ctx->payloads[i].postfix.framebuffer = batch->framebuffer; } /* Reset per-frame context, called on context initialisation as well as after diff --git a/src/gallium/drivers/panfrost/pan_job.h b/src/gallium/drivers/panfrost/pan_job.h index cf0d93f2628..fe15e2dddab 100644 --- a/src/gallium/drivers/panfrost/pan_job.h +++ b/src/gallium/drivers/panfrost/pan_job.h @@ -108,6 +108,9 @@ struct panfrost_batch { /* Polygon list bound to the batch, or NULL if none bound yet */ struct panfrost_bo *polygon_list; + + /* Framebuffer descriptor. */ + mali_ptr framebuffer; }; /* Functions for managing the above */ |