diff options
author | Nicolai Hähnle <[email protected]> | 2017-08-25 09:04:40 +0200 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2017-09-04 13:50:57 +0200 |
commit | 50283109aa2b1a3fd92e92eb1c85426444ef508e (patch) | |
tree | 83fb46eb66bf4a59630fa188c31e906cde73ed8f /src/gallium/drivers/radeon/r600_query.c | |
parent | 097cfe9fdebd74b728a8baf48715224d360ddb6d (diff) |
radeonsi: ensure cache flushes happen before SET_PREDICATION packets
The data is read when the render_cond_atom is emitted, so we must
delay emitting the atom until after the flush.
Fixes: 0fe0320dc074 ("radeonsi: use optimal packet order when doing a pipeline sync")
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon/r600_query.c')
-rw-r--r-- | src/gallium/drivers/radeon/r600_query.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c index f937612bc1f..03ff1018a71 100644 --- a/src/gallium/drivers/radeon/r600_query.c +++ b/src/gallium/drivers/radeon/r600_query.c @@ -1835,11 +1835,14 @@ static void r600_render_condition(struct pipe_context *ctx, /* Settings this in the render cond atom is too late, * so set it here. */ - rctx->flags |= rctx->screen->barrier_flags.L2_to_cp; - - atom->num_dw = 5; + rctx->flags |= rctx->screen->barrier_flags.L2_to_cp | + R600_CONTEXT_FLUSH_FOR_RENDER_COND; rctx->render_cond_force_off = old_force_off; + } + + if (needs_workaround) { + atom->num_dw = 5; } else { for (qbuf = &rquery->buffer; qbuf; qbuf = qbuf->previous) atom->num_dw += (qbuf->results_end / rquery->result_size) * 5; |