linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jurriaan <thunder7@xs4all.nl>
To: Timothy Miller <miller@techsource.com>
Cc: David Eger <eger@havoc.gtf.org>,
	linux-fbdev-devel@lists.sourceforge.net,
	linux-kernel@vger.kernel.org
Subject: Re: accelerated radeonfb produces artifacts on scrolling in 2.6.7
Date: Wed, 16 Jun 2004 21:52:10 +0200	[thread overview]
Message-ID: <20040616195210.GA26935@middle.of.nowhere> (raw)
In-Reply-To: <40D0A5B4.7060007@techsource.com>

From: Timothy Miller <miller@techsource.com>
Date: Wed, Jun 16, 2004 at 03:55:32PM -0400
> 
> 
> David Eger wrote:
> >On Wed, Jun 16, 2004 at 08:24:15PM +0200, Jurriaan wrote:
> >
> >>The radeonfb driver in 2.6.7 produces some interesting artifacts on
> >>scrolling, both scrolling horizontally and vertically.
> >
> >
> >The corruption you are talking about is, I believe, caused by a couple of 
> >things:
> >
> >(1) we're not issuing enough fifo_wait()'s around our accel engine
> >    and pan register writes.
> >(2) there's some disconnect between writing to fb memory, panning, and
> >    copyarea()/fillrect() calls
> >
> >I sent a hack of a fix for this to Ben a week ago, adding a call to 
> >radeonfb_sync()
> >at the end of radeonfb_copyarea() and radeonfb_fillrect().  This seems to 
> >fix the
> >problem for me, but you *shouldn't* have to do this.  
> >
> >I haven't tracked it any further than this.  My next guess would be 
> >auditing register writes and making sure there are enough fifo_wait()'s...
> 
> 
> Is this the case even with the off-by-one error in the bitblt code 
> fixed?  In the 2.4 kernel, I got rid of all artifacts by fixing the 
> off-by-one error.
> 
> In case, you don't know what I'm talking about, when you bitblt up or to 
> the left on Radeon, x and y need to be adjusted by (w-1) and/or (h-1), 
> respectively.  The code there, however, adjusted by w and/or h, which is 
> off-by-one.
> 

You mean this code? I see (w-1) and (h-1) in there.

static void radeonfb_prim_copyarea(struct radeonfb_info *rinfo, 
				   const struct fb_copyarea *area)
{
	int xdir, ydir;
	u32 sx, sy, dx, dy, w, h;

	w = area->width; h = area->height;
	dx = area->dx; dy = area->dy;
	sx = area->sx; sy = area->sy;
	xdir = sx - dx;
	ydir = sy - dy;

	if ( xdir < 0 ) { sx += w-1; dx += w-1; }
	if ( ydir < 0 ) { sy += h-1; dy += h-1; }

	radeon_fifo_wait(3);
	OUTREG(DP_GUI_MASTER_CNTL,
		rinfo->dp_gui_master_cntl /* i.e. GMC_DST_32BPP */
		| GMC_SRC_DSTCOLOR
		| ROP3_S 
		| DP_SRC_RECT );
	OUTREG(DP_WRITE_MSK, 0xffffffff);
	OUTREG(DP_CNTL, (xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0)
			| (ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0));

	radeon_fifo_wait(3);
	OUTREG(SRC_Y_X, (sy << 16) | sx);
	OUTREG(DST_Y_X, (dy << 16) | dx);
	OUTREG(DST_HEIGHT_WIDTH, (h << 16) | w);
}


void radeonfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
{
	struct radeonfb_info *rinfo = info->par;
	struct fb_copyarea modded;
	u32 vxres, vyres;
	modded.sx = area->sx;
	modded.sy = area->sy;
	modded.dx = area->dx;
	modded.dy = area->dy;
	modded.width  = area->width;
	modded.height = area->height;
  
	if (info->state != FBINFO_STATE_RUNNING)
		return;
	if (radeon_accel_disabled()) {
		cfb_copyarea(info, area);
		return;
	}

	vxres = info->var.xres;
	vyres = info->var.yres;

	if(!modded.width || !modded.height ||
	   modded.sx >= vxres || modded.sy >= vyres ||
	   modded.dx >= vxres || modded.dy >= vyres)
		return;
  
	if(modded.sx + modded.width > vxres)  modded.width = vxres - modded.sx;
	if(modded.dx + modded.width > vxres)  modded.width = vxres - modded.dx;
	if(modded.sy + modded.height > vyres) modded.height = vyres - modded.sy;
	if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy;
  
	radeonfb_prim_copyarea(rinfo, &modded);
}

HTH,
Jurriaan
-- 
hundred-and-one symptoms of being an internet addict:
17. You turn on your intercom when leaving the room so you can hear if new
e-mail arrives.
Debian (Unstable) GNU/Linux 2.6.7 2x6078 bogomips load 1.90


-------------------------------------------------------
This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA
REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND

  reply	other threads:[~2004-06-16 19:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-16 18:24 accelerated radeonfb produces artifacts on scrolling in 2.6.7 Jurriaan
2004-06-16 18:41 ` David Eger
2004-06-16 19:55   ` Timothy Miller
2004-06-16 19:52     ` Jurriaan [this message]
2004-06-17 13:51       ` Timothy Miller
2004-06-17  2:21 ` [PATCH] fix radeonfb panning and make it play nice with copyarea() David Eger
2004-06-17  5:19   ` Jurriaan
2004-06-17  5:35     ` David Eger
2004-06-17  5:47     ` David Eger
     [not found]       ` <20040618110450.GA2771@middle.of.nowhere>
2004-06-25  7:18         ` [PATCH] radeonfb: 16bpp accel broken. a work-around David Eger
2004-06-25  7:26           ` Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040616195210.GA26935@middle.of.nowhere \
    --to=thunder7@xs4all.nl \
    --cc=eger@havoc.gtf.org \
    --cc=linux-fbdev-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miller@techsource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).