2 static void FUNC( struct pt_so_emit
*so
,
3 const struct draw_prim_info
*input_prims
,
4 const struct draw_vertex_info
*input_verts
,
8 struct draw_context
*draw
= so
->draw
;
10 boolean flatfirst
= (draw
->rasterizer
->flatshade
&&
11 draw
->rasterizer
->flatshade_first
);
15 if (0) debug_printf("%s %d\n", __FUNCTION__
, count
);
17 debug_assert(input_prims
->primitive_count
== 1);
19 switch (input_prims
->prim
) {
20 case PIPE_PRIM_POINTS
:
21 for (i
= 0; i
< count
; i
++) {
22 POINT( so
, start
+ i
+ 0 );
27 for (i
= 0; i
+1 < count
; i
+= 2) {
28 LINE( so
, start
+ i
+ 0 , start
+ i
+ 1 );
32 case PIPE_PRIM_LINE_LOOP
:
35 for (i
= 1; i
< count
; i
++) {
36 LINE( so
, start
+ i
- 1, start
+ i
);
39 LINE( so
, start
+ i
- 1, start
);
43 case PIPE_PRIM_LINE_STRIP
:
44 for (i
= 1; i
< count
; i
++) {
45 LINE( so
, start
+ i
- 1, start
+ i
);
49 case PIPE_PRIM_TRIANGLES
:
50 for (i
= 0; i
+2 < count
; i
+= 3) {
51 TRIANGLE( so
, start
+ i
+ 0, start
+ i
+ 1, start
+ i
+ 2 );
55 case PIPE_PRIM_TRIANGLE_STRIP
:
57 for (i
= 0; i
+2 < count
; i
++) {
60 start
+ i
+ 1 + (i
&1),
61 start
+ i
+ 2 - (i
&1) );
65 for (i
= 0; i
+2 < count
; i
++) {
67 start
+ i
+ 0 + (i
&1),
68 start
+ i
+ 1 - (i
&1),
74 case PIPE_PRIM_TRIANGLE_FAN
:
77 for (i
= 0; i
+2 < count
; i
++) {
85 for (i
= 0; i
+2 < count
; i
++) {
95 case PIPE_PRIM_POLYGON
:
97 /* These bitflags look a little odd because we submit the
98 * vertices as (1,2,0) to satisfy flatshade requirements.
101 for (i
= 0; i
+2 < count
; i
++) {
104 TRIANGLE( so
, start
+ 0, start
+ i
+ 1, start
+ i
+ 2 );
107 TRIANGLE( so
, start
+ i
+ 1, start
+ i
+ 2, start
+ 0 );
114 debug_assert(!"Unsupported primitive in stream output");