hw/xwin/glx: Handle failure to get any fbconfigs more gracefully.
Handle failure to get any useful pixel formats for GLX fbconfigs more gracefully: If we didn't get any useful pixel formats from wglGetPixelFormatAttribivARB(), fall back to using DescribePixelFormat(). If that doesn't give us any useful pixel formats, fallback to software rendering. This works around a problem with Intel 845G drivers, where wglGetPixelFormatAttribivARB() doesn't seem to work as we expect it to... Reviewed-by: Colin Harrison <colin.harrison@virgin.net> Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
This commit is contained in:
parent
9915b16923
commit
b67e80c84e
|
@ -668,17 +668,37 @@ glxWinScreenProbe(ScreenPtr pScreen)
|
|||
screen->base.swapInterval = glxWinScreenSwapInterval;
|
||||
screen->base.pScreen = pScreen;
|
||||
|
||||
// Creating the fbConfigs initializes screen->base.fbconfigs and screen->base.numFBConfigs
|
||||
if (strstr(wgl_extensions, "WGL_ARB_pixel_format"))
|
||||
{
|
||||
glxWinCreateConfigsExt(hdc, screen);
|
||||
screen->has_WGL_ARB_pixel_format = TRUE;
|
||||
|
||||
/*
|
||||
Some graphics drivers appear to advertise WGL_ARB_pixel_format,
|
||||
but it doesn't work usefully, so we have to be prepared for it
|
||||
to fail and fall back to using DescribePixelFormat()
|
||||
*/
|
||||
if (screen->base.numFBConfigs > 0)
|
||||
{
|
||||
screen->has_WGL_ARB_pixel_format = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (screen->base.numFBConfigs <= 0)
|
||||
{
|
||||
glxWinCreateConfigs(hdc, screen);
|
||||
screen->has_WGL_ARB_pixel_format = FALSE;
|
||||
}
|
||||
// Initializes screen->base.fbconfigs and screen->base.numFBConfigs
|
||||
|
||||
/*
|
||||
If we still didn't get any fbConfigs, we can't provide GLX for this screen
|
||||
*/
|
||||
if (screen->base.numFBConfigs <= 0)
|
||||
{
|
||||
free(screen);
|
||||
LogMessage(X_ERROR,"AIGLX: No fbConfigs could be made from native OpenGL pixel formats\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* These will be set by __glXScreenInit */
|
||||
screen->base.visuals = NULL;
|
||||
|
|
Loading…
Reference in New Issue
Block a user