mesa: Dynamically allocate the storage for program local parameters.
[mesa.git] / src / mesa / program / program_parse.y
index a76db4e86b7d61011d4e221632f0103dfb0b66fe..03c0a3dba22fe8961b059b3e0ad38bede8ec21e4 100644 (file)
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "main/macros.h"
 #include "main/mtypes.h"
 #include "main/imports.h"
 #include "program/program.h"
@@ -2559,6 +2560,12 @@ initialize_symbol_from_param(struct gl_program *prog,
    param_var->type = at_param;
    param_var->param_binding_type = PROGRAM_STATE_VAR;
 
+   /* Dynamically allocate LocalParams, since it's a large array to have
+    * statically in every gl_program otherwise.
+    */
+   if (state_tokens[1] == STATE_LOCAL && !prog->LocalParams)
+      prog->LocalParams = calloc(MAX_PROGRAM_LOCAL_PARAMS, sizeof(float[4]));
+
    /* If we are adding a STATE_ENV or STATE_LOCAL that has multiple elements,
     * we need to unroll it and call add_state_reference() for each row
     */