From bcc61a01d49a9125fd350f005d0e95ad33349935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 2 Mar 2021 04:19:53 -0500 Subject: [PATCH] mesa: don't overallocate ParameterValues 4 times (v2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The additional memory was never used. v2: rework Reviewed-by: Zoltán Böszörményi Part-of: --- src/mesa/program/prog_parameter.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/mesa/program/prog_parameter.c b/src/mesa/program/prog_parameter.c index a8940f88733..47c74ee24df 100644 --- a/src/mesa/program/prog_parameter.c +++ b/src/mesa/program/prog_parameter.c @@ -199,10 +199,11 @@ _mesa_reserve_parameter_storage(struct gl_program_parameter_list *paramList, { const GLuint oldNum = paramList->NumParameters; const unsigned oldValNum = paramList->NumParameterValues; + const unsigned needSizeValues = oldValNum + reserve_values * 4; if (paramList->DisallowRealloc && (oldNum + reserve_params > paramList->Size || - oldValNum + reserve_values > paramList->SizeValues)) { + needSizeValues > paramList->SizeValues)) { _mesa_problem(NULL, "Parameter storage reallocation disallowed. This " "is a Mesa bug. Increase the reservation size in the code."); abort(); @@ -218,17 +219,17 @@ _mesa_reserve_parameter_storage(struct gl_program_parameter_list *paramList, paramList->Size * sizeof(struct gl_program_parameter)); } - if (oldValNum + reserve_values > paramList->SizeValues) { - paramList->SizeValues += 4 * reserve_values; + if (needSizeValues > paramList->SizeValues) { + paramList->SizeValues = needSizeValues + 16; /* alloc some extra */ paramList->ParameterValues = (gl_constant_value *) align_realloc(paramList->ParameterValues, /* old buf */ - oldValNum * 4 * sizeof(gl_constant_value),/* old sz */ + oldValNum * sizeof(gl_constant_value),/* old sz */ /* Overallocate the size by 12 because matrix rows can * be allocated partially but fetch_state always writes * 4 components (16 bytes). */ - paramList->SizeValues * 4 * sizeof(gl_constant_value) + + paramList->SizeValues * sizeof(gl_constant_value) + 12, 16); } } @@ -348,6 +349,9 @@ _mesa_add_parameter(struct gl_program_parameter_list *paramList, unreachable("invalid parameter type"); } + assert(paramList->NumParameters <= paramList->Size); + assert(paramList->NumParameterValues <= paramList->SizeValues); + return (GLint) oldNum; }