[Mesa-dev] [PATCH 4/4] radeonsi: add workarounds for CP DMA to stay on the fast path
Michel Dänzer
michel at daenzer.net
Wed Nov 4 01:06:40 PST 2015
On 04.11.2015 17:47, Marek Olšák wrote:
> On Nov 4, 2015 9:31 AM, "Michel Dänzer" <michel at daenzer.net
> <mailto:michel at daenzer.net>> wrote:
>>
>> On 04.11.2015 08:46, Marek Olšák wrote:
>> >
>> > @@ -209,11 +211,48 @@ static void si_clear_buffer(struct
> pipe_context *ctx, struct pipe_resource *dst,
>> > r600_resource(dst)->TC_L2_dirty = true;
>> > }
>> >
>> > +/**
>> > + * Realign the CP DMA engine. This must be done after a copy with
> an unaligned
>> > + * size.
>> > + *
>> > + * \param size Remaining size to the CP DMA alignment.
>> > + */
>> > +static void si_cp_dma_realign_engine(struct si_context *sctx,
> unsigned size)
>> > +{
>> > + uint64_t va;
>> > + unsigned dma_flags = 0;
>> > + unsigned scratch_size = CP_DMA_ALIGNMENT * 2;
>> > +
>> > + assert(size < CP_DMA_ALIGNMENT);
>> > +
>> > + /* Use the scratch buffer as the dummy buffer. The 3D engine
> should be
>> > + * idle at this point.
>> > + */
>> > + if (!sctx->scratch_buffer ||
>> > + sctx->scratch_buffer->b.b.width0 < scratch_size) {
>> > + r600_resource_reference(&sctx->scratch_buffer, NULL);
>> > + sctx->scratch_buffer =
>> > + si_resource_create_custom(&sctx->screen->b.b,
>> > + PIPE_USAGE_DEFAULT,
>> > + scratch_size);
>> > + }
>> > +
>> > + si_cp_dma_prepare(sctx, &sctx->scratch_buffer->b.b,
>> > + &sctx->scratch_buffer->b.b, size, size,
> &dma_flags);
>> > +
>> > + va = sctx->scratch_buffer->gpu_address;
>> > + si_emit_cp_dma_copy_buffer(sctx, va, va + CP_DMA_ALIGNMENT, size,
>> > + dma_flags);
>> > +}
>>
>> Should this update sctx->emit_scratch_reloc ?
>
> Not strictly needed, but I'll add that before pushing.
This patch is
Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
as well then.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-dev
mailing list