diff options
author | Christian König <[email protected]> | 2011-02-28 01:54:36 +0100 |
---|---|---|
committer | Christian König <[email protected]> | 2011-02-28 02:19:39 +0100 |
commit | bce4f9ac395986ee0acae2702ed73448333d81b8 (patch) | |
tree | 4b62e85bee6d4a483dc63066eff4f2a06d5e9cb4 | |
parent | 0a17444133e74de7bc5d04d8ffc8f29b89f0cf58 (diff) |
st/mesa & v_bug_mgr: two small instanced drawing fixes
-rw-r--r-- | src/gallium/auxiliary/util/u_vbuf_mgr.c | 5 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_draw.c | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/util/u_vbuf_mgr.c b/src/gallium/auxiliary/util/u_vbuf_mgr.c index dec8dd717e8..3cf8ee0831d 100644 --- a/src/gallium/auxiliary/util/u_vbuf_mgr.c +++ b/src/gallium/auxiliary/util/u_vbuf_mgr.c @@ -531,7 +531,10 @@ static void u_vbuf_upload_buffers(struct u_vbuf_mgr_priv *mgr, unsigned first, size; boolean flushed; - if (vb->stride) { + if (mgr->ve->ve[i].instance_divisor) { + first = 0; + size = vb->buffer->width0; + } else if (vb->stride) { first = vb->stride * min_index; size = vb->stride * count; } else { diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 6530a06ade4..c99eafbadf3 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -579,6 +579,7 @@ st_validate_varrays(struct gl_context *ctx, if (is_interleaved_arrays(vp, vpv, arrays)) { setup_interleaved_attribs(ctx, vp, vpv, arrays, vbuffer, velements, max_index); + num_vbuffers = 1; num_velements = vpv->num_inputs; if (num_velements == 0) @@ -645,6 +646,7 @@ st_draw_vbo(struct gl_context *ctx, for (i = 0; i < nr_prims; i++) { min_index = MIN2(min_index, prims[i].start); max_index = MAX2(max_index, prims[i].start + prims[i].count - 1); + max_index = MAX2(max_index, prims[i].num_instances); } } |