diff options
author | Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> | 2016-03-10 21:01:39 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> | 2016-04-19 18:10:30 +0200 |
commit | 86c71ff989f39401e3a8195aabcaae8dae89146b (patch) | |
tree | bbada307d6be706ef29ef360cc7aa1316d9ec343 /src/gallium/drivers/radeonsi/si_state_draw.c | |
parent | fe1ef23b6698a55613bc7c4d46bd68aeff080d43 (diff) | |
download | external_mesa3d-86c71ff989f39401e3a8195aabcaae8dae89146b.zip external_mesa3d-86c71ff989f39401e3a8195aabcaae8dae89146b.tar.gz external_mesa3d-86c71ff989f39401e3a8195aabcaae8dae89146b.tar.bz2 |
radeonsi: Add CE synchronization.
Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state_draw.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state_draw.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index d31f77f..8248604 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -757,6 +757,27 @@ static void si_get_draw_start_count(struct si_context *sctx, } } +static 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)); + radeon_emit(sctx->ce_ib, 1); + + radeon_emit(sctx->b.gfx.cs, PKT3(PKT3_WAIT_ON_CE_COUNTER, 0, 0)); + radeon_emit(sctx->b.gfx.cs, 1); + } +} + +static 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)); + radeon_emit(sctx->b.gfx.cs, 0); + + sctx->ce_need_synchronization = false; + } +} + void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) { struct si_context *sctx = (struct si_context *)ctx; @@ -886,8 +907,13 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) si_emit_scratch_reloc(sctx); si_emit_rasterizer_prim_state(sctx); si_emit_draw_registers(sctx, info); + + si_ce_pre_draw_synchronization(sctx); + si_emit_draw_packets(sctx, info, &ib); + si_ce_post_draw_synchronization(sctx); + if (sctx->trace_buf) si_trace_emit(sctx); |