diff options
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r-- | src/gallium/drivers/radeon/r600_query.c | 13 |
1 files 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); } |