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
WARNING: multiple messages have this Message-ID (diff)
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: [Linux-fbdev-devel] 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
next prev parent reply other threads:[~2004-06-16 19:52 UTC|newest]
Thread overview: 19+ 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:24 ` Jurriaan
2004-06-16 18:41 ` David Eger
2004-06-16 18:41 ` [Linux-fbdev-devel] " David Eger
2004-06-16 19:55 ` Timothy Miller
2004-06-16 19:55 ` [Linux-fbdev-devel] " Timothy Miller
2004-06-16 19:52 ` Jurriaan [this message]
2004-06-16 19:52 ` Jurriaan
2004-06-17 13:51 ` Timothy Miller
2004-06-17 13:51 ` [Linux-fbdev-devel] " Timothy Miller
2004-06-17 2:21 ` [PATCH] fix radeonfb panning and make it play nice with copyarea() David Eger
2004-06-17 2:21 ` David Eger
2004-06-17 5:19 ` Jurriaan
2004-06-17 5:19 ` Jurriaan
2004-06-17 5:35 ` David Eger
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.