Multi-monitor (xinerama/mergefb) support in RandR

Alex Deucher alexdeucher at gmail.com
Wed Jun 28 12:03:24 PDT 2006


On 6/28/06, Michel Dänzer <michel at tungstengraphics.com> wrote:
> On Wed, 2006-06-28 at 10:07 -0400, Alex Deucher wrote:
> > On 6/28/06, Benjamin Herrenschmidt <benh at kernel.crashing.org> wrote:
> > > On Tue, 2006-06-27 at 23:07 +0200, Keith Packard wrote:
> > > > Eric and I are busy figuring out how to handle multiple monitor hot plug
> > > > with X and have a fairly simple plan.
> > > >
> > > > Multi-screen X basically sucks, so few people are really excited about
> > > > using it. Xinerama sucks in the DIX implementation because it makes
> > > > things slow and bloated. Mergefb mostly rocks; fast, small and even DRI
> > > > continues to work right.
> > >
> > >  +/- the limitations of some 3d engines for too big screens... I don't
> > > know if/how that can be handled...
> > >
> >
> > Iterating across the framebuffer in coordinate sized chucks in the 3D
> > driver. The 2d engine will also have this problem due to the
> > limitations of XAA.  for this to work properly, drivers really need
> > EXA support, otherwise you'll have to add hacks to re-base the 2d
> > engine if you are outside your coordinate limits.
> >
> > Come to think of it, even EXA may be problematic.  the visible screen
> > may no longer be solely at offset 0 if you have particularly big
> > multi-head desktop.
>
> I don't see what would prevent the drivers from handling all this
> transparently, at least with Radeons. Maybe I'm missing something.
>

if your blitter limits are 2048x2048 and your visible desktop is
2560x1024, you would need to re-base the blitter to handle the visible
screen.  Last I checked, exa didn't handle cases where the coordinates
were beyond the limits of the blitter for a paricular surface.

> > Also, for things like tiling, you may need multiple tiled surfaces to handle
> > big desktops (one per crtc potentially).
>
> I'm not familiar enough with the tiling algorithms to tell, but
> shouldn't it still work so long as the coordinate limit, offset and
> pitch are multiples of the 'tiling unit'?
>

you would have to set up a tiled surface so that the CPU could
properly access the surface.  if your visible buffer is larger than
the limits of the tiled surfaces, then you would need multiple tiled
surfaces to handle the whole "visible" framebuffer. e.g., on older
radeons you have a 2048x2048 limit on the tiled surface regs, but you
might have a 2560x1024 desktop.  you'd either have to disable tiling,
or set up 2 tiles surfaces to cover the whole surface.

Alex

>
> --
> Earthling Michel Dänzer           |          http://tungstengraphics.com
> Libre software enthusiast         |          Debian, X and DRI developer
>
>
>



More information about the xorg mailing list