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; }