diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 1173157d258..11972a60207 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -230,6 +230,11 @@ vbo_exec_copy_to_current(struct vbo_exec_context *exec) vbo_set_vertex_format(&vbo->current[i].Format, exec->vtx.attr[i].size >> dmul_shift, exec->vtx.attr[i].type); + /* The format changed. We need to update gallium vertex elements. + * Material attributes don't need this because they don't have formats. + */ + if (i <= VBO_ATTRIB_EDGEFLAG) + ctx->NewState |= _NEW_CURRENT_ATTRIB; } } diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c index 9bc21be0fb7..29e7f3ac3ab 100644 --- a/src/mesa/vbo/vbo_save_draw.c +++ b/src/mesa/vbo/vbo_save_draw.c @@ -86,8 +86,12 @@ copy_vao(struct gl_context *ctx, const struct gl_vertex_array_object *vao, } if (type != currval->Format.User.Type || - (size >> dmul_shift) != currval->Format.User.Size) + (size >> dmul_shift) != currval->Format.User.Size) { vbo_set_vertex_format(&currval->Format, size >> dmul_shift, type); + /* The format changed. We need to update gallium vertex elements. */ + if (state == _NEW_CURRENT_ATTRIB) + ctx->NewState |= state; + } *data += size; }