Mesa (master): st/mesa: fix a defect when st_validate_state was invoked for unused states

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 5 04:11:34 UTC 2021


Module: Mesa
Branch: master
Commit: 6549caf2c23812db0e277c7f4b8801a7f6a493b9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6549caf2c23812db0e277c7f4b8801a7f6a493b9

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Nov 28 03:46:30 2020 -0500

st/mesa: fix a defect when st_validate_state was invoked for unused states

This fixes a small performance issue. Discovered with piglit/drawoverhead.

Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8017>

---

 src/mesa/state_tracker/st_cb_bitmap.c  | 4 ++--
 src/mesa/state_tracker/st_cb_compute.c | 3 ++-
 src/mesa/state_tracker/st_draw.c       | 3 ++-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index ab770669071..1b372b0c229 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -610,8 +610,8 @@ st_Bitmap(struct gl_context *ctx, GLint x, GLint y,
     * for bitmap drawing uses no constants and the FS constants are
     * explicitly uploaded in the draw_bitmap_quad() function.
     */
-   if ((st->dirty | ctx->NewDriverState) & ~ST_NEW_CONSTANTS &
-       ST_PIPELINE_RENDER_STATE_MASK ||
+   if ((st->dirty | ctx->NewDriverState) & st->active_states &
+       ~ST_NEW_CONSTANTS & ST_PIPELINE_RENDER_STATE_MASK ||
        st->gfx_shaders_may_be_dirty) {
       st_validate_state(st, ST_PIPELINE_META);
    }
diff --git a/src/mesa/state_tracker/st_cb_compute.c b/src/mesa/state_tracker/st_cb_compute.c
index a99484e4f2e..21d9f7cb8c8 100644
--- a/src/mesa/state_tracker/st_cb_compute.c
+++ b/src/mesa/state_tracker/st_cb_compute.c
@@ -53,7 +53,8 @@ static void st_dispatch_compute_common(struct gl_context *ctx,
    if (ctx->NewState)
       _mesa_update_state(ctx);
 
-   if ((st->dirty | ctx->NewDriverState) & ST_PIPELINE_COMPUTE_STATE_MASK ||
+   if ((st->dirty | ctx->NewDriverState) & st->active_states &
+       ST_PIPELINE_COMPUTE_STATE_MASK ||
        st->compute_shader_may_be_dirty)
       st_validate_state(st, ST_PIPELINE_COMPUTE);
 
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 7e79d7f6a65..a1a123fbae1 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -97,7 +97,8 @@ prepare_draw(struct st_context *st, struct gl_context *ctx)
    st_invalidate_readpix_cache(st);
 
    /* Validate state. */
-   if ((st->dirty | ctx->NewDriverState) & ST_PIPELINE_RENDER_STATE_MASK ||
+   if ((st->dirty | ctx->NewDriverState) & st->active_states &
+       ST_PIPELINE_RENDER_STATE_MASK ||
        st->gfx_shaders_may_be_dirty) {
       st_validate_state(st, ST_PIPELINE_RENDER);
    }



More information about the mesa-commit mailing list