diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-02-22 09:19:56 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-02-22 09:19:56 +0100 |
commit | 9f33b84b0937a53e8e31e0c1e34506eecef6f2e4 (patch) | |
tree | 91e9bac96d61c08babd5b6415f276d44888e79dd /src/gui/opengl | |
parent | 4cbc7f798017d76e018dc3f04968703624b6a6cf (diff) | |
parent | b97765efd452921f75c1d04820c4b5e9e9d49100 (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Change-Id: Iec636692e8b7d1fe1bc0476e49c5054a5892d639
Diffstat (limited to 'src/gui/opengl')
-rw-r--r-- | src/gui/opengl/qopenglprogrambinarycache.cpp | 20 | ||||
-rw-r--r-- | src/gui/opengl/qopenglshaderprogram.cpp | 8 |
2 files changed, 19 insertions, 9 deletions
diff --git a/src/gui/opengl/qopenglprogrambinarycache.cpp b/src/gui/opengl/qopenglprogrambinarycache.cpp index 06373e1113..d16173df83 100644 --- a/src/gui/opengl/qopenglprogrambinarycache.cpp +++ b/src/gui/opengl/qopenglprogrambinarycache.cpp @@ -161,10 +161,26 @@ bool QOpenGLProgramBinaryCache::setProgramBinary(uint programId, uint blobFormat QOpenGLExtraFunctions *funcs = QOpenGLContext::currentContext()->extraFunctions(); while (funcs->glGetError() != GL_NO_ERROR) { } funcs->glProgramBinary(programId, blobFormat, p, blobSize); - int err = funcs->glGetError(); + + GLenum err = funcs->glGetError(); + if (err != GL_NO_ERROR) { + qCDebug(DBG_SHADER_CACHE, "Program binary failed to load for program %u, size %d, " + "format 0x%x, err = 0x%x", + programId, blobSize, blobFormat, err); + return false; + } + GLint linkStatus = 0; + funcs->glGetProgramiv(programId, GL_LINK_STATUS, &linkStatus); + if (linkStatus != GL_TRUE) { + qCDebug(DBG_SHADER_CACHE, "Program binary failed to load for program %u, size %d, " + "format 0x%x, linkStatus = 0x%x, err = 0x%x", + programId, blobSize, blobFormat, linkStatus, err); + return false; + } + qCDebug(DBG_SHADER_CACHE, "Program binary set for program %u, size %d, format 0x%x, err = 0x%x", programId, blobSize, blobFormat, err); - return err == 0; + return true; } #ifdef Q_OS_UNIX 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; |