Mesa (master): radeonsi: simplify determining whether render condition is enabled at draw time

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 22 17:04:10 UTC 2021


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sun Jan 10 00:45:22 2021 -0500

radeonsi: simplify determining whether render condition is enabled at draw time

Read one bool instead of reading one bool and one pointer.

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

---

 src/gallium/drivers/radeonsi/si_blit.c         | 4 ++--
 src/gallium/drivers/radeonsi/si_compute.c      | 2 +-
 src/gallium/drivers/radeonsi/si_compute_blit.c | 4 ++--
 src/gallium/drivers/radeonsi/si_pipe.h         | 2 +-
 src/gallium/drivers/radeonsi/si_query.c        | 7 ++++---
 src/gallium/drivers/radeonsi/si_state_draw.cpp | 2 +-
 6 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
index cec7f7cb14b..ccf37cda964 100644
--- a/src/gallium/drivers/radeonsi/si_blit.c
+++ b/src/gallium/drivers/radeonsi/si_blit.c
@@ -74,7 +74,7 @@ void si_blitter_begin(struct si_context *sctx, enum si_blitter_op op)
    }
 
    if (op & SI_DISABLE_RENDER_COND)
-      sctx->render_cond_force_off = true;
+      sctx->render_cond_enabled = false;
 
    if (sctx->screen->dpbb_allowed) {
       sctx->dpbb_force_off = true;
@@ -93,7 +93,7 @@ void si_blitter_end(struct si_context *sctx)
       si_mark_atom_dirty(sctx, &sctx->atoms.s.dpbb_state);
    }
 
-   sctx->render_cond_force_off = false;
+   sctx->render_cond_enabled = sctx->render_cond;
 
    /* Restore shader pointers because the VS blit shader changed all
     * non-global VS user SGPRs. */
diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c
index 008972e27f3..40933fee016 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -740,7 +740,7 @@ static void si_emit_dispatch_packets(struct si_context *sctx, const struct pipe_
 {
    struct si_screen *sscreen = sctx->screen;
    struct radeon_cmdbuf *cs = &sctx->gfx_cs;
-   bool render_cond_bit = sctx->render_cond && !sctx->render_cond_force_off;
+   bool render_cond_bit = sctx->render_cond_enabled;
    unsigned threads_per_threadgroup = info->block[0] * info->block[1] * info->block[2];
    unsigned waves_per_threadgroup =
       DIV_ROUND_UP(threads_per_threadgroup, sscreen->compute_wave_size);
diff --git a/src/gallium/drivers/radeonsi/si_compute_blit.c b/src/gallium/drivers/radeonsi/si_compute_blit.c
index ec4b77170e1..6ead3c42e9b 100644
--- a/src/gallium/drivers/radeonsi/si_compute_blit.c
+++ b/src/gallium/drivers/radeonsi/si_compute_blit.c
@@ -76,7 +76,7 @@ void si_launch_grid_internal(struct si_context *sctx, struct pipe_grid_info *inf
    sctx->flags |= SI_CONTEXT_STOP_PIPELINE_STATS;
 
    if (!(flags & SI_CS_RENDER_COND_ENABLE))
-      sctx->render_cond_force_off = true;
+      sctx->render_cond_enabled = false;
 
    /* Skip decompression to prevent infinite recursion. */
    sctx->blitter_running = true;
@@ -87,7 +87,7 @@ void si_launch_grid_internal(struct si_context *sctx, struct pipe_grid_info *inf
    /* Restore default settings. */
    sctx->flags &= ~SI_CONTEXT_STOP_PIPELINE_STATS;
    sctx->flags |= SI_CONTEXT_START_PIPELINE_STATS;
-   sctx->render_cond_force_off = false;
+   sctx->render_cond_enabled = sctx->render_cond;
    sctx->blitter_running = false;
 
    /* Restore the original compute shader. */
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index 80b4d9e0e75..4a55bfeab26 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -1262,7 +1262,7 @@ struct si_context {
    struct pipe_query *render_cond;
    unsigned render_cond_mode;
    bool render_cond_invert;
-   bool render_cond_force_off; /* for u_blitter */
+   bool render_cond_enabled; /* for u_blitter */
 
    /* Shader-based queries. */
    struct list_head shader_query_buffers;
diff --git a/src/gallium/drivers/radeonsi/si_query.c b/src/gallium/drivers/radeonsi/si_query.c
index 3a3beaba473..00ab68b0368 100644
--- a/src/gallium/drivers/radeonsi/si_query.c
+++ b/src/gallium/drivers/radeonsi/si_query.c
@@ -1605,8 +1605,8 @@ static void si_render_condition(struct pipe_context *ctx, struct pipe_query *que
       }
 
       if (needs_workaround && !squery->workaround_buf) {
-         bool old_force_off = sctx->render_cond_force_off;
-         sctx->render_cond_force_off = true;
+         bool old_render_cond_enabled = sctx->render_cond_enabled;
+         sctx->render_cond_enabled = false;
 
          u_suballocator_alloc(&sctx->allocator_zeroed_memory, 8, 8, &squery->workaround_offset,
                               (struct pipe_resource **)&squery->workaround_buf);
@@ -1623,13 +1623,14 @@ static void si_render_condition(struct pipe_context *ctx, struct pipe_query *que
           * so set it here. */
          sctx->flags |= sctx->screen->barrier_flags.L2_to_cp | SI_CONTEXT_FLUSH_FOR_RENDER_COND;
 
-         sctx->render_cond_force_off = old_force_off;
+         sctx->render_cond_enabled = old_render_cond_enabled;
       }
    }
 
    sctx->render_cond = query;
    sctx->render_cond_invert = condition;
    sctx->render_cond_mode = mode;
+   sctx->render_cond_enabled = query;
 
    si_set_atom_dirty(sctx, atom, query != NULL);
 }
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp
index 3af06fbce2b..9f8ec51a98b 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.cpp
+++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp
@@ -1073,7 +1073,7 @@ static void si_emit_draw_packets(struct si_context *sctx, const struct pipe_draw
    }
 
    unsigned sh_base_reg = sctx->shader_pointers.sh_base[PIPE_SHADER_VERTEX];
-   bool render_cond_bit = sctx->render_cond && !sctx->render_cond_force_off;
+   bool render_cond_bit = sctx->render_cond_enabled;
 
    if (indirect) {
       assert(num_draws == 1);



More information about the mesa-commit mailing list