From c717dad47631565a8d631c6b42135797fa6ff1a4 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 6 Jan 2022 16:27:34 -0800 Subject: [PATCH] r600: Update the PS state before checking for cb_misc update. The update_ps_state updates ps_shader->current->ps_color_export_mask, so we could miss statechanges. Cc: mesa-stable Acked-by: Gert Wollny Part-of: (cherry picked from commit e0429d9fef932eaa80b9c06feabb6e9aa02156b1) --- .pick_status.json | 2 +- src/gallium/drivers/r600/r600_state_common.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index a03b42b567b..8598c6e4113 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -476,7 +476,7 @@ "description": "r600: Update the PS state before checking for cb_misc update.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "because_sha": null }, { diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 2f1d2add9f7..c45d1b3db38 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -1918,6 +1918,16 @@ static bool r600_update_derived_state(struct r600_context *rctx) rctx->rasterizer->sprite_coord_enable != rctx->ps_shader->current->sprite_coord_enable || rctx->rasterizer->flatshade != rctx->ps_shader->current->flatshade)) { + if (unlikely(!ps_dirty && rctx->ps_shader && rctx->rasterizer && + ((rctx->rasterizer->sprite_coord_enable != rctx->ps_shader->current->sprite_coord_enable) || + (rctx->rasterizer->flatshade != rctx->ps_shader->current->flatshade)))) { + + if (rctx->b.chip_class >= EVERGREEN) + evergreen_update_ps_state(ctx, rctx->ps_shader->current); + else + r600_update_ps_state(ctx, rctx->ps_shader->current); + } + if (rctx->cb_misc_state.nr_ps_color_outputs != rctx->ps_shader->current->nr_ps_color_outputs || rctx->cb_misc_state.ps_color_export_mask != rctx->ps_shader->current->ps_color_export_mask) { rctx->cb_misc_state.nr_ps_color_outputs = rctx->ps_shader->current->nr_ps_color_outputs; @@ -1934,16 +1944,6 @@ static bool r600_update_derived_state(struct r600_context *rctx) } } - if (unlikely(!ps_dirty && rctx->ps_shader && rctx->rasterizer && - ((rctx->rasterizer->sprite_coord_enable != rctx->ps_shader->current->sprite_coord_enable) || - (rctx->rasterizer->flatshade != rctx->ps_shader->current->flatshade)))) { - - if (rctx->b.chip_class >= EVERGREEN) - evergreen_update_ps_state(ctx, rctx->ps_shader->current); - else - r600_update_ps_state(ctx, rctx->ps_shader->current); - } - r600_mark_atom_dirty(rctx, &rctx->shader_stages.atom); } UPDATE_SHADER(R600_HW_STAGE_PS, ps);