Module: Mesa
Branch: master
Commit: bcc61a01d49a9125fd350f005d0e95ad33349935
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bcc61a01d49a9125fd350f005d0e95ad33349935

Author: Marek Olšák <[email protected]>
Date:   Tue Mar  2 04:19:53 2021 -0500

mesa: don't overallocate ParameterValues 4 times (v2)

The additional memory was never used.

v2: rework

Reviewed-by: Zoltán Böszörményi <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9360>

---

 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;
 }
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to