diff --git a/recipes-qt/qt5/qtwayland.inc b/recipes-qt/qt5/qtwayland.inc new file mode 100644 index 0000000000..32fb08e96f --- /dev/null +++ b/recipes-qt/qt5/qtwayland.inc @@ -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/recipes-qt/qt5/qtwayland/0001-xcbcommon-should-not-be-a-mandatory-dependency.patch b/recipes-qt/qt5/qtwayland/0001-xcbcommon-should-not-be-a-mandatory-dependency.patch new file mode 100644 index 0000000000..e9e705cde6 --- /dev/null +++ b/recipes-qt/qt5/qtwayland/0001-xcbcommon-should-not-be-a-mandatory-dependency.patch @@ -0,0 +1,41 @@ +From c8417a2b0b66c26eaa0569c19422f87598e29629 Mon Sep 17 00:00:00 2001 +From: Mikko Levonmaa +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 +--- + 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/recipes-qt/qt5/qtwayland/0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch b/recipes-qt/qt5/qtwayland/0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch new file mode 100644 index 0000000000..0c9bbbe753 --- /dev/null +++ b/recipes-qt/qt5/qtwayland/0002-Temporarily-patching-this-out-as-Qt5.0.0-does-not-ha.patch @@ -0,0 +1,33 @@ +From ae72fc41609c15293b1027ca3f2c4d712e4ae478 Mon Sep 17 00:00:00 2001 +From: Mikko Levonmaa +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 +--- + 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/recipes-qt/qt5/qtwayland/0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch b/recipes-qt/qt5/qtwayland/0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch new file mode 100644 index 0000000000..48eb870bcb --- /dev/null +++ b/recipes-qt/qt5/qtwayland/0003-eglCreateImageKHR-requires-the-context-to-be-NULL.patch @@ -0,0 +1,71 @@ +From ca1f46a6192061e254deca1810d25ba423acb8de Mon Sep 17 00:00:00 2001 +From: Mikko Levonmaa +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 +--- + .../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(eglGetProcAddress("eglBindWaylandDisplayWL")); + d->egl_unbind_wayland_display = +@@ -137,7 +132,6 @@ void WaylandEglIntegration::initializeHardware(QtWayland::Display *waylandDispla + reinterpret_cast(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/recipes-qt/qt5/qtwayland/0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch b/recipes-qt/qt5/qtwayland/0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch new file mode 100644 index 0000000000..47ea65fde5 --- /dev/null +++ b/recipes-qt/qt5/qtwayland/0004-EGL-Specify-vec2d-precision-qualifier-in-fragment-sh.patch @@ -0,0 +1,31 @@ +From 5c70644070803b665f64c2d3212b55a4a3270765 Mon Sep 17 00:00:00 2001 +From: Daniel Stone +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 +Signed-off-by: Martin Jansa +--- + 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/recipes-qt/qt5/qtwayland_git.bb b/recipes-qt/qt5/qtwayland_git.bb new file mode 100644 index 0000000000..40e386bc8d --- /dev/null +++ b/recipes-qt/qt5/qtwayland_git.bb @@ -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"