svga_pipe_rasterizer.c revision 68f93ea3eb83cfad014b8ec93cec3564c1aa9833
13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/********************************************************** 23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Copyright 2008-2009 VMware, Inc. All rights reserved. 33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person 53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * obtaining a copy of this software and associated documentation 63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * files (the "Software"), to deal in the Software without 73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * restriction, including without limitation the rights to use, copy, 83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * modify, merge, publish, distribute, sublicense, and/or sell copies 93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the Software, and to permit persons to whom the Software is 103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * furnished to do so, subject to the following conditions: 113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The above copyright notice and this permission notice shall be 133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * included in all copies or substantial portions of the Software. 143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SOFTWARE. 233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz **********************************************************/ 253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "draw/draw_context.h" 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_inlines.h" 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_defines.h" 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "util/u_math.h" 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "util/u_memory.h" 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_context.h" 333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_state.h" 343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_hw_reg.h" 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/* Hardware frontwinding is always set up as SVGA3D_FRONTWINDING_CW. 383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic SVGA3dFace svga_translate_cullmode( unsigned mode, 403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned front_winding ) 413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz switch (mode) { 433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_NONE: 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_FACE_NONE; 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_CCW: 463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_FACE_BACK; 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_CW: 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_FACE_FRONT; 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_BOTH: 503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_FACE_FRONT_BACK; 513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz default: 523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz assert(0); 533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return SVGA3D_FACE_NONE; 543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic SVGA3dShadeMode svga_translate_flatshade( unsigned mode ) 583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return mode ? SVGA3D_SHADEMODE_FLAT : SVGA3D_SHADEMODE_SMOOTH; 603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic void * 643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_create_rasterizer_state(struct pipe_context *pipe, 653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz const struct pipe_rasterizer_state *templ) 663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_rasterizer_state *rast = CALLOC_STRUCT( svga_rasterizer_state ); 683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* need this for draw module. */ 693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->templ = *templ; 703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* light_twoside - XXX: need fragment shader varient */ 723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* poly_smooth - XXX: no fallback available */ 733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* poly_stipple_enable - draw module */ 744a4daa75a85db22cd37ebd533ebbccb427e07077Roland Scheidegger /* sprite_coord_enable - ? */ 7568f93ea3eb83cfad014b8ec93cec3564c1aa9833Roland Scheidegger /* point_quad_rasterization - ? */ 763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* point_size_per_vertex - ? */ 773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* sprite_coord_mode - ??? */ 783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* bypass_vs_viewport_and_clip - handled by viewport setup */ 793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* flatshade_first - handled by index translation */ 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* gl_rasterization_rules - XXX - viewport code */ 813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* line_width - draw module */ 823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* fill_cw, fill_ccw - draw module or index translation */ 833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->shademode = svga_translate_flatshade( templ->flatshade ); 853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->cullmode = svga_translate_cullmode( templ->cull_mode, 863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz templ->front_winding ); 873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->scissortestenable = templ->scissor; 883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->multisampleantialias = templ->multisample; 893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->antialiasedlineenable = templ->line_smooth; 903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->lastpixel = templ->line_last_pixel; 913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->pointsize = templ->point_size; 923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->hw_unfilled = PIPE_POLYGON_MODE_FILL; 933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Use swtnl + decomposition implement these: 953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (templ->poly_stipple_enable) 973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_TRIS; 983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (templ->line_width != 1.0 && 1003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz templ->line_width != 0.0) 1013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_LINES; 1023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (templ->line_stipple_enable) { 1043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* LinePattern not implemented on all backends. 1053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (0) { 1073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz SVGA3dLinePattern lp; 1083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz lp.repeat = templ->line_stipple_factor + 1; 1093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz lp.pattern = templ->line_stipple_pattern; 1103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->linepattern = lp.uintValue; 1113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz else { 1133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_LINES; 1143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (templ->point_smooth) 1183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_POINTS; 1193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz { 1213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean offset_cw = templ->offset_cw; 1223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean offset_ccw = templ->offset_ccw; 1233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean offset = 0; 1243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int fill_cw = templ->fill_cw; 1253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int fill_ccw = templ->fill_ccw; 1263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz int fill = PIPE_POLYGON_MODE_FILL; 1273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz switch (templ->cull_mode) { 1293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_BOTH: 1303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz offset = 0; 1313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = PIPE_POLYGON_MODE_FILL; 1323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz break; 1333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_CW: 1353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz offset = offset_ccw; 1363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = fill_ccw; 1373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz break; 1383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_CCW: 1403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz offset = offset_cw; 1413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = fill_cw; 1423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz break; 1433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz case PIPE_WINDING_NONE: 1453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (fill_cw != fill_ccw || offset_cw != offset_ccw) 1463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz { 1473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Always need the draw module to work out different 1483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * front/back fill modes: 1493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_TRIS; 1513192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz else { 1533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz offset = offset_ccw; 1543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = fill_ccw; 1553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz break; 1573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz default: 1593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz assert(0); 1603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz break; 1613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Unfilled primitive modes aren't implemented on all virtual 1643192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * hardware. We can do some unfilled processing with index 1653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * translation, but otherwise need the draw module: 1663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (fill != PIPE_POLYGON_MODE_FILL && 1683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (templ->flatshade || 1693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz templ->light_twoside || 1703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz offset || 1713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz templ->cull_mode != PIPE_WINDING_NONE)) 1723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz { 1733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = PIPE_POLYGON_MODE_FILL; 1743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_TRIS; 1753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* If we are decomposing to lines, and lines need the pipeline, 1783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * then we also need the pipeline for tris. 1793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (fill == PIPE_POLYGON_MODE_LINE && 1813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (rast->need_pipeline & SVGA_PIPELINE_FLAG_LINES)) 1823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz { 1833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = PIPE_POLYGON_MODE_FILL; 1843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_TRIS; 1853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Similarly for points: 1883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (fill == PIPE_POLYGON_MODE_POINT && 1903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz (rast->need_pipeline & SVGA_PIPELINE_FLAG_POINTS)) 1913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz { 1923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz fill = PIPE_POLYGON_MODE_FILL; 1933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->need_pipeline |= SVGA_PIPELINE_FLAG_TRIS; 1943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (offset) { 1973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->slopescaledepthbias = templ->offset_scale; 1983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->depthbias = templ->offset_units; 1993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->hw_unfilled = fill; 2023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2033192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2043192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (rast->need_pipeline & SVGA_PIPELINE_FLAG_TRIS) { 2083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Turn off stuff which will get done in the draw module: 2093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 2103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->hw_unfilled = PIPE_POLYGON_MODE_FILL; 2113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->slopescaledepthbias = 0; 2123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz rast->depthbias = 0; 2133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 2143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return rast; 2163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic void svga_bind_rasterizer_state( struct pipe_context *pipe, 2193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz void *state ) 2203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 2213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_context *svga = svga_context(pipe); 2223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_rasterizer_state *raster = (struct svga_rasterizer_state *)state; 2233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->curr.rast = raster; 2253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz draw_set_rasterizer_state(svga->swtnl.draw, raster ? &raster->templ : NULL); 2273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->dirty |= SVGA_NEW_RAST; 2293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic void svga_delete_rasterizer_state(struct pipe_context *pipe, 2323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz void *raster) 2333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 2343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz FREE(raster); 2353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzvoid svga_init_rasterizer_functions( struct svga_context *svga ) 2393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 2403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.create_rasterizer_state = svga_create_rasterizer_state; 2413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.bind_rasterizer_state = svga_bind_rasterizer_state; 2423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz svga->pipe.delete_rasterizer_state = svga_delete_rasterizer_state; 2433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/*********************************************************************** 2473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Hardware state update 2483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 2493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 250