diff options
author | Brian Paul <brianp@vmware.com> | 2009-04-03 15:42:14 -0600 |
---|---|---|
committer | Brian Paul <brianp@vmware.com> | 2009-04-07 08:35:01 -0600 |
commit | 5c47d53924842e2389c31ac0f08f6cff68a9fd3b (patch) | |
tree | fe33d4d1e2dd100e0dc247fa88cd2c2fd4a80fad | |
parent | a18216308a38e158bf11e4b952b27d31edaa28aa (diff) | |
download | mesa-5c47d53924842e2389c31ac0f08f6cff68a9fd3b.tar.gz |
mesa: in mesa_add_named_constant(), avoid adding duplicate constants
(cherry picked from master, commit 80197a0c1bec48e3731bca975ec451d96f35f62a)
-rw-r--r-- | src/mesa/shader/prog_parameter.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c index dc48e84ab29..b8202b56e7f 100644 --- a/src/mesa/shader/prog_parameter.c +++ b/src/mesa/shader/prog_parameter.c @@ -178,15 +178,20 @@ _mesa_add_named_constant(struct gl_program_parameter_list *paramList, const char *name, const GLfloat values[4], GLuint size) { -#if 0 /* disable this for now -- we need to save the name! */ + /* first check if this is a duplicate constant */ GLint pos; - GLuint swizzle; - ASSERT(size == 4); /* XXX future feature */ - /* check if we already have this constant */ - if (_mesa_lookup_parameter_constant(paramList, values, 4, &pos, &swizzle)) { - return pos; + for (pos = 0; pos < paramList->NumParameters; pos++) { + const GLfloat *pvals = paramList->ParameterValues[pos]; + if (pvals[0] == values[0] && + pvals[1] == values[1] && + pvals[2] == values[2] && + pvals[3] == values[3] && + _mesa_strcmp(paramList->Parameters[pos].Name, name) == 0) { + /* Same name and value is already in the param list - reuse it */ + return pos; + } } -#endif + /* not found, add new parameter */ return _mesa_add_parameter(paramList, PROGRAM_CONSTANT, name, size, GL_NONE, values, NULL, 0x0); } |