panfrost: Delay FB descriptor allocation
No need to emit SFBD/MFBD at frame invalidation. They can be emitted when the framebuffer is attached, which saves us a potential FB desc re-allocation if a new FB is bound after the swap. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
b5ca1e5458
commit
17d6ee2bd1
|
@ -189,13 +189,17 @@ panfrost_clear(
|
|||
static mali_ptr
|
||||
panfrost_attach_vt_mfbd(struct panfrost_context *ctx)
|
||||
{
|
||||
return panfrost_upload_transient(ctx, &ctx->vt_framebuffer_mfbd, sizeof(ctx->vt_framebuffer_mfbd)) | MALI_MFBD;
|
||||
struct bifrost_framebuffer mfbd = panfrost_emit_mfbd(ctx, ~0);
|
||||
|
||||
return panfrost_upload_transient(ctx, &mfbd, sizeof(mfbd)) | MALI_MFBD;
|
||||
}
|
||||
|
||||
static mali_ptr
|
||||
panfrost_attach_vt_sfbd(struct panfrost_context *ctx)
|
||||
{
|
||||
return panfrost_upload_transient(ctx, &ctx->vt_framebuffer_sfbd, sizeof(ctx->vt_framebuffer_sfbd)) | MALI_SFBD;
|
||||
struct mali_single_framebuffer sfbd = panfrost_emit_sfbd(ctx, ~0);
|
||||
|
||||
return panfrost_upload_transient(ctx, &sfbd, sizeof(sfbd)) | MALI_SFBD;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -223,13 +227,6 @@ panfrost_attach_vt_framebuffer(struct panfrost_context *ctx, bool skippable)
|
|||
static void
|
||||
panfrost_invalidate_frame(struct panfrost_context *ctx)
|
||||
{
|
||||
struct panfrost_screen *screen = pan_screen(ctx->base.screen);
|
||||
|
||||
if (screen->require_sfbd)
|
||||
ctx->vt_framebuffer_sfbd = panfrost_emit_sfbd(ctx, ~0);
|
||||
else
|
||||
ctx->vt_framebuffer_mfbd = panfrost_emit_mfbd(ctx, ~0);
|
||||
|
||||
for (unsigned i = 0; i < PIPE_SHADER_TYPES; ++i)
|
||||
ctx->payloads[i].postfix.framebuffer = 0;
|
||||
|
||||
|
@ -2383,12 +2380,6 @@ panfrost_set_framebuffer_state(struct pipe_context *pctx,
|
|||
struct panfrost_screen *screen = pan_screen(ctx->base.screen);
|
||||
|
||||
panfrost_hint_afbc(screen, &ctx->pipe_framebuffer);
|
||||
|
||||
if (screen->require_sfbd)
|
||||
ctx->vt_framebuffer_sfbd = panfrost_emit_sfbd(ctx, ~0);
|
||||
else
|
||||
ctx->vt_framebuffer_mfbd = panfrost_emit_mfbd(ctx, ~0);
|
||||
|
||||
panfrost_attach_vt_framebuffer(ctx, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -138,9 +138,6 @@ struct panfrost_context {
|
|||
|
||||
union mali_attr attributes[PIPE_MAX_ATTRIBS];
|
||||
|
||||
struct mali_single_framebuffer vt_framebuffer_sfbd;
|
||||
struct bifrost_framebuffer vt_framebuffer_mfbd;
|
||||
|
||||
/* TODO: Multiple uniform buffers (index =/= 0), finer updates? */
|
||||
|
||||
struct panfrost_constant_buffer constant_buffer[PIPE_SHADER_TYPES];
|
||||
|
|
Loading…
Reference in New Issue