114ed371a06597d3776eab0ee4d6684993fa471f
1 static unsigned trim( unsigned count
, unsigned first
, unsigned incr
)
3 return count
- (count
- first
) % incr
;
6 static void FUNC(struct draw_pt_front_end
*frontend
,
11 struct varray_frontend
*varray
= (struct varray_frontend
*)frontend
;
12 unsigned start
= (unsigned)elts
;
17 varray
->fetch_start
= start
;
19 draw_pt_split_prim(varray
->input_prim
, &first
, &incr
);
21 /* Sanitize primitive length:
23 count
= trim(count
, first
, incr
);
28 debug_printf("%s (%d) %d/%d\n", __FUNCTION__
,
33 switch (varray
->input_prim
) {
34 case PIPE_PRIM_POINTS
:
36 case PIPE_PRIM_TRIANGLES
:
37 case PIPE_PRIM_LINE_STRIP
:
38 case PIPE_PRIM_TRIANGLE_STRIP
:
40 case PIPE_PRIM_QUAD_STRIP
:
41 for (j
= 0; j
< count
;) {
42 unsigned remaining
= count
- j
;
43 unsigned nr
= trim( MIN2(FETCH_MAX
, remaining
), first
, incr
);
44 varray_flush_linear(varray
, start
+ j
, nr
);
51 case PIPE_PRIM_LINE_LOOP
:
53 for (j
= 0; j
+ first
<= count
; j
+= i
) {
54 unsigned end
= MIN2(FETCH_MAX
, count
- j
);
56 for (i
= 1; i
< end
; i
++) {
57 LINE(varray
, i
- 1, i
);
59 LINE(varray
, i
- 1, 0);
61 fetch_init(varray
, end
);
68 case PIPE_PRIM_POLYGON
:
69 case PIPE_PRIM_TRIANGLE_FAN
:
70 for (j
= 0; j
+ first
<= count
; j
+= i
) {
71 unsigned end
= MIN2(FETCH_MAX
, count
- j
);
73 for (i
= 2; i
< end
; i
++) {
74 TRIANGLE(varray
, 0, i
- 1, i
);
77 fetch_init(varray
, end
);