hw/xwin/glx: Make WGL -> GLX extension mapping table-driven
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk> Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
parent
ad6b4113cd
commit
6be9681eb9
|
@ -572,47 +572,57 @@ glxWinScreenProbe(ScreenPtr pScreen)
|
||||||
// might have completely different capabilities. Of course, good luck getting
|
// might have completely different capabilities. Of course, good luck getting
|
||||||
// those screens to be accelerated in XP and earlier...
|
// those screens to be accelerated in XP and earlier...
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
const struct
|
||||||
|
{
|
||||||
|
const char *wglext;
|
||||||
|
const char *glxext;
|
||||||
|
Bool mandatory;
|
||||||
|
} extensionMap[] = {
|
||||||
|
{ "WGL_ARB_make_current_read", "GLX_SGI_make_current_read", 1 },
|
||||||
|
{ "WGL_EXT_swap_control", "GLX_SGI_swap_control", 0 },
|
||||||
|
{ "WGL_EXT_swap_control", "GLX_MESA_swap_control", 0 },
|
||||||
|
// { "WGL_ARB_render_texture", "GLX_EXT_texture_from_pixmap", 0 },
|
||||||
|
// Sufficiently different that it's not obvious if this can be done...
|
||||||
|
{ "WGL_ARB_pbuffer", "GLX_SGIX_pbuffer", 1 },
|
||||||
|
{ "WGL_ARB_multisample", "GLX_ARB_multisample", 1 },
|
||||||
|
{ "WGL_ARB_multisample", "GLX_SGIS_multisample", 0 },
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Based on the WGL extensions available, enable various GLX extensions
|
// Based on the WGL extensions available, enable various GLX extensions
|
||||||
// XXX: make this table-driven ?
|
|
||||||
//
|
//
|
||||||
__glXInitExtensionEnableBits(screen->base.glx_enable_bits);
|
__glXInitExtensionEnableBits(screen->base.glx_enable_bits);
|
||||||
|
|
||||||
if (strstr(wgl_extensions, "WGL_ARB_make_current_read"))
|
for (i = 0; i < sizeof(extensionMap)/sizeof(extensionMap[0]); i++) {
|
||||||
screen->has_WGL_ARB_make_current_read = TRUE;
|
if (strstr(wgl_extensions, extensionMap[i].wglext)) {
|
||||||
else
|
__glXEnableExtension(screen->base.glx_enable_bits, extensionMap[i].glxext);
|
||||||
LogMessage(X_WARNING, "AIGLX: missing WGL_ARB_make_current_read\n");
|
LogMessage(X_INFO, "GLX: enabled %s\n", extensionMap[i].glxext);
|
||||||
|
}
|
||||||
|
else if (extensionMap[i].mandatory) {
|
||||||
|
LogMessage(X_ERROR, "required WGL extension %s is missing\n", extensionMap[i].wglext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Because it pre-dates WGL_EXT_extensions_string, GL_WIN_swap_hint might
|
||||||
|
// only be in GL_EXTENSIONS
|
||||||
if (strstr(gl_extensions, "GL_WIN_swap_hint")) {
|
if (strstr(gl_extensions, "GL_WIN_swap_hint")) {
|
||||||
__glXEnableExtension(screen->base.glx_enable_bits,
|
__glXEnableExtension(screen->base.glx_enable_bits,
|
||||||
"GLX_MESA_copy_sub_buffer");
|
"GLX_MESA_copy_sub_buffer");
|
||||||
LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n");
|
LogMessage(X_INFO, "AIGLX: enabled GLX_MESA_copy_sub_buffer\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strstr(wgl_extensions, "WGL_EXT_swap_control")) {
|
if (strstr(wgl_extensions, "WGL_ARB_make_current_read"))
|
||||||
__glXEnableExtension(screen->base.glx_enable_bits,
|
screen->has_WGL_ARB_make_current_read = TRUE;
|
||||||
"GLX_SGI_swap_control");
|
|
||||||
LogMessage(X_INFO, "AIGLX: enabled GLX_SGI_swap_control\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* // Hmm? screen->texOffset */
|
|
||||||
/* if (strstr(wgl_extensions, "WGL_ARB_render_texture")) */
|
|
||||||
/* { */
|
|
||||||
/* __glXEnableExtension(screen->base.glx_enable_bits, "GLX_EXT_texture_from_pixmap"); */
|
|
||||||
/* LogMessage(X_INFO, "AIGLX: GLX_EXT_texture_from_pixmap backed by buffer objects\n"); */
|
|
||||||
/* screen->has_WGL_ARB_render_texture = TRUE; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
if (strstr(wgl_extensions, "WGL_ARB_pbuffer"))
|
if (strstr(wgl_extensions, "WGL_ARB_pbuffer"))
|
||||||
screen->has_WGL_ARB_pbuffer = TRUE;
|
screen->has_WGL_ARB_pbuffer = TRUE;
|
||||||
else
|
|
||||||
LogMessage(X_WARNING, "AIGLX: missing WGL_ARB_pbuffer\n");
|
|
||||||
|
|
||||||
if (strstr(wgl_extensions, "WGL_ARB_multisample"))
|
if (strstr(wgl_extensions, "WGL_ARB_multisample"))
|
||||||
screen->has_WGL_ARB_multisample = TRUE;
|
screen->has_WGL_ARB_multisample = TRUE;
|
||||||
else
|
|
||||||
LogMessage(X_WARNING, "AIGLX: missing WGL_ARB_multisample\n");
|
|
||||||
|
|
||||||
screen->base.destroy = glxWinScreenDestroy;
|
screen->base.destroy = glxWinScreenDestroy;
|
||||||
screen->base.createContext = glxWinCreateContext;
|
screen->base.createContext = glxWinCreateContext;
|
||||||
|
|
Loading…
Reference in New Issue