From: Eric Anholt Date: Wed, 18 Nov 2020 19:31:33 +0000 (-0800) Subject: gallium: Fix leak of currently bound UBOs at CSO context destruction. X-Git-Tag: upstream/21.0.0~1753 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=daaf5f1d1868bebec7931a51753236a850ebbd24;p=platform%2Fupstream%2Fmesa.git gallium: Fix leak of currently bound UBOs at CSO context destruction. Cc: mesa-stable Reviewed-by: Rob Clark Reviewed-by: Marek Olšák Part-of: --- diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index 1b8ca6b..673f1ea 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -382,6 +382,8 @@ void cso_destroy_context( struct cso_context *ctx ) PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS); int maxssbo = scr->get_shader_param(scr, sh, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS); + int maxcb = scr->get_shader_param(scr, sh, + PIPE_SHADER_CAP_MAX_CONST_BUFFERS); assert(maxsam <= PIPE_MAX_SAMPLERS); assert(maxview <= PIPE_MAX_SHADER_SAMPLER_VIEWS); assert(maxssbo <= PIPE_MAX_SHADER_BUFFERS); @@ -394,6 +396,9 @@ void cso_destroy_context( struct cso_context *ctx ) if (maxssbo > 0) { ctx->pipe->set_shader_buffers(ctx->pipe, sh, 0, maxssbo, ssbos, 0); } + for (int i = 0; i < maxcb; i++) { + ctx->pipe->set_constant_buffer(ctx->pipe, sh, i, NULL); + } } } @@ -404,17 +409,13 @@ void cso_destroy_context( struct cso_context *ctx ) ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_VERTEX, 0, NULL); if (ctx->has_geometry_shader) { ctx->pipe->bind_gs_state(ctx->pipe, NULL); - ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_GEOMETRY, 0, NULL); } if (ctx->has_tessellation) { ctx->pipe->bind_tcs_state(ctx->pipe, NULL); - ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_CTRL, 0, NULL); ctx->pipe->bind_tes_state(ctx->pipe, NULL); - ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_EVAL, 0, NULL); } if (ctx->has_compute_shader) { ctx->pipe->bind_compute_state(ctx->pipe, NULL); - ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_COMPUTE, 0, NULL); } ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL );