Module: Mesa Branch: master Commit: 097cfe9fdebd74b728a8baf48715224d360ddb6d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=097cfe9fdebd74b728a8baf48715224d360ddb6d
Author: Nicolai Hähnle <[email protected]> Date: Fri Aug 25 16:19:56 2017 +0200 radeonsi: fix ARB_transform_feedback_overflow_query on <= VI The result written by the shader workaround needs to be written back, or the CP may read stale data. Fixes: 78476cfe071a ("radeonsi: enable ARB_transform_feedback_overflow_query") Reviewed-by: Marek Olšák <[email protected]> --- src/gallium/drivers/radeon/r600_pipe_common.h | 5 +++++ src/gallium/drivers/radeon/r600_query.c | 4 ++++ src/gallium/drivers/radeonsi/si_pipe.c | 4 +++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index d76d4a1384..9805088bd8 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -454,6 +454,11 @@ struct r600_common_screen { */ unsigned cp_to_L2; + /* Context flags to set so that all writes from earlier jobs + * that end in L2 are seen by CP. + */ + unsigned L2_to_cp; + /* Context flags to set so that all writes from earlier * compute jobs are seen by L2 clients. */ diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c index eaff39c830..f937612bc1 100644 --- a/src/gallium/drivers/radeon/r600_query.c +++ b/src/gallium/drivers/radeon/r600_query.c @@ -1833,6 +1833,10 @@ static void r600_render_condition(struct pipe_context *ctx, ctx, query, true, PIPE_QUERY_TYPE_U64, 0, &rquery->workaround_buf->b.b, rquery->workaround_offset); + /* 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->render_cond_force_off = old_force_off; diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 18d5806ac8..98d65329e3 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -1078,8 +1078,10 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws, sscreen->b.barrier_flags.cp_to_L2 = SI_CONTEXT_INV_SMEM_L1 | SI_CONTEXT_INV_VMEM_L1; - if (sscreen->b.chip_class <= VI) + if (sscreen->b.chip_class <= VI) { sscreen->b.barrier_flags.cp_to_L2 |= SI_CONTEXT_INV_GLOBAL_L2; + sscreen->b.barrier_flags.L2_to_cp |= SI_CONTEXT_WRITEBACK_GLOBAL_L2; + } sscreen->b.barrier_flags.compute_to_L2 = SI_CONTEXT_CS_PARTIAL_FLUSH; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
