summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2017-08-09 11:00:16 +0200
committerThomas Hellstrom <thellstrom@vmware.com>2017-08-10 09:15:33 +0200
commitfe4aae0e6ad395ef48c2f710c3deb51a0b769000 (patch)
treef3a33b2a03c878defd4fd7bb27ce8509a980e07b
parent08bee3e5ac95ad51ef06ba3a4ee349f96f173df7 (diff)
glx: Work around X servers reporting bogus values of GLX_SWAP_METHOD_OML
Due to the recently fixed bug where dri drivers didn't report a correct __DRI_ATTRIB_SWAP_METHOD value, and the fact that X servers just forward this incorrect value (from the AIGLX dri driver) untranslated as GLX_SWAP_METHOD_OML, the latter value might be undefined when old dri AIGLX drivers are used, which breaks client fbconfig matching with server fbconfigs. So work around this by assuming GLX_SWAP_METHOD_UNDEFINED when a bogus value is read. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
-rw-r--r--src/glx/glxext.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index 9ef7ff5f694..9cbe3347723 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -524,7 +524,17 @@ __glXInitializeVisualConfigFromTags(struct glx_config * config, int count,
config->visualSelectGroup = *bp++;
break;
case GLX_SWAP_METHOD_OML:
- config->swapMethod = *bp++;
+ if (*bp == GLX_SWAP_UNDEFINED_OML ||
+ *bp == GLX_SWAP_COPY_OML ||
+ *bp == GLX_SWAP_EXCHANGE_OML) {
+ config->swapMethod = *bp++;
+ } else {
+ /* X servers with old HW drivers may return any value here, so
+ * assume GLX_SWAP_METHOD_UNDEFINED.
+ */
+ config->swapMethod = GLX_SWAP_UNDEFINED_OML;
+ bp++;
+ }
break;
#endif
case GLX_SAMPLE_BUFFERS_SGIS: