diff -up cogl-1.8.2/cogl/winsys/cogl-winsys-glx.c.jx cogl-1.8.2/cogl/winsys/cogl-winsys-glx.c --- cogl-1.8.2/cogl/winsys/cogl-winsys-glx.c.jx 2011-11-03 16:58:15.000000000 -0400 +++ cogl-1.8.2/cogl/winsys/cogl-winsys-glx.c 2011-11-03 17:28:23.313469639 -0400 @@ -418,8 +418,15 @@ update_winsys_features (CoglContext *con TRUE); if (glx_renderer->pf_glXCopySubBuffer || context->glBlitFramebuffer) - COGL_FLAGS_SET (context->winsys_features, - COGL_WINSYS_FEATURE_SWAP_REGION, TRUE); + { + /* hack hack hack hack. llvmpipe's support for both is broken */ + const GLubyte *renderer = context->glGetString (GL_RENDERER); + if (!strstr (renderer, "llvmpipe")) + { + COGL_FLAGS_SET (context->winsys_features, + COGL_WINSYS_FEATURE_SWAP_REGION, TRUE); + } + } /* Note: glXCopySubBuffer and glBlitFramebuffer won't be throttled * by the SwapInterval so we have to throttle swap_region requests