From: Alex D. <ale...@gm...> - 2009-09-17 14:04:09
|
On Thu, Sep 17, 2009 at 2:16 AM, Dave Airlie <ai...@gm...> wrote: > From: Dave Airlie <ai...@li...> > > Some people were seeing > *ERROR* radeon: writting more dword to ring than expected > after certain blits, the loops calculation didn't take > into account that we do a separate blit for the remainder > after doing the aligned blits. > > Signed-off-by: Dave Airlie <ai...@re...> Acked-by: Alex Deucher <ale...@gm...> > --- > drivers/gpu/drm/radeon/r600_blit_kms.c | 21 ++++++++++++++------- > 1 files changed, 14 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c > index 3e6aadc..0a6f468 100644 > --- a/drivers/gpu/drm/radeon/r600_blit_kms.c > +++ b/drivers/gpu/drm/radeon/r600_blit_kms.c > @@ -541,10 +541,13 @@ void r600_vb_ib_put(struct radeon_device *rdev) > int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes) > { > int r; > - int ring_size; > + int ring_size, line_size; > int max_size; > /* loops of emits 64 + fence emit possible */ > - int dwords_per_loop = 76; > + int dwords_per_loop = 76, num_loops; > + > + r = r600_vb_ib_get(rdev); > + WARN_ON(r); > > /* set_render_target emits 2 extra dwords on rv6xx */ > if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770) > @@ -552,14 +555,18 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes) > > /* 8 bpp vs 32 bpp for xfer unit */ > if (size_bytes & 3) > - max_size = 8192*8192; > + line_size = 8192; > else > - max_size = 8192*8192*4; > + line_size = 8192*4; > > - r = r600_vb_ib_get(rdev); > - WARN_ON(r); > + max_size = 8192 * line_size; > > - ring_size = ((size_bytes + max_size) / max_size) * dwords_per_loop; > + /* major loops cover the max size transfer */ > + num_loops = ((size_bytes + max_size) / max_size); > + /* minor loops cover the extra non aligned bits */ > + num_loops += ((size_bytes % line_size) ? 1 : 0); > + /* calculate number of loops correctly */ > + ring_size = num_loops * dwords_per_loop; > /* set default + shaders */ > ring_size += 40; /* shaders + def state */ > ring_size += 3; /* fence emit for VB IB */ > -- > 1.6.4.2 > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > -- > _______________________________________________ > Dri-devel mailing list > Dri...@li... > https://lists.sourceforge.net/lists/listinfo/dri-devel > |