boolean flatfirst = (draw->rasterizer->flatshade &&
draw->rasterizer->flatshade_first);
- unsigned i, j, flags;
+ unsigned i, j;
+ ushort flags;
unsigned first, incr;
varray->fetch_start = start;
- split_prim_inplace(varray->input_prim, &first, &incr);
+ draw_pt_split_prim(varray->input_prim, &first, &incr);
#if 0
debug_printf("%s (%d) %d/%d\n", __FUNCTION__,
for (j = 0; j + first <= count; j += i) {
unsigned end = MIN2(FETCH_MAX, count - j);
end -= (end % incr);
- for (i = 0; i < count; i ++) {
+ for (i = 0; i < end; i++) {
POINT(varray, i + 0);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
LINE(varray, DRAW_PIPE_RESET_STIPPLE,
i + 0, i + 1);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
LINE(varray, flags, i - 1, i);
}
LINE(varray, flags, i - 1, 0);
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
for (i = 1; i < end; i++, flags = 0) {
LINE(varray, flags, i - 1, i);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
TRIANGLE(varray, DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL,
i + 0, i + 1, i + 2);
}
- varray->fetch_count = end;
- varray_flush_linear(varray);
- varray->fetch_start += end;
+ i = end;
+ fetch_init(varray, end);
+ varray_flush(varray);
}
break;
TRIANGLE(varray, DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL,
i + 0, i + 1 + (i&1), i + 2 - (i&1));
}
+ 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;
for (i = 0; i+2 < end; i++) {
TRIANGLE(varray, flags, i + 1, i + 2, 0);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
for (i = 0; i+2 < end; i++) {
TRIANGLE(varray, flags, 0, i + 1, i + 2);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
for (i = 0; i+3 < end; i += 4) {
QUAD(varray, i + 0, i + 1, i + 2, i + 3);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}
for (i = 0; i+3 < end; i += 2) {
QUAD(varray, i + 2, i + 0, i + 1, i + 3);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
+ if (j + first + i <= count) {
+ varray->fetch_start -= 2;
+ i -= 2;
+ }
}
break;
/* These bitflags look a little odd because we submit the
* vertices as (1,2,0) to satisfy flatshade requirements.
*/
- const unsigned edge_first = DRAW_PIPE_EDGE_FLAG_2;
- const unsigned edge_middle = DRAW_PIPE_EDGE_FLAG_0;
- const unsigned edge_last = DRAW_PIPE_EDGE_FLAG_1;
+ const ushort edge_first = DRAW_PIPE_EDGE_FLAG_2;
+ const ushort edge_middle = DRAW_PIPE_EDGE_FLAG_0;
+ const ushort edge_last = DRAW_PIPE_EDGE_FLAG_1;
flags = DRAW_PIPE_RESET_STIPPLE | edge_first | edge_middle;
for (j = 0; j + first <= count; j += i) {
TRIANGLE(varray, flags, i + 1, i + 2, 0);
}
+ i = end;
fetch_init(varray, end);
varray_flush(varray);
}