On Tue, 22 Mar 2011 10:27:13 +1000, Dave Airlie <[email protected]> wrote:

> My first solution involves throwing the XFree86 DDX out and starting
> again, but this didn't seem like it would be acceptable.

Yeah, wrecking every driver all at once is probably not a winning plan.

> a) add concept of internal screen to ScreenRec and ScrnInfoRec, add
> new value  screenInfo.numProtocolScreens, add lots
> of if (screenInfo.screens[i].internalScreen) continue to places where
> the protocol meets the screen info struct, and we want to skip
> internal screens.

I think this idea of isolating the driver from the protocol objects is
the right plan here. However, I think we want to leave all of the
existing objects to be used in the driver interface and go look at
fixing the DIX layer to use new datatypes for the protocol objects. I
think any protocol-visible object which stores driver-specific data in
DIX-visible fields would need to be changed. Off the top of my head,
that includes:

 Screen         - A million function pointers
 Window         - Clip lists
 Pixmap         - Actual pixels
 GC             - ops/funcs plus clipping
 Picture        - clipping

This is essentially what Xinerama did, the difference being that
Xinerama used the DIX data structure for both the protocol-visible
objects and the driver-visible objects. Using separate objects for the
protocol-visible versions should make the code a whole lot cleaner.

Eventually, we might have the driver-visible objects point back at the
protocol-visible objects to extract protocol state from there, rather
than replicating it.

This might also be a good time to eliminate windows from the driver API
and only pass pixmaps around.

-- 
[email protected]

Attachment: pgpfPeqPz54sz.pgp
Description: PGP signature

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to