On Thu, 14 Feb 2013 20:39:36 -0800 Zack Rusin <za...@vmware.com> wrote:
> 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 the 9.0 branch. > > Signed-off-by: Zack Rusin <za...@vmware.com> > --- > src/glx/dri2_glx.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c > index 46a92fd..05808d4 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); Seems like we should also fix the server to not advertise the extension if the driver doesn't have the appropriate hooks implemented. But I have no problem with doing this on the client side too. Reviewed-by: Jesse Barnes <jbar...@virtuousgeek.org> -- Jesse Barnes, Intel Open Source Technology Center _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev