diff options
author | Marek Olšák <maraeo@gmail.com> | 2011-09-25 18:58:54 +0200 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2011-10-02 15:33:02 +0200 |
commit | 2330b7267c8561f12ca50913394bf5cbc053adc7 (patch) | |
tree | a7ad46076a57e9b4bf9880c052ab1329411106ee | |
parent | 7a7377a090dfbce65f9cd76ff3fabea38166b6a5 (diff) |
u_vbuf_mgr: fix max_index computation for large src_offset
NOTE: This is a candidate for the 7.11 branch.
-rw-r--r-- | src/gallium/auxiliary/util/u_vbuf_mgr.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/gallium/auxiliary/util/u_vbuf_mgr.c b/src/gallium/auxiliary/util/u_vbuf_mgr.c index fd4a7629f6e..760bf6be31c 100644 --- a/src/gallium/auxiliary/util/u_vbuf_mgr.c +++ b/src/gallium/auxiliary/util/u_vbuf_mgr.c @@ -586,8 +586,7 @@ static void u_vbuf_mgr_compute_max_index(struct u_vbuf_mgr_priv *mgr) for (i = 0; i < nr; i++) { struct pipe_vertex_buffer *vb = &mgr->b.vertex_buffer[mgr->ve->ve[i].vertex_buffer_index]; - int unused; - unsigned max_index; + unsigned max_index, src_size, unused; if (!vb->buffer || !vb->stride || @@ -596,16 +595,17 @@ static void u_vbuf_mgr_compute_max_index(struct u_vbuf_mgr_priv *mgr) continue; } - /* How many bytes is unused after the last vertex. - * width0 may be "count*stride - unused" and we have to compensate - * for that when dividing by stride. */ - unused = vb->stride - - (mgr->ve->ve[i].src_offset + mgr->ve->src_format_size[i]); + src_size = mgr->ve->ve[i].src_offset + mgr->ve->src_format_size[i]; /* If src_offset is greater than stride (which means it's a buffer * offset rather than a vertex offset)... */ - if (unused < 0) { + if (src_size >= vb->stride) { unused = 0; + } else { + /* How many bytes is unused after the last vertex. + * width0 may be "count*stride - unused" and we have to compensate + * for that when dividing by stride. */ + unused = vb->stride - src_size; } /* Compute the maximum index for this vertex element. */ |