mesa: don't overallocate ParameterValues 4 times (v2)
authorMarek Olšák <marek.olsak@amd.com>
Tue, 2 Mar 2021 09:19:53 +0000 (04:19 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 17 Mar 2021 22:43:01 +0000 (22:43 +0000)
The additional memory was never used.

v2: rework

Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9360>

src/mesa/program/prog_parameter.c

index a8940f8..47c74ee 100644 (file)
@@ -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;
 }