summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2011-09-25 18:58:54 +0200
committerMarek Olšák <[email protected]>2011-09-26 15:25:04 +0200
commitf214e1c99970b7c254b7cbb8bdf3643b7514ee09 (patch)
tree9153126218ba6412fd24cd3524ab24883c4a1ddc
parent4b5bf5a2a2b26a0f526ca8a85d61a6ef4ea0632f (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 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. */