DRI backwards compatibility problem from X.Org 6.8.0 onwards
Kevin E Martin
kem at freedesktop.org
Sun Dec 12 18:55:52 PST 2004
On Sat, Dec 11, 2004 at 12:52:45AM +0000, Alan Hourihane wrote:
> On Fri, Dec 10, 2004 at 07:04:51PM +0000, Alan Hourihane wrote:
> > Folks,
> >
> > There's a backwards compatibility breakage with X.Org 6.8.0 and beyond
> > because of revision 1.3 of the file xc/include/glxint.h. So, those
> > that provide binary drivers that were compiled against X.Org 6.7.x or
> > XFree86 4.4.0 or earlier will break as well.
> >
> > The problem stems from these additional fields in the GLXvisualConfigRec
> > which actually are not needed.
> >
> > int multiSampleSize;
> > int nMultiSampleBuffers;
> > int visualSelectGroup;
>
> Ah,
>
> It seems as though the DMX code probably added these as it makes use
> of them.
I just checked and these were added by SGI when they did their glxProxy
work that was included with DMX. Guy Zadikario <guy at sgi.com> was the
principle author of glxProxy. I would recommend contacting him to see
if there is another way to implement support for the additional extended
visual properties that would maintain backwards compatibility. I assume
they were added to support SGI's OpenGL implementation.
One workaround is to surround those fields in GLXvisualConfigRec and the
glxProxy code that uses those fields with #ifdef __sgi/#endif (see patch
attached below). This would be good to do for 6.8.2 to regain backwards
compatibility.
Alan, do you have a test case that you could use to make sure that I've
not missed anything?
Also, I've created a bugzilla entry for this problem:
https://bugs.freedesktop.org/show_bug.cgi?id=2070
Thanks,
Kevin
-------------- next part --------------
Index: include/GL/glxint.h
===================================================================
RCS file: /cvs/xorg/xc/include/GL/glxint.h,v
retrieving revision 1.3
diff -u -r1.3 glxint.h
--- include/GL/glxint.h 30 Jun 2004 20:06:52 -0000 1.3
+++ include/GL/glxint.h 13 Dec 2004 02:28:07 -0000
@@ -50,15 +50,21 @@
/* colors are floats scaled to ints */
int transparentRed, transparentGreen, transparentBlue, transparentAlpha;
int transparentIndex;
+#ifdef __sgi
int multiSampleSize;
int nMultiSampleBuffers;
int visualSelectGroup;
+#endif
};
#define __GLX_MIN_CONFIG_PROPS 18
#define __GLX_MAX_CONFIG_PROPS 500
+#ifdef __sgi
#define __GLX_EXT_CONFIG_PROPS 10
+#else
+#define __GLX_EXT_CONFIG_PROPS 7
+#endif
/*
** Since we send all non-core visual properties as token, value pairs,
Index: programs/Xserver/hw/dmx/dmx_glxvisuals.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/dmx/dmx_glxvisuals.c,v
retrieving revision 1.1
diff -u -r1.1 dmx_glxvisuals.c
--- programs/Xserver/hw/dmx/dmx_glxvisuals.c 30 Jun 2004 20:06:53 -0000 1.1
+++ programs/Xserver/hw/dmx/dmx_glxvisuals.c 13 Dec 2004 02:28:08 -0000
@@ -147,12 +147,14 @@
int value = *p++;
switch (property) {
+#ifdef __sgi
case GLX_SAMPLES_SGIS:
config->multiSampleSize = value;
break;
case GLX_SAMPLE_BUFFERS_SGIS:
config->nMultiSampleBuffers = value;
break;
+#endif
case GLX_TRANSPARENT_TYPE_EXT:
config->transparentPixel = value;
@@ -177,10 +179,12 @@
config->visualRating = value;
break;
+#ifdef __sgi
/* visualSelectGroup is an internal used property */
case GLX_VISUAL_SELECT_GROUP_SGIX:
config->visualSelectGroup = value;
break;
+#endif
default :
/* Ignore properties we don't recognize */
@@ -591,9 +595,11 @@
cfg->transparentBlue = fbcfg->transparentBlue;
cfg->transparentAlpha = fbcfg->transparentAlpha;
cfg->transparentIndex = fbcfg->transparentIndex;
+#ifdef __sgi
cfg->multiSampleSize = fbcfg->multiSampleSize;
cfg->nMultiSampleBuffers = fbcfg->nMultiSampleBuffers;
cfg->visualSelectGroup = fbcfg->visualSelectGroup;
+#endif
}
}
Index: programs/Xserver/hw/dmx/glxProxy/glxcmds.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/dmx/glxProxy/glxcmds.c,v
retrieving revision 1.2
diff -u -r1.2 glxcmds.c
--- programs/Xserver/hw/dmx/glxProxy/glxcmds.c 6 Jul 2004 23:51:00 -0000 1.2
+++ programs/Xserver/hw/dmx/glxProxy/glxcmds.c 13 Dec 2004 02:28:08 -0000
@@ -1607,12 +1607,14 @@
buf[p++] = pGlxVisual->transparentAlpha;
buf[p++] = GLX_TRANSPARENT_INDEX_VALUE_EXT;
buf[p++] = pGlxVisual->transparentIndex;
+#ifdef __sgi
buf[p++] = GLX_SAMPLES_SGIS;
buf[p++] = pGlxVisual->multiSampleSize;
buf[p++] = GLX_SAMPLE_BUFFERS_SGIS;
buf[p++] = pGlxVisual->nMultiSampleBuffers;
buf[p++] = GLX_VISUAL_SELECT_GROUP_SGIX;
buf[p++] = pGlxVisual->visualSelectGroup;
+#endif
WriteToClient(client, __GLX_SIZE_CARD32 * __GLX_TOTAL_CONFIG,
(char *)buf);
Index: programs/Xserver/hw/dmx/glxProxy/glxvisuals.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/dmx/glxProxy/glxvisuals.c,v
retrieving revision 1.1
diff -u -r1.1 glxvisuals.c
--- programs/Xserver/hw/dmx/glxProxy/glxvisuals.c 30 Jun 2004 20:06:55 -0000 1.1
+++ programs/Xserver/hw/dmx/glxProxy/glxvisuals.c 13 Dec 2004 02:28:09 -0000
@@ -71,10 +71,13 @@
(v1->transparentGreen == v2->transparentGreen) &&
(v1->transparentBlue == v2->transparentBlue) &&
(v1->transparentAlpha == v2->transparentAlpha) &&
- (v1->transparentIndex == v2->transparentIndex) &&
- (v1->multiSampleSize == v2->multiSampleSize) &&
+ (v1->transparentIndex == v2->transparentIndex)
+#ifdef __sgi
+ && (v1->multiSampleSize == v2->multiSampleSize) &&
(v1->nMultiSampleBuffers == v2->nMultiSampleBuffers) &&
- (v1->visualSelectGroup == v2->visualSelectGroup) ) {
+ (v1->visualSelectGroup == v2->visualSelectGroup)
+#endif
+ ) {
return(1);
More information about the release-wranglers
mailing list