Applied. Thanks! Marek
On Fri, Aug 26, 2016 at 6:59 PM, Mario Kleiner <mario.kleiner...@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...@gmail.com> > Cc: Marek Olšák <marek.ol...@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev