Proprosed break in libGL / DRI driver ABI

Ian Romanick idr at us.ibm.com
Tue Apr 5 11:06:54 PDT 2005


For X.org 6.9 / 7.0 I would like to break the existing libGL / DRI 
driver interface.  There is a *LOT* of crap hanging around in both libGL 
and in the DRI drivers that exists *only* to maintain backwards 
compatability with older versions of the interface.  Since it's crap, I 
would very much like to flush it.

I'd like to cut this stuff out for 7.0 for several main reasons:

- A major release is a logical time to make breaks like this.

- Bit rot.  Sure, we /assume/ libGL and the DRI drivers still actually 
work with older versions, but how often does it actually get tested?

- Code asthetics.  Because of the backwards compatability mechanisms 
that are in place, especially in libGL, to code can be a bit hard to 
follow.  Removing that code would, in a WAG estimate, eliminate at least 
a couple hundred lines of code.  It would also eliminate a number of 
'#ifdef DRI_NEW_INTERFACE_ONLY' blocks.

What I'm proposing goes a bit beyond '-DDRI_NEW_INTERFACE_ONLY=1", but 
that is a start.  In include/GL/internal/dri_interface.h (in the Mesa 
tree) there are number of methods that get converted to 'void *' if 
DRI_NEW_INTERFACE_ONLY is defined.  I propose that we completely remove 
them from the structures and rename some of the remaining methods.  For 
example, __DRIcontextRec::bindContext and __DRIcontextRec::bindContext2 
would be removed, and __DRIcontextRec::bindContext3 would be renamed to 
__DRIcontextRec::bindContext.

Additionally, there are a few libGL-private structures in 
src/glx/x11/glxclient.h that, due to binary compatability issues with 
older versions of the interface, can't be change.  Eliminating support 
for those older interfaces would allow some significant cleaning in 
those structures.  Basically, all of the stuff in glxclient.h with 
DEPRECATED in the name would be removed.  Other, less important, changes 
could also be made to __GLXcontextRec.



More information about the xorg-arch mailing list