summaryrefslogtreecommitdiffstats
path: root/src/mesa/shader/prog_parameter.c
diff options
context:
space:
mode:
authorBrian <[email protected]>2007-01-09 17:49:24 -0700
committerBrian <[email protected]>2007-01-09 17:49:24 -0700
commit3209c3ed0d82c158eed1020759aacf51ba1c1ad5 (patch)
treea2dad53d32547ef01b36fd9296dc4f68e52292f8 /src/mesa/shader/prog_parameter.c
parent5e75db12d7b17f0295e8099bd357220df97d5013 (diff)
Implement vertex attribute binding.
Users can set explicit binding with glBindAttribLocation(), otherwise the linker will allocate generic attribute slots.
Diffstat (limited to 'src/mesa/shader/prog_parameter.c')
-rw-r--r--src/mesa/shader/prog_parameter.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c
index d09cc659376..e543871ab79 100644
--- a/src/mesa/shader/prog_parameter.c
+++ b/src/mesa/shader/prog_parameter.c
@@ -239,6 +239,9 @@ _mesa_add_sampler(struct gl_program_parameter_list *paramList,
}
+/**
+ * Add parameter representing a varying variable.
+ */
GLint
_mesa_add_varying(struct gl_program_parameter_list *paramList,
const char *name, GLuint size)
@@ -256,6 +259,31 @@ _mesa_add_varying(struct gl_program_parameter_list *paramList,
}
+/**
+ * Add parameter representing a vertex program attribute.
+ */
+GLint
+_mesa_add_attribute(struct gl_program_parameter_list *paramList,
+ const char *name, GLint attrib)
+{
+ GLint size = 4; /* XXX ok? */
+ GLint i = _mesa_lookup_parameter_index(paramList, -1, name);
+ if (i >= 0) {
+ /* replace */
+ ASSERT(paramList->Parameters[i].StateIndexes[0] == STATE_USER_ATTRIB);
+ paramList->Parameters[i].StateIndexes[1] = attrib;
+ }
+ else {
+ /* add */
+ i = _mesa_add_parameter(paramList, name, NULL, size, PROGRAM_INPUT);
+ if (i >= 0) {
+ paramList->Parameters[i].StateIndexes[0] = STATE_USER_ATTRIB;
+ paramList->Parameters[i].StateIndexes[1] = attrib;
+ }
+ }
+ return i;
+}
+
#if 0 /* not used yet */