diff options
author | Antonio Larrosa <alarrosa@suse.com> | 2018-02-16 13:18:42 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-02-21 17:03:58 +0000 |
commit | fa091640134b3ff99a9eb92df8286d15203122bf (patch) | |
tree | 55b27779ea342c71430d34b4d62cc0effd09247d /src/gui/opengl/qopenglshaderprogram.cpp | |
parent | 22d3eeebb0a011a61104de2eb635a3ecf26b58e2 (diff) |
opengl: Bail if cached shader fails to load
QOpenGLProgramBinaryCache::setProgramBinary() should check
GL_LINK_STATUS after glProgramBinary(), but doesn't.
In practice, this means that SDDM is a white screen, and KDE is just
a gray task bar.
So far, Qt tries to check this using its internal ::link() function.
But in case the cached binary fails to load, Qt currently attempts to
link the inexistent program, resulting in a zero-length, fixed
pipeline shader.
Checking this already in ::setProgramBinary() makes the call to
::link() superfluous, so we remove that as well.
Done-with: Max Staudt <mstaudt@suse.com>
Done-with: Michal Srb <msrb@suse.com>
Done-with: Fabian Vogt <fvogt@suse.de>
Task-number: QTBUG-66420
Change-Id: Iabb51d0eb2c0c16bde696efff623e57d15f28d82
Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/gui/opengl/qopenglshaderprogram.cpp')
-rw-r--r-- | src/gui/opengl/qopenglshaderprogram.cpp | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/src/gui/opengl/qopenglshaderprogram.cpp b/src/gui/opengl/qopenglshaderprogram.cpp index b044397f8e..1fe30f7e0e 100644 --- a/src/gui/opengl/qopenglshaderprogram.cpp +++ b/src/gui/opengl/qopenglshaderprogram.cpp @@ -3824,13 +3824,7 @@ bool QOpenGLShaderProgramPrivate::linkBinary() bool needsCompile = true; if (binCache.load(cacheKey, q->programId())) { qCDebug(DBG_SHADER_CACHE, "Program binary received from cache"); - linkBinaryRecursion = true; - bool ok = q->link(); - linkBinaryRecursion = false; - if (ok) - needsCompile = false; - else - qCDebug(DBG_SHADER_CACHE, "Link failed after glProgramBinary"); + needsCompile = false; } bool needsSave = false; |