[Mesa-dev] [PATCH 1/2] radeonsi: Add DMA ring
Niels Ole Salscheider
niels_ole at salscheider-online.de
Thu Mar 13 00:45:42 PDT 2014
Signed-off-by: Niels Ole Salscheider <niels_ole at 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
More information about the mesa-dev
mailing list