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

Reply via email to