[Mesa-dev] [PATCH 12/13] radeonsi: avoid redundant SET_PREDICATION packet with QBO workaround

Nicolai Hähnle nhaehnle at gmail.com
Thu Jul 27 19:14:22 UTC 2017


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

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.
---
 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 cf7ec49..2827891 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -1782,10 +1782,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) {
@@ -1812,6 +1808,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);
@@ -1828,6 +1829,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);
 }
 
-- 
2.9.3



More information about the mesa-dev mailing list