From 9fa53d1f5093af8ea7db5022cf8197282dc4f4d5 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Wed, 9 Jun 2021 10:55:44 +0200 Subject: [PATCH] llvmpipe: consistently deal with post-rast state There's no good reason why we peek into the rasterization state when dealing with the point_quad_rasterization state, rather than set it through lp_setup_set_point_state like other point-state. Let's fix this up, and get rid of a needless NULL-check per primitive. This makes the code a bit easier to read as well, and will help once these conditions gets more complicated later on. Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/drivers/llvmpipe/lp_setup.c | 4 +++- src/gallium/drivers/llvmpipe/lp_setup.h | 3 ++- src/gallium/drivers/llvmpipe/lp_setup_context.h | 1 + src/gallium/drivers/llvmpipe/lp_setup_point.c | 3 +-- src/gallium/drivers/llvmpipe/lp_state_rasterizer.c | 3 ++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c index 8834739198f..707ba5df29f 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup.c +++ b/src/gallium/drivers/llvmpipe/lp_setup.c @@ -600,7 +600,8 @@ lp_setup_set_point_state( struct lp_setup_context *setup, float point_size, boolean point_size_per_vertex, uint sprite_coord_enable, - uint sprite_coord_origin) + uint sprite_coord_origin, + boolean point_quad_rasterization) { LP_DBG(DEBUG_SETUP, "%s\n", __FUNCTION__); @@ -608,6 +609,7 @@ lp_setup_set_point_state( struct lp_setup_context *setup, setup->sprite_coord_enable = sprite_coord_enable; setup->sprite_coord_origin = sprite_coord_origin; setup->point_size_per_vertex = point_size_per_vertex; + setup->legacy_points = !point_quad_rasterization; } void diff --git a/src/gallium/drivers/llvmpipe/lp_setup.h b/src/gallium/drivers/llvmpipe/lp_setup.h index a948212a511..da702378fa9 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup.h +++ b/src/gallium/drivers/llvmpipe/lp_setup.h @@ -90,7 +90,8 @@ lp_setup_set_point_state( struct lp_setup_context *setup, float point_size, boolean point_size_per_vertex, uint sprite_coord_enable, - uint sprite_coord_origin); + uint sprite_coord_origin, + boolean point_quad_rasterization); void lp_setup_set_setup_variant( struct lp_setup_context *setup, diff --git a/src/gallium/drivers/llvmpipe/lp_setup_context.h b/src/gallium/drivers/llvmpipe/lp_setup_context.h index 82fc14b5e5e..891eadbc229 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup_context.h +++ b/src/gallium/drivers/llvmpipe/lp_setup_context.h @@ -100,6 +100,7 @@ struct lp_setup_context boolean ccw_is_frontface; boolean scissor_test; boolean point_size_per_vertex; + boolean legacy_points; boolean rasterizer_discard; boolean multisample; unsigned cullmode; diff --git a/src/gallium/drivers/llvmpipe/lp_setup_point.c b/src/gallium/drivers/llvmpipe/lp_setup_point.c index 696612309eb..66e1416abeb 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup_point.c +++ b/src/gallium/drivers/llvmpipe/lp_setup_point.c @@ -374,8 +374,7 @@ try_setup_point( struct lp_setup_context *setup, print_point(setup, v0, size); /* Bounding rectangle (in pixels) */ - if (!lp_context->rasterizer || - lp_context->rasterizer->point_quad_rasterization) { + if (!setup->legacy_points) { /* * Rasterize points as quads. */ diff --git a/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c b/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c index cd907cfb0f4..712bd5db4e1 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c +++ b/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c @@ -126,7 +126,8 @@ llvmpipe_bind_rasterizer_state(struct pipe_context *pipe, void *handle) state->lp_state.point_size, state->lp_state.point_size_per_vertex, state->lp_state.sprite_coord_enable, - state->lp_state.sprite_coord_mode); + state->lp_state.sprite_coord_mode, + state->lp_state.point_quad_rasterization); } else { llvmpipe->rasterizer = NULL;