diff options
author | Marek Olšák <[email protected]> | 2012-12-22 19:33:47 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2013-01-08 21:58:28 +0100 |
commit | a70e5e2b94194da3f4102a9f8e3c8ed5ca6dd8b8 (patch) | |
tree | 11dd8c9457d5e2d4051a7cab38b1cf94b3e8d3d0 /src/gallium/drivers/r600/r600.h | |
parent | 2d3d0d3a5ae3829260f914462f4e63b2ff4aadbc (diff) |
r600g: implement buffer copying using CP DMA for R7xx, Evergreen, Cayman
R6xx doesn't work - the issue seems to be with flushing (sometimes
the destination buffer contains garbage). There are no hangs, so we're good.
R7xx doesn't seem to have any alignment restriction despite our initial
thinking. Everything just works.
Reviewed-by: Alex Deucher <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/r600.h')
-rw-r--r-- | src/gallium/drivers/r600/r600.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index 260536ecb44..93604fbe7b5 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -147,9 +147,10 @@ struct r600_so_target { #define R600_CONTEXT_INVAL_READ_CACHES (1 << 0) #define R600_CONTEXT_STREAMOUT_FLUSH (1 << 1) -#define R600_CONTEXT_WAIT_IDLE (1 << 2) -#define R600_CONTEXT_FLUSH_AND_INV (1 << 3) -#define R600_CONTEXT_FLUSH_AND_INV_CB_META (1 << 4) +#define R600_CONTEXT_WAIT_3D_IDLE (1 << 2) +#define R600_CONTEXT_WAIT_CP_DMA_IDLE (1 << 3) +#define R600_CONTEXT_FLUSH_AND_INV (1 << 4) +#define R600_CONTEXT_FLUSH_AND_INV_CB_META (1 << 5) struct r600_context; struct r600_screen; @@ -170,6 +171,10 @@ void r600_context_streamout_begin(struct r600_context *ctx); void r600_context_streamout_end(struct r600_context *ctx); void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw, boolean count_draw_in); void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block, unsigned pkt_flags); +void r600_cp_dma_copy_buffer(struct r600_context *rctx, + struct pipe_resource *dst, unsigned dst_offset, + struct pipe_resource *src, unsigned src_offset, + unsigned size); int evergreen_context_init(struct r600_context *ctx); |