Fixed client side issues due to threading bugs.
authorSamuel Rødal <samuel.rodal@nokia.com>
Thu, 24 May 2012 08:44:51 +0000 (10:44 +0200)
committerLaszlo Agocs <laszlo.p.agocs@nokia.com>
Fri, 25 May 2012 07:23:34 +0000 (09:23 +0200)
Our threading support depends on the hardware integration and on support
in libwayland.

Change-Id: Ic69bc4616e279c1986576d8c034db52402cb9c41
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@nokia.com>
src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h
src/plugins/platforms/wayland/gl_integration/qwaylandglintegration.h
src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.cpp
src/plugins/platforms/wayland/gl_integration/wayland_egl/qwaylandeglintegration.h
src/plugins/platforms/wayland/qwaylandintegration.cpp

index 6a46de9..e894a1b 100644 (file)
@@ -63,6 +63,8 @@ public:
 
     void initialize();
 
+    bool supportsThreadedOpenGL() const { return true; }
+
     QWaylandWindow *createEglWindow(QWindow *window);
     QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const;
 
index 8a549da..7d5c804 100644 (file)
@@ -57,6 +57,8 @@ public:
 
     virtual void initialize() = 0;
 
+    virtual bool supportsThreadedOpenGL() const { return false; }
+
     virtual QWaylandWindow *createEglWindow(QWindow *window) = 0;
     virtual QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const = 0;
 
index eef5f79..45edd88 100644 (file)
@@ -46,6 +46,8 @@
 #include "qwaylandeglwindow.h"
 #include "qwaylandglcontext.h"
 
+#include <wayland-client.h>
+
 #include <QtCore/QDebug>
 
 QWaylandEglIntegration::QWaylandEglIntegration(struct wl_display *waylandDisplay)
@@ -79,6 +81,15 @@ void QWaylandEglIntegration::initialize()
     }
 }
 
+bool QWaylandEglIntegration::supportsThreadedOpenGL() const
+{
+#ifdef WAYLAND_CLIENT_THREAD_AFFINITY
+    return true;
+#else
+    return false;
+#endif
+}
+
 QWaylandWindow *QWaylandEglIntegration::createEglWindow(QWindow *window)
 {
     return new QWaylandEglWindow(window);
index 9d9a883..38ac7e2 100644 (file)
@@ -56,6 +56,7 @@ public:
     ~QWaylandEglIntegration();
 
     void initialize();
+    bool supportsThreadedOpenGL() const;
 
     QWaylandWindow *createEglWindow(QWindow *window);
     QPlatformOpenGLContext *createPlatformOpenGLContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share) const;
index 0469f3f..97a259d 100644 (file)
@@ -112,7 +112,11 @@ bool QWaylandIntegration::hasCapability(QPlatformIntegration::Capability cap) co
         return false;
 #endif
     case ThreadedOpenGL:
-        return hasCapability(OpenGL);
+#ifdef QT_WAYLAND_GL_SUPPORT
+        return mDisplay->eglIntegration()->supportsThreadedOpenGL();
+#else
+        return false;
+#endif
     case BufferQueueingOpenGL:
         return true;
     default: return QPlatformIntegration::hasCapability(cap);