Mesa (master): radeonsi: move si_pm4_delete_state logic into si_pm4_free_state

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Jan 30 20:59:50 UTC 2021


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Jan  9 07:55:59 2021 -0500

radeonsi: move si_pm4_delete_state logic into si_pm4_free_state

also clear dirty_states.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8794>

---

 src/gallium/drivers/radeonsi/si_pm4.c   | 10 ++++++++--
 src/gallium/drivers/radeonsi/si_state.h |  7 +------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_pm4.c b/src/gallium/drivers/radeonsi/si_pm4.c
index c710a1e2e7a..22b6e3ad518 100644
--- a/src/gallium/drivers/radeonsi/si_pm4.c
+++ b/src/gallium/drivers/radeonsi/si_pm4.c
@@ -99,8 +99,14 @@ void si_pm4_free_state(struct si_context *sctx, struct si_pm4_state *state, unsi
    if (!state)
       return;
 
-   if (idx != ~0 && sctx->emitted.array[idx] == state) {
-      sctx->emitted.array[idx] = NULL;
+   if (idx != ~0) {
+      if (sctx->emitted.array[idx] == state)
+         sctx->emitted.array[idx] = NULL;
+
+      if (sctx->queued.array[idx] == state) {
+         sctx->queued.array[idx] = NULL;
+         sctx->dirty_states &= ~BITFIELD_BIT(idx);
+      }
    }
 
    si_pm4_clear_state(state);
diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h
index d8b0a14cffe..f9d1bcdd407 100644
--- a/src/gallium/drivers/radeonsi/si_state.h
+++ b/src/gallium/drivers/radeonsi/si_state.h
@@ -485,12 +485,7 @@ struct si_buffer_resources {
    } while (0)
 
 #define si_pm4_delete_state(sctx, member, value)                                                   \
-   do {                                                                                            \
-      if ((sctx)->queued.named.member == (value)) {                                                \
-         (sctx)->queued.named.member = NULL;                                                       \
-      }                                                                                            \
-      si_pm4_free_state(sctx, (struct si_pm4_state *)(value), SI_STATE_IDX(member));               \
-   } while (0)
+   si_pm4_free_state(sctx, (struct si_pm4_state *)(value), SI_STATE_IDX(member))
 
 /* si_descriptors.c */
 void si_set_mutable_tex_desc_fields(struct si_screen *sscreen, struct si_texture *tex,



More information about the mesa-commit mailing list