From: Marek Olšák Date: Sun, 25 Sep 2011 16:58:54 +0000 (+0200) Subject: u_vbuf_mgr: fix max_index computation for large src_offset X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f214e1c99970b7c254b7cbb8bdf3643b7514ee09;p=mesa.git u_vbuf_mgr: fix max_index computation for large src_offset NOTE: This is a candidate for the 7.11 branch. --- diff --git a/src/gallium/auxiliary/util/u_vbuf_mgr.c b/src/gallium/auxiliary/util/u_vbuf_mgr.c index b2070abd821..66c90a58d27 100644 --- a/src/gallium/auxiliary/util/u_vbuf_mgr.c +++ b/src/gallium/auxiliary/util/u_vbuf_mgr.c @@ -570,8 +570,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 || @@ -580,16 +579,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. */