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