From: Steinar H. Gunderson Date: Sat, 25 May 2019 15:36:33 +0000 (+0200) Subject: Work around a Mesa shader cache issue. X-Git-Tag: 1.9.0~36 X-Git-Url: https://git.sesse.net/?p=nageru;a=commitdiff_plain;h=26da0ebb049dc4c97c2dfda0f35c3546afb5b2a7 Work around a Mesa shader cache issue. --- diff --git a/shared/context.cpp b/shared/context.cpp index 6784571..db4babb 100644 --- a/shared/context.cpp +++ b/shared/context.cpp @@ -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; }