]> git.sesse.net Git - nageru/commitdiff
Work around a Mesa shader cache issue.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 25 May 2019 15:36:33 +0000 (17:36 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 10 Jun 2019 14:16:03 +0000 (16:16 +0200)
shared/context.cpp

index 678457101ac39ffdd1056dcdc54f6dce874f4e67..db4babbab4c82007158df23d472c9a2d9fcdb2b8 100644 (file)
@@ -50,7 +50,20 @@ QOpenGLContext *create_context(const QSurface *surface)
 {
        QOpenGLContext *context = new QOpenGLContext;
        context->setShareContext(global_share_widget->context()->contextHandle());
-       context->setFormat(surface->format());
+
+       // Qt has a bug (QTBUG-76299) where, when using EGL, the surface ignores
+       // the requested OpenGL context version and just becomes 2.0. Mesa honors
+       // this and gives us a 3.0 compatibility context, but then has a bug related
+       // to its shader cache (Mesa bug #110872) that causes spurious linker failures
+       // when we need to re-link a Movit shader in the same context. However,
+       // the surface itself doesn't use the OpenGL version in its format for anything,
+       // so we can just override it and get a proper context.
+       QSurfaceFormat fmt = surface->format();
+       fmt.setProfile(QSurfaceFormat::CoreProfile);
+       fmt.setMajorVersion(4);
+       fmt.setMinorVersion(5);
+       context->setFormat(fmt);
+
        context->create();
        return context;
 }