qtwayland: Add recipe
authorMikko Levonmaa <mikko.levonmaa@palm.com>
Wed, 6 Mar 2013 20:31:29 +0000 (12:31 -0800)
committerPatrick Ohly <patrick.ohly@intel.com>
Fri, 9 Jan 2015 16:44:12 +0000 (08:44 -0800)
* Fix shader precision definition
* MJ: Fix license information
* MJ: Fix PV
* MJ: add wayland-native to depends for wayland-scaner
* MJ: add libxkbcommon to depends, but make it easy to remove it

(From meta-qt5 rev: fc0b7ec73ce6aa470b6666ad115f3d0e8b83a340)

Signed-off-by: Mikko Levonmaa <mikko.levonmaa@palm.com>
Signed-off-by: Martin Jansa <martin.jansa@lge.com>
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
meta-qt5/recipes-qt/qt5/qtwayland.inc [new file with mode: 0644]
meta-qt5/recipes-qt/qt5/qtwayland/0001-xcbcommon-should-not-be-a-mandatory-dependency.patch [new file with mode: 0644]
meta-qt5/recipes-qt/qt5/qtwayland/0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch [new file with mode: 0644]
meta-qt5/recipes-qt/qt5/qtwayland/0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch [new file with mode: 0644]
meta-qt5/recipes-qt/qt5/qtwayland/0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch [new file with mode: 0644]
meta-qt5/recipes-qt/qt5/qtwayland_git.bb [new file with mode: 0644]

diff --git a/meta-qt5/recipes-qt/qt5/qtwayland.inc b/meta-qt5/recipes-qt/qt5/qtwayland.inc
new file mode 100644 (file)
index 0000000..32fb08e
--- /dev/null
@@ -0,0 +1,29 @@
+require qt5module.inc
+
+LICENSE = "BSD & LGPL-2.1 | GPL-3.0"
+LIC_FILES_CHKSUM = "file://${S}/src/compositor/compositor_api/qwaylandsurfacenode.cpp;endline=40;md5=e38eccd7e9a6a149c9e31b6fb47daac1 \
+                    file://${S}/src/compositor/compositor_api/qwaylandcompositor.cpp;endline=39;md5=8897abe415f27031e4237f09db7b9a36 \
+"
+
+# wayland-native is already in wayland DEPENDS, but add it here
+# explicitly, because it's native wayland-scanner we're looking for
+# libxkbcommon isn't mandatory with 0001-xcbcommon-should-not-be-a-mandatory-dependency.patch
+# make it easier to remove by .bbappend (e.g. for building qtwayland with danny which doesn't
+# have libxkbcommon in oe-core).
+XKB_DEPENDS = "libxkbcommon"
+DEPENDS += "qtdeclarative wayland wayland-native ${XKB_DEPENDS}"
+
+INC_PR = "r1"
+
+SRC_URI += " \
+    file://0001-xcbcommon-should-not-be-a-mandatory-dependency.patch \
+    file://0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch \
+    file://0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch \
+    file://0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch \
+"
+
+QT_WAYLAND_CONFIG ?= "wayland-compositor"
+QT_WAYLAND_DEFINES ?= ""
+
+EXTRA_QMAKEVARS_PRE += "CONFIG+=${QT_WAYLAND_CONFIG}"
+EXTRA_QMAKEVARS_PRE += "DEFINES+=${QT_WAYLAND_DEFINES}"
diff --git a/meta-qt5/recipes-qt/qt5/qtwayland/0001-xcbcommon-should-not-be-a-mandatory-dependency.patch b/meta-qt5/recipes-qt/qt5/qtwayland/0001-xcbcommon-should-not-be-a-mandatory-dependency.patch
new file mode 100644 (file)
index 0000000..e9e705c
--- /dev/null
@@ -0,0 +1,41 @@
+From c8417a2b0b66c26eaa0569c19422f87598e29629 Mon Sep 17 00:00:00 2001
+From: Mikko Levonmaa <mikko.levonmaa@palm.com>
+Date: Tue, 19 Feb 2013 11:16:05 -0800
+Subject: [PATCH 1/4] xcbcommon should not be a mandatory dependency
+
+Not all platforms that use qtwayland depend on xcbcommon to be present
+for them to be functional
+
+Change-Id: I899d9314bdf772a9d5b8b7c143636f9f12c8ad1d
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ qtwayland.pro | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/qtwayland.pro b/qtwayland.pro
+index ee0e5ac..f1a6b6f 100644
+--- a/qtwayland.pro
++++ b/qtwayland.pro
+@@ -11,15 +11,15 @@ qtCompileTest(xcomposite)
+ load(qt_parts)
+ !config_wayland {
+-    error(QtWayland requires Wayland 1.0.0 or higher)
++    error("QtWayland requires Wayland 1.0.0 or higher")
+ }
+ !config_xkbcommon {
+-    error(QtWayland requires xkbcommon 0.2.0 or higher)
++    warning("No xkbcommon 0.2.0 or higher found, disabling support for it")
+ }
+ !config_wayland_scanner {
+-    error(QtWayland requires wayland-scanner)
++    error("QtWayland requires wayland-scanner")
+ }
+ !config_wayland_egl {
+-- 
+1.8.2.1
+
diff --git a/meta-qt5/recipes-qt/qt5/qtwayland/0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch b/meta-qt5/recipes-qt/qt5/qtwayland/0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch
new file mode 100644 (file)
index 0000000..0c9bbbe
--- /dev/null
@@ -0,0 +1,33 @@
+From ae72fc41609c15293b1027ca3f2c4d712e4ae478 Mon Sep 17 00:00:00 2001
+From: Mikko Levonmaa <mikko.levonmaa@palm.com>
+Date: Fri, 1 Mar 2013 13:00:53 -0800
+Subject: [PATCH 2/4] Temporarily patching this out as Qt5.0.0 does not have
+ qtHaveModule
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ src/compositor/compositor_api/compositor_api.pri | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/compositor/compositor_api/compositor_api.pri b/src/compositor/compositor_api/compositor_api.pri
+index f0bbe76..e7905e5 100644
+--- a/src/compositor/compositor_api/compositor_api.pri
++++ b/src/compositor/compositor_api/compositor_api.pri
+@@ -12,7 +12,7 @@ SOURCES += \
+ QT += core-private
+-qtHaveModule(quick) {
++#qtHaveModule(quick) {
+     SOURCES += \
+         compositor_api/qwaylandsurfaceitem.cpp \
+         compositor_api/qwaylandsurfacenode.cpp \
+@@ -27,4 +27,4 @@ qtHaveModule(quick) {
+     QT += qml quick
+     QT += quick-private gui-private
+-}
++#}
+-- 
+1.8.2.1
+
diff --git a/meta-qt5/recipes-qt/qt5/qtwayland/0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch b/meta-qt5/recipes-qt/qt5/qtwayland/0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch
new file mode 100644 (file)
index 0000000..48eb870
--- /dev/null
@@ -0,0 +1,71 @@
+From ca1f46a6192061e254deca1810d25ba423acb8de Mon Sep 17 00:00:00 2001
+From: Mikko Levonmaa <mikko.levonmaa@palm.com>
+Date: Wed, 6 Mar 2013 10:18:49 -0800
+Subject: [PATCH 3/4] eglCreateImageKHR requires the context to be NULL
+
+As per the EGL spec the context passed to that function should
+be null.
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ .../wayland-egl/waylandeglintegration.cpp                | 16 ++--------------
+ 1 file changed, 2 insertions(+), 14 deletions(-)
+
+diff --git a/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp b/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp
+index 2a923ce..2be1e4c 100644
+--- a/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp
++++ b/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp
+@@ -101,7 +101,6 @@ public:
+     PFNGLEGLIMAGETARGETTEXTURE2DOESPROC gl_egl_image_target_texture_2d;
+-    QPlatformNativeInterface::NativeResourceForContextFunction get_egl_context;
+ };
+ WaylandEglIntegration::WaylandEglIntegration()
+@@ -121,10 +120,6 @@ void WaylandEglIntegration::initializeHardware(QtWayland::Display *waylandDispla
+             const char *extensionString = eglQueryString(d->egl_display, EGL_EXTENSIONS);
+             if (extensionString && strstr(extensionString, "EGL_WL_bind_wayland_display"))
+             {
+-                d->get_egl_context = nativeInterface->nativeResourceFunctionForContext("get_egl_context");
+-                if (!d->get_egl_context) {
+-                    qWarning("Failed to retrieve the get_egl_context function");
+-                }
+                 d->egl_bind_wayland_display =
+                         reinterpret_cast<PFNEGLBINDWAYLANDDISPLAYWL>(eglGetProcAddress("eglBindWaylandDisplayWL"));
+                 d->egl_unbind_wayland_display =
+@@ -137,7 +132,6 @@ void WaylandEglIntegration::initializeHardware(QtWayland::Display *waylandDispla
+                         reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(eglGetProcAddress("glEGLImageTargetTexture2DOES"));
+                 if (d->egl_bind_wayland_display
+-                        && d->get_egl_context
+                         && d->egl_unbind_wayland_display
+                         && d->egl_create_image
+                         && d->egl_destroy_image
+@@ -162,10 +156,7 @@ GLuint WaylandEglIntegration::createTextureFromBuffer(wl_buffer *buffer, QOpenGL
+         return 0;
+     }
+-    QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
+-    EGLContext egl_context = d->get_egl_context(context);
+-
+-    EGLImageKHR image = d->egl_create_image(d->egl_display, egl_context,
++    EGLImageKHR image = d->egl_create_image(d->egl_display, NULL,
+                                           EGL_WAYLAND_BUFFER_WL,
+                                           buffer, NULL);
+@@ -229,10 +220,7 @@ void *WaylandEglIntegration::lockNativeBuffer(struct wl_buffer *buffer, QOpenGLC
+ {
+     Q_D(const WaylandEglIntegration);
+-    QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
+-    EGLContext egl_context = d->get_egl_context(context);
+-
+-    EGLImageKHR image = d->egl_create_image(d->egl_display, egl_context,
++    EGLImageKHR image = d->egl_create_image(d->egl_display, NULL,
+                                           EGL_WAYLAND_BUFFER_WL,
+                                           buffer, NULL);
+     return image;
+-- 
+1.8.2.1
+
diff --git a/meta-qt5/recipes-qt/qt5/qtwayland/0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch b/meta-qt5/recipes-qt/qt5/qtwayland/0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch
new file mode 100644 (file)
index 0000000..47ea65f
--- /dev/null
@@ -0,0 +1,31 @@
+From 5c70644070803b665f64c2d3212b55a4a3270765 Mon Sep 17 00:00:00 2001
+From: Daniel Stone <daniel@fooishbar.org>
+Date: Sun, 10 Mar 2013 11:29:38 -0700
+Subject: [PATCH 4/4] EGL: Specify vec2d precision qualifier in fragment shader
+
+GLSL does not specify a default precision qualifier here, so we have to
+explicitly define it.  Use highp, as it gets redefined to mediump by
+QGLShaderProgram when not available.
+
+Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp b/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp
+index 4d8017d..a0ac6d9 100644
+--- a/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp
++++ b/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp
+@@ -124,7 +124,7 @@ void QWaylandGLContext::swapBuffers(QPlatformSurface *surface)
+                                                                             gl_Position = position;\n\
+                                                                             outTexCoords = texCoords.xy;\n\
+                                                                         }");
+-            m_blitProgram->addShaderFromSourceCode(QOpenGLShader::Fragment, "varying vec2 outTexCoords;\n\
++            m_blitProgram->addShaderFromSourceCode(QOpenGLShader::Fragment, "varying highp vec2 outTexCoords;\n\
+                                                                             uniform sampler2D texture;\n\
+                                                                             void main()\n\
+                                                                             {\n\
+-- 
+1.8.2.1
+
diff --git a/meta-qt5/recipes-qt/qt5/qtwayland_git.bb b/meta-qt5/recipes-qt/qt5/qtwayland_git.bb
new file mode 100644 (file)
index 0000000..40e386b
--- /dev/null
@@ -0,0 +1,9 @@
+require ${PN}.inc
+require qt5-git.inc
+
+# qtwayland wasn't released yet, last tag before this SRCREV is 5.0.0-beta1
+PV = "4.999+5.0.0-beta1+git${SRCPV}"
+
+PR = "${INC_PR}.1"
+
+SRCREV = "5cb159395eccb1d96fb73a78e499eef30aacb46d"