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
);
17 switch (vcache
->input_prim
) {
18 case PIPE_PRIM_POINTS
:
19 for (i
= 0; i
< count
; i
++) {
21 get_elt(elts
, i
+ 0) );
26 for (i
= 0; i
+1 < count
; i
+= 2) {
28 DRAW_PIPE_RESET_STIPPLE
,
30 get_elt(elts
, i
+ 1));
34 case PIPE_PRIM_LINE_LOOP
:
36 flags
= DRAW_PIPE_RESET_STIPPLE
;
38 for (i
= 1; i
< count
; i
++, flags
= 0) {
52 case PIPE_PRIM_LINE_STRIP
:
53 flags
= DRAW_PIPE_RESET_STIPPLE
;
54 for (i
= 1; i
< count
; i
++, flags
= 0) {
62 case PIPE_PRIM_TRIANGLES
:
63 for (i
= 0; i
+2 < count
; i
+= 3) {
65 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
68 get_elt(elts
, i
+ 2 ));
72 case PIPE_PRIM_TRIANGLE_STRIP
:
74 for (i
= 0; i
+2 < count
; i
++) {
76 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
78 get_elt(elts
, i
+ 1 + (i
&1)),
79 get_elt(elts
, i
+ 2 - (i
&1)));
83 for (i
= 0; i
+2 < count
; i
++) {
85 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
86 get_elt(elts
, i
+ 0 + (i
&1)),
87 get_elt(elts
, i
+ 1 - (i
&1)),
88 get_elt(elts
, i
+ 2 ));
93 case PIPE_PRIM_TRIANGLE_FAN
:
96 for (i
= 0; i
+2 < count
; i
++) {
98 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
100 get_elt(elts
, i
+ 2),
105 for (i
= 0; i
+2 < count
; i
++) {
107 DRAW_PIPE_RESET_STIPPLE
| DRAW_PIPE_EDGE_FLAG_ALL
,
109 get_elt(elts
, i
+ 1),
110 get_elt(elts
, i
+ 2 ));
117 case PIPE_PRIM_QUADS
:
118 for (i
= 0; i
+3 < count
; i
+= 4) {
120 get_elt(elts
, i
+ 0),
121 get_elt(elts
, i
+ 1),
122 get_elt(elts
, i
+ 2),
123 get_elt(elts
, i
+ 3));
127 case PIPE_PRIM_QUAD_STRIP
:
128 for (i
= 0; i
+3 < count
; i
+= 2) {
130 get_elt(elts
, i
+ 2),
131 get_elt(elts
, i
+ 0),
132 get_elt(elts
, i
+ 1),
133 get_elt(elts
, i
+ 3));
137 case PIPE_PRIM_POLYGON
:
139 /* These bitflags look a little odd because we submit the
140 * vertices as (1,2,0) to satisfy flatshade requirements.
142 const ushort edge_first
= DRAW_PIPE_EDGE_FLAG_2
;
143 const ushort edge_middle
= DRAW_PIPE_EDGE_FLAG_0
;
144 const ushort edge_last
= DRAW_PIPE_EDGE_FLAG_1
;
146 flags
= DRAW_PIPE_RESET_STIPPLE
| edge_first
| edge_middle
;
148 for (i
= 0; i
+2 < count
; i
++, flags
= edge_middle
) {
155 get_elt(elts
, i
+ 1),
156 get_elt(elts
, i
+ 2),
167 vcache_flush( vcache
);