summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2010-04-20 10:32:06 +0200
committerJosé Fonseca <[email protected]>2010-04-20 10:32:06 +0200
commit4e8154e8666ec9375936bbe3fa2ca925ff9be5df (patch)
tree4a7f8b961445f4c86017dd36efa73a7f2b5363ad
parent493a1bb822f80f48cf284cb572acb5dd393a07e1 (diff)
draw: Fix cache elt_bias implementation.
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_vcache.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_vcache.c b/src/gallium/auxiliary/draw/draw_pt_vcache.c
index a513188b918..28dc514888f 100644
--- a/src/gallium/auxiliary/draw/draw_pt_vcache.c
+++ b/src/gallium/auxiliary/draw/draw_pt_vcache.c
@@ -347,7 +347,7 @@ vcache_check_run( struct draw_pt_front_end *frontend,
vcache->fetch_max,
draw_count);
- if (max_index >= DRAW_PIPE_MAX_VERTICES ||
+ if (elt_bias + max_index >= DRAW_PIPE_MAX_VERTICES ||
fetch_count >= UNDEFINED_VERTEX_ID ||
fetch_count > draw_count) {
if (0) debug_printf("fail\n");
@@ -363,6 +363,9 @@ vcache_check_run( struct draw_pt_front_end *frontend,
}
+ assert((elt_bias >= 0 && min_index + elt_bias >= min_index) ||
+ (elt_bias < 0 && min_index + elt_bias < min_index));
+
if (elt_bias <= 0 &&
min_index == (unsigned)-elt_bias &&
index_size == 2)
@@ -407,21 +410,21 @@ vcache_check_run( struct draw_pt_front_end *frontend,
case 1:
rebase_ubyte_elts( (const ubyte *)elts,
draw_count,
- elt_bias - (int)min_index,
+ -elt_bias - (int)min_index,
storage );
break;
case 2:
rebase_ushort_elts( (const ushort *)elts,
draw_count,
- elt_bias - (int)min_index,
+ -elt_bias - (int)min_index,
storage );
break;
case 4:
rebase_uint_elts( (const uint *)elts,
draw_count,
- elt_bias - (int)min_index,
+ -elt_bias - (int)min_index,
storage );
break;
@@ -436,7 +439,7 @@ vcache_check_run( struct draw_pt_front_end *frontend,
if (fetch_count < UNDEFINED_VERTEX_ID)
ok = vcache->middle->run_linear_elts( vcache->middle,
- min_index, /* start */
+ min_index + elt_bias, /* start */
fetch_count,
transformed_elts,
draw_count );