On Mon, 2003-07-14 at 00:34, Alex Deucher wrote:
> --- Michel Dnzer <[EMAIL PROTECTED]> wrote:
> > On Sat, 2003-07-12 at 00:24, Alex Deucher wrote:
> > > --- Michel Dnzer <[EMAIL PROTECTED]> wrote:
> > > > > 3D seems to work pretty well in mergedfb mode, but there are a
> > few 
> > > > > little issues, 
> > > > 
> > > > Can you elaborate on these?
> > > 
> > > They are mentioned here:
> > >  http://bugs.xfree86.org//cgi-bin/bugzilla/show_bug.cgi?id=276
> > > but I'll elaborate.
> > > 
> > > If you are running in mergedfb clone mode, and start an opengl app,
> > the
> > > framebuffer on crtc1 shifts to the left a few pixels, as such the
> > > cursor does line up properly with where it should be.  crtc2 is
> > fine. 
> > > closing the app and switching a away from the mode and then back
> > fixes
> > > the shift.
> > > 
> > > The other issue is that if you place a 3D app right between the two
> > > heads so half is on one head and half is on the other and then
> > switch
> > > modes, crtc2 flickers badly and shows corruption almost like the
> > sync
> > > is off.  moving the app to one head or the other and switching
> > modes
> > > then switching back again seems to fix it.
> > 
> > Sounds like bugs in the CRTC register handling, I suppose these only
> > happen with page flipping enabled?
> 
> Yes this only happens when pageflipping is enabled.  swapping the order
> of the crt2_base code in RADEONDoAdjustFrame() as you mention later
> fixes the corruption on CRTC2 when you have pageflipping enabled and
> you change modes, 

Cool, thanks for testing this.

> however, the framebuffer on crtc1 is still shifted a few pixels to 
> the left when you run an opengl app in clone mode.  side by side 
> modes work fine.  everything works fine with pageflipping disabled.

Hmm, for a second I thought I had botched the RADEON_CRTC_OFFSET
calculation in the DRM as well, but it looks to me like it should be
identical to that in RADEONDoAdjustFrame(). Agreed?

> One other issue, while I'm thinking of it, when you are using a side by
> side mode in mergedfb, when the cursor is about 1/3 of the way across
> crtc2, the cursor shows up on the far left side of crtc1, everywhere
> else works fine.

No idea about this, I'd ask Hui Yu or Kevin E. Martin.


> > > I'm trying to understand how this would work. with the driver as it
> > is 
> > > now, if you create a single 3D window greater than 2048 in either 
> > > dimension, it will only display up to 2048.  now, again with the
> > driver 
> > > as it is now, if you displayed two 3D windows with a total size of 
> > > greater then 2048 in one dimension would/should it work?
> > 
> > That's what someone needs to find out. :) If that works, then the
> > cliprect split trick should work as well.
> 
> Alas, it doesn't work.  If run two apps side by side both display fine
> up to 2048.  if you cross the 2048 boundry, the 3D window that crosses
> it goes blank.  :(  looks like we may not be able to go above 2048 for
> 3D.

It's not clear to me what exactly you have tried, please describe in
more detail.


-- 
Earthling Michel Dänzer   \  Debian (powerpc), XFree86 and DRI developer
Software libre enthusiast  \     http://svcs.affero.net/rm.php?r=daenzer
Index: programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c,v
retrieving revision 1.22
diff -p -u -r1.22 radeon_state.c
--- programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c	16 Jun 2003 10:40:52 -0000	1.22
+++ programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/radeon_state.c	13 Jul 2003 23:22:34 -0000
@@ -828,8 +828,8 @@ static void radeon_cp_dispatch_flip( drm
 	BEGIN_RING( 6 );
 
 	RADEON_WAIT_UNTIL_3D_IDLE();
-	OUT_RING_REG( RADEON_CRTC_OFFSET, ( ( sarea->frame.y * dev_priv->front_pitch
-					      + sarea->frame.x 
+	OUT_RING_REG( RADEON_CRTC_OFFSET, ( ( ( sarea->frame.y * dev_priv->front_pitch
+						+ sarea->frame.x )
 					      * ( dev_priv->color_fmt - 2 ) ) & ~7 )
 					  + offset );
 	OUT_RING_REG( RADEON_CRTC2_OFFSET, dev_priv->sarea_priv->crtc2_base

Reply via email to