I've run into a problem with Mesa 3.1b3 on Onyx2 InfiniteReality
running IRIX 6.5.4f. The X server on InfiniteReality graphics exports
both TrueColor and PseudoColor overlay visuals:
$ xprop -root | grep SERER_OVERLAY_VISUALS
SERVER_OVERLAY_VISUALS(SERVER_OVERLAY_VISUALS) = 0x20, 0x1, 0x0, 0x2, 0x21, 0x1, 0x0,
0x1, 0x22, 0x1, 0x0, 0x1, 0x23, 0x0, 0x0, 0x1, 0x24, 0x0, 0x0, 0x1, 0x25, 0x1, 0x0,
0x1, 0x26, 0x1, 0x0, 0x1, 0x27, 0x0, 0x0, 0x1, 0x28, 0x0, 0x0, 0x1, 0x2f, 0x1, 0x0,
0x1, 0x30, 0x1, 0x0, 0x1, 0x31, 0x0, 0x0, 0x1, 0x32, 0x0, 0x0, 0x1, 0x42, 0x1, 0x0,
0x1, 0x43, 0x0, 0x0, 0x1
For instance, visual 0x2f corresponds to the kind of 8 bit colorindex
visual which is normally found for hardware overlay planes, as shown
by xdpyinfo:
visual:
visual id: 0x2f
class: PseudoColor
depth: 8 planes
available colormap entries: 256
red, green, blue masks: 0x0, 0x0, 0x0
significant bits in color specification: 10 bits
But visual 0x42 is an actual double-buffered, RGBA 5/5/5/1 overlay
plane visual:
visual:
visual id: 0x42
class: TrueColor
depth: 15 planes
available colormap entries: 32 per subfield
red, green, blue masks: 0x7c00, 0x3e0, 0x1f
significant bits in color specification: 10 bits
Unfortunately, it seems that when you request a colorindex overlay
visual, Mesa 3.1b3 gets confused and returns the RGBA overlay visual:
-----------------------
#include <stdio.h>
#include <X11/Xlib.h>
#include <GL/gl.h>
#include <GL/glx.h>
static int oattrib[] =
{
GLX_LEVEL, 1,
GLX_BUFFER_SIZE, 4,
None,
};
main(int argc, char **argv)
{
long i, j;
unsigned char* buffer;
XSetWindowAttributes swa;
XVisualInfo *vi;
GLXContext OglContext;
Window win;
Display *display;
char c;
if( ( display = XOpenDisplay( NULL ) ) == NULL )
{
fprintf( stderr, "Cannot connect to X server.\n" );
exit( 1 );
}
vi = glXChooseVisual( display, DefaultScreen( display ), oattrib );
printf("Visual ID is 0x%x\n",vi->visualid);
}
--------------------
Run this and you get:
$ ./dboverlay
Visual ID is 0x42
If you then try to allocate X colormap entries, thinking you have
received a colorindex visual as you have requested, this will fail.
The problem appears to come from src/X/fakeglx.c, in
choose_x_overlay_visual(). First of all, it would be nice if this
function looked at an environment variable such as MESA_OVERLAY_VISUAL
which could be used as a back door to override the visual selection
mechanism in the same way that choose_x_visual() looks at
MESA_RGB_VISUAL and MESA_CI_VISUAL.
Secondly, it should be passed "rgb_flag" from Fake_glXChooseVisual()
in the same way as choose_x_visual() to specify what kind of visual
is desired.
Let me know if more information is required to reproduce this problem,
or if there are any patches I should be trying. I currently do not
subscribe to any Mesa-related mailing lists.
Thanks,
JF Panisset
Jean-Francois Panisset [EMAIL PROTECTED]
Software Engineer
Discreet Logic
_______________________________________________
Mesa-bug maillist - [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-bug
_______________________________________________
Mesa-dev maillist - [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-dev