From: Zack Rusin Date: Fri, 15 Feb 2013 04:39:36 +0000 (-0800) Subject: DRI2: Don't disable GLX_INTEL_swap_event unconditionally X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=076403c30d9f5cc79374e30d9f6007b08a63bf2d;p=mesa.git DRI2: Don't disable GLX_INTEL_swap_event unconditionally GLX_INTEL_swap_event is broken on the server side, where it's currently unconditionally enabled. This completely breaks systems running on drivers which don't support that extension. There's no way to test for its presence on this side, so instead of disabling it uncondtionally, just disable it for drivers which are known to not support it. It makes sense because most drivers do support it right now. We'll be able to remove this once Xserver properly advertises GLX_INTEL_swap_event. Note: This is a candidate for stable branch branches. Signed-off-by: Zack Rusin Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=60052 Reviewed-by: Jesse Barnes Reviewed-by: Brian Paul Tested-by: Ian Romanick --- diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 46a92fd7da4..c4f6996561e 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -1051,7 +1051,8 @@ static const struct glx_context_vtable dri2_context_vtable = { }; static void -dri2BindExtensions(struct dri2_screen *psc, const __DRIextension **extensions) +dri2BindExtensions(struct dri2_screen *psc, const __DRIextension **extensions, + const char *driverName) { int i; @@ -1060,7 +1061,15 @@ dri2BindExtensions(struct dri2_screen *psc, const __DRIextension **extensions) __glXEnableDirectExtension(&psc->base, "GLX_MESA_swap_control"); __glXEnableDirectExtension(&psc->base, "GLX_SGI_make_current_read"); - if (psc->dri2->base.version >= 4) { + /* + * GLX_INTEL_swap_event is broken on the server side, where it's + * currently unconditionally enabled. This completely breaks + * systems running on drivers which don't support that extension. + * There's no way to test for its presence on this side, so instead + * of disabling it uncondtionally, just disable it for drivers + * which are known to not support it. + */ + if (strcmp(driverName, "vmwgfx") != 0) { __glXEnableDirectExtension(&psc->base, "GLX_INTEL_swap_event"); } @@ -1204,7 +1213,7 @@ dri2CreateScreen(int screen, struct glx_display * priv) } extensions = psc->core->getExtensions(psc->driScreen); - dri2BindExtensions(psc, extensions); + dri2BindExtensions(psc, extensions, driverName); configs = driConvertConfigs(psc->core, psc->base.configs, driver_configs); visuals = driConvertConfigs(psc->core, psc->base.visuals, driver_configs);