summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2011-09-25 18:58:54 +0200
committerMarek Olšák <maraeo@gmail.com>2011-10-02 15:33:02 +0200
commit2330b7267c8561f12ca50913394bf5cbc053adc7 (patch)
treea7ad46076a57e9b4bf9880c052ab1329411106ee
parent7a7377a090dfbce65f9cd76ff3fabea38166b6a5 (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.c16
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. */