static void
llvmpipe_bind_rasterizer_state(struct pipe_context *pipe, void *handle)
{
   struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
   const struct pipe_rasterizer_state *rasterizer =
      (const struct pipe_rasterizer_state *) handle;

   if (llvmpipe->rasterizer == rasterizer)
      return;

   /* pass-through to draw module */
   draw_set_rasterizer_state(llvmpipe->draw, rasterizer, handle);

   llvmpipe->rasterizer = rasterizer;

   /* Note: we can immediately set the triangle state here and
    * not worry about binning because we handle culling during
    * triangle setup, not when rasterizing the bins.
    */
   if (llvmpipe->rasterizer) {
      lp_setup_set_triangle_state( llvmpipe->setup,
                   llvmpipe->rasterizer->cull_face,
                   llvmpipe->rasterizer->front_ccw,
                   llvmpipe->rasterizer->scissor,
                   llvmpipe->rasterizer->gl_rasterization_rules);
      lp_setup_set_flatshade_first( llvmpipe->setup,
                   llvmpipe->rasterizer->flatshade_first);
      lp_setup_set_line_state( llvmpipe->setup,
                   llvmpipe->rasterizer->line_width);
      lp_setup_set_point_state( llvmpipe->setup,
                   llvmpipe->rasterizer->point_size,
                   llvmpipe->rasterizer->point_size_per_vertex,
                   llvmpipe->rasterizer->sprite_coord_enable);
       }

   llvmpipe->dirty |= LP_NEW_RASTERIZER;
}
static void
llvmpipe_bind_rasterizer_state(struct pipe_context *pipe, void *handle)
{
   struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
   const struct lp_rast_state *state =
      (const struct lp_rast_state *) handle;

   if (state) {
      llvmpipe->rasterizer = &state->lp_state;
      draw_set_rasterizer_state(llvmpipe->draw, &state->draw_state, handle);

      /* XXX: just pass lp_state directly to setup.
       */
      lp_setup_set_triangle_state( llvmpipe->setup,
                                  state->lp_state.cull_face,
                                  state->lp_state.front_ccw,
                                  state->lp_state.scissor,
                                  state->lp_state.half_pixel_center,
                                  state->lp_state.bottom_edge_rule);
      lp_setup_set_flatshade_first( llvmpipe->setup,
				    state->lp_state.flatshade_first);
      lp_setup_set_line_state( llvmpipe->setup,
                              state->lp_state.line_width);
      lp_setup_set_point_state( llvmpipe->setup,
                               state->lp_state.point_size,
                               state->lp_state.point_size_per_vertex,
                               state->lp_state.sprite_coord_enable,
                               state->lp_state.sprite_coord_mode);
   }
   else {
      llvmpipe->rasterizer = NULL;
      draw_set_rasterizer_state(llvmpipe->draw, NULL, handle);      
   }

   llvmpipe->dirty |= LP_NEW_RASTERIZER;
}