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);
 
 #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);
+}
+
 static void si_destroy_context(struct pipe_context *context)
 {
        struct si_context *sctx = (struct si_context *)context;
@@ -163,6 +181,10 @@ static struct pipe_context *si_create_context(struct 
pipe_screen *screen, void *
 
        sctx->b.ws->cs_set_flush_callback(sctx->b.rings.gfx.cs, 
si_flush_from_winsys, sctx);
 
+       sctx->b.rings.dma.cs = sctx->b.ws->cs_create(sctx->b.ws, RING_DMA, 
NULL);
+       sctx->b.rings.dma.flush = si_flush_dma_from_st;
+       sctx->b.ws->cs_set_flush_callback(sctx->b.rings.dma.cs, 
si_flush_dma_from_winsys, sctx);
+
        sctx->blitter = util_blitter_create(&sctx->b.b);
        if (sctx->blitter == NULL)
                goto fail;
-- 
1.9.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to