Mesa (main): llvmpipe: consistently deal with post-rast state

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 11 08:13:09 UTC 2021


Module: Mesa
Branch: main
Commit: 9fa53d1f5093af8ea7db5022cf8197282dc4f4d5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fa53d1f5093af8ea7db5022cf8197282dc4f4d5

Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date:   Wed Jun  9 10:55:44 2021 +0200

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 <sroland at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11183>

---

 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;



More information about the mesa-commit mailing list