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

Alex Deucher alexdeucher at gmail.com
Tue Feb 26 06:16:49 PST 2013


On Tue, Feb 26, 2013 at 5:24 AM, Marek Olšák <maraeo at gmail.com> wrote:
> 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.

I don't know what the deal is with TF2.  It apparently still has
issues even if CP DMA is disabled which would use streamout or async
DMA depending on the kernel and asic.

Alex

>
> 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