mesa: compute gl_program_parameter_list::UniformBytes accurately
authorMarek Olšák <marek.olsak@amd.com>
Sat, 12 Dec 2020 06:39:29 +0000 (01:39 -0500)
committerMarge Bot <eric+marge@anholt.net>
Thu, 21 Jan 2021 21:59:29 +0000 (21:59 +0000)
The previous code didn't do it correctly.
(e.g.  _mesa_recompute_parameter_bounds didn't do anything)

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

src/mesa/program/prog_parameter.c

index 542d6e1..f1b7b71 100644 (file)
@@ -336,7 +336,9 @@ _mesa_add_parameter(struct gl_program_parameter_list *paramList,
 
    if (type == PROGRAM_UNIFORM || type == PROGRAM_CONSTANT) {
       paramList->UniformBytes =
-         MAX2(paramList->UniformBytes, paramList->NumParameterValues * 4);
+         MAX2(paramList->UniformBytes,
+              (paramList->Parameters[oldNum].ValueOffset +
+               paramList->Parameters[oldNum].Size) * 4);
    } else if (type == PROGRAM_STATE_VAR) {
       paramList->FirstStateVarIndex =
          MIN2(paramList->FirstStateVarIndex, oldNum);
@@ -457,6 +459,7 @@ _mesa_add_state_reference(struct gl_program_parameter_list *paramList,
 void
 _mesa_recompute_parameter_bounds(struct gl_program_parameter_list *list)
 {
+   list->UniformBytes = 0;
    list->FirstStateVarIndex = INT_MAX;
    list->LastStateVarIndex = 0;
 
@@ -465,7 +468,9 @@ _mesa_recompute_parameter_bounds(struct gl_program_parameter_list *list)
          list->FirstStateVarIndex = MIN2(list->FirstStateVarIndex, i);
          list->LastStateVarIndex = MAX2(list->LastStateVarIndex, i);
       } else {
-         list->UniformBytes = MAX2(list->UniformBytes, list->NumParameterValues * 4);
+         list->UniformBytes = MAX2(list->UniformBytes,
+                                   (list->Parameters[i].ValueOffset +
+                                    list->Parameters[i].Size) * 4);
       }
    }
 }