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
;
16 if (0) debug_printf("%s %d\n", __FUNCTION__
, count
);
18 debug_assert(input_prims
->primitive_count
== 1);
20 switch (input_prims
->prim
) {
21 case PIPE_PRIM_POINTS
:
22 for (i
= 0; i
< count
; i
++) {
23 POINT( shader
, i
+ 0 );
28 for (i
= 0; i
+1 < count
; i
+= 2) {
29 LINE( shader
, i
+ 0 , i
+ 1 );
33 case PIPE_PRIM_LINE_LOOP
:
36 for (i
= 1; i
< count
; i
++) {
37 LINE( shader
, i
- 1, i
);
40 LINE( shader
, i
- 1, 0 );
44 case PIPE_PRIM_LINE_STRIP
:
45 for (i
= 1; i
< count
; i
++) {
46 LINE( shader
, i
- 1, i
);
50 case PIPE_PRIM_TRIANGLES
:
51 for (i
= 0; i
+2 < count
; i
+= 3) {
52 TRIANGLE( shader
, i
+ 0, i
+ 1, i
+ 2 );
56 case PIPE_PRIM_TRIANGLE_STRIP
:
58 for (i
= 0; i
+2 < count
; i
++) {
66 for (i
= 0; i
+2 < count
; i
++) {
75 case PIPE_PRIM_TRIANGLE_FAN
:
78 for (i
= 0; i
+2 < count
; i
++) {
86 for (i
= 0; i
+2 < count
; i
++) {
96 case PIPE_PRIM_POLYGON
:
98 /* These bitflags look a little odd because we submit the
99 * vertices as (1,2,0) to satisfy flatshade requirements.
102 for (i
= 0; i
+2 < count
; i
++) {
105 TRIANGLE( shader
, 0, i
+ 1, i
+ 2 );
108 TRIANGLE( shader
, i
+ 1, i
+ 2, 0 );
115 debug_assert(!"Unsupported primitive in geometry shader");