summaryrefslogtreecommitdiff
path: root/src/glx
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2017-05-05 05:57:27 -0700
committerThomas Hellstrom <thellstrom@vmware.com>2017-06-07 19:43:54 +0200
commit9d3f177e4b1ecd5e6ac4673e1ac8c72df9e159eb (patch)
treeb879bccb3a7e663f4e66df740f8c74e79af24014 /src/glx
parentff2978b44944790abd860548e111907588a23b0d (diff)
dri: Optionally turn off a couple of GLX extensions based on driconf options
With GLX_EXT_buffer_age turned on, gnome-shell will use full-screen damage with GLX, which severely hurts performance with architectures that emulate page-flips with copies. Like vmware. We would like to be able to turn off that extension. Similarly, typically the GLX_OML_sync_control doesn't make much sense on a virtual architecture since we don't really sync to the host's vertical retrace. We'd like to be able to turn it off as well. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/glx')
-rw-r--r--src/glx/dri2_glx.c7
-rw-r--r--src/glx/dri3_glx.c11
2 files changed, 15 insertions, 3 deletions
diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
index 4f163688f2c..ae8cb11ef8f 100644
--- a/src/glx/dri2_glx.c
+++ b/src/glx/dri2_glx.c
@@ -1311,12 +1311,17 @@ 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;
psp->setSwapInterval = dri2SetSwapInterval;
psp->getSwapInterval = dri2GetSwapInterval;
- __glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control");
+ if (psc->config->configQueryb(psc->driScreen,
+ "glx_disable_oml_sync_control",
+ &disable) || !disable)
+ __glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control");
}
/* DRI2 supports SubBuffer through DRI2CopyRegion, so it's always
diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
index 63474d0dca2..509160697f8 100644
--- a/src/glx/dri3_glx.c
+++ b/src/glx/dri3_glx.c
@@ -796,6 +796,7 @@ dri3_create_screen(int screen, struct glx_display * priv)
struct glx_config *configs = NULL, *visuals = NULL;
char *driverName, *deviceName, *tmp;
int i;
+ unsigned char disable;
psc = calloc(1, sizeof *psc);
if (psc == NULL)
@@ -934,13 +935,19 @@ dri3_create_screen(int screen, struct glx_display * priv)
psp->waitForSBC = dri3_wait_for_sbc;
psp->setSwapInterval = dri3_set_swap_interval;
psp->getSwapInterval = dri3_get_swap_interval;
- __glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control");
+ if (psc->config->configQueryb(psc->driScreen,
+ "glx_disable_oml_sync_control",
+ &disable) || !disable)
+ __glXEnableDirectExtension(&psc->base, "GLX_OML_sync_control");
psp->copySubBuffer = dri3_copy_sub_buffer;
__glXEnableDirectExtension(&psc->base, "GLX_MESA_copy_sub_buffer");
psp->getBufferAge = dri3_get_buffer_age;
- __glXEnableDirectExtension(&psc->base, "GLX_EXT_buffer_age");
+ if (psc->config->configQueryb(psc->driScreen,
+ "glx_disable_ext_buffer_age",
+ &disable) || !disable)
+ __glXEnableDirectExtension(&psc->base, "GLX_EXT_buffer_age");
free(driverName);
free(deviceName);