diff options
author | Thomas Hellstrom <[email protected]> | 2018-02-26 14:27:40 +0100 |
---|---|---|
committer | Thomas Hellstrom <[email protected]> | 2018-03-08 07:26:29 +0100 |
commit | f4070956d4cd06b27c596ff4780b945537ceb84f (patch) | |
tree | bed11d8c7f0bab0a8b5a3ded89b6cedc44599381 | |
parent | 0c90264da4139805d34f530485a678c53809932e (diff) |
glx/dri: Add a driconf option to disable GLX_SGI_video_sync
Drivers on virtual hardware don't want to expose this extension to
GLX compositors, similarly to GLX_OML_sync_control, since that significantly
increases latency.
Signed-off-by: Thomas Hellstrom <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Reviewed-by: Sinclair Yeh <[email protected]>
Reviewed-by: Deepak Rawat <[email protected]>
-rw-r--r-- | src/glx/dri2_glx.c | 9 | ||||
-rw-r--r-- | src/glx/dri3_glx.c | 6 | ||||
-rw-r--r-- | src/util/xmlpool/t_options.h | 5 |
3 files changed, 16 insertions, 4 deletions
diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 0f44635725d..91afc337505 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -1102,7 +1102,6 @@ dri2BindExtensions(struct dri2_screen *psc, struct glx_display * priv, extensions = psc->core->getExtensions(psc->driScreen); - __glXEnableDirectExtension(&psc->base, "GLX_SGI_video_sync"); __glXEnableDirectExtension(&psc->base, "GLX_SGI_swap_control"); __glXEnableDirectExtension(&psc->base, "GLX_MESA_swap_control"); __glXEnableDirectExtension(&psc->base, "GLX_SGI_make_current_read"); @@ -1207,6 +1206,7 @@ dri2CreateScreen(int screen, struct glx_display * priv) char *driverName = NULL, *loader_driverName, *deviceName, *tmp; drm_magic_t magic; int i; + unsigned char disable; psc = calloc(1, sizeof *psc); if (psc == NULL) @@ -1325,8 +1325,6 @@ dri2CreateScreen(int screen, struct glx_display * priv) psp->getBufferAge = NULL; if (pdp->driMinor >= 2) { - unsigned char disable; - psp->getDrawableMSC = dri2DrawableGetMSC; psp->waitForMSC = dri2WaitForMSC; psp->waitForSBC = dri2WaitForSBC; @@ -1338,6 +1336,11 @@ dri2CreateScreen(int screen, struct glx_display * priv) __glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control"); } + if (psc->config->configQueryb(psc->driScreen, + "glx_disable_sgi_video_sync", + &disable) || !disable) + __glXEnableDirectExtension(&psc->base, "GLX_SGI_video_sync"); + /* DRI2 supports SubBuffer through DRI2CopyRegion, so it's always * available.*/ psp->copySubBuffer = dri2CopySubBuffer; diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index 016f91b1963..adfc3499688 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -721,7 +721,6 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv, extensions = psc->core->getExtensions(psc->driScreen); - __glXEnableDirectExtension(&psc->base, "GLX_SGI_video_sync"); __glXEnableDirectExtension(&psc->base, "GLX_SGI_swap_control"); __glXEnableDirectExtension(&psc->base, "GLX_MESA_swap_control"); __glXEnableDirectExtension(&psc->base, "GLX_SGI_make_current_read"); @@ -956,6 +955,11 @@ dri3_create_screen(int screen, struct glx_display * priv) &disable) || !disable) __glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control"); + if (psc->config->configQueryb(psc->driScreen, + "glx_disable_sgi_video_sync", + &disable) || !disable) + __glXEnableDirectExtension(&psc->base, "GLX_SGI_video_sync"); + psp->copySubBuffer = dri3_copy_sub_buffer; __glXEnableDirectExtension(&psc->base, "GLX_MESA_copy_sub_buffer"); diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h index 5f377c9dcd5..3ada813d639 100644 --- a/src/util/xmlpool/t_options.h +++ b/src/util/xmlpool/t_options.h @@ -346,6 +346,11 @@ DRI_CONF_OPT_BEGIN_B(glx_disable_oml_sync_control, def) \ DRI_CONF_DESC(en, gettext("Disable the GLX_OML_sync_control extension")) \ DRI_CONF_OPT_END +#define DRI_CONF_DISABLE_SGI_VIDEO_SYNC(def) \ +DRI_CONF_OPT_BEGIN_B(glx_disable_sgi_video_sync, def) \ + DRI_CONF_DESC(en, gettext("Disable the GLX_SGI_video_sync extension")) \ +DRI_CONF_OPT_END + /** * \brief Software-fallback options. To allow using features (like |