Add new _mesa_new_parameter_list_sized to pre-allocate a parameter list
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 8 Jul 2009 18:39:13 +0000 (11:39 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 20 Jul 2009 22:37:24 +0000 (15:37 -0700)
src/mesa/shader/prog_parameter.c
src/mesa/shader/prog_parameter.h

index bcd8c5d9dc0af2f0497403f8364ee0ab21fd2702..6b9e73b2cbdf4ee4fba5caa03ca79614c79e3a8d 100644 (file)
@@ -44,6 +44,34 @@ _mesa_new_parameter_list(void)
 }
 
 
+struct gl_program_parameter_list *
+_mesa_new_parameter_list_sized(unsigned size)
+{
+   struct gl_program_parameter_list *p = _mesa_new_parameter_list();
+
+   if ((p != NULL) && (size != 0)) {
+      p->Size = size;
+
+      /* alloc arrays */
+      p->Parameters = (struct gl_program_parameter *)
+        _mesa_calloc(size * sizeof(struct gl_program_parameter));
+
+      p->ParameterValues = (GLfloat (*)[4])
+         _mesa_align_malloc(size * 4 *sizeof(GLfloat), 16);
+
+
+      if ((p->Parameters == NULL) || (p->ParameterValues == NULL)) {
+        _mesa_free(p->Parameters);
+        _mesa_align_free(p->ParameterValues);
+        _mesa_free(p);
+        p = NULL;
+      }
+   }
+
+   return p;
+}
+
+
 /**
  * Free a parameter list and all its parameters
  */
index 01f5a0e179fa789a230a2e97a0d53549a9e22d69..d1fcf47e61b4f6082fb74ba3d9f4ffca371eae98 100644 (file)
@@ -84,6 +84,9 @@ struct gl_program_parameter_list
 extern struct gl_program_parameter_list *
 _mesa_new_parameter_list(void);
 
+extern struct gl_program_parameter_list *
+_mesa_new_parameter_list_sized(unsigned size);
+
 extern void
 _mesa_free_parameter_list(struct gl_program_parameter_list *paramList);