summaryrefslogtreecommitdiff
path: root/src/mesa/vbo/vbo_exec_api.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-03-13 13:39:05 +1100
committerBen Skeggs <skeggsb@gmail.com>2008-03-13 13:39:05 +1100
commit03ec66375889f049b09f39ba98515aa35ac48164 (patch)
treee149d8defb52b1252af982b459902ee0800b17cd /src/mesa/vbo/vbo_exec_api.c
parentbd4fe0e87c1b979973d9a76aa48de5fbbb8d52b7 (diff)
parent2366bb1baf2e9ae5b6ecf19f66ae9e0a4b0d2f36 (diff)
Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
Diffstat (limited to 'src/mesa/vbo/vbo_exec_api.c')
-rw-r--r--src/mesa/vbo/vbo_exec_api.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c
index b7f4d8a307..35dc0e768f 100644
--- a/src/mesa/vbo/vbo_exec_api.c
+++ b/src/mesa/vbo/vbo_exec_api.c
@@ -309,16 +309,23 @@ static void vbo_exec_fixup_vertex( GLcontext *ctx,
GLuint attr, GLuint sz )
{
struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
+ static const GLfloat id[4] = { 0, 0, 0, 1 };
int i;
- if (sz > exec->vtx.attrsz[attr]) {
+ if (exec->vtx.prim_count == 0) {
+ GLfloat *current = (GLfloat *)vbo_context(ctx)->currval[attr].Ptr;
+ exec->vtx.attrptr[attr] = current;
+ memcpy(current, id, sizeof(id));
+ ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;
+ return;
+ }
+ else if (sz > exec->vtx.attrsz[attr]) {
/* New size is larger. Need to flush existing vertices and get
* an enlarged vertex format.
*/
vbo_exec_wrap_upgrade_vertex( exec, attr, sz );
}
else if (sz < exec->vtx.active_sz[attr]) {
- static const GLfloat id[4] = { 0, 0, 0, 1 };
/* New size is smaller - just need to fill in some
* zeros. Don't need to flush or wrap.