diff options
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/x11/fakeglx.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c index c380ba27dcc..2176b2dae15 100644 --- a/src/mesa/drivers/x11/fakeglx.c +++ b/src/mesa/drivers/x11/fakeglx.c @@ -339,6 +339,25 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo, } +/** + * Return the default number of bits for the Z buffer. + * If defined, use the MESA_GLX_DEPTH_BITS env var value. + * Otherwise, use the DEFAULT_SOFTWARE_DEPTH_BITS constant. + * XXX probably do the same thing for stencil, accum, etc. + */ +static GLint +default_depth_bits(void) +{ + int zBits; + const char *zEnv = _mesa_getenv("MESA_GLX_DEPTH_BITS"); + if (zEnv) + zBits = _mesa_atoi(zEnv); + else + zBits = DEFAULT_SOFTWARE_DEPTH_BITS; + return zBits; +} + + /* * Create a GLX visual from a regular XVisualInfo. @@ -352,6 +371,7 @@ static XMesaVisual create_glx_visual( Display *dpy, XVisualInfo *visinfo ) { int vislevel; + GLint zBits = default_depth_bits(); vislevel = level_of_visual( dpy, visinfo ); if (vislevel) { @@ -376,7 +396,7 @@ create_glx_visual( Display *dpy, XVisualInfo *visinfo ) GL_FALSE, /* alpha */ GL_TRUE, /* double */ GL_FALSE, /* stereo */ - DEFAULT_SOFTWARE_DEPTH_BITS, + zBits, 8 * sizeof(GLstencil), 0 * sizeof(GLaccum), /* r */ 0 * sizeof(GLaccum), /* g */ @@ -395,7 +415,7 @@ create_glx_visual( Display *dpy, XVisualInfo *visinfo ) GL_FALSE, /* alpha */ GL_TRUE, /* double */ GL_FALSE, /* stereo */ - DEFAULT_SOFTWARE_DEPTH_BITS, + zBits, 8 * sizeof(GLstencil), 8 * sizeof(GLaccum), /* r */ 8 * sizeof(GLaccum), /* g */ @@ -1131,7 +1151,7 @@ static XMesaVisual choose_visual( Display *dpy, int screen, const int *list, double_flag = GL_TRUE; if (vis->depth > 8) rgb_flag = GL_TRUE; - depth_size = DEFAULT_SOFTWARE_DEPTH_BITS; + depth_size = default_depth_bits(); stencil_size = STENCIL_BITS; /* XXX accum??? */ } @@ -1182,8 +1202,9 @@ static XMesaVisual choose_visual( Display *dpy, int screen, const int *list, depth_size = 31; /* 32 causes int overflow problems */ else if (depth_size > 16) depth_size = 24; - else if (depth_size > 0) - depth_size = DEFAULT_SOFTWARE_DEPTH_BITS; /*16*/ + else if (depth_size > 0) { + depth_size = default_depth_bits(); + } /* we only support one size of stencil and accum buffers. */ if (stencil_size > 0) |