[Mesa-dev] [PATCH] DRI2: Don't disable GLX_INTEL_swap_event unconditionally
Jesse Barnes
jbarnes at virtuousgeek.org
Fri Feb 15 08:03:49 PST 2013
On Thu, 14 Feb 2013 20:39:36 -0800
Zack Rusin <zackr at 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 <zackr at 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 <jbarnes at virtuousgeek.org>
--
Jesse Barnes, Intel Open Source Technology Center
More information about the mesa-dev
mailing list