On Monday 22 September 2014, 12:16:13, Alex Deucher wrote: > On Sat, Sep 20, 2014 at 6:11 AM, Marek Olšák <mar...@gmail.com> wrote: > > From: Marek Olšák <marek.ol...@amd.com> > > Looks good. Tom should probably take a look as well. As a further > improvement, it would be nice to be able to use the compute rings for > compute rather than gfx, but I'm not sure how much additional effort > it would take to clean that up.
This is completely untested but now that we can detect compute contexts something like the attached patches might be sufficient... > Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> > > > --- > > > > src/gallium/drivers/radeonsi/si_compute.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/src/gallium/drivers/radeonsi/si_compute.c > > b/src/gallium/drivers/radeonsi/si_compute.c index 4b2662d..3ad9182 100644 > > --- a/src/gallium/drivers/radeonsi/si_compute.c > > +++ b/src/gallium/drivers/radeonsi/si_compute.c > > @@ -168,6 +168,7 @@ static void si_launch_grid( > > > > uint32_t pc, const void *input) > > > > { > > > > struct si_context *sctx = (struct si_context*)ctx; > > > > + struct radeon_winsys_cs *cs = sctx->b.rings.gfx.cs; > > > > struct si_compute *program = sctx->cs_shader_state.program; > > struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state); > > struct r600_resource *input_buffer = program->input_buffer; > > > > @@ -184,8 +185,11 @@ static void si_launch_grid( > > > > unsigned lds_blocks; > > unsigned num_waves_for_scratch; > > > > + radeon_emit(cs, PKT3(PKT3_CONTEXT_CONTROL, 1, 0) | > > PKT3_SHADER_TYPE_S(1)); + radeon_emit(cs, 0x80000000); > > + radeon_emit(cs, 0x80000000); > > + > > > > pm4->compute_pkt = true; > > > > - si_cmd_context_control(pm4); > > > > si_pm4_cmd_begin(pm4, PKT3_EVENT_WRITE); > > si_pm4_cmd_add(pm4, EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH) | > > > > -- > > 1.9.1 > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>From 9714d3ee55ee0ddb0bcf63934b552df641b866a2 Mon Sep 17 00:00:00 2001 From: Niels Ole Salscheider <niels_...@salscheider-online.de> Date: Mon, 22 Sep 2014 19:41:20 +0200 Subject: [PATCH 1/2] radeon: submit compute packets to the compute ring They have been submitted to the gfx ring since 764502b481e2288cb5e751de739253fdee886e3e. Signed-off-by: Niels Ole Salscheider <niels_...@salscheider-online.de> --- src/gallium/drivers/radeon/r600_pipe_common.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index ae203b6..0d9ce17 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -174,6 +174,9 @@ static void r600_flush_from_st(struct pipe_context *ctx, if (flags & PIPE_FLUSH_END_OF_FRAME) rflags |= RADEON_FLUSH_END_OF_FRAME; + if (rctx->flags & R600_CONTEXT_FLAG_COMPUTE) + rflags |= RADEON_FLUSH_COMPUTE; + if (rctx->rings.dma.cs) { rctx->rings.dma.flush(rctx, rflags, NULL); } -- 2.1.0
>From e578f9c067de68e9401f798a78c1ed785ceb1137 Mon Sep 17 00:00:00 2001 From: Niels Ole Salscheider <niels_...@salscheider-online.de> Date: Mon, 22 Sep 2014 19:57:52 +0200 Subject: [PATCH 2/2] r600: set R600_CONTEXT_FLAG_COMPUTE in compute_emit_cs Signed-off-by: Niels Ole Salscheider <niels_...@salscheider-online.de> --- src/gallium/drivers/r600/evergreen_compute.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index 38b78c7..03118e1 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -420,7 +420,9 @@ static void compute_emit_cs(struct r600_context *ctx, const uint *block_layout, */ r600_emit_command_buffer(cs, &ctx->start_compute_cs_cmd); - ctx->b.flags |= R600_CONTEXT_WAIT_3D_IDLE | R600_CONTEXT_FLUSH_AND_INV; + ctx->b.flags |= R600_CONTEXT_WAIT_3D_IDLE | + R600_CONTEXT_FLUSH_AND_INV | + R600_CONTEXT_FLAG_COMPUTE; r600_flush_emit(ctx); /* Emit colorbuffers. */ @@ -485,7 +487,8 @@ static void compute_emit_cs(struct r600_context *ctx, const uint *block_layout, */ ctx->b.flags |= R600_CONTEXT_INV_CONST_CACHE | R600_CONTEXT_INV_VERTEX_CACHE | - R600_CONTEXT_INV_TEX_CACHE; + R600_CONTEXT_INV_TEX_CACHE | + R600_CONTEXT_FLAG_COMPUTE; r600_flush_emit(ctx); ctx->b.flags = 0; -- 2.1.0
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev