radeonsi: Add CE synchronization.
Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
fe1ef23b66
commit
86c71ff989
|
@ -193,6 +193,7 @@ struct si_context {
|
|||
struct si_screen *screen;
|
||||
struct radeon_winsys_cs *ce_ib;
|
||||
struct radeon_winsys_cs *ce_preamble_ib;
|
||||
bool ce_need_synchronization;
|
||||
|
||||
struct pipe_fence_handle *last_gfx_fence;
|
||||
struct si_shader_ctx_state fixed_func_tcs_shader;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue