From 1c5b7d5235d2174c415928759c0fdacba31f2d28 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Thu, 27 Jul 2017 19:41:26 +0200 Subject: [PATCH] radeonsi: avoid redundant SET_PREDICATION packet with QBO workaround MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- 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 5879a07586c..4069d2eb90a 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); } -- 2.30.2