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 si_screen *screen;
|
||||||
struct radeon_winsys_cs *ce_ib;
|
struct radeon_winsys_cs *ce_ib;
|
||||||
struct radeon_winsys_cs *ce_preamble_ib;
|
struct radeon_winsys_cs *ce_preamble_ib;
|
||||||
|
bool ce_need_synchronization;
|
||||||
|
|
||||||
struct pipe_fence_handle *last_gfx_fence;
|
struct pipe_fence_handle *last_gfx_fence;
|
||||||
struct si_shader_ctx_state fixed_func_tcs_shader;
|
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)
|
void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
||||||
{
|
{
|
||||||
struct si_context *sctx = (struct si_context *)ctx;
|
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_scratch_reloc(sctx);
|
||||||
si_emit_rasterizer_prim_state(sctx);
|
si_emit_rasterizer_prim_state(sctx);
|
||||||
si_emit_draw_registers(sctx, info);
|
si_emit_draw_registers(sctx, info);
|
||||||
|
|
||||||
|
si_ce_pre_draw_synchronization(sctx);
|
||||||
|
|
||||||
si_emit_draw_packets(sctx, info, &ib);
|
si_emit_draw_packets(sctx, info, &ib);
|
||||||
|
|
||||||
|
si_ce_post_draw_synchronization(sctx);
|
||||||
|
|
||||||
if (sctx->trace_buf)
|
if (sctx->trace_buf)
|
||||||
si_trace_emit(sctx);
|
si_trace_emit(sctx);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue