[Mesa-dev] [PATCH] r600: increase performance for DRI PRIME offloading if 2nd GPU is Evergreen+
Marek Olšák
maraeo at gmail.com
Fri Aug 26 17:59:52 UTC 2016
Applied. Thanks!
Marek
On Fri, Aug 26, 2016 at 6:59 PM, Mario Kleiner
<mario.kleiner.de at gmail.com> wrote:
> This is a direct port of Marek Olšáks patch
> "radeonsi: increase performance for DRI PRIME
> offloading if 2nd GPU is CIK or VI" to r600.
>
> It uses SDMA for the detiling blit from renderoffload VRAM
> to GTT, as SDMA is much faster for tiled->linear blits from
> VRAM to GTT.
>
> Testing on a dual Radeon HD-5770 setup reduced the time
> for the render offload gpu to get its rendering into
> system RAM from approximately 16 msecs for simple rendering
> at 1920x1080 pixel 32 bpp to 5 msecs, a > 3x speedup!
>
> This was measured using ftrace to trace the time the radeon kms
> driver waited on the dmabuf fence of the renderoffload gpu to
> complete.
>
> All in all this brought the time for a flip down from 20 msecs
> to 9 msecs, so the prime setup can display at full 60 fps instead
> of barely 30 fps vsync'ed.
>
> The current r600 implementation supports SDMA on Evergreen and
> later, but not R600/R700 due to some bugs apparently present
> in their SDMA implementation.
>
> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> Cc: Marek Olšák <marek.olsak at amd.com>
> ---
> src/gallium/drivers/r600/r600_blit.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c
> index adf616e..8fdc51c 100644
> --- a/src/gallium/drivers/r600/r600_blit.c
> +++ b/src/gallium/drivers/r600/r600_blit.c
> @@ -850,11 +850,30 @@ static void r600_blit(struct pipe_context *ctx,
> const struct pipe_blit_info *info)
> {
> struct r600_context *rctx = (struct r600_context*)ctx;
> + struct r600_texture *rdst = (struct r600_texture *)info->dst.resource;
>
> if (do_hardware_msaa_resolve(ctx, info)) {
> return;
> }
>
> + /* Using SDMA for copying to a linear texture in GTT is much faster.
> + * This improves DRI PRIME performance.
> + *
> + * resource_copy_region can't do this yet, because dma_copy calls it
> + * on failure (recursion).
> + */
> + if (rdst->surface.level[info->dst.level].mode ==
> + RADEON_SURF_MODE_LINEAR_ALIGNED &&
> + rctx->b.dma_copy &&
> + util_can_blit_via_copy_region(info, false)) {
> + rctx->b.dma_copy(ctx, info->dst.resource, info->dst.level,
> + info->dst.box.x, info->dst.box.y,
> + info->dst.box.z,
> + info->src.resource, info->src.level,
> + &info->src.box);
> + return;
> + }
> +
> assert(util_blitter_is_blit_supported(rctx->blitter, info));
>
> /* The driver doesn't decompress resources automatically while
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list