Mesa (master): radeonsi: avoid redundant SET_PREDICATION packet with QBO workaround

Nicolai Hähnle nh at kemper.freedesktop.org
Wed Aug 2 07:49:54 UTC 2017


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

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Thu Jul 27 19:41:26 2017 +0200

radeonsi: avoid redundant SET_PREDICATION packet with QBO workaround

The QBO workaround compute grid launch emits the render condition atom
when dirty, so install the render condition in the context only after
launching the compute grid. This avoids a redundant SET_PREDICATION.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/drivers/radeon/r600_query.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c
index 5879a07586..4069d2eb90 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -1790,10 +1790,6 @@ static void r600_render_condition(struct pipe_context *ctx,
 	struct r600_query_buffer *qbuf;
 	struct r600_atom *atom = &rctx->render_cond_atom;
 
-	rctx->render_cond = query;
-	rctx->render_cond_invert = condition;
-	rctx->render_cond_mode = mode;
-
 	/* Compute the size of SET_PREDICATION packets. */
 	atom->num_dw = 0;
 	if (query) {
@@ -1820,6 +1816,11 @@ static void r600_render_condition(struct pipe_context *ctx,
 				&rquery->workaround_offset,
 				(struct pipe_resource **)&rquery->workaround_buf);
 
+			/* Reset to NULL to avoid a redundant SET_PREDICATION
+			 * from launching the compute grid.
+			 */
+			rctx->render_cond = NULL;
+
 			ctx->get_query_result_resource(
 				ctx, query, true, PIPE_QUERY_TYPE_U64, 0,
 				&rquery->workaround_buf->b.b, rquery->workaround_offset);
@@ -1836,6 +1837,10 @@ static void r600_render_condition(struct pipe_context *ctx,
 		}
 	}
 
+	rctx->render_cond = query;
+	rctx->render_cond_invert = condition;
+	rctx->render_cond_mode = mode;
+
 	rctx->set_atom_dirty(rctx, atom, query != NULL);
 }
 




More information about the mesa-commit mailing list