* VERT_ATTRIB_MAT
* include the generic shader attributes used to alias
* varying material values for the TNL shader programs.
+ * They are located at the end of the generic attribute
+ * block not to overlap with the generic 0 attribute.
*/
#define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i))
#define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0
#define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i))
#define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS
-#define VERT_ATTRIB_MAT(i) VERT_ATTRIB_GENERIC(i)
+#define VERT_ATTRIB_MAT0 \
+ (VERT_ATTRIB_GENERIC_MAX - VERT_ATTRIB_MAT_MAX)
+#define VERT_ATTRIB_MAT(i) \
+ VERT_ATTRIB_GENERIC((i) + VERT_ATTRIB_MAT0)
#define VERT_ATTRIB_MAT_MAX MAT_ATTRIB_MAX
/**
#define _TNL_FIRST_GENERIC _TNL_ATTRIB_GENERIC0
#define _TNL_LAST_GENERIC _TNL_ATTRIB_GENERIC15
-#define _TNL_FIRST_MAT _TNL_ATTRIB_MAT_FRONT_AMBIENT /* GENERIC0 */
-#define _TNL_LAST_MAT _TNL_ATTRIB_MAT_BACK_INDEXES /* GENERIC11 */
+#define _TNL_FIRST_MAT _TNL_ATTRIB_MAT_FRONT_AMBIENT /* GENERIC4 */
+#define _TNL_LAST_MAT _TNL_ATTRIB_MAT_BACK_INDEXES /* GENERIC15 */
/* Number of available texture attributes */
#define _TNL_NUM_TEX 8
}
}
- for (i = 0; i < VERT_ATTRIB_MAT_MAX; i++) {
- inputs[VERT_ATTRIB_MAT(i)] =
- &vbo->currval[VBO_ATTRIB_MAT_FRONT_AMBIENT + i];
- const_inputs |= VERT_BIT_MAT(i);
- }
-
/* Could use just about anything, just to fill in the empty
* slots:
*/
- for (i = VERT_ATTRIB_MAT_MAX; i < VERT_ATTRIB_GENERIC_MAX; i++) {
+ for (i = 0; i < VERT_ATTRIB_MAT0; i++) {
inputs[VERT_ATTRIB_GENERIC(i)] =
&vbo->currval[VBO_ATTRIB_GENERIC0 + i];
const_inputs |= VERT_BIT_GENERIC(i);
}
+
+ for (i = 0; i < VERT_ATTRIB_MAT_MAX; i++) {
+ inputs[VERT_ATTRIB_MAT(i)] =
+ &vbo->currval[VBO_ATTRIB_MAT_FRONT_AMBIENT + i];
+ const_inputs |= VERT_BIT_MAT(i);
+ }
break;
case VP_SHADER:
/* Overlay other active attributes */
switch (get_vp_mode(exec->ctx)) {
case VP_FF:
+ for (attr = 0; attr < VERT_ATTRIB_MAT0; attr++) {
+ assert(VERT_ATTRIB_GENERIC(attr) < ARRAY_SIZE(exec->vtx.inputs));
+ exec->vtx.inputs[VERT_ATTRIB_GENERIC(attr)] =
+ &vbo->currval[VBO_ATTRIB_GENERIC0+attr];
+ }
for (attr = 0; attr < VERT_ATTRIB_MAT_MAX; attr++) {
assert(VERT_ATTRIB_MAT(attr) < ARRAY_SIZE(exec->vtx.inputs));
exec->vtx.inputs[VERT_ATTRIB_MAT(attr)] =
&vbo->currval[VBO_ATTRIB_MAT_FRONT_AMBIENT+attr];
}
- for (attr = VERT_ATTRIB_MAT_MAX; attr < VERT_ATTRIB_GENERIC_MAX; attr++) {
- assert(VERT_ATTRIB_GENERIC(attr) < ARRAY_SIZE(exec->vtx.inputs));
- exec->vtx.inputs[VERT_ATTRIB_GENERIC(attr)] =
- &vbo->currval[VBO_ATTRIB_GENERIC0+attr];
- }
map = vbo->map_vp_none;
break;
case VP_SHADER:
/* Overlay other active attributes */
switch (get_vp_mode(ctx)) {
case VP_FF:
+ for (attr = 0; attr < VERT_ATTRIB_MAT0; attr++) {
+ save->inputs[VERT_ATTRIB_GENERIC(attr)] =
+ &vbo->currval[VBO_ATTRIB_GENERIC0+attr];
+ }
for (attr = 0; attr < VERT_ATTRIB_MAT_MAX; attr++) {
save->inputs[VERT_ATTRIB_MAT(attr)] =
&vbo->currval[VBO_ATTRIB_MAT_FRONT_AMBIENT+attr];
}
- for (attr = VERT_ATTRIB_MAT_MAX; attr < VERT_ATTRIB_GENERIC_MAX; attr++) {
- save->inputs[VERT_ATTRIB_GENERIC(attr)] =
- &vbo->currval[VBO_ATTRIB_GENERIC0+attr];
- }
map = vbo->map_vp_none;
break;
case VP_SHADER: