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