2 static void FUNC( struct draw_geometry_shader
*shader
,
3 const struct draw_prim_info
*input_prims
,
4 const struct draw_vertex_info
*input_verts
,
5 struct draw_prim_info
*output_prims
,
6 struct draw_vertex_info
*output_verts
)
8 struct draw_context
*draw
= shader
->draw
;
10 boolean flatfirst
= (draw
->rasterizer
->flatshade
&&
11 draw
->rasterizer
->flatshade_first
);
13 unsigned count
= input_prims
->count
;
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( shader
, i
+ 0 );
27 for (i
= 0; i
+1 < count
; i
+= 2) {
28 LINE( shader
, i
+ 0 , i
+ 1 );
32 case PIPE_PRIM_LINE_LOOP
:
35 for (i
= 1; i
< count
; i
++) {
36 LINE( shader
, i
- 1, i
);
39 LINE( shader
, i
- 1, 0 );
43 case PIPE_PRIM_LINE_STRIP
:
44 for (i
= 1; i
< count
; i
++) {
45 LINE( shader
, i
- 1, i
);
49 case PIPE_PRIM_TRIANGLES
:
50 for (i
= 0; i
+2 < count
; i
+= 3) {
51 TRIANGLE( shader
, i
+ 0, i
+ 1, i
+ 2 );
55 case PIPE_PRIM_TRIANGLE_STRIP
:
57 for (i
= 0; i
+2 < count
; i
++) {
65 for (i
= 0; i
+2 < count
; i
++) {
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( shader
, 0, i
+ 1, i
+ 2 );
107 TRIANGLE( shader
, i
+ 1, i
+ 2, 0 );
114 debug_assert(!"Unsupported primitive in geometry shader");