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