u_vbuf: take start_instance into account when uploading instanced attribs
authorMarek Olšák <maraeo@gmail.com>
Sun, 1 Jan 2012 18:11:25 +0000 (19:11 +0100)
committerMarek Olšák <maraeo@gmail.com>
Thu, 5 Jan 2012 17:29:11 +0000 (18:29 +0100)
src/gallium/auxiliary/util/u_vbuf.c

index 943336d84846ecdb59efd0786cffb60c70693b0c..a7266136ebf4a6e163689dc5548c126a6c1d9633 100644 (file)
@@ -539,7 +539,7 @@ void u_vbuf_set_index_buffer(struct u_vbuf *mgr,
 static void
 u_vbuf_upload_buffers(struct u_vbuf_priv *mgr,
                       int min_index, int max_index,
-                      unsigned instance_count)
+                      unsigned start_instance, unsigned instance_count)
 {
    unsigned i;
    unsigned count = max_index + 1 - min_index;
@@ -577,6 +577,7 @@ u_vbuf_upload_buffers(struct u_vbuf_priv *mgr,
       } else if (instance_div) {
          /* Per-instance attrib. */
          unsigned count = (instance_count + instance_div - 1) / instance_div;
+         first += vb->stride * start_instance;
          size = vb->stride * (count - 1) + mgr->ve->src_format_size[i];
       } else {
          /* Per-vertex attrib. */
@@ -838,7 +839,8 @@ u_vbuf_draw_begin(struct u_vbuf *mgrb,
 
    /* Upload user buffers. */
    if (mgr->any_user_vbs) {
-      u_vbuf_upload_buffers(mgr, min_index, max_index, info->instance_count);
+      u_vbuf_upload_buffers(mgr, min_index, max_index,
+                            info->start_instance, info->instance_count);
    }
    return U_VBUF_BUFFERS_UPDATED;
 }