diff options
author | Ian Romanick <[email protected]> | 2009-07-08 11:39:13 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2009-07-20 15:37:24 -0700 |
commit | 480567d5c451511a72744b0c849960c2b712e093 (patch) | |
tree | c38d78e42203fec07ac01ad59c8f176ea9edc8ba | |
parent | cad82cd0636b4b74597ae2c6bab83a3e94006bf8 (diff) |
Add new _mesa_new_parameter_list_sized to pre-allocate a parameter list
-rw-r--r-- | src/mesa/shader/prog_parameter.c | 28 | ||||
-rw-r--r-- | src/mesa/shader/prog_parameter.h | 3 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c index bcd8c5d9dc0..6b9e73b2cbd 100644 --- a/src/mesa/shader/prog_parameter.c +++ b/src/mesa/shader/prog_parameter.c @@ -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 */ diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h index 01f5a0e179f..d1fcf47e61b 100644 --- a/src/mesa/shader/prog_parameter.h +++ b/src/mesa/shader/prog_parameter.h @@ -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); |