diff options
author | Niels Ole Salscheider <[email protected]> | 2014-03-13 20:07:13 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2014-03-14 15:01:14 +0100 |
commit | 087b0ff1c1f136e5d7e4775b8b8889f1ef7ee1f8 (patch) | |
tree | a38c5c83fde29531ed76d4047fdf9effecd3a644 /src | |
parent | a9cf3aa2087f807b15e0e59ad00dd5bacf362c18 (diff) |
radeon: Move DMA ring creation to common code
Signed-off-by: Niels Ole Salscheider <[email protected]>
Signed-off-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.c | 30 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.c | 30 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.h | 2 |
4 files changed, 32 insertions, 31 deletions
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 88fbdd8d5fd..982e18d47a2 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -48,7 +48,6 @@ static const struct debug_named_value r600_debug_options[] = { { "nollvm", DBG_NO_LLVM, "Disable the LLVM shader compiler" }, #endif { "nocpdma", DBG_NO_CP_DMA, "Disable CP DMA" }, - { "nodma", DBG_NO_ASYNC_DMA, "Disable asynchronous DMA" }, /* shader backend */ { "nosb", DBG_NO_SB, "Disable sb backend for graphics shaders" }, @@ -121,20 +120,6 @@ static void r600_flush_gfx_ring(void *ctx, unsigned flags) r600_flush((struct pipe_context*)ctx, flags); } -static void r600_flush_dma_ring(void *ctx, unsigned flags) -{ - struct r600_context *rctx = (struct r600_context *)ctx; - struct radeon_winsys_cs *cs = rctx->b.rings.dma.cs; - - if (!cs->cdw) { - return; - } - - rctx->b.rings.dma.flushing = true; - rctx->b.ws->cs_flush(cs, flags, 0); - rctx->b.rings.dma.flushing = false; -} - static void r600_flush_from_winsys(void *ctx, unsigned flags) { struct r600_context *rctx = (struct r600_context *)ctx; @@ -142,13 +127,6 @@ static void r600_flush_from_winsys(void *ctx, unsigned flags) rctx->b.rings.gfx.flush(rctx, flags); } -static void r600_flush_dma_from_winsys(void *ctx, unsigned flags) -{ - struct r600_context *rctx = (struct r600_context *)ctx; - - rctx->b.rings.dma.flush(rctx, flags); -} - static void r600_destroy_context(struct pipe_context *context) { struct r600_context *rctx = (struct r600_context *)context; @@ -269,14 +247,6 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void rctx->b.ws->cs_set_flush_callback(rctx->b.rings.gfx.cs, r600_flush_from_winsys, rctx); rctx->b.rings.gfx.flushing = false; - rctx->b.rings.dma.cs = NULL; - if (rscreen->b.info.r600_has_dma && !(rscreen->b.debug_flags & DBG_NO_ASYNC_DMA)) { - rctx->b.rings.dma.cs = rctx->b.ws->cs_create(rctx->b.ws, RING_DMA, NULL); - rctx->b.rings.dma.flush = r600_flush_dma_ring; - rctx->b.ws->cs_set_flush_callback(rctx->b.rings.dma.cs, r600_flush_dma_from_winsys, rctx); - rctx->b.rings.dma.flushing = false; - } - rctx->allocator_fetch_shader = u_suballocator_create(&rctx->b.b, 64 * 1024, 256, 0, PIPE_USAGE_DEFAULT, FALSE); if (!rctx->allocator_fetch_shader) diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 6d627e5adee..a3827e3ceea 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -197,7 +197,6 @@ struct r600_gs_rings_state { /* features */ #define DBG_NO_LLVM (1 << 17) #define DBG_NO_CP_DMA (1 << 18) -#define DBG_NO_ASYNC_DMA (1 << 19) /* shader backend */ #define DBG_NO_SB (1 << 21) #define DBG_SB_CS (1 << 22) diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index 3aa718d905f..05ada1c4bb4 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -43,6 +43,27 @@ static void r600_memory_barrier(struct pipe_context *ctx, unsigned flags) { } +static void r600_flush_dma_ring(void *ctx, unsigned flags) +{ + struct r600_common_context *rctx = (struct r600_common_context *)ctx; + struct radeon_winsys_cs *cs = rctx->rings.dma.cs; + + if (!cs->cdw) { + return; + } + + rctx->rings.dma.flushing = true; + rctx->ws->cs_flush(cs, flags, 0); + rctx->rings.dma.flushing = false; +} + +static void r600_flush_dma_from_winsys(void *ctx, unsigned flags) +{ + struct r600_common_context *rctx = (struct r600_common_context *)ctx; + + rctx->rings.dma.flush(rctx, flags); +} + bool r600_common_context_init(struct r600_common_context *rctx, struct r600_common_screen *rscreen) { @@ -77,6 +98,12 @@ bool r600_common_context_init(struct r600_common_context *rctx, if (!rctx->uploader) return false; + if (rscreen->info.r600_has_dma && !(rscreen->debug_flags & DBG_NO_ASYNC_DMA)) { + rctx->rings.dma.cs = rctx->ws->cs_create(rctx->ws, RING_DMA, NULL); + rctx->rings.dma.flush = r600_flush_dma_ring; + rctx->ws->cs_set_flush_callback(rctx->rings.dma.cs, r600_flush_dma_from_winsys, rctx); + } + return true; } @@ -136,6 +163,9 @@ static const struct debug_named_value common_debug_options[] = { { "vm", DBG_VM, "Print virtual addresses when creating resources" }, { "trace_cs", DBG_TRACE_CS, "Trace cs and write rlockup_<csid>.c file with faulty cs" }, + /* features */ + { "nodma", DBG_NO_ASYNC_DMA, "Disable asynchronous DMA" }, + /* shaders */ { "fs", DBG_FS, "Print fetch shaders" }, { "vs", DBG_VS, "Print vertex shaders" }, diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index 86de6f879aa..92883a05e6a 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -76,6 +76,8 @@ #define DBG_COMPUTE (1 << 2) #define DBG_VM (1 << 3) #define DBG_TRACE_CS (1 << 4) +/* features */ +#define DBG_NO_ASYNC_DMA (1 << 5) /* shaders */ #define DBG_FS (1 << 8) #define DBG_VS (1 << 9) |