lp_state_rasterizer.c revision e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7
1946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/************************************************************************** 2946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 3946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * All Rights Reserved. 5946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 6946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * copy of this software and associated documentation files (the 8946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * "Software"), to deal in the Software without restriction, including 9946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * the following conditions: 13946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 14946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * The above copyright notice and this permission notice (including the 15946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * next paragraph) shall be included in all copies or substantial portions 16946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * of the Software. 17946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 18946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 26946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca **************************************************************************/ 27946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 28946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "pipe/p_defines.h" 29946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "util/u_memory.h" 30946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "lp_context.h" 31946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "lp_state.h" 3215a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul#include "lp_setup.h" 33946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "draw/draw_context.h" 34946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 35946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 36946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 37946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid * 38946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_create_rasterizer_state(struct pipe_context *pipe, 39946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_rasterizer_state *rast) 40946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 41e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul /* We do nothing special with rasterizer state. 42e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul * The CSO handle is just a pointer to a pipe_rasterizer_state object. 43e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul */ 44946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca return mem_dup(rast, sizeof(*rast)); 45946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 46946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 47e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul 48e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul 49e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paulvoid 50e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paulllvmpipe_bind_rasterizer_state(struct pipe_context *pipe, void *handle) 51946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 52946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 53e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul const struct pipe_rasterizer_state *rasterizer = 54e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul (const struct pipe_rasterizer_state *) handle; 55946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 56080703e398f737b71336312fd3dc8d6f38f61e51José Fonseca if (llvmpipe->rasterizer == rasterizer) 57080703e398f737b71336312fd3dc8d6f38f61e51José Fonseca return; 58080703e398f737b71336312fd3dc8d6f38f61e51José Fonseca 59946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /* pass-through to draw module */ 60e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul draw_set_rasterizer_state(llvmpipe->draw, rasterizer, handle); 61946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 62080703e398f737b71336312fd3dc8d6f38f61e51José Fonseca llvmpipe->rasterizer = rasterizer; 63946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 6415a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul /* Note: we can immediately set the triangle state here and 6515a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul * not worry about binning because we handle culling during 6615a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul * triangle setup, not when rasterizing the bins. 6715a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul */ 6815a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul if (llvmpipe->rasterizer) { 6915a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul lp_setup_set_triangle_state( llvmpipe->setup, 7015a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul llvmpipe->rasterizer->cull_mode, 71fdfe06ad804ea13e6e436d66c1bcafe0bde2f545Brian Paul llvmpipe->rasterizer->front_winding == PIPE_WINDING_CCW, 72fdfe06ad804ea13e6e436d66c1bcafe0bde2f545Brian Paul llvmpipe->rasterizer->scissor); 7315a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul } 7415a2a588d88ae02e575ff1ef9287c789ebdadeadBrian Paul 75c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca llvmpipe->dirty |= LP_NEW_RASTERIZER; 76946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 77946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 78e3a34cc7f6c9f959cdc2af4486e84587fab4d0d7Brian Paul 79946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid llvmpipe_delete_rasterizer_state(struct pipe_context *pipe, 80946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca void *rasterizer) 81946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 82946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca FREE( rasterizer ); 83946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 84946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 85946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 86