[Mesa-dev] [PATCH 2/5] gallium/radeon: pass old_(perfect_)enable to set_occlusion_query_state

Nicolai Hähnle nhaehnle at gmail.com
Sat Sep 9 10:43:55 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

The callee can derive the current enable state itself.
---
 src/gallium/drivers/r600/r600_state_common.c  | 4 +++-
 src/gallium/drivers/radeon/r600_pipe_common.h | 4 +++-
 src/gallium/drivers/radeon/r600_query.c       | 3 ++-
 src/gallium/drivers/radeonsi/si_state.c       | 4 +++-
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index c1bce8304b2..d9b47299b6e 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -2903,21 +2903,23 @@ static void r600_set_active_query_state(struct pipe_context *ctx, boolean enable
 		rctx->b.flags |= R600_CONTEXT_STOP_PIPELINE_STATS;
 	}
 
 	/* Occlusion queries. */
 	if (rctx->db_misc_state.occlusion_queries_disabled != !enable) {
 		rctx->db_misc_state.occlusion_queries_disabled = !enable;
 		r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom);
 	}
 }
 
-static void r600_set_occlusion_query_state(struct pipe_context *ctx, bool enable)
+static void r600_set_occlusion_query_state(struct pipe_context *ctx,
+					   bool old_enable,
+					   bool old_perfect_enable)
 {
 	struct r600_context *rctx = (struct r600_context*)ctx;
 
 	r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom);
 }
 
 static void r600_need_gfx_cs_space(struct pipe_context *ctx, unsigned num_dw,
                                    bool include_draw_vbo)
 {
 	r600_need_cs_space((struct r600_context*)ctx, num_dw, include_draw_vbo);
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
index 42480ec84b0..ed93d99669f 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -697,21 +697,23 @@ struct r600_common_context {
 	 * the buffer is bound, including all resource descriptors. */
 	void (*invalidate_buffer)(struct pipe_context *ctx, struct pipe_resource *buf);
 
 	/* Update all resource bindings where the buffer is bound, including
 	 * all resource descriptors. This is invalidate_buffer without
 	 * the invalidation. */
 	void (*rebind_buffer)(struct pipe_context *ctx, struct pipe_resource *buf,
 			      uint64_t old_gpu_address);
 
 	/* Enable or disable occlusion queries. */
-	void (*set_occlusion_query_state)(struct pipe_context *ctx, bool enable);
+	void (*set_occlusion_query_state)(struct pipe_context *ctx,
+					  bool old_enable,
+					  bool old_perfect_enable);
 
 	void (*save_qbo_state)(struct pipe_context *ctx, struct r600_qbo_state *st);
 
 	/* This ensures there is enough space in the command stream. */
 	void (*need_gfx_cs_space)(struct pipe_context *ctx, unsigned num_dw,
 				  bool include_draw_vbo);
 
 	void (*set_atom_dirty)(struct r600_common_context *ctx,
 			       struct r600_atom *atom, bool dirty);
 
diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c
index 03ff1018a71..8c2efda356f 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -703,21 +703,22 @@ static void r600_update_occlusion_query_state(struct r600_common_context *rctx,
 
 		if (type == PIPE_QUERY_OCCLUSION_COUNTER) {
 			rctx->num_perfect_occlusion_queries += diff;
 			assert(rctx->num_perfect_occlusion_queries >= 0);
 		}
 
 		enable = rctx->num_occlusion_queries != 0;
 		perfect_enable = rctx->num_perfect_occlusion_queries != 0;
 
 		if (enable != old_enable || perfect_enable != old_perfect_enable) {
-			rctx->set_occlusion_query_state(&rctx->b, enable);
+			rctx->set_occlusion_query_state(&rctx->b, old_enable,
+							old_perfect_enable);
 		}
 	}
 }
 
 static unsigned event_type_for_stream(unsigned stream)
 {
 	switch (stream) {
 	default:
 	case 0: return EVENT_TYPE_SAMPLE_STREAMOUTSTATS;
 	case 1: return EVENT_TYPE_SAMPLE_STREAMOUTSTATS1;
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index ee070107fd5..6978c6ca9a2 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -1184,21 +1184,23 @@ static void si_set_active_query_state(struct pipe_context *ctx, boolean enable)
 		sctx->b.flags |= R600_CONTEXT_STOP_PIPELINE_STATS;
 	}
 
 	/* Occlusion queries. */
 	if (sctx->occlusion_queries_disabled != !enable) {
 		sctx->occlusion_queries_disabled = !enable;
 		si_mark_atom_dirty(sctx, &sctx->db_render_state);
 	}
 }
 
-static void si_set_occlusion_query_state(struct pipe_context *ctx, bool enable)
+static void si_set_occlusion_query_state(struct pipe_context *ctx,
+					 bool old_enable,
+					 bool old_perfect_enable)
 {
 	struct si_context *sctx = (struct si_context*)ctx;
 
 	si_mark_atom_dirty(sctx, &sctx->db_render_state);
 }
 
 static void si_save_qbo_state(struct pipe_context *ctx, struct r600_qbo_state *st)
 {
 	struct si_context *sctx = (struct si_context*)ctx;
 
-- 
2.11.0



More information about the mesa-dev mailing list