- backport upstream fixes
- drop -fno-delete-null-pointer-checks hack (included in qt5-rpm-macros as needed now)
This commit is contained in:
Rex Dieter 2016-03-25 08:21:16 -05:00
parent 3c01417b2f
commit 51873329cb
5 changed files with 259 additions and 1 deletions

View File

@ -0,0 +1,33 @@
From 9783991b615484d2926e9648b10ea090af81d93f Mon Sep 17 00:00:00 2001
From: Mitch Curtis <mitch.curtis@theqtcompany.com>
Date: Wed, 3 Feb 2016 12:57:05 +0100
Subject: [PATCH 08/61] Fix crash when Canvas has negative width or height
m_fbo is null when using a threaded render loop.
Change-Id: I297ba651f9605f1718dbe9d09bd30e9682fb8401
Task-number: QTBUG-50085
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
---
src/quick/items/context2d/qquickcontext2dtexture.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/quick/items/context2d/qquickcontext2dtexture.cpp b/src/quick/items/context2d/qquickcontext2dtexture.cpp
index 73b0b55..5ac971d 100644
--- a/src/quick/items/context2d/qquickcontext2dtexture.cpp
+++ b/src/quick/items/context2d/qquickcontext2dtexture.cpp
@@ -599,6 +599,11 @@ QPaintDevice* QQuickContext2DFBOTexture::beginPainting()
void QQuickContext2DFBOTexture::endPainting()
{
QQuickContext2DTexture::endPainting();
+
+ // There may not be an FBO due to zero width or height.
+ if (!m_fbo)
+ return;
+
if (m_multisampledFbo)
QOpenGLFramebufferObject::blitFramebuffer(m_fbo, m_multisampledFbo);
--
1.9.3

View File

@ -0,0 +1,60 @@
From 427ca15418c05e628bae3451c263be198e721ba9 Mon Sep 17 00:00:00 2001
From: Robin Burchell <robin.burchell@viroteck.net>
Date: Wed, 17 Feb 2016 01:35:29 +0100
Subject: [PATCH 19/61] Revert "Fix crash on QQmlEngine destruction."
This reverts commit 2e75be5f64fb21cbbdff3353dbd507c2ca26946a.
This patch was originally written by Andrew den Exter in
222e06bf4ed509e72c1533cbe1d4859ca96933f3, externally from the main Qt tree. I
upstreamed this as part of our porting efforts.
Some time later, this was accidentally reverted in
2e75be5f64fb21cbbdff3353dbd507c2ca26946a: we can't go back in time to examine
exactly what happened, but presumably Andrew didn't notice that I had upstreamed
this, attempted to apply the patch and ignored the "already applied" warning by
accident - and continued on dutifully with the patch accidentally reverted.
This change is correct, though, and is thus reinstated.
Change-Id: Idfe6ab39ad011f0401de25fe056aa3eb3fb8b424
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
---
src/qml/qml/qqmlengine.cpp | 4 ++--
src/qml/qml/qqmlengine_p.h | 3 +--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 109cfac..2cfe468 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -598,8 +598,8 @@ QQmlEnginePrivate::QQmlEnginePrivate(QQmlEngine *e)
workerScriptEngine(0),
activeObjectCreator(0),
networkAccessManager(0), networkAccessManagerFactory(0), urlInterceptor(0),
- scarceResourcesRefCount(0), typeLoader(e), importDatabase(e), uniqueId(1),
- incubatorCount(0), incubationController(0)
+ scarceResourcesRefCount(0), importDatabase(e), typeLoader(e),
+ uniqueId(1), incubatorCount(0), incubationController(0)
{
}
diff --git a/src/qml/qml/qqmlengine_p.h b/src/qml/qml/qqmlengine_p.h
index 26ee3bd..072a6c4 100644
--- a/src/qml/qml/qqmlengine_p.h
+++ b/src/qml/qml/qqmlengine_p.h
@@ -166,9 +166,8 @@ public:
void referenceScarceResources();
void dereferenceScarceResources();
- QQmlTypeLoader typeLoader;
QQmlImportDatabase importDatabase;
-
+ QQmlTypeLoader typeLoader;
QString offlineStoragePath;
--
1.9.3

View File

@ -0,0 +1,30 @@
From e01bed44bca9bd0919f70dfc14f8297415d61bd9 Mon Sep 17 00:00:00 2001
From: Gunnar Sletta <gunnar@sletta.org>
Date: Mon, 15 Feb 2016 08:02:50 +0100
Subject: [PATCH 29/61] Avoid div-by-zero when nothing is rendered.
Change-Id: I3eb57baf1812f831335429cc7d2b4424f3cfa785
Task-number: QTBUG-50929
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
---
src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index b1792d2..dd1ff14 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -2654,7 +2654,9 @@ void Renderer::render()
if (m_alphaBatches.size())
std::sort(&m_alphaBatches.first(), &m_alphaBatches.last() + 1, qsg_sort_batch_increasing_order);
- m_zRange = 1.0 / (m_nextRenderOrder);
+ m_zRange = m_nextRenderOrder != 0
+ ? 1.0 / (m_nextRenderOrder)
+ : 0;
}
if (Q_UNLIKELY(debug_render())) timeSorting = timer.restart();
--
1.9.3

View File

@ -0,0 +1,116 @@
From d4efd5ab810e92202efe672be29136324dd2a3f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?D=C4=81vis=20Mos=C4=81ns?= <davispuh@gmail.com>
Date: Mon, 28 Dec 2015 05:43:18 +0200
Subject: [PATCH] Check for NULL from glGetString
glGetString can return NULL pointer in case of error
so check for it before using.
Change-Id: Ia07424c8f2b3ce6dce675514900a509e3ef3b739
---
src/particles/qquickimageparticle.cpp | 6 ++++--
src/quick/scenegraph/qsgcontext.cpp | 22 ++++++++++++++++------
.../qsgdefaultdistancefieldglyphcache.cpp | 8 +++++---
src/quick/scenegraph/util/qsgatlastexture.cpp | 4 ++--
4 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
index d78a350..b54861e 100644
--- a/src/particles/qquickimageparticle.cpp
+++ b/src/particles/qquickimageparticle.cpp
@@ -1276,14 +1276,16 @@ void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
// OS X 10.8.3 introduced a bug in the AMD drivers, for at least the 2011 macbook pros,
// causing point sprites who read gl_PointCoord in the frag shader to come out as
// green-red blobs.
- if (perfLevel < Deformable && strstr((char *) glGetString(GL_VENDOR), "ATI")) {
+ const char *vendor = (const char *) glGetString(GL_VENDOR);
+ if (perfLevel < Deformable && vendor && strstr(vendor, "ATI")) {
perfLevel = Deformable;
}
#endif
#ifdef Q_OS_LINUX
// Nouveau drivers can potentially freeze a machine entirely when taking the point-sprite path.
- if (perfLevel < Deformable && strstr((const char *) glGetString(GL_VENDOR), "nouveau"))
+ const char *vendor = (const char *) glGetString(GL_VENDOR);
+ if (perfLevel < Deformable && vendor && strstr(vendor, "nouveau"))
perfLevel = Deformable;
#endif
diff --git a/src/quick/scenegraph/qsgcontext.cpp b/src/quick/scenegraph/qsgcontext.cpp
index dd6977e..43d549f 100644
--- a/src/quick/scenegraph/qsgcontext.cpp
+++ b/src/quick/scenegraph/qsgcontext.cpp
@@ -624,14 +624,24 @@ void QSGRenderContext::initialize(QOpenGLContext *context)
m_sg->renderContextInitialized(this);
#ifdef Q_OS_LINUX
+ while (funcs->glGetError() != GL_NO_ERROR);
+
const char *vendor = (const char *) funcs->glGetString(GL_VENDOR);
- if (strstr(vendor, "nouveau"))
- m_brokenIBOs = true;
const char *renderer = (const char *) funcs->glGetString(GL_RENDERER);
- if (strstr(renderer, "llvmpipe"))
- m_serializedRender = true;
- if (strstr(vendor, "Hisilicon Technologies") && strstr(renderer, "Immersion.16"))
- m_brokenIBOs = true;
+
+ if (vendor && renderer) {
+ if (strstr(vendor, "nouveau"))
+ m_brokenIBOs = true;
+ if (strstr(renderer, "llvmpipe"))
+ m_serializedRender = true;
+ if (strstr(vendor, "Hisilicon Technologies") && strstr(renderer, "Immersion.16"))
+ m_brokenIBOs = true;
+ } else {
+ GLenum err;
+ while ((err = funcs->glGetError()) != GL_NO_ERROR) {
+ qWarning("QSGRenderContext::initialize: GL error %x from glGetString", err);
+ }
+ }
#endif
emit initialized();
diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp
index dcc485c..43e234b 100644
--- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp
+++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp
@@ -488,9 +488,11 @@ bool QSGDefaultDistanceFieldGlyphCache::useTextureUploadWorkaround() const
static bool set = false;
static bool useWorkaround = false;
if (!set) {
- useWorkaround = qstrcmp(reinterpret_cast<const char*>(m_funcs->glGetString(GL_RENDERER)),
- "Mali-400 MP") == 0;
- set = true;
+ const char *renderer = reinterpret_cast<const char*>(m_funcs->glGetString(GL_RENDERER));
+ if (renderer) {
+ useWorkaround = qstrcmp(renderer, "Mali-400 MP") == 0;
+ set = true;
+ }
}
return useWorkaround;
}
diff --git a/src/quick/scenegraph/util/qsgatlastexture.cpp b/src/quick/scenegraph/util/qsgatlastexture.cpp
index 8e8e870..d726907 100644
--- a/src/quick/scenegraph/util/qsgatlastexture.cpp
+++ b/src/quick/scenegraph/util/qsgatlastexture.cpp
@@ -150,13 +150,13 @@ Atlas::Atlas(const QSize &size)
wrongfullyReportsBgra8888Support = false;
const char *ext = (const char *) QOpenGLContext::currentContext()->functions()->glGetString(GL_EXTENSIONS);
- if (!wrongfullyReportsBgra8888Support
+ if (!wrongfullyReportsBgra8888Support && ext
&& (strstr(ext, "GL_EXT_bgra")
|| strstr(ext, "GL_EXT_texture_format_BGRA8888")
|| strstr(ext, "GL_IMG_texture_format_BGRA8888"))) {
m_internalFormat = m_externalFormat = GL_BGRA;
#ifdef Q_OS_IOS
- } else if (strstr(ext, "GL_APPLE_texture_format_BGRA8888")) {
+ } else if (ext && strstr(ext, "GL_APPLE_texture_format_BGRA8888")) {
m_internalFormat = GL_RGBA;
m_externalFormat = GL_BGRA;
#endif // IOS
--
1.9.3

View File

@ -17,7 +17,7 @@
Summary: Qt5 - QtDeclarative component Summary: Qt5 - QtDeclarative component
Name: qt5-%{qt_module} Name: qt5-%{qt_module}
Version: 5.6.0 Version: 5.6.0
Release: 3%{?prerelease:.%{prerelease}}%{?dist} Release: 4%{?prerelease:.%{prerelease}}%{?dist}
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details # See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
License: LGPLv2 with exceptions or GPLv3 with exceptions License: LGPLv2 with exceptions or GPLv3 with exceptions
@ -33,6 +33,15 @@ Patch1: qtdeclarative-opensource-src-5.5.0-no_sse2.patch
# https://bugs.kde.org/show_bug.cgi?id=348385 # https://bugs.kde.org/show_bug.cgi?id=348385
Patch2: qtdeclarative-QQuickShaderEffectSource_deadlock.patch Patch2: qtdeclarative-QQuickShaderEffectSource_deadlock.patch
## upstream patches
Patch8: 0008-Fix-crash-when-Canvas-has-negative-width-or-height.patch
Patch19: 0019-Revert-Fix-crash-on-QQmlEngine-destruction.patch
Patch29: 0029-Avoid-div-by-zero-when-nothing-is-rendered.patch
## upstream patches under review
# Check-for-NULL-from-glGetStrin
Patch500: Check-for-NULL-from-glGetString.patch
Obsoletes: qt5-qtjsbackend < 5.2.0 Obsoletes: qt5-qtjsbackend < 5.2.0
BuildRequires: cmake BuildRequires: cmake
@ -85,6 +94,12 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
%patch1 -p1 -b .no_sse2 %patch1 -p1 -b .no_sse2
%patch2 -p1 -b .QQuickShaderEffectSource_deadlock %patch2 -p1 -b .QQuickShaderEffectSource_deadlock
%patch8 -p1 -b .0008
%patch19 -p1 -b .0019
%patch29 -p1 -b .0029
%patch500 -p1 -b .Check-for-NULL-from-glGetString
%build %build
@ -216,6 +231,10 @@ popd
%changelog %changelog
* Fri Mar 25 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.0-4
- backport upstream fixes
- drop -fno-delete-null-pointer-checks hack (included in qt5-rpm-macros as needed now)
* Sat Mar 19 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.0-3 * Sat Mar 19 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.0-3
- BR: cmake (cmake autoprovides) - BR: cmake (cmake autoprovides)