diff options
| author | Zack Rusin <zack@tungstengraphics.com> | 2008-05-08 12:10:24 -0400 | 
|---|---|---|
| committer | Zack Rusin <zack@tungstengraphics.com> | 2008-05-08 15:26:34 -0400 | 
| commit | 8d709ae1595047b45a81f2fbd22850887fdbfea0 (patch) | |
| tree | f317454771fdecea24a66953b876109ead006bc5 | |
| parent | 22323af525d00022a1fa06fab7ee84df5ef2d1f0 (diff) | |
fix triangle strips
| -rw-r--r-- | src/gallium/auxiliary/draw/draw_pt_varray_tmp.h | 12 | ||||
| -rw-r--r-- | src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h | 12 | 
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 fb49452d8b..d137a758e2 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 ab28859c35..4bf04fa62b 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; | 
