Merge lp:~gerboland/qtmir/nouveau-workaround into lp:qtmir

Proposed by Gerry Boland
Status: Needs review
Proposed branch: lp:~gerboland/qtmir/nouveau-workaround
Merge into: lp:qtmir
Diff against target: 110 lines (+64/-1)
3 files modified
src/platforms/mirserver/logging.cpp (+1/-0)
src/platforms/mirserver/logging.h (+1/-0)
src/platforms/mirserver/mirserverintegration.cpp (+62/-1)
To merge this branch: bzr merge lp:~gerboland/qtmir/nouveau-workaround
Reviewer Review Type Date Requested Status
Unity8 CI Bot (community) continuous-integration Approve
Mir development team Pending
Review via email: mp+321286@code.launchpad.net

Commit message

Disable threaded rendering for nouveau

To post a comment you must log in.
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :

PASSED: Continuous integration, rev:626
https://unity8-jenkins.ubuntu.com/job/lp-qtmir-ci/643/
Executed test runs:
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build/4764
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-0-fetch/4792
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial+overlay/4615
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial+overlay/4615/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=zesty/4615
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=zesty/4615/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial+overlay/4615
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial+overlay/4615/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=zesty/4615
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=zesty/4615/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial+overlay/4615
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial+overlay/4615/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=zesty/4615
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=zesty/4615/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-qtmir-ci/643/rebuild

review: Approve (continuous-integration)

Unmerged revisions

626. By Gerry Boland

Disable threaded rendering for nouveau

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/platforms/mirserver/logging.cpp'
--- src/platforms/mirserver/logging.cpp 2017-02-07 20:59:34 +0000
+++ src/platforms/mirserver/logging.cpp 2017-03-29 12:27:06 +0000
@@ -24,5 +24,6 @@
24Q_LOGGING_CATEGORY(QTMIR_MIR_KEYMAP, "qtmir.mir.keymap")24Q_LOGGING_CATEGORY(QTMIR_MIR_KEYMAP, "qtmir.mir.keymap")
25Q_LOGGING_CATEGORY(QTMIR_CLIPBOARD, "qtmir.clipboard")25Q_LOGGING_CATEGORY(QTMIR_CLIPBOARD, "qtmir.clipboard")
26Q_LOGGING_CATEGORY(QTMIR_SENSOR_MESSAGES, "qtmir.sensor")26Q_LOGGING_CATEGORY(QTMIR_SENSOR_MESSAGES, "qtmir.sensor")
27Q_LOGGING_CATEGORY(QTMIR_GRAPHICS, "qtmir.graphics")
27Q_LOGGING_CATEGORY(QTMIR_SCREENS, "qtmir.screens")28Q_LOGGING_CATEGORY(QTMIR_SCREENS, "qtmir.screens")
28Q_LOGGING_CATEGORY(QTMIR_DBUS, "qtmir.dbus", QtWarningMsg)29Q_LOGGING_CATEGORY(QTMIR_DBUS, "qtmir.dbus", QtWarningMsg)
2930
=== modified file 'src/platforms/mirserver/logging.h'
--- src/platforms/mirserver/logging.h 2016-09-29 15:46:59 +0000
+++ src/platforms/mirserver/logging.h 2017-03-29 12:27:06 +0000
@@ -26,6 +26,7 @@
26Q_DECLARE_LOGGING_CATEGORY(QTMIR_MIR_INPUT)26Q_DECLARE_LOGGING_CATEGORY(QTMIR_MIR_INPUT)
27Q_DECLARE_LOGGING_CATEGORY(QTMIR_MIR_KEYMAP)27Q_DECLARE_LOGGING_CATEGORY(QTMIR_MIR_KEYMAP)
28Q_DECLARE_LOGGING_CATEGORY(QTMIR_CLIPBOARD)28Q_DECLARE_LOGGING_CATEGORY(QTMIR_CLIPBOARD)
29Q_DECLARE_LOGGING_CATEGORY(QTMIR_GRAPHICS)
29Q_DECLARE_LOGGING_CATEGORY(QTMIR_SCREENS)30Q_DECLARE_LOGGING_CATEGORY(QTMIR_SCREENS)
30Q_DECLARE_LOGGING_CATEGORY(QTMIR_DBUS)31Q_DECLARE_LOGGING_CATEGORY(QTMIR_DBUS)
3132
3233
=== modified file 'src/platforms/mirserver/mirserverintegration.cpp'
--- src/platforms/mirserver/mirserverintegration.cpp 2017-02-21 18:53:48 +0000
+++ src/platforms/mirserver/mirserverintegration.cpp 2017-03-29 12:27:06 +0000
@@ -27,6 +27,7 @@
27#include <qpa/qwindowsysteminterface.h>27#include <qpa/qwindowsysteminterface.h>
2828
29#include <QGuiApplication>29#include <QGuiApplication>
30#include <QOffscreenSurface>
30#include <QStringList>31#include <QStringList>
31#include <QDebug>32#include <QDebug>
3233
@@ -47,6 +48,66 @@
47#include "ubuntutheme.h"48#include "ubuntutheme.h"
48#include "logging.h"49#include "logging.h"
4950
51namespace {
52
53static bool mGLContextQueried{false};
54static bool mGLSupportsThreadedRendering{false};
55
56void queryGLContext()
57{
58 // Based on similar logic in the XCB plugin. Am supporting the same debug env vars too.
59 if (mGLContextQueried)
60 return;
61 mGLContextQueried = true;
62
63 static bool skip = qEnvironmentVariableIsSet("QT_OPENGL_NO_SANITY_CHECK");
64 if (skip)
65 return;
66
67 QOpenGLContext *oldContext = QOpenGLContext::currentContext();
68 QSurface *oldSurface = nullptr;
69 if (oldContext)
70 oldSurface = oldContext->surface();
71
72 QOffscreenSurface *surface = new QOffscreenSurface;
73 surface->create();
74
75 QOpenGLContext context;
76 if (!context.create() || !context.makeCurrent(surface)) {
77 qWarning("MirServerIntegration: Failed to create dummy context to query");
78 mGLSupportsThreadedRendering = false;
79 return;
80 }
81
82 mGLSupportsThreadedRendering = true;
83
84 if (const char *vendor = (const char *) glGetString(GL_VENDOR)) {
85 if (strstr(vendor, "nouveau") != 0) {
86 qCInfo(QTMIR_GRAPHICS) << "Multithreaded OpenGL disabled: nouveau is blacklisted";
87 mGLSupportsThreadedRendering = false;
88 }
89 }
90
91 context.doneCurrent();
92 if (oldContext && oldSurface)
93 oldContext->makeCurrent(oldSurface);
94
95 if (!mGLSupportsThreadedRendering) {
96 qCInfo(QTMIR_GRAPHICS) << "Force-enable multithreaded OpenGL by setting "
97 "environment variable QT_OPENGL_NO_SANITY_CHECK";
98 }
99}
100
101bool supportsThreadedRendering()
102{
103 queryGLContext();
104 return mGLSupportsThreadedRendering;
105}
106
107} // namespace
108
109
110
50namespace mg = mir::graphics;111namespace mg = mir::graphics;
51using qtmir::Clipboard;112using qtmir::Clipboard;
52113
@@ -88,7 +149,7 @@
88 switch (cap) {149 switch (cap) {
89 case ThreadedPixmaps: return true;150 case ThreadedPixmaps: return true;
90 case OpenGL: return true;151 case OpenGL: return true;
91 case ThreadedOpenGL: return true;152 case ThreadedOpenGL: return supportsThreadedRendering();
92 case BufferQueueingOpenGL: return true;153 case BufferQueueingOpenGL: return true;
93 case MultipleWindows: return true; // multi-monitor support154 case MultipleWindows: return true; // multi-monitor support
94 case WindowManagement: return false; // platform has no WM, as this implements the WM!155 case WindowManagement: return false; // platform has no WM, as this implements the WM!

Subscribers

People subscribed via source and target branches