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?


> > > this snippet here seems like it might need updating (radeon_state.c):
> > > 
> > >   RADEON_WAIT_UNTIL_3D_IDLE();
> > >   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
> > >                                      + offset );
> > > 
> > >   ADVANCE_RING();
> > > 
> > > Should crtc2 take into account the sarea stuff that crtc1 does?
> > 
> > No, dev_priv->sarea_priv->crtc2_base is supposed to take the CRTC2
> > frame position into account. The X server driver must set it correctly 
> > in MergedFB mode, should be easy looking at the clone code.
> 
> OK.  I just checked for mergedfb and that does get set correctly in
> RADEONDoAdjustFrame() (same as clone mode).  

Hmm, can you try moving

        if (clone || info->IsSecondary) {
            pSAREAPriv->crtc2_base = Base;
        }

before

        if (pSAREAPriv->pfCurrentPage == 1) {
            Base += info->backOffset;
        }

? Looks like the offset for page 1 gets added twice (here and in the DRM
code above) for CRTC2.


> > > I'm not sure I understand how this fits with the maximum size of
> > the 3D
> > > context.
> > 
> > The scissor registers seem to be the limiting factor as they only
> > take
> > 12 bits for each dimension of size and position of the rectangle.
> 
> so is there a limit to the number of cliprects you could use extend the
> size of a 3D window?  

Theoretically no, in practice yes: as the maximum displacement of the
scissor rectangle is equal to its maximum size (for Radeons), it doesn't
make sense to make more than four cliprects out of one.

> 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.


> > > Does the cliprect define the 3D region? so basically, the code
> > would 
> > > have to check the size of the 3D region requested and if it was
> > wider 
> > > or taller than 2048, it would allocate an additional cliprect?  
> > 
> > Exactly.
> 
> Would this make rendering the 3D substantially more complicated since
> there are now more than one cliprects to consider for a single 3D
> window?  

It's no different than if you partly occlude a 3D window such that its
visible area isn't a single rectangle.

> how do cliprects interact with the overall 3D rendering for that window?  
> Are cliprects just like a viewport into the output of the 3D engine (to 
> put it simply)?

They're the boundaries of where the engine renders into.


-- 
Earthling Michel Dänzer   \  Debian (powerpc), XFree86 and DRI developer
Software libre enthusiast  \     http://svcs.affero.net/rm.php?r=daenzer



-------------------------------------------------------
This SF.Net email sponsored by: Parasoft
Error proof Web apps, automate testing & more.
Download & eval WebKing and get a free book.
www.parasoft.com/bulletproofapps1
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to