draw_pipe_flatshade.c revision caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6
18e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell/**************************************************************************
28e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell *
38e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
48e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * All Rights Reserved.
58e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell *
68e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
78e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * copy of this software and associated documentation files (the
88e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * "Software"), to deal in the Software without restriction, including
98e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish,
108e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to
118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to
128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * the following conditions:
138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell *
148e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * The above copyright notice and this permission notice (including the
158e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * next paragraph) shall be included in all copies or substantial portions
168e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * of the Software.
178e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell *
188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
208e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
218e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
228e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
238e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
248e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
258e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell *
268e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell **************************************************************************/
278e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
288e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell/* Authors:  Keith Whitwell <keith@tungstengraphics.com>
298e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell */
308e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
313fc926f3740da9ec27853d158243055f3cb43d43Brian#include "pipe/p_util.h"
32cd3643698eafa0869a8317b002e5b066de0172e7Brian#include "pipe/p_shader_tokens.h"
33279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian#include "draw_private.h"
348e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
358e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
36cd3643698eafa0869a8317b002e5b066de0172e7Brian/** subclass of draw_stage */
37cd3643698eafa0869a8317b002e5b066de0172e7Brianstruct flat_stage
388e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
39cd3643698eafa0869a8317b002e5b066de0172e7Brian   struct draw_stage stage;
40cd3643698eafa0869a8317b002e5b066de0172e7Brian
41cd3643698eafa0869a8317b002e5b066de0172e7Brian   uint num_color_attribs;
42cd3643698eafa0869a8317b002e5b066de0172e7Brian   uint color_attribs[4];  /* front/back primary/secondary colors */
43cd3643698eafa0869a8317b002e5b066de0172e7Brian};
448e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
458e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
46cd3643698eafa0869a8317b002e5b066de0172e7Brianstatic INLINE struct flat_stage *
47cd3643698eafa0869a8317b002e5b066de0172e7Brianflat_stage(struct draw_stage *stage)
48cd3643698eafa0869a8317b002e5b066de0172e7Brian{
49cd3643698eafa0869a8317b002e5b066de0172e7Brian   return (struct flat_stage *) stage;
50cd3643698eafa0869a8317b002e5b066de0172e7Brian}
51cd3643698eafa0869a8317b002e5b066de0172e7Brian
528e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
53cd3643698eafa0869a8317b002e5b066de0172e7Brian/** Copy all the color attributes from 'src' vertex to 'dst' vertex */
54a148cc51fbe56266199057cfde2abb2b59eb8713Brianstatic INLINE void copy_colors( struct draw_stage *stage,
55a148cc51fbe56266199057cfde2abb2b59eb8713Brian                                struct vertex_header *dst,
56279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian                                const struct vertex_header *src )
578e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
58cd3643698eafa0869a8317b002e5b066de0172e7Brian   const struct flat_stage *flat = flat_stage(stage);
59942b9bc5bc13d959baa86779a7c669cf96659b9aBrian   uint i;
60a148cc51fbe56266199057cfde2abb2b59eb8713Brian   for (i = 0; i < flat->num_color_attribs; i++) {
61a148cc51fbe56266199057cfde2abb2b59eb8713Brian      const uint attr = flat->color_attribs[i];
62a148cc51fbe56266199057cfde2abb2b59eb8713Brian      COPY_4FV(dst->data[attr], src->data[attr]);
63a148cc51fbe56266199057cfde2abb2b59eb8713Brian   }
64a148cc51fbe56266199057cfde2abb2b59eb8713Brian}
65942b9bc5bc13d959baa86779a7c669cf96659b9aBrian
66a148cc51fbe56266199057cfde2abb2b59eb8713Brian
67a148cc51fbe56266199057cfde2abb2b59eb8713Brian/** Copy all the color attributes from src vertex to dst0 & dst1 vertices */
68a148cc51fbe56266199057cfde2abb2b59eb8713Brianstatic INLINE void copy_colors2( struct draw_stage *stage,
69a148cc51fbe56266199057cfde2abb2b59eb8713Brian                                 struct vertex_header *dst0,
70a148cc51fbe56266199057cfde2abb2b59eb8713Brian                                 struct vertex_header *dst1,
71a148cc51fbe56266199057cfde2abb2b59eb8713Brian                                 const struct vertex_header *src )
72a148cc51fbe56266199057cfde2abb2b59eb8713Brian{
73a148cc51fbe56266199057cfde2abb2b59eb8713Brian   const struct flat_stage *flat = flat_stage(stage);
74a148cc51fbe56266199057cfde2abb2b59eb8713Brian   uint i;
75cd3643698eafa0869a8317b002e5b066de0172e7Brian   for (i = 0; i < flat->num_color_attribs; i++) {
76cd3643698eafa0869a8317b002e5b066de0172e7Brian      const uint attr = flat->color_attribs[i];
77a148cc51fbe56266199057cfde2abb2b59eb8713Brian      COPY_4FV(dst0->data[attr], src->data[attr]);
78a148cc51fbe56266199057cfde2abb2b59eb8713Brian      COPY_4FV(dst1->data[attr], src->data[attr]);
79942b9bc5bc13d959baa86779a7c669cf96659b9aBrian   }
808e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}
818e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
828e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
83279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian/**
84279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian * Flatshade tri.  Required for clipping and when unfilled tris are
858e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * active, otherwise handled by hardware.
868e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell */
87caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwellstatic void flatshade_tri_0( struct draw_stage *stage,
88caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell                             struct prim_header *header )
89caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell{
90caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   struct prim_header tmp;
91caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
92caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.det = header->det;
93caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.edgeflags = header->edgeflags;
94caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.v[0] = header->v[0];
95caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.v[1] = dup_vert(stage, header->v[1], 0);
96caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.v[2] = dup_vert(stage, header->v[2], 1);
97caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
98caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   copy_colors2(stage, tmp.v[1], tmp.v[2], tmp.v[0]);
99caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
100caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   stage->next->tri( stage->next, &tmp );
101caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell}
102caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
103caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
104caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwellstatic void flatshade_tri_2( struct draw_stage *stage,
105caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell                             struct prim_header *header )
1068e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
1078e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   struct prim_header tmp;
1088e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1098e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   tmp.det = header->det;
11030236573dadd83714220b72b0c04f1bbce69fbd6Brian   tmp.edgeflags = header->edgeflags;
1118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   tmp.v[0] = dup_vert(stage, header->v[0], 0);
1128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   tmp.v[1] = dup_vert(stage, header->v[1], 1);
1138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   tmp.v[2] = header->v[2];
1148e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
115a148cc51fbe56266199057cfde2abb2b59eb8713Brian   copy_colors2(stage, tmp.v[0], tmp.v[1], tmp.v[2]);
1168e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1178e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   stage->next->tri( stage->next, &tmp );
1188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}
1198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1208e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
121caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
122caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
123caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
124279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian/**
125279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian * Flatshade line.  Required for clipping.
1268e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell */
127caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwellstatic void flatshade_line_0( struct draw_stage *stage,
128caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell                              struct prim_header *header )
129caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell{
130caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   struct prim_header tmp;
131caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
132caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.v[0] = header->v[0];
133caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   tmp.v[1] = dup_vert(stage, header->v[1], 0);
134caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
135caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   copy_colors(stage, tmp.v[1], tmp.v[0]);
136caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
137caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   stage->next->line( stage->next, &tmp );
138caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell}
139caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell
140caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwellstatic void flatshade_line_1( struct draw_stage *stage,
141caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell                              struct prim_header *header )
1428e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
1438e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   struct prim_header tmp;
1448e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1458e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   tmp.v[0] = dup_vert(stage, header->v[0], 0);
1468e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   tmp.v[1] = header->v[1];
1478e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1488e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   copy_colors(stage, tmp.v[0], tmp.v[1]);
1498e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1508e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   stage->next->line( stage->next, &tmp );
1518e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}
1528e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
1538e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
154caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell/* Flatshade point -- passthrough.
155caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell */
156ea470eec86715cd2bc9aa86d36e6ea803d0d4017Brianstatic void flatshade_point( struct draw_stage *stage,
157ea470eec86715cd2bc9aa86d36e6ea803d0d4017Brian                             struct prim_header *header )
1588e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
1598e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell   stage->next->point( stage->next, header );
1608e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}
1618e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
162279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian
1630bfd085e2866fbbd40209dcee23f0e6240583fe8Brianstatic void flatshade_init_state( struct draw_stage *stage )
1640bfd085e2866fbbd40209dcee23f0e6240583fe8Brian{
1650bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   struct flat_stage *flat = flat_stage(stage);
166cddeca51adf0d2b736a223e47b60f6ef3be85bffBrian   const struct draw_vertex_shader *vs = stage->draw->vertex_shader;
1670bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   uint i;
1680bfd085e2866fbbd40209dcee23f0e6240583fe8Brian
1690bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   /* Find which vertex shader outputs are colors, make a list */
1700bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   flat->num_color_attribs = 0;
171cddeca51adf0d2b736a223e47b60f6ef3be85bffBrian   for (i = 0; i < vs->info.num_outputs; i++) {
172cddeca51adf0d2b736a223e47b60f6ef3be85bffBrian      if (vs->info.output_semantic_name[i] == TGSI_SEMANTIC_COLOR ||
173cddeca51adf0d2b736a223e47b60f6ef3be85bffBrian          vs->info.output_semantic_name[i] == TGSI_SEMANTIC_BCOLOR) {
1740bfd085e2866fbbd40209dcee23f0e6240583fe8Brian         flat->color_attribs[flat->num_color_attribs++] = i;
1750bfd085e2866fbbd40209dcee23f0e6240583fe8Brian      }
1760bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   }
1770bfd085e2866fbbd40209dcee23f0e6240583fe8Brian
178caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   /* Choose flatshade routine according to provoking vertex:
179caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell    */
180caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   if (stage->draw->rasterizer->flatshade_first) {
181caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell      stage->line = flatshade_line_0;
182caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell      stage->tri = flatshade_tri_0;
183caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   }
184caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   else {
185caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell      stage->line = flatshade_line_1;
186caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell      stage->tri = flatshade_tri_2;
187caa44763f7f7aa26ed0b0d1e5af0c410fba6bfe6Keith Whitwell   }
1880bfd085e2866fbbd40209dcee23f0e6240583fe8Brian}
1890bfd085e2866fbbd40209dcee23f0e6240583fe8Brian
1900bfd085e2866fbbd40209dcee23f0e6240583fe8Brianstatic void flatshade_first_tri( struct draw_stage *stage,
1910bfd085e2866fbbd40209dcee23f0e6240583fe8Brian				 struct prim_header *header )
1920bfd085e2866fbbd40209dcee23f0e6240583fe8Brian{
1930bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   flatshade_init_state( stage );
1940bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   stage->tri( stage, header );
1950bfd085e2866fbbd40209dcee23f0e6240583fe8Brian}
1960bfd085e2866fbbd40209dcee23f0e6240583fe8Brian
1970bfd085e2866fbbd40209dcee23f0e6240583fe8Brianstatic void flatshade_first_line( struct draw_stage *stage,
1980bfd085e2866fbbd40209dcee23f0e6240583fe8Brian				  struct prim_header *header )
1990bfd085e2866fbbd40209dcee23f0e6240583fe8Brian{
2000bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   flatshade_init_state( stage );
2010bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   stage->line( stage, header );
2020bfd085e2866fbbd40209dcee23f0e6240583fe8Brian}
2030bfd085e2866fbbd40209dcee23f0e6240583fe8Brian
2040bfd085e2866fbbd40209dcee23f0e6240583fe8Brian
2050bfd085e2866fbbd40209dcee23f0e6240583fe8Brianstatic void flatshade_flush( struct draw_stage *stage,
2060bfd085e2866fbbd40209dcee23f0e6240583fe8Brian			     unsigned flags )
2078e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
2080bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   stage->tri = flatshade_first_tri;
2090bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   stage->line = flatshade_first_line;
2100bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   stage->next->flush( stage->next, flags );
2118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}
2128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
213279ffe3f163fd6a5e7bfa108db14c81acbb06eceBrian
2140360b49afbcd839f99ba0745d01cf9dc5be4d122Brianstatic void flatshade_reset_stipple_counter( struct draw_stage *stage )
2150360b49afbcd839f99ba0745d01cf9dc5be4d122Brian{
2160360b49afbcd839f99ba0745d01cf9dc5be4d122Brian   stage->next->reset_stipple_counter( stage->next );
2170360b49afbcd839f99ba0745d01cf9dc5be4d122Brian}
2180360b49afbcd839f99ba0745d01cf9dc5be4d122Brian
2190360b49afbcd839f99ba0745d01cf9dc5be4d122Brian
220d75454840672f462de933724daae24a839aac48eMichalstatic void flatshade_destroy( struct draw_stage *stage )
221d75454840672f462de933724daae24a839aac48eMichal{
222b08102a8f3ef558743f5f952c726ba2c28b6e82eBrian   draw_free_temp_verts( stage );
223d75454840672f462de933724daae24a839aac48eMichal   FREE( stage );
224d75454840672f462de933724daae24a839aac48eMichal}
225d75454840672f462de933724daae24a839aac48eMichal
226d75454840672f462de933724daae24a839aac48eMichal
227ea470eec86715cd2bc9aa86d36e6ea803d0d4017Brian/**
228ea470eec86715cd2bc9aa86d36e6ea803d0d4017Brian * Create flatshading drawing stage.
229ea470eec86715cd2bc9aa86d36e6ea803d0d4017Brian */
230ea470eec86715cd2bc9aa86d36e6ea803d0d4017Brianstruct draw_stage *draw_flatshade_stage( struct draw_context *draw )
2318e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{
232cd3643698eafa0869a8317b002e5b066de0172e7Brian   struct flat_stage *flatshade = CALLOC_STRUCT(flat_stage);
2338e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
234b08102a8f3ef558743f5f952c726ba2c28b6e82eBrian   draw_alloc_temp_verts( &flatshade->stage, 2 );
2358e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
236cd3643698eafa0869a8317b002e5b066de0172e7Brian   flatshade->stage.draw = draw;
237cd3643698eafa0869a8317b002e5b066de0172e7Brian   flatshade->stage.next = NULL;
238cd3643698eafa0869a8317b002e5b066de0172e7Brian   flatshade->stage.point = flatshade_point;
2390bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   flatshade->stage.line = flatshade_first_line;
2400bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   flatshade->stage.tri = flatshade_first_tri;
2410bfd085e2866fbbd40209dcee23f0e6240583fe8Brian   flatshade->stage.flush = flatshade_flush;
242cd3643698eafa0869a8317b002e5b066de0172e7Brian   flatshade->stage.reset_stipple_counter = flatshade_reset_stipple_counter;
243cd3643698eafa0869a8317b002e5b066de0172e7Brian   flatshade->stage.destroy = flatshade_destroy;
2448e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
245cd3643698eafa0869a8317b002e5b066de0172e7Brian   return &flatshade->stage;
2468e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}
2478e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
2488e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell
249