On Thu, Mar 13, 2014 at 8:45 AM, Niels Ole Salscheider <niels_...@salscheider-online.de> wrote: > Signed-off-by: Niels Ole Salscheider <niels_...@salscheider-online.de> > --- > src/gallium/drivers/radeonsi/si_hw_context.c | 3 +++ > src/gallium/drivers/radeonsi/si_pipe.c | 22 ++++++++++++++++++++++ > 2 files changed, 25 insertions(+) > > diff --git a/src/gallium/drivers/radeonsi/si_hw_context.c > b/src/gallium/drivers/radeonsi/si_hw_context.c > index c952c8d..d9fba01 100644 > --- a/src/gallium/drivers/radeonsi/si_hw_context.c > +++ b/src/gallium/drivers/radeonsi/si_hw_context.c > @@ -123,6 +123,9 @@ void si_context_flush(struct si_context *ctx, unsigned > flags) > #endif > > /* Flush the CS. */ > + if (ctx->b.rings.dma.cs) { > + ctx->b.ws->cs_flush(ctx->b.rings.dma.cs, flags, 0); > + } > ctx->b.ws->cs_flush(ctx->b.rings.gfx.cs, flags, 0);
This is a wrong place for flushing the DMA ring, because it always flushes the graphics ring with it. The DMA flush should be independent from the graphics flush. See what r600g does. > > #if SI_TRACE_CS > diff --git a/src/gallium/drivers/radeonsi/si_pipe.c > b/src/gallium/drivers/radeonsi/si_pipe.c > index 827e9fe..21cbedf 100644 > --- a/src/gallium/drivers/radeonsi/si_pipe.c > +++ b/src/gallium/drivers/radeonsi/si_pipe.c > @@ -74,6 +74,24 @@ static void si_flush_from_winsys(void *ctx, unsigned flags) > si_flush((struct pipe_context*)ctx, NULL, flags); > } > > +static void si_flush_dma_from_st(void *ctx, unsigned flags) > +{ > + struct si_context *sctx = (struct si_context *)ctx; > + struct radeon_winsys_cs *cs = sctx->b.rings.dma.cs; > + > + if (!cs->cdw) { > + return; > + } > + > + sctx->b.ws->cs_flush(cs, flags, 0); > +} > + > +static void si_flush_dma_from_winsys(void *ctx, unsigned flags) > +{ > + struct si_context *sctx = (struct si_context *)ctx; > + sctx->b.rings.dma.flush(sctx, flags); > +} > + Instead of adding these two, you can move the same r600g code to drivers/radeon/r600_pipe_common.c and just use it there. I'd like all this DMA ring management to live in drivers/radeon, because it doesn't depend on r600_context at all. Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev