• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // all allocations need to use hieralloc
2 #include "prog_parameter.h"
3 
4 #include "src/glsl/ir.h"
5 
_mesa_add_parameter(struct gl_program_parameter_list * paramList,const char * name)6 extern GLint _mesa_add_parameter(struct gl_program_parameter_list * paramList,
7                                     const char * name)
8 {
9    int index = _mesa_get_parameter(paramList, name);
10    if (index >= 0)
11       return index;
12 
13    paramList->NumParameters++;
14    if (paramList->NumParameters > paramList->Size) {
15       paramList->Size = paramList->NumParameters + 4;
16       paramList->Parameters = hieralloc_realloc(paramList, paramList->Parameters,
17                               gl_program_parameter, paramList->Size);
18    }
19 
20    gl_program_parameter * param = paramList->Parameters + paramList->NumParameters - 1;
21    memset(param, 0, sizeof(*param));
22    param->Name = hieralloc_strdup(paramList, name);
23    param->BindLocation = -1;
24    param->Location = -1;
25 
26    return paramList->NumParameters - 1;
27 }
28 
_mesa_get_parameter(const struct gl_program_parameter_list * paramList,const char * name)29 extern GLint _mesa_get_parameter(const struct gl_program_parameter_list * paramList,
30                                     const char * name)
31 {
32    for (unsigned i = 0; i < paramList->NumParameters; i++)
33       if (!strcmp(name, paramList->Parameters[i].Name))
34          return i;
35    return -1;
36 }
37