[Mesa-dev] [PATCH 6/6] r600g: enable CP DMA on r6xx (v3)

Marek Olšák maraeo at gmail.com
Tue Feb 26 02:24:43 PST 2013


I've tested CP DMA and it's better than it was, unfortunately it's on
par with R700, which means that piglit passes and Team Fortress 2 has
a corrupted GUI. At this point I think it would be better to disable
the CP DMA for R600-R700 and use streamout or async DMA instead.

Marek

On Fri, Feb 22, 2013 at 11:59 PM,  <alexdeucher at gmail.com> wrote:
> From: Alex Deucher <alexander.deucher at amd.com>
>
> With the previous flushing changes this seems to work
> reliably now.
>
> v2: add R600_CONTEXT_FLUSH_AND_INV
> v3: just enable CP DMA
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  src/gallium/drivers/r600/r600_blit.c       |    3 +--
>  src/gallium/drivers/r600/r600_hw_context.c |    6 ------
>  2 files changed, 1 insertions(+), 8 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c
> index 046eab5..019b456 100644
> --- a/src/gallium/drivers/r600/r600_blit.c
> +++ b/src/gallium/drivers/r600/r600_blit.c
> @@ -508,8 +508,7 @@ void r600_copy_buffer(struct pipe_context *ctx, struct pipe_resource *dst, unsig
>  {
>         struct r600_context *rctx = (struct r600_context*)ctx;
>
> -       /* CP DMA doesn't work on R600 (flushing seems to be unreliable). */
> -       if (rctx->screen->info.drm_minor >= 27 && rctx->chip_class >= R700) {
> +       if (rctx->screen->info.drm_minor >= 27) {
>                 r600_cp_dma_copy_buffer(rctx, dst, dstx, src, src_box->x, src_box->width);
>         }
>         else if (rctx->screen->has_streamout &&
> diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c
> index 8c92030..0537916 100644
> --- a/src/gallium/drivers/r600/r600_hw_context.c
> +++ b/src/gallium/drivers/r600/r600_hw_context.c
> @@ -1108,12 +1108,6 @@ void r600_cp_dma_copy_buffer(struct r600_context *rctx,
>         struct radeon_winsys_cs *cs = rctx->rings.gfx.cs;
>
>         assert(size);
> -       assert(rctx->chip_class != R600);
> -
> -       /* CP DMA doesn't work on R600 (flushing seems to be unreliable). */
> -       if (rctx->chip_class == R600) {
> -               return;
> -       }
>
>         dst_offset += r600_resource_va(&rctx->screen->screen, dst);
>         src_offset += r600_resource_va(&rctx->screen->screen, src);
> --
> 1.7.7.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list