summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2008-05-08 12:10:24 -0400
committerZack Rusin <[email protected]>2008-05-08 15:26:34 -0400
commit8d709ae1595047b45a81f2fbd22850887fdbfea0 (patch)
treef317454771fdecea24a66953b876109ead006bc5
parent22323af525d00022a1fa06fab7ee84df5ef2d1f0 (diff)
fix triangle strips
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_varray_tmp.h12
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h12
2 files changed, 20 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_varray_tmp.h b/src/gallium/auxiliary/draw/draw_pt_varray_tmp.h
index fb49452d8b6..d137a758e27 100644
--- a/src/gallium/auxiliary/draw/draw_pt_varray_tmp.h
+++ b/src/gallium/auxiliary/draw/draw_pt_varray_tmp.h
@@ -109,19 +109,27 @@ static void FUNC(struct draw_pt_front_end *frontend,
i = end;
fetch_init(varray, end);
varray_flush(varray);
+ if (j + first + i <= count) {
+ varray->fetch_start -= 2;
+ i -= 2;
+ }
}
}
else {
for (j = 0; j + first <= count; j += i) {
unsigned end = MIN2(FETCH_MAX, count - j);
- end -= (end % incr);
- for (i = 0; i+2 < end; i++) {
+ end -= (end % incr);
+ for (i = 0; i + 2 < end; i++) {
TRIANGLE(varray, DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL,
i + 0 + (i&1), i + 1 - (i&1), i + 2);
}
i = end;
fetch_init(varray, end);
varray_flush(varray);
+ if (j + first + i <= count) {
+ varray->fetch_start -= 2;
+ i -= 2;
+ }
}
}
break;
diff --git a/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h b/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h
index ab28859c35f..4bf04fa62b6 100644
--- a/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h
+++ b/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h
@@ -80,19 +80,27 @@ static void FUNC(struct draw_pt_front_end *frontend,
i = end;
fetch_init(varray, end);
varray_flush(varray);
+ if (j + first + i <= count) {
+ varray->fetch_start -= 2;
+ i -= 2;
+ }
}
}
else {
- for (j = 0; j + first <= count;) {
+ for (j = 0; j + first <= count; j += i) {
unsigned end = MIN2(FETCH_MAX, count - j);
end -= (end % incr);
for (i = 0; i+2 < end; i++) {
TRIANGLE(varray, DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL,
i + 0 + (i&1), i + 1 - (i&1), i + 2);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
- j += end;
+ if (j + first + i <= count) {
+ varray->fetch_start -= 2;
+ i -= 2;
+ }
}
}
break;