From bcf4562528ee0d176923b33a3e8995d4d282477a Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Thu, 4 Mar 2021 11:24:49 -0800 Subject: [PATCH] freedreno: Fix u_blitter constant-buffer leak We didn't see this before without threaded_context because we (normally) wouldn't upload cb0 (the slot u_blitter uses). But with cb0 getting uploaded we could hit a leak due to constant state only being restored in the fd_blitter_clear() path. Move cb0 save to the one path that uses it. Signed-off-by: Rob Clark Part-of: --- src/gallium/drivers/freedreno/freedreno_blitter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/freedreno/freedreno_blitter.c b/src/gallium/drivers/freedreno/freedreno_blitter.c index 2953c6c3913..c8863a1f6c9 100644 --- a/src/gallium/drivers/freedreno/freedreno_blitter.c +++ b/src/gallium/drivers/freedreno/freedreno_blitter.c @@ -82,8 +82,6 @@ fd_blitter_pipe_begin(struct fd_context *ctx, bool render_cond, bool discard) { fd_fence_ref(&ctx->last_fence, NULL); - util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, - ctx->constbuf[PIPE_SHADER_FRAGMENT].cb); util_blitter_save_vertex_buffer_slot(ctx->blitter, ctx->vtx.vertexbuf.vb); util_blitter_save_vertex_elements(ctx->blitter, ctx->vtx.vtx); util_blitter_save_vertex_shader(ctx->blitter, ctx->prog.vs); @@ -184,6 +182,9 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers, */ fd_blitter_pipe_begin(ctx, false, false); + util_blitter_save_fragment_constant_buffer_slot(ctx->blitter, + ctx->constbuf[PIPE_SHADER_FRAGMENT].cb); + util_blitter_common_clear_setup(blitter, pfb->width, pfb->height, buffers, NULL, NULL);