From 58b82d231de91fd9241401c55b6939a9c4f050d0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 9 Jun 2023 07:38:03 -0400 Subject: [PATCH] zink: don't update tc info directly from cso binds this somehow becomes expensive at extremely high fps, so defer until rp begin to check layout change state Part-of: --- src/gallium/drivers/zink/zink_context.c | 4 ++++ src/gallium/drivers/zink/zink_program.c | 2 +- src/gallium/drivers/zink/zink_state.c | 10 ++-------- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 631b2fd85d0..a387ebbf703 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -2804,6 +2804,10 @@ void zink_batch_rp(struct zink_context *ctx) { assert(!(ctx->batch.in_rp && ctx->rp_changed)); + if (!ctx->track_renderpasses && !ctx->blitting) { + if (ctx->rp_tc_info_updated) + zink_parse_tc_info(ctx); + } if (ctx->batch.in_rp && !ctx->rp_layout_changed) return; bool in_rp = ctx->batch.in_rp; diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index cd2677488d4..b3c95783d6a 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1858,7 +1858,7 @@ zink_bind_fs_state(struct pipe_context *pctx, !zink_screen(pctx->screen)->driver_workarounds.needs_zs_shader_swizzle) zink_update_shadow_samplerviews(ctx, shadow_mask | ctx->gfx_stages[MESA_SHADER_FRAGMENT]->fs.legacy_shadow_mask); if (!ctx->track_renderpasses && !ctx->blitting) - zink_parse_tc_info(ctx); + ctx->rp_tc_info_updated = true; } zink_update_fbfetch(ctx); } diff --git a/src/gallium/drivers/zink/zink_state.c b/src/gallium/drivers/zink/zink_state.c index c69484cd17d..a4934fb1173 100644 --- a/src/gallium/drivers/zink/zink_state.c +++ b/src/gallium/drivers/zink/zink_state.c @@ -545,8 +545,6 @@ zink_bind_depth_stencil_alpha_state(struct pipe_context *pctx, void *cso) { struct zink_context *ctx = zink_context(pctx); - bool prev_zsread = ctx->dsa_state ? ctx->dsa_state->hw_state.depth_test || ctx->dsa_state->hw_state.stencil_test : false; - bool prev_zswrite = ctx->dsa_state ? ctx->dsa_state->hw_state.depth_write || ctx->dsa_state->hw_state.stencil_test : false; zink_flush_dgc_if_enabled(ctx); ctx->dsa_state = cso; @@ -558,12 +556,8 @@ zink_bind_depth_stencil_alpha_state(struct pipe_context *pctx, void *cso) ctx->dsa_state_changed = true; } } - if (!ctx->track_renderpasses && !ctx->blitting) { - bool zs_write = ctx->dsa_state ? ctx->dsa_state->hw_state.depth_write || ctx->dsa_state->hw_state.stencil_test : false; - bool zs_read = ctx->dsa_state ? ctx->dsa_state->hw_state.depth_test || ctx->dsa_state->hw_state.stencil_test : false; - if (prev_zswrite != zs_write || prev_zsread != zs_read) - zink_parse_tc_info(ctx); - } + if (!ctx->track_renderpasses && !ctx->blitting) + ctx->rp_tc_info_updated = true; } static void