mesa/vbo: Treat attribute 0 and vertex as the same

This is supported by the pseudo-code on pages 27 and 28 (pages 41 and
42 of the PDF) of the OpenGL 2.1 spec.  The last part of the
implementation of ArrayElement is:

    if (generic attribute array 0 enabled) {
      if (generic vertex attribute 0 array normalization flag is set, and
	  type is not FLOAT or DOUBLE)
	VertexAttrib[size]N[type]v(0, generic vertex attribute 0 array element i);
      else
	VertexAttrib[size][type]v(0, generic vertex attribute 0 array element i);
    } else if (vertex array enabled) {
      Vertex[size][type]v(vertex array element i);
    }

Page 23 (page 37 of the PDF) of the same spec says:

    "Setting generic vertex attribute zero specifies a vertex; the
    four vertex coordinates are taken from the values of attribute
    zero. A Vertex2, Vertex3, or Vertex4 command is completely
    equivalent to the corresponding VertexAttrib* command with an
    index of zero."

Fixes piglit test attribute0.

NOTE: This is a candidate for stable branches.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Ian Romanick
2011-10-13 16:13:51 -07:00
parent ae272a92a1
commit c19f8ab279
+2 -1
View File
@@ -538,7 +538,7 @@ recalculate_input_bindings(struct gl_context *ctx)
}
}
for (i = 0; i < MAX_VERTEX_GENERIC_ATTRIBS; i++) {
for (i = 1; i < MAX_VERTEX_GENERIC_ATTRIBS; i++) {
if (exec->array.generic_array[i]->Enabled)
inputs[VERT_ATTRIB_GENERIC0 + i] = exec->array.generic_array[i];
else {
@@ -547,6 +547,7 @@ recalculate_input_bindings(struct gl_context *ctx)
}
}
inputs[VERT_ATTRIB_GENERIC0] = inputs[0];
ctx->NewState |= _NEW_ARRAY;
break;
}