On Sep 17, 2013, at 12:55 PM, Roderick Colenbrander <thunderbird2k@gmail.com> wrote:

---
 dlls/winex11.drv/opengl.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 5ec33c8..e28302e 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -258,7 +258,8 @@ enum glx_swap_control_method
 {
     GLX_SWAP_CONTROL_NONE,
     GLX_SWAP_CONTROL_EXT,
-    GLX_SWAP_CONTROL_SGI
+    GLX_SWAP_CONTROL_SGI,
+    GLX_SWAP_CONTROL_MESA
 };

 /* X context to associate a struct gl_drawable to an hwnd */
@@ -404,6 +405,7 @@ static void  (*pglXFreeMemoryNV)(GLvoid *pointer);

 /* MESA GLX Extensions */
 static void (*pglXCopySubBufferMESA)(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+static int (*pglXSwapIntervalMESA)(unsigned int interval);

 /* Standard OpenGL */
 static void (*pglFinish)(void);
@@ -650,6 +652,8 @@ static BOOL has_opengl(void)
     LOAD_FUNCPTR(glXCreateContextAttribsARB);
     /* EXT GLX Extension */
     LOAD_FUNCPTR(glXSwapIntervalEXT);
+    /* MESA GLX Extension */
+    LOAD_FUNCPTR(glXSwapIntervalMESA);
     /* SGI GLX Extension */
     LOAD_FUNCPTR(glXSwapIntervalSGI);
     /* NV GLX Extension */
@@ -2963,6 +2967,10 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval)
         ret = !X11DRV_check_error();
         break;

+    case GLX_SWAP_CONTROL_MESA:
+        ret = !pglXSwapIntervalMESA(interval);
+        break;
+
     case GLX_SWAP_CONTROL_SGI:
         /* wglSwapIntervalEXT considers an interval value of zero to mean that
          * vsync should be disabled, but glXSwapIntervalSGI considers such a
@@ -3146,6 +3154,10 @@ static void X11DRV_WineGL_LoadExtensions(void)
             has_swap_control_tear = TRUE;
         }
     }
+    else if (has_extension( WineGLInfo.glxExtensions, "GLX_MESA_swap_control"))
+    {
+        swap_control_method = GLX_SWAP_CONTROL_MESA;
+    }
     else if (has_extension( WineGLInfo.glxExtensions, "GLX_SGI_swap_control"))
     {
         swap_control_method = GLX_SWAP_CONTROL_SGI;
--
1.8.3.1