From 6c833ba1ab7ffe615d8c025a7452984083c1143b Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Tue, 19 Apr 2016 13:52:32 +0200 Subject: [PATCH] radeonsi: Add CE synchronization for compute dispatches. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Bas Nieuwenhuizen Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_compute.c | 4 ++++ src/gallium/drivers/radeonsi/si_state.h | 2 ++ src/gallium/drivers/radeonsi/si_state_draw.c | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 105cf8cb99f..557e89236fa 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -474,7 +474,11 @@ static void si_launch_grid( if (program->ir_type == PIPE_SHADER_IR_TGSI) si_setup_tgsi_grid(sctx, info); + si_ce_pre_draw_synchronization(sctx); + si_emit_dispatch_packets(sctx, info); + + si_ce_post_draw_synchronization(sctx); } diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h index 3679532a86c..c4b2b458241 100644 --- a/src/gallium/drivers/radeonsi/si_state.h +++ b/src/gallium/drivers/radeonsi/si_state.h @@ -321,6 +321,8 @@ void si_destroy_shader_cache(struct si_screen *sscreen); /* si_state_draw.c */ void si_emit_cache_flush(struct si_context *sctx, struct r600_atom *atom); +void si_ce_pre_draw_synchronization(struct si_context *sctx); +void si_ce_post_draw_synchronization(struct si_context *sctx); void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *dinfo); void si_trace_emit(struct si_context *sctx); diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index 15d58d412d3..b61c05ac866 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -750,7 +750,7 @@ static void si_get_draw_start_count(struct si_context *sctx, } } -static void si_ce_pre_draw_synchronization(struct si_context *sctx) +void si_ce_pre_draw_synchronization(struct si_context *sctx) { if (sctx->ce_need_synchronization) { radeon_emit(sctx->ce_ib, PKT3(PKT3_INCREMENT_CE_COUNTER, 0, 0)); @@ -761,7 +761,7 @@ static void si_ce_pre_draw_synchronization(struct si_context *sctx) } } -static void si_ce_post_draw_synchronization(struct si_context *sctx) +void si_ce_post_draw_synchronization(struct si_context *sctx) { if (sctx->ce_need_synchronization) { radeon_emit(sctx->b.gfx.cs, PKT3(PKT3_INCREMENT_DE_COUNTER, 0, 0)); -- 2.30.2