diff --git a/src/gallium/drivers/freedreno/freedreno_batch.c b/src/gallium/drivers/freedreno/freedreno_batch.c index d26fec2e849..ef702764c44 100644 --- a/src/gallium/drivers/freedreno/freedreno_batch.c +++ b/src/gallium/drivers/freedreno/freedreno_batch.c @@ -339,6 +339,14 @@ batch_flush(struct fd_batch *batch) assert_dt cleanup_submit(batch); } +void +fd_batch_set_fb(struct fd_batch *batch, const struct pipe_framebuffer_state *pfb) +{ + assert(!batch->nondraw); + + util_copy_framebuffer_state(&batch->framebuffer, pfb); +} + /* NOTE: could drop the last ref to batch */ void diff --git a/src/gallium/drivers/freedreno/freedreno_batch.h b/src/gallium/drivers/freedreno/freedreno_batch.h index c1ed2e38bc1..38efc622477 100644 --- a/src/gallium/drivers/freedreno/freedreno_batch.h +++ b/src/gallium/drivers/freedreno/freedreno_batch.h @@ -256,6 +256,8 @@ struct fd_batch { struct fd_batch *fd_batch_create(struct fd_context *ctx, bool nondraw); +void fd_batch_set_fb(struct fd_batch *batch, const struct pipe_framebuffer_state *pfb) assert_dt; + void fd_batch_flush(struct fd_batch *batch) assert_dt; bool fd_batch_has_dep(struct fd_batch *batch, struct fd_batch *dep) assert_dt; void fd_batch_add_dep(struct fd_batch *batch, struct fd_batch *dep) assert_dt; diff --git a/src/gallium/drivers/freedreno/freedreno_batch_cache.c b/src/gallium/drivers/freedreno/freedreno_batch_cache.c index df49d945f64..9028f0a5d25 100644 --- a/src/gallium/drivers/freedreno/freedreno_batch_cache.c +++ b/src/gallium/drivers/freedreno/freedreno_batch_cache.c @@ -552,5 +552,7 @@ fd_batch_from_fb(struct fd_context *ctx, struct fd_batch *batch = batch_from_key(ctx, key); fd_screen_unlock(ctx->screen); + fd_batch_set_fb(batch, pfb); + return batch; } diff --git a/src/gallium/drivers/freedreno/freedreno_context.c b/src/gallium/drivers/freedreno/freedreno_context.c index b566a30dc56..577ce4e5fee 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.c +++ b/src/gallium/drivers/freedreno/freedreno_context.c @@ -343,7 +343,6 @@ fd_context_batch(struct fd_context *ctx) if (unlikely(!batch)) { batch = fd_batch_from_fb(ctx, &ctx->framebuffer); - util_copy_framebuffer_state(&batch->framebuffer, &ctx->framebuffer); fd_batch_reference(&ctx->batch, batch); fd_context_all_dirty(ctx); }