3 static void FUNC( struct draw_pt_front_end
*frontend
,
8 struct vcache_frontend
*vcache
= (struct vcache_frontend
*)frontend
;
9 struct draw_context
*draw
= vcache
->draw
;
11 boolean flatfirst
= (draw
->rasterizer
->flatshade
&&
12 draw
->rasterizer
->flatshade_first
);
16 switch (vcache
->input_prim
) {
17 case PIPE_PRIM_POINTS
:
18 for (i
= 0; i
< count
; i
++) {
20 get_elt(elts
, i
+ 0) );
25 for (i
= 0; i
+1 < count
; i
+= 2) {
27 DRAW_PIPE_RESET_STIPPLE
,
29 get_elt(elts
, i
+ 1));
33 case PIPE_PRIM_LINE_LOOP
:
35 flags
= DRAW_PIPE_RESET_STIPPLE
;
37 for (i
= 1; i
< count
; i
++, flags
= 0) {
51 case PIPE_PRIM_LINE_STRIP
:
52 flags
= DRAW_PIPE_RESET_STIPPLE
;
53 for (i
= 1; i
< count
; i
++, flags
= 0) {
61 case PIPE_PRIM_TRIANGLES
:
62 for (i
= 0; i
+2 < count
; i
+= 3) {
64 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
67 get_elt(elts
, i
+ 2 ));
71 case PIPE_PRIM_TRIANGLE_STRIP
:
73 for (i
= 0; i
+2 < count
; i
++) {
75 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
77 get_elt(elts
, i
+ 1 + (i
&1)),
78 get_elt(elts
, i
+ 2 - (i
&1)));
82 for (i
= 0; i
+2 < count
; i
++) {
84 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
85 get_elt(elts
, i
+ 0 + (i
&1)),
86 get_elt(elts
, i
+ 1 - (i
&1)),
87 get_elt(elts
, i
+ 2 ));
92 case PIPE_PRIM_TRIANGLE_FAN
:
95 for (i
= 0; i
+2 < count
; i
++) {
97 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
104 for (i
= 0; i
+2 < count
; i
++) {
106 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
108 get_elt(elts
, i
+ 1),
109 get_elt(elts
, i
+ 2 ));
116 case PIPE_PRIM_QUADS
:
117 for (i
= 0; i
+3 < count
; i
+= 4) {
119 get_elt(elts
, i
+ 0),
120 get_elt(elts
, i
+ 1),
121 get_elt(elts
, i
+ 2),
122 get_elt(elts
, i
+ 3));
126 case PIPE_PRIM_QUAD_STRIP
:
127 for (i
= 0; i
+3 < count
; i
+= 2) {
129 get_elt(elts
, i
+ 2),
130 get_elt(elts
, i
+ 0),
131 get_elt(elts
, i
+ 1),
132 get_elt(elts
, i
+ 3));
136 case PIPE_PRIM_POLYGON
:
138 /* These bitflags look a little odd because we submit the
139 * vertices as (1,2,0) to satisfy flatshade requirements.
141 const unsigned edge_first
= DRAW_PIPE_EDGE_FLAG_2
;
142 const unsigned edge_middle
= DRAW_PIPE_EDGE_FLAG_0
;
143 const unsigned edge_last
= DRAW_PIPE_EDGE_FLAG_1
;
145 flags
= DRAW_PIPE_RESET_STIPPLE
| edge_first
| edge_middle
;
147 for (i
= 0; i
+2 < count
; i
++, flags
= edge_middle
) {
154 get_elt(elts
, i
+ 1),
155 get_elt(elts
, i
+ 2),
166 vcache_flush( vcache
);