| // all allocations need to use hieralloc |
| #include "prog_parameter.h" |
| |
| #include "src/glsl/ir.h" |
| |
| extern GLint _mesa_add_parameter(struct gl_program_parameter_list * paramList, |
| const char * name) |
| { |
| int index = _mesa_get_parameter(paramList, name); |
| if (index >= 0) |
| return index; |
| |
| paramList->NumParameters++; |
| if (paramList->NumParameters > paramList->Size) { |
| paramList->Size = paramList->NumParameters + 4; |
| paramList->Parameters = hieralloc_realloc(paramList, paramList->Parameters, |
| gl_program_parameter, paramList->Size); |
| } |
| |
| gl_program_parameter * param = paramList->Parameters + paramList->NumParameters - 1; |
| memset(param, 0, sizeof(*param)); |
| param->Name = hieralloc_strdup(paramList, name); |
| param->BindLocation = -1; |
| param->Location = -1; |
| |
| return paramList->NumParameters - 1; |
| } |
| |
| extern GLint _mesa_get_parameter(const struct gl_program_parameter_list * paramList, |
| const char * name) |
| { |
| for (unsigned i = 0; i < paramList->NumParameters; i++) |
| if (!strcmp(name, paramList->Parameters[i].Name)) |
| return i; |
| return -1; |
| } |