public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas Sturmlechner" <asturm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/qt:master commit in: dev-qt/qtwebengine/, dev-qt/qtwebengine/files/
Date: Wed, 20 Jun 2018 15:29:07 +0000 (UTC)	[thread overview]
Message-ID: <1529505049.938edc9a6b2179e4aabcf5ab340ebd64d90a77d1.asturm@gentoo> (raw)

commit:     938edc9a6b2179e4aabcf5ab340ebd64d90a77d1
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 18 21:05:49 2018 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Wed Jun 20 14:30:49 2018 +0000
URL:        https://gitweb.gentoo.org/proj/qt.git/commit/?id=938edc9a

dev-qt/qtwebengine: Disable GPU when using nouveau

One upstream backport, the other one kindly borrowed from opensuse
(disable-gpu-when-using-nouveau-boo-1005323.diff).

Bug: https://bugs.gentoo.org/609752
Package-Manager: Portage-2.3.40, Repoman-2.3.9

 ...-5.11.1-eglGetProcAddress-fallback-lookup.patch | 68 +++++++++++++++
 .../qtwebengine-5.11.1-nouveau-disable-gpu.patch   | 98 ++++++++++++++++++++++
 dev-qt/qtwebengine/qtwebengine-5.11.1.ebuild       |  2 +
 3 files changed, 168 insertions(+)

diff --git a/dev-qt/qtwebengine/files/qtwebengine-5.11.1-eglGetProcAddress-fallback-lookup.patch b/dev-qt/qtwebengine/files/qtwebengine-5.11.1-eglGetProcAddress-fallback-lookup.patch
new file mode 100644
index 00000000..4b2676fa
--- /dev/null
+++ b/dev-qt/qtwebengine/files/qtwebengine-5.11.1-eglGetProcAddress-fallback-lookup.patch
@@ -0,0 +1,68 @@
+From a66d4cd82972996d76edff52d17464c150dec6a6 Mon Sep 17 00:00:00 2001
+From: Samuli Piippo <samuli.piippo@qt.io>
+Date: Mon, 11 Jun 2018 16:16:55 +0300
+Subject: Add fallback lookup for eglGetProcAddress
+
+Use the GLContext to find address for eglGetProcAddress symbol, if it's
+not found with dlopen.
+
+Change-Id: I3f5330c21ecc9b66e5e376d50d3fc6965b227f85
+Reviewed-by: Michal Klocek <michal.klocek@qt.io>
+---
+ src/core/gl_context_qt.cpp | 11 +++++++++++
+ src/core/gl_context_qt.h   |  1 +
+ src/core/gl_surface_qt.cpp |  4 ++++
+ 3 files changed, 16 insertions(+)
+
+diff --git a/src/core/gl_context_qt.cpp b/src/core/gl_context_qt.cpp
+index 9ed1db8b..95491709 100644
+--- a/src/core/gl_context_qt.cpp
++++ b/src/core/gl_context_qt.cpp
+@@ -155,6 +155,17 @@ QFunctionPointer GLContextHelper::getGlXGetProcAddress()
+     return get_proc_address;
+ }
+ 
++QFunctionPointer GLContextHelper::getEglGetProcAddress()
++{
++     QFunctionPointer get_proc_address = nullptr;
++#ifndef QT_NO_OPENGL
++    if (QOpenGLContext *context = qt_gl_global_share_context()) {
++        get_proc_address = context->getProcAddress("eglGetProcAddress");
++    }
++#endif
++    return get_proc_address;
++}
++
+ QT_END_NAMESPACE
+ 
+ #if defined(USE_OZONE) || defined(OS_WIN)
+diff --git a/src/core/gl_context_qt.h b/src/core/gl_context_qt.h
+index 8ffdad58..cecceabc 100644
+--- a/src/core/gl_context_qt.h
++++ b/src/core/gl_context_qt.h
+@@ -63,6 +63,7 @@ public:
+     static void* getXDisplay();
+     static void* getNativeDisplay();
+     static QFunctionPointer getGlXGetProcAddress();
++    static QFunctionPointer getEglGetProcAddress();
+ private:
+     Q_INVOKABLE bool initializeContextOnBrowserThread(gl::GLContext* context, gl::GLSurface* surface, gl::GLContextAttribs attribs);
+ 
+diff --git a/src/core/gl_surface_qt.cpp b/src/core/gl_surface_qt.cpp
+index 7e579246..4d38d7c2 100644
+--- a/src/core/gl_surface_qt.cpp
++++ b/src/core/gl_surface_qt.cpp
+@@ -227,6 +227,10 @@ bool InitializeStaticGLBindings(GLImplementation implementation) {
+               base::GetFunctionPointerFromNativeLibrary(library,
+                                                         "eglGetProcAddress"));
+       if (!get_proc_address) {
++          QFunctionPointer address = GLContextHelper::getEglGetProcAddress();
++          get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(address);
++      }
++      if (!get_proc_address) {
+         LOG(ERROR) << "eglGetProcAddress not found.";
+         base::UnloadNativeLibrary(library);
+         return false;
+-- 
+cgit v1.1-6-g87c4
+

diff --git a/dev-qt/qtwebengine/files/qtwebengine-5.11.1-nouveau-disable-gpu.patch b/dev-qt/qtwebengine/files/qtwebengine-5.11.1-nouveau-disable-gpu.patch
new file mode 100644
index 00000000..aaf3aae4
--- /dev/null
+++ b/dev-qt/qtwebengine/files/qtwebengine-5.11.1-nouveau-disable-gpu.patch
@@ -0,0 +1,98 @@
+From: Antonio Larrosa <alarrosa@suse.com>
+Subject: Disable GPU when using nouveau or running on wayland
+References: boo#1005323, boo#1060990
+
+Qt WebEngine uses multi-threaded OpenGL, which nouveau does not support.
+It also crashes when running on wayland, the cause is not yet known.
+Work around these issues by not doing GPU-accelerated rendering in such
+cases.
+
+Index: qtwebengine-everywhere-src-5.11.0/src/core/web_engine_context.cpp
+===================================================================
+--- qtwebengine-everywhere-src-5.11.0.orig/src/core/web_engine_context.cpp
++++ qtwebengine-everywhere-src-5.11.0/src/core/web_engine_context.cpp
+@@ -100,6 +100,7 @@
+ #include <QOffscreenSurface>
+ #ifndef QT_NO_OPENGL
+ # include <QOpenGLContext>
++# include <QOpenGLFunctions>
+ #endif
+ #include <QQuickWindow>
+ #include <QStringList>
+@@ -178,6 +179,39 @@ void dummyGetPluginCallback(const std::v
+ }
+ #endif
+ 
++#ifndef QT_NO_OPENGL
++QString openGLVendor()
++{
++    QString vendor;
++
++    QOpenGLContext *oldContext = QOpenGLContext::currentContext();
++    QSurface *oldSurface = 0;
++    if (oldContext)
++        oldSurface = oldContext->surface();
++
++    QScopedPointer<QOffscreenSurface> surface( new QOffscreenSurface );
++    surface->create();
++    QOpenGLContext context;
++    if (!context.create()) {
++        qDebug() << "Error creating openGL context";
++    }
++    else if (!context.makeCurrent(surface.data())) {
++        qDebug() << "Error making openGL context current context";
++    } else {
++        const GLubyte *p;
++        QOpenGLFunctions *f = context.functions();
++        if ((p = f->glGetString(GL_VENDOR)))
++            vendor = QString::fromLatin1(reinterpret_cast<const char *>(p));
++    }
++
++    context.doneCurrent();
++    if (oldContext && oldSurface)
++        oldContext->makeCurrent(oldSurface);
++
++    return vendor;
++}
++#endif
++
+ } // namespace
+ 
+ namespace QtWebEngineCore {
+@@ -414,6 +448,27 @@ WebEngineContext::WebEngineContext()
+     const char *glType = 0;
+ #ifndef QT_NO_OPENGL
+ 
++    bool disableGpu = qEnvironmentVariableIsSet("QT_WEBENGINE_DISABLE_GPU");
++
++    if (!qEnvironmentVariableIsSet("QT_WEBENGINE_DISABLE_WAYLAND_WORKAROUND") && platform.startsWith("wayland", Qt::CaseInsensitive))
++    {
++        qWarning() << "Running on wayland. Qt WebEngine will disable usage of the GPU.\n"
++                      "Note: you can set the QT_WEBENGINE_DISABLE_WAYLAND_WORKAROUND\n"
++                      "environment variable before running this application, but this is \n"
++                      "not recommended since this usually causes applications to crash.";
++        disableGpu = true;
++    }
++
++    if (!qEnvironmentVariableIsSet("QT_WEBENGINE_DISABLE_NOUVEAU_WORKAROUND") && openGLVendor() == QStringLiteral("nouveau"))
++    {
++        qWarning() << "Nouveau openGL driver detected. Qt WebEngine will disable usage of the GPU.\n"
++                      "Note: you can set the QT_WEBENGINE_DISABLE_NOUVEAU_WORKAROUND\n"
++                      "environment variable before running this application, but this is \n"
++                      "not recommended since this usually causes applications to crash as\n"
++                      "Nouveau openGL drivers don't support multithreaded rendering";
++        disableGpu = true;
++    }
++
+     bool tryGL =
+             !usingANGLE()
+             && (!usingSoftwareDynamicGL()
+@@ -424,7 +479,7 @@ WebEngineContext::WebEngineContext()
+                 || enableWebGLSoftwareRendering
+ #endif
+                 )
+-            && !usingQtQuick2DRenderer();
++            && !usingQtQuick2DRenderer() && !disableGpu;
+ 
+     if (tryGL) {
+         if (qt_gl_global_share_context() && qt_gl_global_share_context()->isValid()) {

diff --git a/dev-qt/qtwebengine/qtwebengine-5.11.1.ebuild b/dev-qt/qtwebengine/qtwebengine-5.11.1.ebuild
index 9c54aa9e..05007972 100644
--- a/dev-qt/qtwebengine/qtwebengine-5.11.1.ebuild
+++ b/dev-qt/qtwebengine/qtwebengine-5.11.1.ebuild
@@ -82,6 +82,8 @@ DEPEND="${RDEPEND}
 PATCHES+=(
 	"${FILESDIR}/${P}-libxml2-disable-catalogs.patch" # bug 653078
 	"${FILESDIR}/${P}-ffmpeg4.patch"
+	"${FILESDIR}/${P}-eglGetProcAddress-fallback-lookup.patch" # 5.11 branch
+	"${FILESDIR}/${P}-nouveau-disable-gpu.patch" # bug 609752
 )
 
 src_prepare() {


             reply	other threads:[~2018-06-20 15:29 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-20 15:29 Andreas Sturmlechner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-12-11 20:43 [gentoo-commits] proj/qt:master commit in: dev-qt/qtwebengine/, dev-qt/qtwebengine/files/ Andreas Sturmlechner
2024-11-21 15:58 Andreas Sturmlechner
2024-11-21 15:58 Andreas Sturmlechner
2024-11-21 15:58 Andreas Sturmlechner
2024-05-30 12:56 Andreas Sturmlechner
2023-04-10 21:41 Andreas Sturmlechner
2022-06-20 18:03 Jimi Huotari
2022-04-26 15:03 Jimi Huotari
2022-04-05 17:07 Andreas Sturmlechner
2022-04-01 18:23 Andreas Sturmlechner
2021-12-24 23:57 Andreas Sturmlechner
2021-12-24 23:57 Andreas Sturmlechner
2021-11-16  0:55 Jimi Huotari
2021-09-30 11:35 Andreas Sturmlechner
2021-09-30 11:35 Andreas Sturmlechner
2021-09-30 11:35 Andreas Sturmlechner
2021-03-25 23:49 Andreas Sturmlechner
2020-02-08 20:35 Andreas Sturmlechner
2019-10-28 21:23 Andreas Sturmlechner
2019-10-28 21:23 Andreas Sturmlechner
2019-10-23 23:38 Andreas Sturmlechner
2019-10-19 22:43 Andreas Sturmlechner
2019-09-11 12:44 Andreas Sturmlechner
2019-05-01  9:26 Michael Palimaka
2019-03-06 20:55 Jimi Huotari
2018-12-18 18:55 Andreas Sturmlechner
2018-11-13 17:52 Andreas Sturmlechner
2018-10-17 16:21 Jimi Huotari
2018-08-24 22:58 Jimi Huotari
2018-08-16 12:20 Jimi Huotari
2018-07-25 19:22 Jimi Huotari
2018-07-25 11:55 Jimi Huotari
2018-06-20 15:29 Andreas Sturmlechner
2018-06-20 15:29 Andreas Sturmlechner
2018-06-19 20:12 Jimi Huotari
2018-06-16 18:04 Andreas Sturmlechner
2018-02-09 10:46 Michael Palimaka
2018-02-07 10:30 Michael Palimaka
2017-12-10  1:48 Michael Palimaka
2017-12-05 11:25 Michael Palimaka
2017-06-04 11:55 Michael Palimaka
2017-06-01 14:16 Michael Palimaka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1529505049.938edc9a6b2179e4aabcf5ab340ebd64d90a77d1.asturm@gentoo \
    --to=asturm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox