[Mesa-dev] [PATCH 4/4] radeonsi: add workarounds for CP DMA to stay on the fast path
Marek Olšák
maraeo at gmail.com
Wed Nov 4 00:47:27 PST 2015
On Nov 4, 2015 9:31 AM, "Michel Dänzer" <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.
Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151104/f0faa4d1/attachment.html>
More information about the mesa-dev
mailing list