[meta-freescale] [PATCH v4 7/8] weston: Switch to 2.0 with i.MX fork
Tom Hochstein
tom.hochstein at nxp.com
Thu Dec 7 09:31:01 PST 2017
EGL support was removed from the fbdev compositor in Weston 2.0. Add
it back via an i.MX fork.
This has been verified with imx-gpu-viv v6 only.
Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
---
conf/machine/include/imx-base.inc | 6 +-
...-configuration-option-for-no-input-device.patch | 112 --
...2-ccc-Add-GPU-VIV-support-for-weston-1.11.patch | 135 --
...1-configure.ac-Fix-wayland-protocols-path.patch | 2 +-
.../wayland/weston/0001-make-error-portable.patch | 12 +-
.../0001-shared-include-stdint.h-for-int32_t.patch | 23 -
...ch-Provide-a-default-version-that-doesn-t.patch | 52 +-
...1-ccc-Enable-g2d-renderer-for-weston-1.11.patch | 1605 --------------------
...ld-Add-clone-mode-support-for-multi-displ.patch | 104 --
...68-xwld-System-can-not-boot-up-to-desktop.patch | 44 -
...ld-G2D-compositor-build-failed-in-slevk-b.patch | 146 --
.../weston/0006-Link-compositor-to-egl.patch | 12 -
...d-Fix-crash-when-run-with-no-input-device.patch | 47 -
recipes-graphics/wayland/weston_1.11.1.bb | 113 --
recipes-graphics/wayland/weston_1.11.1.bbappend | 46 -
recipes-graphics/wayland/weston_2.0.0.bb | 113 ++
recipes-graphics/wayland/weston_2.0.0.bbappend | 35 +
17 files changed, 187 insertions(+), 2420 deletions(-)
delete mode 100644 recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch
delete mode 100644 recipes-graphics/wayland/weston/0001-MGS-2352-ccc-Add-GPU-VIV-support-for-weston-1.11.patch
delete mode 100644 recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch
delete mode 100644 recipes-graphics/wayland/weston/0002-MGS-2521-ccc-Enable-g2d-renderer-for-weston-1.11.patch
delete mode 100644 recipes-graphics/wayland/weston/0003-MGS-1783-xwld-Add-clone-mode-support-for-multi-displ.patch
delete mode 100644 recipes-graphics/wayland/weston/0004-MGS-1668-xwld-System-can-not-boot-up-to-desktop.patch
delete mode 100644 recipes-graphics/wayland/weston/0005-MGS-1724-xwld-G2D-compositor-build-failed-in-slevk-b.patch
delete mode 100644 recipes-graphics/wayland/weston/0006-Link-compositor-to-egl.patch
delete mode 100644 recipes-graphics/wayland/weston/0007-xwayland-Fix-crash-when-run-with-no-input-device.patch
delete mode 100644 recipes-graphics/wayland/weston_1.11.1.bb
delete mode 100644 recipes-graphics/wayland/weston_1.11.1.bbappend
create mode 100644 recipes-graphics/wayland/weston_2.0.0.bb
create mode 100644 recipes-graphics/wayland/weston_2.0.0.bbappend
diff --git a/conf/machine/include/imx-base.inc b/conf/machine/include/imx-base.inc
index 1dbe148..2d89bdb 100644
--- a/conf/machine/include/imx-base.inc
+++ b/conf/machine/include/imx-base.inc
@@ -218,6 +218,8 @@ PREFERRED_PROVIDER_virtual/libg2d_mx6ul = ""
PREFERRED_PROVIDER_virtual/libg2d_mx6ull = ""
PREFERRED_PROVIDER_virtual/libg2d_mx7ulp ?= "imx-gpu-viv"
+PREFERRED_VERSION_weston_imxgpu2d = "2.0.0"
+
# Handle default kernel
IMX_DEFAULT_KERNEL = "linux-imx"
IMX_DEFAULT_KERNEL_mxs = "linux-fslc"
@@ -263,9 +265,5 @@ KERNEL_IMAGETYPE = "zImage"
MACHINE_FEATURES = "usbgadget usbhost vfat alsa touchscreen"
-# Use weston 1.11.1 for mx6 and mx7 machines
-PREFERRED_VERSION_weston_mx6 = "1.11.1"
-PREFERRED_VERSION_weston_mx7 = "1.11.1"
-
# Add the ability to specify _imx machines
MACHINEOVERRIDES =. "imx:"
diff --git a/recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch b/recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch
deleted file mode 100644
index c45f3ad..0000000
--- a/recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 75b7197f4e072a4e2de124ddbe93b85cffb1c0f8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Daniel=20D=C3=ADaz?= <daniel.diaz at linaro.org>
-Date: Fri, 21 Oct 2016 14:03:13 -0500
-Subject: [PATCH] Add configuration option for no input device.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-As it has been discussed in the past [1], running Weston
-without any input device at launch might be beneficial for
-some use cases.
-
-Certainly, it's best for the vast majority of users (and
-the project) to require an input device to be present, as
-to avoid frustration and hassle, but for those brave souls
-that so prefer, this patch lets them run without any input
-device at all.
-
-This introduces a simple configuration in weston.ini:
- [core]
- require-input=true
-
-True is the default, so no behavioral change is introduced.
-
-[1] https://lists.freedesktop.org/archives/wayland-devel/2015-November/025193.html
-
-Signed-off-by: Daniel Díaz <daniel.diaz at linaro.org>
-Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
-Reviewed-by: Daniel Stone <daniels at collabora.com>
-
-Upstream-Status: backport from
-https://cgit.freedesktop.org/wayland/weston/commit/?id=75b7197f
----
- man/weston.ini.man | 5 +++++
- src/compositor.h | 3 +++
- src/libinput-seat.c | 6 ++++++
- src/main.c | 5 +++++
- weston.ini.in | 1 +
- 5 files changed, 20 insertions(+)
-
---- a/src/main.c
-+++ b/src/main.c
-@@ -1298,6 +1298,7 @@ int main(int argc, char *argv[])
- struct wl_client *primary_client;
- struct wl_listener primary_client_destroyed;
- struct weston_seat *seat;
-+ int require_input;
-
- const struct weston_option core_options[] = {
- { WESTON_OPTION_STRING, "backend", 'B', &backend },
-@@ -1373,6 +1374,10 @@ int main(int argc, char *argv[])
- if (weston_compositor_init_config(ec, config) < 0)
- goto out;
-
-+ weston_config_section_get_bool(section, "require-input",
-+ &require_input, true);
-+ ec->require_input = require_input;
-+
- if (load_backend(ec, backend, &argc, argv, config) < 0) {
- weston_log("fatal: failed to create compositor backend\n");
- goto out;
---- a/src/compositor.h
-+++ b/src/compositor.h
-@@ -803,6 +803,9 @@ struct weston_compositor {
-
- void *user_data;
- void (*exit)(struct weston_compositor *c);
-+
-+ /* Whether to let the compositor run without any input device. */
-+ bool require_input;
- };
-
- struct weston_buffer {
---- a/src/libinput-seat.c
-+++ b/src/libinput-seat.c
-@@ -255,6 +255,12 @@ udev_input_enable(struct udev_input *inp
- devices_found = 1;
- }
-
-+ if (devices_found == 0 && !c->require_input) {
-+ weston_log("warning: no input devices found, but none required "
-+ "as per configuration.\n");
-+ return 0;
-+ }
-+
- if (devices_found == 0) {
- weston_log(
- "warning: no input devices on entering Weston. "
---- a/man/weston.ini.man
-+++ b/man/weston.ini.man
-@@ -169,6 +169,11 @@ time, the one specified in the command-l
- hand, if none of these sets the value, default idle timeout will be
- set to 300 seconds.
- .RS
-+.PP
-+.RE
-+.TP 7
-+.BI "require-input=" true
-+require an input device for launch
-
- .SH "LIBINPUT SECTION"
- The
---- a/weston.ini.in
-+++ b/weston.ini.in
-@@ -2,6 +2,7 @@
- #modules=xwayland.so,cms-colord.so
- #shell=desktop-shell.so
- #gbm-format=xrgb2101010
-+#require-input=true
-
- [shell]
- background-image=/usr/share/backgrounds/gnome/Aqua.jpg
diff --git a/recipes-graphics/wayland/weston/0001-MGS-2352-ccc-Add-GPU-VIV-support-for-weston-1.11.patch b/recipes-graphics/wayland/weston/0001-MGS-2352-ccc-Add-GPU-VIV-support-for-weston-1.11.patch
deleted file mode 100644
index 37a2d4c..0000000
--- a/recipes-graphics/wayland/weston/0001-MGS-2352-ccc-Add-GPU-VIV-support-for-weston-1.11.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From dfad4d734412e4ec53bfff29c7c503479857f66c Mon Sep 17 00:00:00 2001
-From: Meng Mingming <mingming.meng at nxp.com>
-Date: Mon, 9 Jan 2017 15:04:27 +0800
-Subject: [PATCH 1/5] MGS-2352 [#ccc] Add GPU-VIV support for weston 1.11
-
-Add GPU-VIV support for weston 1.11
-
-Upstream Status: Inappropriate [i.MX specific]
-
-Date: Jan 09, 2017
-Signed-off-by: Meng Mingming <mingming.meng at nxp.com>
----
- src/compositor-fbdev.c | 37 ++++++++++++++++++++++++++++---------
- 1 file changed, 28 insertions(+), 9 deletions(-)
-
-diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
-index ee762e3..06f4696 100644
---- a/src/compositor-fbdev.c
-+++ b/src/compositor-fbdev.c
-@@ -61,6 +61,7 @@ struct fbdev_backend {
- int use_pixman;
- uint32_t output_transform;
- struct wl_listener session_listener;
-+ NativeDisplayType display;
- };
-
- struct fbdev_screeninfo {
-@@ -93,6 +94,9 @@ struct fbdev_output {
- /* pixman details. */
- pixman_image_t *hw_surface;
- uint8_t depth;
-+
-+ NativeDisplayType display;
-+ NativeWindowType window;
- };
-
- struct gl_renderer_interface *gl_renderer;
-@@ -443,6 +447,10 @@ fbdev_frame_buffer_destroy(struct fbdev_output *output)
- strerror(errno));
-
- output->fb = NULL;
-+ if(output->window)
-+ fbDestroyWindow(output->window);
-+ if(output->display)
-+ fbDestroyDisplay(output->display);
- }
-
- static void fbdev_output_destroy(struct weston_output *base);
-@@ -450,13 +458,13 @@ static void fbdev_output_disable(struct weston_output *base);
-
- static int
- fbdev_output_create(struct fbdev_backend *backend,
-- const char *device)
-+ int x, int y, const char *device)
- {
- struct fbdev_output *output;
- int fb_fd;
- struct wl_event_loop *loop;
-
-- weston_log("Creating fbdev output.\n");
-+ weston_log("Creating fbdev output. %s x=%d y=%d\n", device, x, y);
-
- output = zalloc(sizeof *output);
- if (output == NULL)
-@@ -500,7 +508,7 @@ fbdev_output_create(struct fbdev_backend *backend,
- output->base.name = strdup("fbdev");
-
- weston_output_init(&output->base, backend->compositor,
-- 0, 0, output->fb_info.width_mm,
-+ x, y, output->fb_info.width_mm,
- output->fb_info.height_mm,
- backend->output_transform,
- 1);
-@@ -510,8 +518,13 @@ fbdev_output_create(struct fbdev_backend *backend,
- goto out_hw_surface;
- } else {
- setenv("HYBRIS_EGLPLATFORM", "wayland", 1);
-+ output->window = fbCreateWindow(backend->display, -1, -1, 0, 0);
-+ if (output->window == NULL) {
-+ fprintf(stderr, "failed to create window\n");
-+ return 0;
-+ }
- if (gl_renderer->output_create(&output->base,
-- (EGLNativeWindowType)NULL, NULL,
-+ (EGLNativeWindowType)output->window, NULL,
- gl_renderer->opaque_attribs,
- NULL, 0) < 0) {
- weston_log("gl_renderer_output_create failed.\n");
-@@ -622,7 +635,7 @@ fbdev_output_reenable(struct fbdev_backend *backend,
- * are re-initialised. */
- device = strdup(output->device);
- fbdev_output_destroy(&output->base);
-- fbdev_output_create(backend, device);
-+ fbdev_output_create(backend, 0, 0, device);
- free(device);
-
- return 0;
-@@ -785,17 +798,21 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- goto out_launcher;
- }
-
-+ backend->display = fbGetDisplay(backend->compositor->wl_display);
-+ if (backend->display == NULL) {
-+ weston_log("fbGetDisplay failed.\n");
-+ goto out_launcher;
-+ }
- if (gl_renderer->create(compositor, NO_EGL_PLATFORM,
-- EGL_DEFAULT_DISPLAY,
-+ backend->display,
- gl_renderer->opaque_attribs,
- NULL, 0) < 0) {
- weston_log("gl_renderer_create failed.\n");
- goto out_launcher;
- }
- }
--
-- if (fbdev_output_create(backend, param->device) < 0)
-- goto out_launcher;
-+ if (fbdev_output_create(backend, 0, 0, param->device) < 0)
-+ goto out_launcher;
-
- udev_input_init(&backend->input, compositor, backend->udev, seat_id);
-
-@@ -844,6 +861,8 @@ backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
- config_init_to_defaults(&config);
- memcpy(&config, config_base, config_base->struct_size);
-
-+ config.use_gl = 1;
-+
- b = fbdev_backend_create(compositor, argc, argv, wc, &config);
- if (b == NULL)
- return -1;
---
-2.7.4
-
diff --git a/recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch b/recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch
index edd3b91..5f4d79c 100644
--- a/recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch
+++ b/recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch
@@ -21,7 +21,7 @@ Upstream-Status: Inappropriate [embedded specific]
@@ -187,7 +187,7 @@ PKG_CHECK_MODULES(LIBINPUT_BACKEND, [lib
PKG_CHECK_MODULES(COMPOSITOR, [$COMPOSITOR_MODULES])
- PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.2],
+ PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.7],
- [ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
+ [ac_wayland_protocols_pkgdatadir=${WAYLAND_PROTOCOLS_SYSROOT_DIR}`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir)
diff --git a/recipes-graphics/wayland/weston/0001-make-error-portable.patch b/recipes-graphics/wayland/weston/0001-make-error-portable.patch
index f7b5284..e2213ac 100644
--- a/recipes-graphics/wayland/weston/0001-make-error-portable.patch
+++ b/recipes-graphics/wayland/weston/0001-make-error-portable.patch
@@ -10,9 +10,9 @@ Signed-off-by: Khem Raj <raj.khem at gmail.com>
---
Upstream-Status: Submitted
- configure.ac | 2 ++
- src/weston-error.h | 20 ++++++++++++++++++++
- src/weston-launch.c | 2 +-
+ configure.ac | 2 ++
+ libweston/weston-error.h | 20 ++++++++++++++++++++
+ libweston/weston-launch.c | 2 +-
3 files changed, 23 insertions(+), 1 deletion(-)
create mode 100644 src/weston-error.h
@@ -28,7 +28,7 @@ Upstream-Status: Submitted
COMPOSITOR_MODULES="wayland-server >= $WAYLAND_PREREQ_VERSION pixman-1 >= 0.25.2"
--- /dev/null
-+++ b/src/weston-error.h
++++ b/libweston/weston-error.h
@@ -0,0 +1,20 @@
+#ifndef _WESTON_ERROR_H
+#define _WESTON_ERROR_H
@@ -50,8 +50,8 @@ Upstream-Status: Submitted
+
+#endif
+
---- a/src/weston-launch.c
-+++ b/src/weston-launch.c
+--- a/libweston/weston-launch.c
++++ b/libweston/weston-launch.c
@@ -33,7 +33,6 @@
#include <poll.h>
#include <errno.h>
diff --git a/recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch b/recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch
deleted file mode 100644
index ee66c20..0000000
--- a/recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From ba02b8abe4e2afac2bfbf2559972d5059d75a041 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen at intel.com>
-Date: Sat, 16 Jul 2016 22:50:19 +0300
-Subject: [PATCH weston] shared: include stdint.h for int32_t
-
-This fixes build on musl.
-
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen at intel.com>
-Upstream-Status: Submitted
----
- shared/xalloc.h | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/shared/xalloc.h
-+++ b/shared/xalloc.h
-@@ -30,6 +30,7 @@
- extern "C" {
- #endif
-
-+#include <stdint.h>
- #include <stdlib.h>
- #include <string.h>
-
diff --git a/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch b/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
index d684b1c..70b9888 100644
--- a/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
+++ b/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
@@ -1,6 +1,6 @@
-From d02226b3d5872b184c1d50c7f4706ac9467ffb81 Mon Sep 17 00:00:00 2001
+From 8ff6ed03ec4079f32e9b34085414e57be4730e04 Mon Sep 17 00:00:00 2001
From: Tom Hochstein <tom.hochstein at nxp.com>
-Date: Fri, 15 Jul 2016 11:00:15 +0300
+Date: Wed, 22 Feb 2017 15:53:30 +0200
Subject: [PATCH] weston-launch: Provide a default version that doesn't require
PAM
@@ -13,14 +13,17 @@ without non-root-user support.
Upstream-Status: Pending
Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
+Signed-off-by: Jussi Kukkonen <jussi.kukkonen at intel.com>
---
- configure.ac | 9 +++++++--
- src/weston-launch.c | 20 ++++++++++++++++++++
+ configure.ac | 9 +++++++--
+ libweston/weston-launch.c | 20 ++++++++++++++++++++
2 files changed, 27 insertions(+), 2 deletions(-)
+diff --git a/configure.ac b/configure.ac
+index 46cb2c7..bb45f46 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -416,13 +416,17 @@ AC_ARG_ENABLE(resize-optimization,
+@@ -435,13 +435,17 @@ AC_ARG_ENABLE(resize-optimization,
AS_IF([test "x$enable_resize_optimization" = "xyes"],
[AC_DEFINE([USE_RESIZE_POOL], [1], [Use resize memory pool as a performance optimization])])
@@ -28,11 +31,11 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
+ AS_HELP_STRING([--with-pam], [Use PAM]),
+ [use_pam=$withval], [use_pam=yes])
AC_ARG_ENABLE(weston-launch, [ --enable-weston-launch],, enable_weston_launch=yes)
- AM_CONDITIONAL(BUILD_WESTON_LAUNCH, test x$enable_weston_launch == xyes)
--if test x$enable_weston_launch == xyes; then
+ AM_CONDITIONAL(BUILD_WESTON_LAUNCH, test x$enable_weston_launch = xyes)
+-if test x$enable_weston_launch = xyes; then
+if test x$enable_weston_launch = xyes -a x$use_pam = xyes; then
WESTON_SEARCH_LIBS([PAM], [pam], [pam_open_session], [have_pam=yes], [have_pam=no])
- if test x$have_pam == xno; then
+ if test x$have_pam = xno; then
- AC_ERROR([weston-launch requires pam])
+ AC_ERROR([PAM support is explicitly requested, but libpam couldn't be found])
fi
@@ -40,7 +43,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
fi
AM_CONDITIONAL(HAVE_PANGO, test "x$have_pango" = "xyes")
-@@ -673,6 +677,7 @@ AC_MSG_RESULT([
+@@ -701,6 +705,7 @@ AC_MSG_RESULT([
Enable developer documentation ${enable_devdocs}
weston-launch utility ${enable_weston_launch}
@@ -48,8 +51,10 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
systemd-login support ${have_systemd_login}
systemd notify support ${enable_systemd_notify}
---- a/src/weston-launch.c
-+++ b/src/weston-launch.c
+diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c
+index 0491896..07e7469 100644
+--- a/libweston/weston-launch.c
++++ b/libweston/weston-launch.c
@@ -51,7 +51,9 @@
#include <pwd.h>
@@ -71,7 +76,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
int tty;
int ttynr;
int sock[2];
-@@ -181,6 +185,7 @@ weston_launch_allowed(struct weston_laun
+@@ -181,6 +185,7 @@ weston_launch_allowed(struct weston_launch *wl)
return false;
}
@@ -87,7 +92,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
static int
setup_launcher_socket(struct weston_launch *wl)
-@@ -414,6 +420,7 @@ quit(struct weston_launch *wl, int statu
+@@ -414,6 +420,7 @@ quit(struct weston_launch *wl, int status)
close(wl->signalfd);
close(wl->sock[0]);
@@ -95,7 +100,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
if (wl->new_user) {
err = pam_close_session(wl->ph, 0);
if (err)
-@@ -421,6 +428,7 @@ quit(struct weston_launch *wl, int statu
+@@ -421,6 +428,7 @@ quit(struct weston_launch *wl, int status)
err, pam_strerror(wl->ph, err));
pam_end(wl->ph, err);
}
@@ -103,7 +108,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
if (ioctl(wl->tty, KDSKBMUTE, 0) &&
ioctl(wl->tty, KDSKBMODE, wl->kb_mode))
-@@ -600,6 +608,7 @@ setup_session(struct weston_launch *wl)
+@@ -600,6 +608,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
setenv("HOME", wl->pw->pw_dir, 1);
setenv("SHELL", wl->pw->pw_shell, 1);
@@ -111,15 +116,15 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
env = pam_getenvlist(wl->ph);
if (env) {
for (i = 0; env[i]; ++i) {
-@@ -608,6 +617,7 @@ setup_session(struct weston_launch *wl)
+@@ -608,6 +617,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
}
free(env);
}
+#endif
- }
- static void
-@@ -665,7 +675,9 @@ static void
+ /*
+ * We open a new session, so it makes sense
+@@ -675,7 +685,9 @@ static void
help(const char *name)
{
fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
@@ -129,7 +134,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
fprintf(stderr, " -t, --tty Start session on alternative tty\n");
fprintf(stderr, " -v, --verbose Be verbose\n");
fprintf(stderr, " -h, --help Display this help message\n");
-@@ -678,7 +690,9 @@ main(int argc, char *argv[])
+@@ -688,7 +700,9 @@ main(int argc, char *argv[])
int i, c;
char *tty = NULL;
struct option opts[] = {
@@ -139,7 +144,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
{ "tty", required_argument, NULL, 't' },
{ "verbose", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
-@@ -690,9 +704,13 @@ main(int argc, char *argv[])
+@@ -700,9 +714,13 @@ main(int argc, char *argv[])
while ((c = getopt_long(argc, argv, "u:t::vh", opts, &i)) != -1) {
switch (c) {
case 'u':
@@ -153,7 +158,7 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
break;
case 't':
tty = optarg;
-@@ -732,8 +750,10 @@ main(int argc, char *argv[])
+@@ -740,8 +758,10 @@ main(int argc, char *argv[])
if (setup_tty(&wl, tty) < 0)
exit(EXIT_FAILURE);
@@ -164,3 +169,6 @@ Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
if (setup_launcher_socket(&wl) < 0)
exit(EXIT_FAILURE);
+--
+2.1.4
+
diff --git a/recipes-graphics/wayland/weston/0002-MGS-2521-ccc-Enable-g2d-renderer-for-weston-1.11.patch b/recipes-graphics/wayland/weston/0002-MGS-2521-ccc-Enable-g2d-renderer-for-weston-1.11.patch
deleted file mode 100644
index 858cb81..0000000
--- a/recipes-graphics/wayland/weston/0002-MGS-2521-ccc-Enable-g2d-renderer-for-weston-1.11.patch
+++ /dev/null
@@ -1,1605 +0,0 @@
-From 1995ec08267c8063ca72590e700c8612b04a63b5 Mon Sep 17 00:00:00 2001
-From: Meng Mingming <mingming.meng at nxp.com>
-Date: Mon, 16 Jan 2017 10:15:02 +0800
-Subject: [PATCH 2/5] MGS-2521 [#ccc] Enable g2d-renderer for weston 1.11
-
-Enable g2d-renderer for weston 1.11
-weston-start -- --use-g2d=1(--use-gl=1) $OPTARGS
-
-Upstream Status: Inappropriate [i.MX specific]
-
-Date: Jan 16, 2017
-Signed-off-by: Meng Mingming <mingming.meng at nxp.com>
----
- Makefile.am | 16 +
- src/compositor-fbdev.c | 66 ++-
- src/compositor-fbdev.h | 1 +
- src/g2d-renderer.c | 1317 ++++++++++++++++++++++++++++++++++++++++++++++++
- src/g2d-renderer.h | 47 ++
- src/main.c | 6 +-
- 6 files changed, 1448 insertions(+), 5 deletions(-)
- create mode 100644 src/g2d-renderer.c
- create mode 100644 src/g2d-renderer.h
-
-diff --git a/Makefile.am b/Makefile.am
-index 00b74e5..a044b64 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -248,6 +248,22 @@ gl_renderer_la_SOURCES = \
- shared/helpers.h
- endif
-
-+module_LTLIBRARIES += g2d-renderer.la
-+g2d_renderer_la_LDFLAGS = -module -avoid-version
-+g2d_renderer_la_LIBADD = $(COMPOSITOR_LIBS) $(EGL_LIBS) -lg2d
-+g2d_renderer_la_CFLAGS = \
-+ $(COMPOSITOR_CFLAGS) \
-+ $(EGL_CFLAGS) \
-+ $(GCC_CFLAGS) -DHAVE_G2D
-+g2d_renderer_la_SOURCES = \
-+ src/g2d-renderer.h \
-+ src/g2d-renderer.c \
-+ src/vertex-clipping.c \
-+ src/vertex-clipping.h
-+if ENABLE_EGL
-+g2d_renderer_la_CFLAGS += -DENABLE_EGL
-+endif
-+
- if ENABLE_X11_COMPOSITOR
- module_LTLIBRARIES += x11-backend.la
- x11_backend_la_LDFLAGS = -module -avoid-version
-diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
-index 06f4696..cff9513 100644
---- a/src/compositor-fbdev.c
-+++ b/src/compositor-fbdev.c
-@@ -50,6 +50,7 @@
- #include "libinput-seat.h"
- #include "gl-renderer.h"
- #include "presentation-time-server-protocol.h"
-+#include "g2d-renderer.h"
-
- struct fbdev_backend {
- struct weston_backend base;
-@@ -59,6 +60,7 @@ struct fbdev_backend {
- struct udev *udev;
- struct udev_input input;
- int use_pixman;
-+ int use_g2d;
- uint32_t output_transform;
- struct wl_listener session_listener;
- NativeDisplayType display;
-@@ -100,6 +102,7 @@ struct fbdev_output {
- };
-
- struct gl_renderer_interface *gl_renderer;
-+struct g2d_renderer_interface *g2d_renderer;
-
- static const char default_seat[] = "seat0";
-
-@@ -516,6 +519,14 @@ fbdev_output_create(struct fbdev_backend *backend,
- if (backend->use_pixman) {
- if (pixman_renderer_output_create(&output->base) < 0)
- goto out_hw_surface;
-+ } else if(backend->use_g2d) {
-+ const char *g2d_device = device;
-+
-+ if (g2d_renderer->output_create(&output->base,
-+ backend->compositor->wl_display, g2d_device) < 0) {
-+ weston_log("g2d_renderer_output_create failed.\n");
-+ goto out_hw_surface;
-+ }
- } else {
- setenv("HYBRIS_EGLPLATFORM", "wayland", 1);
- output->window = fbCreateWindow(backend->display, -1, -1, 0, 0);
-@@ -571,6 +582,8 @@ fbdev_output_destroy(struct weston_output *base)
- if (backend->use_pixman) {
- if (base->renderer_state != NULL)
- pixman_renderer_output_destroy(base);
-+ } else if(backend->use_g2d) {
-+ g2d_renderer->output_destroy(base);
- } else {
- gl_renderer->output_destroy(base);
- }
-@@ -782,7 +795,8 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- backend->base.restore = fbdev_restore;
-
- backend->prev_state = WESTON_COMPOSITOR_ACTIVE;
-- backend->use_pixman = !param->use_gl;
-+ backend->use_pixman = !(param->use_gl || param->use_g2d);
-+ backend->use_g2d = param->use_g2d;
- backend->output_transform = param->output_transform;
-
- weston_setup_vt_switch_bindings(compositor);
-@@ -790,6 +804,46 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- if (backend->use_pixman) {
- if (pixman_renderer_init(compositor) < 0)
- goto out_launcher;
-+ } else if(backend->use_g2d) {
-+ int x = 0, y = 0;
-+ int i=0;
-+ int count = 0;
-+ int k=0, dispCount = 0;
-+ char displays[5][32];
-+ g2d_renderer = weston_load_module("g2d-renderer.so",
-+ "g2d_renderer_interface");
-+ if (!g2d_renderer) {
-+ weston_log("could not load g2d renderer\n");
-+ goto out_launcher;
-+ }
-+
-+ if (g2d_renderer->create(backend->compositor) < 0) {
-+ weston_log("g2d_renderer_create failed.\n");
-+ goto out_launcher;
-+ }
-+
-+ weston_log("param->device=%s\n",param->device);
-+ count = strlen(param->device);
-+
-+ for(i= 0; i < count; i++) {
-+ if(param->device[i] == ',') {
-+ displays[dispCount][k] = '\0';
-+ dispCount++;
-+ k = 0;
-+ continue;
-+ }
-+ displays[dispCount][k++] = param->device[i];
-+ }
-+ displays[dispCount][k] = '\0';
-+ dispCount++;
-+
-+ for(i= 0; i < dispCount; i++){
-+ if (fbdev_output_create(backend, x, y, displays[i]) < 0)
-+ goto out_launcher;
-+ x += container_of(backend->compositor->output_list.prev,
-+ struct weston_output,
-+ link)->width;
-+ }
- } else {
- gl_renderer = weston_load_module("gl-renderer.so",
- "gl_renderer_interface");
-@@ -811,7 +865,8 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- goto out_launcher;
- }
- }
-- if (fbdev_output_create(backend, 0, 0, param->device) < 0)
-+ if(!backend->use_g2d)
-+ if (fbdev_output_create(backend, 0, 0, param->device) < 0)
- goto out_launcher;
-
- udev_input_init(&backend->input, compositor, backend->udev, seat_id);
-@@ -840,6 +895,7 @@ config_init_to_defaults(struct weston_fbdev_backend_config *config)
- config->tty = 0; /* default to current tty */
- config->device = "/dev/fb0"; /* default frame buffer */
- config->use_gl = 0;
-+ config->use_g2d = 0;
- config->output_transform = WL_OUTPUT_TRANSFORM_NORMAL;
- }
-
-@@ -861,7 +917,11 @@ backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
- config_init_to_defaults(&config);
- memcpy(&config, config_base, config_base->struct_size);
-
-- config.use_gl = 1;
-+ if(config.use_g2d) {
-+ config.use_gl = 0;
-+ } else {
-+ config.use_gl = 1;
-+ }
-
- b = fbdev_backend_create(compositor, argc, argv, wc, &config);
- if (b == NULL)
-diff --git a/src/compositor-fbdev.h b/src/compositor-fbdev.h
-index bd60bdc..32a8598 100644
---- a/src/compositor-fbdev.h
-+++ b/src/compositor-fbdev.h
-@@ -40,6 +40,7 @@ struct weston_fbdev_backend_config {
- int tty;
- char *device;
- int use_gl;
-+ int use_g2d;
-
- uint32_t output_transform;
- };
-diff --git a/src/g2d-renderer.c b/src/g2d-renderer.c
-new file mode 100644
-index 0000000..c30aa62
---- /dev/null
-+++ b/src/g2d-renderer.c
-@@ -0,0 +1,1317 @@
-+/*
-+ * Copyright (c) 2016 Freescale Semiconductor, Inc.
-+ * Copyright © 2012 Intel Corporation
-+ * Copyright © 2015 Collabora, Ltd.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial
-+ * portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-+ * SOFTWARE.
-+ */
-+
-+#define _GNU_SOURCE
-+
-+#include <stdlib.h>
-+#include <string.h>
-+#include <ctype.h>
-+#include <float.h>
-+#include <assert.h>
-+#include <pthread.h>
-+#include <linux/fb.h>
-+#include <sys/ioctl.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <g2dExt.h>
-+#include <HAL/gc_hal_eglplatform.h>
-+
-+#include "compositor.h"
-+#include "g2d-renderer.h"
-+#include "vertex-clipping.h"
-+#include "shared/helpers.h"
-+
-+#define BUFFER_DAMAGE_COUNT 2
-+#define ALIGN_WIDTH(a) (((a) + 15) & ~15)
-+
-+struct wl_viv_buffer
-+{
-+ struct wl_resource *resource;
-+ gcoSURF surface;
-+ gctINT32 width;
-+ gctINT32 height;
-+ gctINT32 format;
-+ gctUINT alignedWidth;
-+ gctUINT alignedHeight;
-+ gctUINT32 physical[3];
-+ gctUINT32 gpuBaseAddr;
-+ gceTILING tiling;
-+};
-+
-+typedef struct _g2dRECT
-+{
-+ int left;
-+ int top;
-+ int right;
-+ int bottom;
-+} g2dRECT;
-+
-+struct fb_screeninfo {
-+ struct fb_var_screeninfo varinfo;
-+ struct fb_fix_screeninfo fixinfo;
-+ unsigned int x_resolution;
-+ unsigned int y_resolution;
-+ size_t buffer_length; /* length of frame buffer memory in bytes */
-+ size_t physical;
-+ size_t stride;
-+ size_t stride_bytes;
-+ enum g2d_format pixel_format; /* frame buffer pixel format */
-+ int fb_fd;
-+};
-+
-+struct g2d_output_state {
-+ int current_buffer;
-+ pixman_region32_t buffer_damage[BUFFER_DAMAGE_COUNT];
-+ struct g2d_surfaceEx *renderSurf;
-+ int nNumBuffers;
-+ int activebuffer;
-+ struct g2d_surfaceEx offscreenSurface;
-+ struct g2d_buf *offscreen_buf;
-+ struct fb_screeninfo fb_info;
-+ struct fb_screeninfo *mirror_fb_info;
-+ struct g2d_surfaceEx *mirrorSurf;
-+ int directBlit;
-+ int clone_display_num;
-+ int width;
-+ int height;
-+};
-+
-+struct g2d_surface_state {
-+ float color[4];
-+ struct weston_buffer_reference buffer_ref;
-+ int pitch; /* in pixels */
-+ int attached;
-+ pixman_region32_t texture_damage;
-+ struct g2d_surfaceEx g2d_surface;
-+ struct g2d_buf *shm_buf;
-+ int shm_buf_length;
-+ int bpp;
-+
-+ struct weston_surface *surface;
-+ struct wl_listener surface_destroy_listener;
-+ struct wl_listener renderer_destroy_listener;
-+};
-+
-+struct g2d_renderer {
-+ struct weston_renderer base;
-+ struct wl_signal destroy_signal;
-+#ifdef ENABLE_EGL
-+ NativeDisplayType display;
-+ EGLDisplay egl_display;
-+ struct wl_display *wl_display;
-+#endif
-+ void *handle;
-+};
-+
-+static int
-+g2d_renderer_create_surface(struct weston_surface *surface);
-+
-+static inline struct g2d_surface_state *
-+get_surface_state(struct weston_surface *surface)
-+{
-+ if (!surface->renderer_state)
-+ g2d_renderer_create_surface(surface);
-+ return (struct g2d_surface_state *)surface->renderer_state;
-+}
-+
-+static inline struct g2d_renderer *
-+get_renderer(struct weston_compositor *ec)
-+{
-+ return (struct g2d_renderer *)ec->renderer;
-+}
-+
-+#define max(a, b) (((a) > (b)) ? (a) : (b))
-+#define min(a, b) (((a) > (b)) ? (b) : (a))
-+/*
-+ * Compute the boundary vertices of the intersection of the global coordinate
-+ * aligned rectangle 'rect', and an arbitrary quadrilateral produced from
-+ * 'surf_rect' when transformed from surface coordinates into global coordinates.
-+ * The vertices are written to 'ex' and 'ey', and the return value is the
-+ * number of vertices. Vertices are produced in clockwise winding order.
-+ * Guarantees to produce either zero vertices, or 3-8 vertices with non-zero
-+ * polygon area.
-+ */
-+static int
-+calculate_edges(struct weston_view *ev, pixman_box32_t *rect,
-+ pixman_box32_t *surf_rect, float *ex, float *ey)
-+{
-+
-+ struct clip_context ctx;
-+ int i, n;
-+ float min_x, max_x, min_y, max_y;
-+ struct polygon8 surf = {
-+ { surf_rect->x1, surf_rect->x2, surf_rect->x2, surf_rect->x1 },
-+ { surf_rect->y1, surf_rect->y1, surf_rect->y2, surf_rect->y2 },
-+ 4
-+ };
-+
-+ ctx.clip.x1 = rect->x1;
-+ ctx.clip.y1 = rect->y1;
-+ ctx.clip.x2 = rect->x2;
-+ ctx.clip.y2 = rect->y2;
-+
-+ /* transform surface to screen space: */
-+ for (i = 0; i < surf.n; i++)
-+ weston_view_to_global_float(ev, surf.x[i], surf.y[i],
-+ &surf.x[i], &surf.y[i]);
-+
-+ /* find bounding box: */
-+ min_x = max_x = surf.x[0];
-+ min_y = max_y = surf.y[0];
-+
-+ for (i = 1; i < surf.n; i++) {
-+ min_x = min(min_x, surf.x[i]);
-+ max_x = max(max_x, surf.x[i]);
-+ min_y = min(min_y, surf.y[i]);
-+ max_y = max(max_y, surf.y[i]);
-+ }
-+
-+ /* First, simple bounding box check to discard early transformed
-+ * surface rects that do not intersect with the clip region:
-+ */
-+ if ((min_x >= ctx.clip.x2) || (max_x <= ctx.clip.x1) ||
-+ (min_y >= ctx.clip.y2) || (max_y <= ctx.clip.y1))
-+ return 0;
-+
-+ /* Simple case, bounding box edges are parallel to surface edges,
-+ * there will be only four edges. We just need to clip the surface
-+ * vertices to the clip rect bounds:
-+ */
-+ if (!ev->transform.enabled)
-+ return clip_simple(&ctx, &surf, ex, ey);
-+
-+ /* Transformed case: use a general polygon clipping algorithm to
-+ * clip the surface rectangle with each side of 'rect'.
-+ * The algorithm is Sutherland-Hodgman, as explained in
-+ * http://www.codeguru.com/cpp/misc/misc/graphics/article.php/c8965/Polygon-Clipping.htm
-+ * but without looking at any of that code.
-+ */
-+ n = clip_transformed(&ctx, &surf, ex, ey);
-+
-+ if (n < 3)
-+ return 0;
-+
-+ return n;
-+}
-+
-+
-+static inline struct g2d_output_state *
-+get_output_state(struct weston_output *output)
-+{
-+ return (struct g2d_output_state *)output->renderer_state;
-+}
-+
-+static void
-+g2d_getG2dTiling(IN gceTILING tiling, enum g2d_tiling* g2dTiling)
-+{
-+ switch(tiling)
-+ {
-+ case gcvLINEAR:
-+ *g2dTiling = G2D_LINEAR;
-+ break;
-+ case gcvTILED:
-+ *g2dTiling = G2D_TILED;
-+ break;
-+ case gcvSUPERTILED:
-+ *g2dTiling = G2D_SUPERTILED;
-+ break;
-+ default:
-+ weston_log("Error in function %s\n", __func__);
-+ break;
-+ }
-+}
-+
-+static void
-+g2d_getG2dFormat(IN gceSURF_FORMAT Format, enum g2d_format* g2dFormat)
-+{
-+ switch(Format)
-+ {
-+ case gcvSURF_R5G6B5:
-+ *g2dFormat = G2D_RGB565;
-+ break;
-+ case gcvSURF_A8B8G8R8:
-+ *g2dFormat = G2D_RGBA8888;
-+ break;
-+ case gcvSURF_X8B8G8R8:
-+ *g2dFormat = G2D_RGBA8888;
-+ break;
-+ case gcvSURF_A8R8G8B8:
-+ *g2dFormat = G2D_BGRA8888;
-+ break;
-+ case gcvSURF_X8R8G8B8:
-+ *g2dFormat = G2D_BGRX8888;
-+ break;
-+ case gcvSURF_B5G6R5:
-+ *g2dFormat = G2D_BGR565;
-+ break;
-+ case gcvSURF_B8G8R8A8:
-+ *g2dFormat = G2D_ARGB8888;
-+ break;
-+ case gcvSURF_R8G8B8A8:
-+ *g2dFormat = G2D_ABGR8888;
-+ break;
-+ case gcvSURF_B8G8R8X8:
-+ *g2dFormat = G2D_XRGB8888;
-+ break;
-+ case gcvSURF_R8G8B8X8:
-+ *g2dFormat = G2D_XBGR8888;
-+ break;
-+ case gcvSURF_NV12:
-+ *g2dFormat = G2D_NV12;
-+ break;
-+ case gcvSURF_NV21:
-+ *g2dFormat = G2D_NV21;
-+ break;
-+ case gcvSURF_I420:
-+ *g2dFormat = G2D_I420;
-+ break;
-+ case gcvSURF_YV12:
-+ *g2dFormat = G2D_YV12;
-+ break;
-+ case gcvSURF_YUY2:
-+ *g2dFormat = G2D_YUYV;
-+ break;
-+ case gcvSURF_YVYU:
-+ *g2dFormat = G2D_YVYU;
-+ break;
-+ case gcvSURF_UYVY:
-+ *g2dFormat = G2D_UYVY;
-+ break;
-+ case gcvSURF_VYUY:
-+ *g2dFormat = G2D_VYUY;
-+ break;
-+ case gcvSURF_NV16:
-+ *g2dFormat = G2D_NV16;
-+ break;
-+ case gcvSURF_NV61:
-+ *g2dFormat = G2D_NV61;
-+ break;
-+ default:
-+ weston_log("Error in function %s, Format not supported\n", __func__);
-+ break;
-+ }
-+}
-+
-+static void printG2dSurfaceInfo(struct g2d_surfaceEx* g2dSurface, const char* msg)
-+{
-+ weston_log("%s physicAddr = %x left = %d right = %d top=%d bottom=%d stride= %d tiling = %d, format=%d \n",
-+ msg,
-+ g2dSurface->base.planes[0],
-+ g2dSurface->base.left,
-+ g2dSurface->base.right,
-+ g2dSurface->base.top,
-+ g2dSurface->base.bottom,
-+ g2dSurface->base.stride,
-+ g2dSurface->tiling,
-+ g2dSurface->base.format);
-+}
-+
-+static void
-+get_g2dSurface(struct wl_viv_buffer *buffer, struct g2d_surfaceEx *g2dSurface)
-+{
-+ if(buffer->width < 0 || buffer->height < 0)
-+ {
-+ weston_log("invalid EGL buffer in function %s\n", __func__);
-+ return;
-+ }
-+ g2d_getG2dFormat(buffer->format, &g2dSurface->base.format);
-+ g2d_getG2dTiling(buffer->tiling, &g2dSurface->tiling);
-+ g2dSurface->base.planes[0] = buffer->physical[0] + buffer->gpuBaseAddr;
-+ g2dSurface->base.planes[1] = buffer->physical[1] + buffer->gpuBaseAddr;
-+ g2dSurface->base.planes[2] = buffer->physical[2] + buffer->gpuBaseAddr;
-+ g2dSurface->base.left = 0;
-+ g2dSurface->base.top = 0;
-+ g2dSurface->base.right = buffer->width;
-+ g2dSurface->base.bottom = buffer->height;
-+ g2dSurface->base.stride = buffer->alignedWidth;
-+ g2dSurface->base.width = buffer->width;
-+ g2dSurface->base.height = buffer->height;
-+ g2dSurface->base.rot = G2D_ROTATION_0;
-+}
-+
-+static void
-+g2d_SetSurfaceRect(struct g2d_surfaceEx* g2dSurface, g2dRECT* rect)
-+{
-+ if(g2dSurface && rect)
-+ {
-+ g2dSurface->base.left = rect->left;
-+ g2dSurface->base.top = rect->top;
-+ g2dSurface->base.right = rect->right;
-+ g2dSurface->base.bottom = rect->bottom;
-+ }
-+}
-+
-+static int
-+g2d_blitSurface(void *handle, struct g2d_surfaceEx * srcG2dSurface, struct g2d_surfaceEx *dstG2dSurface,
-+ g2dRECT *srcRect, g2dRECT *dstRect)
-+{
-+ g2d_SetSurfaceRect(srcG2dSurface, srcRect);
-+ g2d_SetSurfaceRect(dstG2dSurface, dstRect);
-+ srcG2dSurface->base.blendfunc = G2D_ONE;
-+ dstG2dSurface->base.blendfunc = G2D_ONE_MINUS_SRC_ALPHA;
-+
-+ if(g2d_blitEx(handle, srcG2dSurface, dstG2dSurface))
-+ {
-+ printG2dSurfaceInfo(srcG2dSurface, "SRC:");
-+ printG2dSurfaceInfo(dstG2dSurface, "DST:");
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+static void
-+g2d_flip_surface(struct weston_output *output)
-+{
-+ struct g2d_output_state *go = get_output_state(output);
-+ go->fb_info.varinfo.yoffset = go->activebuffer * go->fb_info.y_resolution;
-+
-+ if(ioctl(go->fb_info.fb_fd, FBIOPAN_DISPLAY, &(go->fb_info.varinfo)) < 0)
-+ {
-+ weston_log("FBIOPAN_DISPLAY Failed\n");
-+ }
-+ go->activebuffer = (go->activebuffer + 1) % go->nNumBuffers;
-+}
-+
-+static void
-+copy_to_framebuffer(struct weston_output *output)
-+{
-+ struct g2d_renderer *gr = get_renderer(output->compositor);
-+ struct g2d_output_state *go = get_output_state(output);
-+ if(!go->directBlit && go->nNumBuffers == 1)
-+ {
-+ g2dRECT srcRect = {0, 0, go->offscreenSurface.base.width, go->offscreenSurface.base.height};
-+ g2dRECT dstrect = srcRect;
-+ g2dRECT clipRect = srcRect;
-+ g2d_set_clipping(gr->handle, clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
-+ g2d_blitSurface(gr->handle, &go->offscreenSurface,
-+ &go->renderSurf[go->activebuffer], &srcRect, &dstrect);
-+ }
-+
-+ if(go->clone_display_num)
-+ {
-+ int i = 0;
-+ for(i = 0; i < go->clone_display_num; i++)
-+ {
-+ g2dRECT srcRect = {0, 0, go->renderSurf[go->activebuffer].base.width, go->renderSurf[go->activebuffer].base.height};
-+ g2dRECT dstrect = {0, 0, go->mirrorSurf[i].base.width, go->mirrorSurf[i].base.height};
-+ g2dRECT clipRect = srcRect;
-+ g2d_set_clipping(gr->handle, clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
-+ if(go->directBlit || go->nNumBuffers > 1)
-+ {
-+ g2d_blitSurface(gr->handle, &go->renderSurf[go->activebuffer],
-+ &go->mirrorSurf[i], &srcRect, &dstrect);
-+ }
-+ else
-+ {
-+ g2d_blitSurface(gr->handle, &go->offscreenSurface,
-+ &go->mirrorSurf[i], &srcRect, &dstrect);
-+ }
-+ }
-+ }
-+
-+ g2d_finish(gr->handle);
-+
-+ if(go->nNumBuffers > 1)
-+ {
-+ g2d_flip_surface(output);
-+ }
-+}
-+
-+static int
-+is_view_visible(struct weston_view *view)
-+{
-+ /* Return false, if surface is guaranteed to be totally obscured. */
-+ int ret;
-+ pixman_region32_t unocc;
-+
-+ pixman_region32_init(&unocc);
-+ pixman_region32_subtract(&unocc, &view->transform.boundingbox,
-+ &view->clip);
-+ ret = pixman_region32_not_empty(&unocc);
-+ pixman_region32_fini(&unocc);
-+
-+ return ret;
-+}
-+
-+static void
-+use_output(struct weston_output *output)
-+{
-+ struct weston_compositor *compositor = output->compositor;
-+ struct weston_view *view;
-+ struct g2d_output_state *go = get_output_state(output);
-+ int visibleViews=0;
-+ int fullscreenViews=0;
-+
-+ if(go->nNumBuffers == 1)
-+ {
-+ wl_list_for_each_reverse(view, &compositor->view_list, link)
-+ if (view->plane == &compositor->primary_plane && is_view_visible(view))
-+ {
-+ visibleViews++;
-+ if(view->surface->width == go->width && view->surface->height == go->height)
-+ {
-+ pixman_box32_t *bb_rects;
-+ int nbb=0;
-+ bb_rects = pixman_region32_rectangles(&view->transform.boundingbox, &nbb);
-+ if(nbb == 1)
-+ if(bb_rects[0].x1 == 0 && bb_rects[0].y1 ==0)
-+ fullscreenViews++;
-+ }
-+ }
-+
-+ go->directBlit = ((visibleViews == 1) || (fullscreenViews > 1));
-+ }
-+}
-+
-+static int
-+g2d_renderer_read_pixels(struct weston_output *output,
-+ pixman_format_code_t format, void *pixels,
-+ uint32_t x, uint32_t y,
-+ uint32_t width, uint32_t height)
-+{
-+ return 0;
-+}
-+
-+static int g2d_int_from_double(double d)
-+{
-+ return wl_fixed_to_int(wl_fixed_from_double(d));
-+}
-+
-+static void
-+repaint_region(struct weston_view *ev, struct weston_output *output, struct g2d_output_state *go, pixman_region32_t *region,
-+ pixman_region32_t *surf_region){
-+
-+ struct g2d_renderer *gr = get_renderer(ev->surface->compositor);
-+ struct g2d_surface_state *gs = get_surface_state(ev->surface);
-+
-+ pixman_box32_t *rects, *surf_rects, *bb_rects;
-+ int i, j, nrects, nsurf, nbb=0;
-+ g2dRECT srcRect = {0};
-+ g2dRECT dstrect = {0};
-+ g2dRECT clipRect = {0};
-+ int dstWidth = 0;
-+ int dstHeight = 0;
-+ struct g2d_surfaceEx *dstsurface;
-+
-+ bb_rects = pixman_region32_rectangles(&ev->transform.boundingbox, &nbb);
-+
-+ if(!gs->attached || nbb <= 0)
-+ {
-+ return;
-+ }
-+
-+ rects = pixman_region32_rectangles(region, &nrects);
-+ surf_rects = pixman_region32_rectangles(surf_region, &nsurf);
-+ srcRect.left = ev->geometry.x < 0.0 ? g2d_int_from_double(fabsf(ev->geometry.x)) : 0;
-+ srcRect.top = ev->geometry.y < 0.0 ? g2d_int_from_double(fabsf(ev->geometry.y)) : 0;
-+ srcRect.right = ev->surface->width;
-+ srcRect.bottom = ev->surface->height;
-+ if(go->nNumBuffers > 1 || go->directBlit)
-+ {
-+ dstsurface = &go->renderSurf[go->activebuffer];
-+ }
-+ else
-+ {
-+ dstsurface = &go->offscreenSurface;
-+ }
-+ dstWidth = dstsurface->base.width;
-+ dstHeight = dstsurface->base.height;
-+ for (i = 0; i < nrects; i++)
-+ {
-+ pixman_box32_t *rect = &rects[i];
-+ gctFLOAT min_x, max_x, min_y, max_y;
-+
-+ dstrect.left = (bb_rects[0].x1 < 0) ? rect->x1 : bb_rects[0].x1;
-+ dstrect.top = (bb_rects[0].y1 < 0) ? rect->y1 : bb_rects[0].y1;
-+ dstrect.right = bb_rects[0].x2;
-+ dstrect.bottom = bb_rects[0].y2;
-+ /*Multi display support*/
-+ if(output->x > 0)
-+ {
-+ dstrect.left = dstrect.left - output->x;
-+ dstrect.right = dstrect.right - output->x;
-+ }
-+ if(dstrect.left < 0)
-+ {
-+ srcRect.left -= dstrect.left;
-+ dstrect.left = 0;
-+ if(srcRect.left > ev->surface->width)
-+ break;
-+ }
-+ if(dstrect.right > dstWidth)
-+ {
-+ dstrect.right = dstWidth;
-+ srcRect.right = srcRect.left + dstrect.right - dstrect.left;
-+ if(srcRect.right > ev->surface->width)
-+ break;
-+ }
-+ if(dstrect.bottom > dstHeight)
-+ {
-+ dstrect.bottom = dstHeight;
-+ srcRect.bottom = srcRect.top + dstrect.bottom - dstrect.top;
-+ if(srcRect.bottom < 0)
-+ break;
-+ }
-+
-+ for (j = 0; j < nsurf; j++)
-+ {
-+ pixman_box32_t *surf_rect = &surf_rects[j];
-+ gctFLOAT ex[8], ey[8]; /* edge points in screen space */
-+ int n;
-+ int m=0;
-+ n = calculate_edges(ev, rect, surf_rect, ex, ey);
-+ if (n < 3)
-+ continue;
-+
-+ min_x = max_x = ex[0];
-+ min_y = max_y = ey[0];
-+ for (m = 1; m < n; m++)
-+ {
-+ min_x = min(min_x, ex[m]);
-+ max_x = max(max_x, ex[m]);
-+ min_y = min(min_y, ey[m]);
-+ max_y = max(max_y, ey[m]);
-+ }
-+
-+ clipRect.left = g2d_int_from_double(min_x);
-+ clipRect.top = g2d_int_from_double(min_y);
-+ clipRect.right = g2d_int_from_double(max_x);
-+ clipRect.bottom = g2d_int_from_double(max_y);
-+
-+ if(output->x > 0)
-+ {
-+ clipRect.left = clipRect.left - output->x;
-+ clipRect.right = clipRect.right - output->x;
-+ }
-+ g2d_set_clipping(gr->handle, clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
-+ g2d_blitSurface(gr->handle, &gs->g2d_surface, dstsurface, &srcRect, &dstrect);
-+ }
-+ }
-+}
-+
-+static void
-+draw_view(struct weston_view *ev, struct weston_output *output,
-+ pixman_region32_t *damage) /* in global coordinates */
-+{
-+ struct weston_compositor *ec = ev->surface->compositor;
-+ struct g2d_output_state *go = get_output_state(output);
-+ struct g2d_surface_state *gs = get_surface_state(ev->surface);
-+ /* repaint bounding region in global coordinates: */
-+ pixman_region32_t repaint;
-+ /* non-opaque region in surface coordinates: */
-+ pixman_region32_t surface_blend;
-+ pixman_region32_t *buffer_damage;
-+
-+ pixman_region32_init(&repaint);
-+ pixman_region32_intersect(&repaint,
-+ &ev->transform.boundingbox, damage);
-+ pixman_region32_subtract(&repaint, &repaint, &ev->clip);
-+
-+ if (!pixman_region32_not_empty(&repaint))
-+ goto out;
-+
-+ buffer_damage = &go->buffer_damage[go->current_buffer];
-+ pixman_region32_subtract(buffer_damage, buffer_damage, &repaint);
-+
-+ /* blended region is whole surface minus opaque region: */
-+ pixman_region32_init_rect(&surface_blend, 0, 0,
-+ ev->surface->width, ev->surface->height);
-+ pixman_region32_subtract(&surface_blend, &surface_blend, &ev->surface->opaque);
-+
-+ struct g2d_renderer *gr = get_renderer(ec);
-+ if (pixman_region32_not_empty(&ev->surface->opaque)) {
-+ repaint_region(ev, output, go, &repaint, &ev->surface->opaque);
-+ }
-+
-+ if (pixman_region32_not_empty(&surface_blend)) {
-+ g2d_enable(gr->handle,G2D_BLEND);
-+ if (ev->alpha < 1.0)
-+ {
-+ g2d_enable(gr->handle, G2D_GLOBAL_ALPHA);
-+ gs->g2d_surface.base.global_alpha = ev->alpha * 0xFF;
-+ }
-+ repaint_region(ev, output, go, &repaint, &surface_blend);
-+ g2d_disable(gr->handle, G2D_GLOBAL_ALPHA);
-+ g2d_disable(gr->handle, G2D_BLEND);
-+ }
-+ pixman_region32_fini(&surface_blend);
-+
-+out:
-+ pixman_region32_fini(&repaint);
-+}
-+
-+static void
-+repaint_views(struct weston_output *output, pixman_region32_t *damage)
-+{
-+ struct weston_compositor *compositor = output->compositor;
-+ struct weston_view *view;
-+
-+ wl_list_for_each_reverse(view, &compositor->view_list, link)
-+ if (view->plane == &compositor->primary_plane)
-+ draw_view(view, output, damage);
-+}
-+
-+static void
-+g2d_renderer_repaint_output(struct weston_output *output,
-+ pixman_region32_t *output_damage)
-+{
-+ struct g2d_output_state *go = get_output_state(output);
-+ struct weston_compositor *compositor = output->compositor;
-+ struct g2d_renderer *gr = get_renderer(compositor);
-+ int i;
-+
-+ use_output(output);
-+ for (i = 0; i < 2; i++)
-+ pixman_region32_union(&go->buffer_damage[i],
-+ &go->buffer_damage[i],
-+ output_damage);
-+
-+ pixman_region32_union(output_damage, output_damage,
-+ &go->buffer_damage[go->current_buffer]);
-+
-+ repaint_views(output, output_damage);
-+ g2d_finish(gr->handle);
-+
-+ pixman_region32_copy(&output->previous_damage, output_damage);
-+ wl_signal_emit(&output->frame_signal, output);
-+ copy_to_framebuffer(output);
-+ go->current_buffer ^= 1;
-+}
-+
-+static void
-+g2d_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
-+{
-+ struct wl_viv_buffer *vivBuffer = wl_resource_get_user_data(buffer->resource);
-+ struct g2d_surface_state *gs = get_surface_state(es);
-+ buffer->width = vivBuffer->width;
-+ buffer->height = vivBuffer->height;
-+ get_g2dSurface(vivBuffer, &gs->g2d_surface);
-+}
-+
-+static void
-+g2d_renderer_flush_damage(struct weston_surface *surface)
-+{
-+ struct g2d_surface_state *gs = get_surface_state(surface);
-+ struct weston_buffer *buffer = gs->buffer_ref.buffer;
-+ struct weston_view *view;
-+ int texture_used;
-+ pixman_region32_union(&gs->texture_damage,
-+ &gs->texture_damage, &surface->damage);
-+
-+ if (!buffer)
-+ return;
-+
-+ texture_used = 0;
-+ wl_list_for_each(view, &surface->views, surface_link) {
-+ if (view->plane == &surface->compositor->primary_plane) {
-+ texture_used = 1;
-+ break;
-+ }
-+ }
-+ if (!texture_used)
-+ return;
-+
-+ if (!pixman_region32_not_empty(&gs->texture_damage))
-+ goto done;
-+
-+ if(wl_shm_buffer_get(buffer->resource))
-+ {
-+ uint8_t *src = wl_shm_buffer_get_data(buffer->shm_buffer);
-+ uint8_t *dst = gs->shm_buf->buf_vaddr;
-+ int bpp = gs->bpp;
-+ wl_shm_buffer_begin_access(buffer->shm_buffer);
-+ if(gs->shm_buf)
-+ {
-+ int alignedWidth = ALIGN_WIDTH(buffer->width);
-+ if(alignedWidth == buffer->width)
-+ {
-+ int size = wl_shm_buffer_get_stride(buffer->shm_buffer)*buffer->height;
-+ memcpy(dst, src, size);
-+ }
-+ else
-+ {
-+ int i, j;
-+ for (i = 0; i < buffer->height; i++)
-+ {
-+ for (j = 0; j < buffer->width; j++)
-+ {
-+ int dstOff = i * alignedWidth + j;
-+ int srcOff = (i * buffer->width + j);
-+ memcpy(dst + dstOff * bpp, src + srcOff * bpp, bpp);
-+ }
-+ }
-+ }
-+ }
-+ else
-+ {
-+ weston_log("Error: This shm buffer was not attached\n");
-+ }
-+ wl_shm_buffer_end_access(buffer->shm_buffer);
-+ }
-+ else
-+ {
-+ g2d_renderer_attach_egl(surface, buffer);
-+ }
-+
-+done:
-+ pixman_region32_fini(&gs->texture_damage);
-+ pixman_region32_init(&gs->texture_damage);
-+
-+ weston_buffer_reference(&gs->buffer_ref, NULL);
-+}
-+
-+static void
-+g2d_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
-+ struct wl_shm_buffer *shm_buffer)
-+{
-+ struct g2d_surface_state *gs = get_surface_state(es);
-+ int buffer_length = 0;
-+ int alloc_new_buff = 1;
-+ int alignedWidth = 0;
-+ enum g2d_format g2dFormat = 0;
-+ buffer->shm_buffer = shm_buffer;
-+ buffer->width = wl_shm_buffer_get_width(shm_buffer);
-+ buffer->height = wl_shm_buffer_get_height(shm_buffer);
-+ alignedWidth = ALIGN_WIDTH(buffer->width);
-+
-+ switch (wl_shm_buffer_get_format(shm_buffer)) {
-+ case WL_SHM_FORMAT_XRGB8888:
-+ g2dFormat = G2D_BGRX8888;
-+ gs->bpp = 4;
-+ break;
-+ case WL_SHM_FORMAT_ARGB8888:
-+ g2dFormat = G2D_BGRA8888;
-+ gs->bpp = 4;
-+ break;
-+ case WL_SHM_FORMAT_RGB565:
-+ g2dFormat = G2D_RGB565;
-+ gs->bpp = 2;
-+ break;
-+ default:
-+ weston_log("warning: unknown shm buffer format: %08x\n",
-+ wl_shm_buffer_get_format(shm_buffer));
-+ return;
-+ }
-+
-+ buffer_length = alignedWidth * buffer->height * gs->bpp;
-+
-+ /* Only allocate a new g2d buff if it is larger than existing one.*/
-+ gs->shm_buf_length = buffer_length;
-+ if(gs->shm_buf && gs->shm_buf->buf_size > buffer_length)
-+ {
-+ alloc_new_buff = 0;
-+ }
-+
-+ if(alloc_new_buff)
-+ {
-+ if(gs->shm_buf)
-+ g2d_free(gs->shm_buf);
-+ gs->shm_buf = g2d_alloc(buffer_length, 0);
-+ gs->g2d_surface.base.planes[0] = gs->shm_buf->buf_paddr;
-+ }
-+ gs->g2d_surface.base.left = 0;
-+ gs->g2d_surface.base.top = 0;
-+ gs->g2d_surface.base.right = buffer->width;
-+ gs->g2d_surface.base.bottom = buffer->height;
-+ gs->g2d_surface.base.stride = alignedWidth;
-+ gs->g2d_surface.base.width = buffer->width;
-+ gs->g2d_surface.base.height = buffer->height;
-+ gs->g2d_surface.base.rot = G2D_ROTATION_0;
-+ gs->g2d_surface.base.clrcolor = 0xFF400000;
-+ gs->g2d_surface.tiling = G2D_LINEAR;
-+ gs->g2d_surface.base.format = g2dFormat;
-+}
-+
-+static void
-+g2d_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
-+{
-+ struct g2d_surface_state *gs = get_surface_state(es);
-+ struct wl_shm_buffer *shm_buffer;
-+ weston_buffer_reference(&gs->buffer_ref, buffer);
-+
-+ if(buffer==NULL)
-+ return;
-+
-+ shm_buffer = wl_shm_buffer_get(buffer->resource);
-+
-+ if(shm_buffer)
-+ {
-+ g2d_renderer_attach_shm(es, buffer, shm_buffer);
-+ }
-+ else
-+ {
-+ g2d_renderer_attach_egl(es, buffer);
-+ }
-+ gs->attached = 1;
-+}
-+
-+static void
-+surface_state_destroy(struct g2d_surface_state *gs, struct g2d_renderer *gr)
-+{
-+ wl_list_remove(&gs->surface_destroy_listener.link);
-+ wl_list_remove(&gs->renderer_destroy_listener.link);
-+ if(gs->surface)
-+ gs->surface->renderer_state = NULL;
-+
-+ if(gs->shm_buf)
-+ {
-+ g2d_free(gs->shm_buf);
-+ gs->shm_buf = NULL;
-+ }
-+
-+ weston_buffer_reference(&gs->buffer_ref, NULL);
-+ free(gs);
-+}
-+
-+static void
-+surface_state_handle_surface_destroy(struct wl_listener *listener, void *data)
-+{
-+ struct g2d_surface_state *gs;
-+ struct g2d_renderer *gr;
-+
-+ gs = container_of(listener, struct g2d_surface_state,
-+ surface_destroy_listener);
-+
-+ gr = get_renderer(gs->surface->compositor);
-+ surface_state_destroy(gs, gr);
-+}
-+
-+static void
-+surface_state_handle_renderer_destroy(struct wl_listener *listener, void *data)
-+{
-+ struct g2d_surface_state *gs;
-+ struct g2d_renderer *gr;
-+
-+ gr = data;
-+
-+ gs = container_of(listener, struct g2d_surface_state,
-+ renderer_destroy_listener);
-+
-+ surface_state_destroy(gs, gr);
-+}
-+
-+
-+static int
-+g2d_renderer_create_surface(struct weston_surface *surface)
-+{
-+ struct g2d_surface_state *gs;
-+ struct g2d_renderer *gr = get_renderer(surface->compositor);
-+
-+ gs = zalloc(sizeof *gs);
-+ if (gs == NULL)
-+ return -1;
-+
-+ /* A buffer is never attached to solid color surfaces, yet
-+ * they still go through texcoord computations. Do not divide
-+ * by zero there.
-+ */
-+ gs->pitch = 1;
-+
-+ gs->surface = surface;
-+
-+ pixman_region32_init(&gs->texture_damage);
-+ surface->renderer_state = gs;
-+
-+ gs->surface_destroy_listener.notify =
-+ surface_state_handle_surface_destroy;
-+ wl_signal_add(&surface->destroy_signal,
-+ &gs->surface_destroy_listener);
-+
-+ gs->renderer_destroy_listener.notify =
-+ surface_state_handle_renderer_destroy;
-+ wl_signal_add(&gr->destroy_signal,
-+ &gs->renderer_destroy_listener);
-+
-+ if (surface->buffer_ref.buffer) {
-+ g2d_renderer_attach(surface, surface->buffer_ref.buffer);
-+ g2d_renderer_flush_damage(surface);
-+ }
-+
-+ return 0;
-+}
-+
-+static void
-+g2d_renderer_surface_set_color(struct weston_surface *surface,
-+ float red, float green, float blue, float alpha)
-+{
-+ struct g2d_surface_state *gs = get_surface_state(surface);
-+
-+ gs->color[0] = red;
-+ gs->color[1] = green;
-+ gs->color[2] = blue;
-+ gs->color[3] = alpha;
-+}
-+
-+
-+static void
-+g2d_renderer_output_destroy(struct weston_output *output)
-+{
-+ struct g2d_output_state *go = get_output_state(output);
-+ int i;
-+
-+ for (i = 0; i < 2; i++)
-+ {
-+ pixman_region32_fini(&go->buffer_damage[i]);
-+ }
-+
-+ if(go->offscreen_buf)
-+ {
-+ g2d_free(go->offscreen_buf);
-+ go->offscreen_buf = NULL;
-+ }
-+
-+ if(go->fb_info.fb_fd)
-+ {
-+ close(go->fb_info.fb_fd);
-+ go->fb_info.fb_fd = 0;
-+ }
-+
-+ if(go->renderSurf)
-+ {
-+ free(go->renderSurf);
-+ go->renderSurf = NULL;
-+ }
-+ for (i = 0; i < go->clone_display_num; i++)
-+ {
-+ if(go->mirror_fb_info[i].fb_fd)
-+ {
-+ close(go->mirror_fb_info[i].fb_fd);
-+ go->mirror_fb_info[i].fb_fd = 0;
-+ }
-+ }
-+ if(go->mirrorSurf)
-+ {
-+ free(go->mirrorSurf);
-+ go->mirrorSurf = NULL;
-+ }
-+ if(go->mirror_fb_info)
-+ {
-+ free(go->mirror_fb_info);
-+ go->mirror_fb_info = NULL;
-+ }
-+
-+ free(go);
-+}
-+
-+static void
-+g2d_renderer_destroy(struct weston_compositor *ec)
-+{
-+ struct g2d_renderer *gr = get_renderer(ec);
-+
-+ wl_signal_emit(&gr->destroy_signal, gr);
-+ g2d_close(gr->handle);
-+#ifdef ENABLE_EGL
-+ eglUnbindWaylandDisplayWL(gr->egl_display);
-+ eglTerminate(gr->egl_display);
-+ fbDestroyDisplay(gr->display);
-+#endif
-+ free(ec->renderer);
-+ ec->renderer = NULL;
-+}
-+
-+static int
-+g2d_renderer_create(struct weston_compositor *ec)
-+{
-+ struct g2d_renderer *gr;
-+ gr = malloc(sizeof *gr);
-+ if (gr == NULL)
-+ return -1;
-+
-+ gr->base.read_pixels = g2d_renderer_read_pixels;
-+ gr->base.repaint_output = g2d_renderer_repaint_output;
-+ gr->base.flush_damage = g2d_renderer_flush_damage;
-+ gr->base.attach = g2d_renderer_attach;
-+ gr->base.surface_set_color = g2d_renderer_surface_set_color;
-+ gr->base.destroy = g2d_renderer_destroy;
-+
-+ if(g2d_open(&gr->handle))
-+ {
-+ weston_log("g2d_open fail.\n");
-+ return -1;
-+ }
-+ ec->renderer = &gr->base;
-+ wl_signal_init(&gr->destroy_signal);
-+ return 0;
-+}
-+
-+static int
-+calculate_g2d_format(struct fb_var_screeninfo *varinfo, enum g2d_format *g2dFormat)
-+{
-+ /* Get the color format. */
-+ switch (varinfo->green.length)
-+ {
-+ case 6:
-+ *g2dFormat= G2D_RGB565;
-+ break;
-+
-+ case 8:
-+ if (varinfo->blue.offset == 0)
-+ {
-+ *g2dFormat = (varinfo->transp.length == 0) ? G2D_BGRX8888 : G2D_BGRA8888;
-+ }
-+ else
-+ {
-+ *g2dFormat = (varinfo->transp.length == 0) ? G2D_RGBX8888 : G2D_RGBA8888;
-+ }
-+ break;
-+
-+ default:
-+ *g2dFormat = -1;
-+ break;
-+ }
-+ return 0;
-+}
-+
-+static int
-+get_G2dSurface_from_screeninfo(struct fb_screeninfo *info, struct g2d_surfaceEx* g2dSurface)
-+{
-+ if(info && g2dSurface)
-+ {
-+ g2dSurface->base.planes[0] = info->physical;
-+ g2dSurface->base.left = 0;
-+ g2dSurface->base.top = 0;
-+ g2dSurface->base.right = info->x_resolution;
-+ g2dSurface->base.bottom = info->y_resolution;
-+ g2dSurface->base.stride = info->stride;
-+ g2dSurface->base.width = info->x_resolution;
-+ g2dSurface->base.height = info->y_resolution;
-+ g2dSurface->base.format = info->pixel_format;
-+ g2dSurface->base.rot = G2D_ROTATION_0;
-+ g2dSurface->base.clrcolor = 0xFF400000;
-+ g2dSurface->tiling = G2D_LINEAR;
-+ return 0;
-+ }
-+ return -1;
-+}
-+
-+static int
-+fb_query_screen_info(struct g2d_output_state *output, int fd,
-+ struct fb_screeninfo *info)
-+{
-+ struct g2d_output_state *go = output;
-+ struct fb_var_screeninfo *varinfo = &info->varinfo;
-+ struct fb_fix_screeninfo *fixinfo = &info->fixinfo;
-+
-+ /* Probe the device for screen information. */
-+ if (ioctl(fd, FBIOGET_VSCREENINFO, varinfo) < 0) {
-+ return -1;
-+ }
-+
-+ if(go->nNumBuffers > 1){
-+ varinfo->yres_virtual = varinfo->yres * go->nNumBuffers;
-+ if (ioctl(fd, FBIOPUT_VSCREENINFO, varinfo) < 0)
-+ return -1;
-+ }
-+
-+ if (ioctl(fd, FBIOGET_FSCREENINFO, fixinfo) < 0 ||
-+ ioctl(fd, FBIOGET_VSCREENINFO, varinfo) < 0){
-+ return -1;
-+ }
-+ /* Store the pertinent data. */
-+ info->x_resolution = varinfo->xres;
-+ info->y_resolution = varinfo->yres;
-+ info->physical = fixinfo->smem_start;
-+ info->buffer_length = fixinfo->smem_len;
-+ info->stride = fixinfo->line_length / (varinfo->bits_per_pixel >> 3);
-+ info->stride_bytes = fixinfo->line_length;
-+ calculate_g2d_format(varinfo, &info->pixel_format);
-+
-+ if (info->pixel_format < 0) {
-+ weston_log("Frame buffer uses an unsupported format.\n");
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static int
-+fb_frame_buffer_open(struct g2d_output_state *output, const char *fb_dev,
-+ struct fb_screeninfo *screen_info)
-+{
-+ /* Open the frame buffer device. */
-+ screen_info->fb_fd = open(fb_dev, O_RDWR | O_CLOEXEC);
-+ if (screen_info->fb_fd < 0) {
-+ weston_log("Failed to open frame buffer device%s \n", fb_dev);
-+ return -1;
-+ }
-+
-+ /* Grab the screen info. */
-+ if (fb_query_screen_info(output, screen_info->fb_fd, screen_info) < 0) {
-+ weston_log("Failed to get frame buffer info \n");
-+
-+ close(screen_info->fb_fd);
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static void
-+getBufferNumber(struct g2d_output_state *go)
-+{
-+ char *p = NULL;
-+ p = getenv("FB_MULTI_BUFFER");
-+ if (p == gcvNULL)
-+ {
-+ go->nNumBuffers = 1;
-+ }
-+ else
-+ {
-+ go->nNumBuffers = atoi(p);
-+ if (go->nNumBuffers < 2)
-+ {
-+ go->nNumBuffers = 1;
-+ }
-+ else if(go->nNumBuffers >= 2)
-+ {
-+ go->nNumBuffers = 2;
-+ go->activebuffer = 1;
-+ }
-+ }
-+ weston_log("FB_MULTI_BUFFER = %d\n", go->nNumBuffers);
-+}
-+
-+static int
-+g2d_renderer_surface_create(struct g2d_output_state *go, struct g2d_renderer *gr, const char *device)
-+{
-+ int i = 0;
-+ int offset = 0;
-+ weston_log("Opend device=%s\n", device);
-+ if(fb_frame_buffer_open(go, device, &go->fb_info) < 0)
-+ {
-+ weston_log("Open frame buffer failed.\n");
-+ return -1;
-+ }
-+ go->renderSurf = zalloc(sizeof(struct g2d_surfaceEx) * go->nNumBuffers);
-+ offset = go->fb_info.stride_bytes * go->fb_info.y_resolution;
-+ for(i = 0; i < go->nNumBuffers; i++)
-+ {
-+ get_G2dSurface_from_screeninfo(&go->fb_info, &go->renderSurf[i]);
-+ go->renderSurf[i].base.planes[0] = go->fb_info.physical
-+ + (offset * i);
-+ g2d_clear(gr->handle, &go->renderSurf[i].base);
-+ }
-+
-+ if(go->nNumBuffers == 1)
-+ {
-+ go->offscreenSurface = (go->renderSurf[go->activebuffer]);
-+ go->offscreen_buf = g2d_alloc(go->fb_info.buffer_length, 0);
-+ go->offscreenSurface.base.planes[0] = go->offscreen_buf->buf_paddr;
-+ g2d_clear(gr->handle, &go->offscreenSurface.base);
-+ }
-+ return 0;
-+}
-+
-+static int
-+g2d_renderer_output_create(struct weston_output *output, struct wl_display *wl_display, const char *device)
-+
-+ {
-+ struct g2d_renderer *gr = get_renderer(output->compositor);
-+ struct g2d_output_state *go;
-+ int i;
-+ int clone_display_num = 0;
-+ int count = 0;
-+ int k=0, dispCount = 0;
-+ char displays[5][32];
-+ weston_log("g2d_renderer_output_create device=%s\n", device);
-+ count = strlen(device);
-+
-+ if(count > 0)
-+ {
-+ for(i= 0; i < count; i++)
-+ {
-+ if(device[i] == ',')
-+ {
-+ displays[dispCount][k] = '\0';
-+ dispCount++;
-+ k = 0;
-+ continue;
-+ }
-+ else if(device[i] != ' ')
-+ {
-+ displays[dispCount][k++] = device[i];
-+ }
-+ }
-+ displays[dispCount][k] = '\0';
-+ clone_display_num = dispCount++;
-+ weston_log("clone_display_num = %d\n", clone_display_num);
-+ }
-+ else
-+ {
-+ weston_log("Invalid device name\n");
-+ return -1;
-+ }
-+
-+ go = zalloc(sizeof *go);
-+ if (go == NULL)
-+ return -1;
-+ go->clone_display_num = clone_display_num;
-+ output->renderer_state = go;
-+#ifdef ENABLE_EGL
-+ gr->wl_display = wl_display;
-+ gr->display = fbGetDisplay(wl_display);
-+ gr->egl_display = eglGetDisplay(gr->display);
-+ eglBindWaylandDisplayWL(gr->egl_display, wl_display);
-+#endif
-+ getBufferNumber(go);
-+
-+ if(g2d_renderer_surface_create(go, gr, displays[0]) < 0)
-+ {
-+ weston_log("Create Render surface failed.\n");
-+ return -1;
-+ }
-+
-+ if(go->clone_display_num)
-+ {
-+ go->mirrorSurf = zalloc(sizeof(struct g2d_surfaceEx) * clone_display_num);
-+ go->mirror_fb_info = zalloc(sizeof(struct fb_screeninfo) * clone_display_num);
-+ if(go->mirrorSurf == NULL || go->mirror_fb_info == NULL)
-+ return -1;
-+
-+ for(i = 0; i < clone_display_num; i++)
-+ {
-+ if(fb_frame_buffer_open(go, displays[i + 1], &go->mirror_fb_info[i]) < 0)
-+ {
-+ weston_log("Open frame buffer failed.\n");
-+ return -1;
-+ }
-+ get_G2dSurface_from_screeninfo(&go->mirror_fb_info[i], &go->mirrorSurf[i]);
-+ go->mirrorSurf[i].base.planes[0] = go->mirror_fb_info[i].physical;
-+ g2d_clear(gr->handle, &go->mirrorSurf[i].base);
-+ }
-+ }
-+ g2d_finish(gr->handle);
-+ for (i = 0; i < BUFFER_DAMAGE_COUNT; i++)
-+ pixman_region32_init(&go->buffer_damage[i]);
-+ return 0;
-+ }
-+
-+ WL_EXPORT struct g2d_renderer_interface g2d_renderer_interface = {
-+ .create = g2d_renderer_create,
-+ .output_create = g2d_renderer_output_create,
-+ .output_destroy = g2d_renderer_output_destroy,
-+};
-diff --git a/src/g2d-renderer.h b/src/g2d-renderer.h
-new file mode 100644
-index 0000000..fc4ca49
---- /dev/null
-+++ b/src/g2d-renderer.h
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright (c) 2015 Freescale Semiconductor, Inc.
-+ * Copyright © 2013 Vasily Khoruzhick <anarsoul at gmail.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial
-+ * portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-+ * SOFTWARE.
-+ */
-+#ifndef __g2d_renderer_h_
-+#define __g2d_renderer_h_
-+
-+#include "compositor.h"
-+
-+#ifdef ENABLE_EGL
-+#include <EGL/egl.h>
-+#include <EGL/eglext.h>
-+#endif
-+
-+struct g2d_renderer_interface {
-+
-+ int (*create)(struct weston_compositor *ec);
-+
-+ int (*output_create)(struct weston_output *output,
-+ struct wl_display *wl_display,
-+ const char *device);
-+
-+ void (*output_destroy)(struct weston_output *output);
-+};
-+
-+#endif
-diff --git a/src/main.c b/src/main.c
-index 3279ac6..5d0bdc4 100644
---- a/src/main.c
-+++ b/src/main.c
-@@ -285,7 +285,8 @@ usage(int error_code)
- "Options for fbdev-backend.so:\n\n"
- " --tty=TTY\t\tThe tty to use\n"
- " --device=DEVICE\tThe framebuffer device to use\n"
-- " --use-gl\t\tUse the GL renderer\n\n");
-+ " --use-gl=1\t\tUse the GL renderer\n"
-+ " --use-g2d=1\t\tUse the g2d renderer\n\n");
- #endif
-
- #if defined(BUILD_HEADLESS_COMPOSITOR)
-@@ -868,7 +869,8 @@ load_fbdev_backend(struct weston_compositor *c, char const * backend,
- const struct weston_option fbdev_options[] = {
- { WESTON_OPTION_INTEGER, "tty", 0, &config.tty },
- { WESTON_OPTION_STRING, "device", 0, &config.device },
-- { WESTON_OPTION_BOOLEAN, "use-gl", 0, &config.use_gl },
-+ { WESTON_OPTION_INTEGER, "use-gl", 0, &config.use_gl },
-+ { WESTON_OPTION_INTEGER, "use-g2d", 0, &config.use_g2d },
- };
-
- parse_options(fbdev_options, ARRAY_LENGTH(fbdev_options), argc, argv);
---
-2.7.4
-
diff --git a/recipes-graphics/wayland/weston/0003-MGS-1783-xwld-Add-clone-mode-support-for-multi-displ.patch b/recipes-graphics/wayland/weston/0003-MGS-1783-xwld-Add-clone-mode-support-for-multi-displ.patch
deleted file mode 100644
index 328213c..0000000
--- a/recipes-graphics/wayland/weston/0003-MGS-1783-xwld-Add-clone-mode-support-for-multi-displ.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From d22509cd41f9d44d9e66522307e30ad4ae4bace0 Mon Sep 17 00:00:00 2001
-From: Meng Mingming <mingming.meng at nxp.com>
-Date: Mon, 16 Jan 2017 10:23:13 +0800
-Subject: [PATCH 3/5] MGS-1783: xwld: Add clone mode support for multi display
-
-Support more than two displays to show the same contents
-
-Upstream Status: Inappropriate [i.MX specific]
-
-Date: May 16, 2016
-Signed-off-by: Yong Gan <yong.gan at nxp.com>
----
- src/compositor-fbdev.c | 18 +++++++++++++++---
- src/compositor-fbdev.h | 1 +
- src/main.c | 1 +
- 3 files changed, 17 insertions(+), 3 deletions(-)
-
-diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
-index cff9513..0a05e7d 100644
---- a/src/compositor-fbdev.c
-+++ b/src/compositor-fbdev.c
-@@ -61,6 +61,8 @@ struct fbdev_backend {
- struct udev_input input;
- int use_pixman;
- int use_g2d;
-+ int clone_mode;
-+ char *clone_device;
- uint32_t output_transform;
- struct wl_listener session_listener;
- NativeDisplayType display;
-@@ -521,6 +523,8 @@ fbdev_output_create(struct fbdev_backend *backend,
- goto out_hw_surface;
- } else if(backend->use_g2d) {
- const char *g2d_device = device;
-+ if (backend->clone_mode)
-+ g2d_device = backend->clone_device;
-
- if (g2d_renderer->output_create(&output->base,
- backend->compositor->wl_display, g2d_device) < 0) {
-@@ -797,6 +801,8 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- backend->prev_state = WESTON_COMPOSITOR_ACTIVE;
- backend->use_pixman = !(param->use_gl || param->use_g2d);
- backend->use_g2d = param->use_g2d;
-+ backend->clone_mode = param->clone_mode;
-+ backend->clone_device = param->device;
- backend->output_transform = param->output_transform;
-
- weston_setup_vt_switch_bindings(compositor);
-@@ -837,12 +843,17 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- displays[dispCount][k] = '\0';
- dispCount++;
-
-- for(i= 0; i < dispCount; i++){
-- if (fbdev_output_create(backend, x, y, displays[i]) < 0)
-+ if(backend->clone_mode){
-+ if (fbdev_output_create(backend, x, y, displays[0]) < 0)
- goto out_launcher;
-- x += container_of(backend->compositor->output_list.prev,
-+ } else {
-+ for(i= 0; i < dispCount; i++){
-+ if (fbdev_output_create(backend, x, y, displays[i]) < 0)
-+ goto out_launcher;
-+ x += container_of(backend->compositor->output_list.prev,
- struct weston_output,
- link)->width;
-+ }
- }
- } else {
- gl_renderer = weston_load_module("gl-renderer.so",
-@@ -896,6 +907,7 @@ config_init_to_defaults(struct weston_fbdev_backend_config *config)
- config->device = "/dev/fb0"; /* default frame buffer */
- config->use_gl = 0;
- config->use_g2d = 0;
-+ config->clone_mode = 0;
- config->output_transform = WL_OUTPUT_TRANSFORM_NORMAL;
- }
-
-diff --git a/src/compositor-fbdev.h b/src/compositor-fbdev.h
-index 32a8598..a28ef3b 100644
---- a/src/compositor-fbdev.h
-+++ b/src/compositor-fbdev.h
-@@ -41,6 +41,7 @@ struct weston_fbdev_backend_config {
- char *device;
- int use_gl;
- int use_g2d;
-+ int clone_mode;
-
- uint32_t output_transform;
- };
-diff --git a/src/main.c b/src/main.c
-index 5d0bdc4..18fe5e0 100644
---- a/src/main.c
-+++ b/src/main.c
-@@ -871,6 +871,7 @@ load_fbdev_backend(struct weston_compositor *c, char const * backend,
- { WESTON_OPTION_STRING, "device", 0, &config.device },
- { WESTON_OPTION_INTEGER, "use-gl", 0, &config.use_gl },
- { WESTON_OPTION_INTEGER, "use-g2d", 0, &config.use_g2d },
-+ { WESTON_OPTION_BOOLEAN, "clone-mode", 0, &config.clone_mode },
- };
-
- parse_options(fbdev_options, ARRAY_LENGTH(fbdev_options), argc, argv);
---
-2.7.4
-
diff --git a/recipes-graphics/wayland/weston/0004-MGS-1668-xwld-System-can-not-boot-up-to-desktop.patch b/recipes-graphics/wayland/weston/0004-MGS-1668-xwld-System-can-not-boot-up-to-desktop.patch
deleted file mode 100644
index 95a88e6..0000000
--- a/recipes-graphics/wayland/weston/0004-MGS-1668-xwld-System-can-not-boot-up-to-desktop.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 2e5260168b59c96688b10912cff3d95ec1fbb3d8 Mon Sep 17 00:00:00 2001
-From: Meng Mingming <mingming.meng at nxp.com>
-Date: Mon, 16 Jan 2017 10:25:29 +0800
-Subject: [PATCH 4/5] MGS-1668: xwld: System can not boot up to desktop
-
-System can not boot up to desktop if press touch panel continuously during booting up.
-The weston view was not initialed completely, so add a protection to the pointer.
-
-Upstream Status: Denied [Could not reproduce]
-
-Date: MAR 08, 2016
-Signed-off-by: Yong Gan <yong.gan at nxp.com>
----
- src/compositor.c | 14 ++++++++------
- 1 file changed, 8 insertions(+), 6 deletions(-)
-
-diff --git a/src/compositor.c b/src/compositor.c
-index b6ef7f3..9d9805d 100644
---- a/src/compositor.c
-+++ b/src/compositor.c
-@@ -1470,12 +1470,14 @@ weston_view_from_global_fixed(struct weston_view *view,
- {
- float vxf, vyf;
-
-- weston_view_from_global_float(view,
-- wl_fixed_to_double(x),
-- wl_fixed_to_double(y),
-- &vxf, &vyf);
-- *vx = wl_fixed_from_double(vxf);
-- *vy = wl_fixed_from_double(vyf);
-+ if(view != NULL) {
-+ weston_view_from_global_float(view,
-+ wl_fixed_to_double(x),
-+ wl_fixed_to_double(y),
-+ &vxf, &vyf);
-+ *vx = wl_fixed_from_double(vxf);
-+ *vy = wl_fixed_from_double(vyf);
-+ }
- }
-
- WL_EXPORT void
---
-2.7.4
-
diff --git a/recipes-graphics/wayland/weston/0005-MGS-1724-xwld-G2D-compositor-build-failed-in-slevk-b.patch b/recipes-graphics/wayland/weston/0005-MGS-1724-xwld-G2D-compositor-build-failed-in-slevk-b.patch
deleted file mode 100644
index 73b298c..0000000
--- a/recipes-graphics/wayland/weston/0005-MGS-1724-xwld-G2D-compositor-build-failed-in-slevk-b.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From 3c11ac3c4b8416752c0e147ccde067070005597e Mon Sep 17 00:00:00 2001
-From: Meng Mingming <mingming.meng at nxp.com>
-Date: Mon, 16 Jan 2017 10:28:28 +0800
-Subject: [PATCH 5/5] MGS-1724: xwld: G2D compositor build failed in slevk
- board
-
-Add macro ENABLE_EGL to make sure the EGL was not built in slevk board.
-
-Upstream Status: Inappropriate [i.MX specific]
-
-Date: Jan 16, 2017
-Signed-off-by: Meng Mingming <mingming.meng at nxp.com>
----
- src/compositor-fbdev.c | 18 ++++++++++++------
- src/main.c | 22 +++++++++++++++++++---
- 2 files changed, 31 insertions(+), 9 deletions(-)
-
-diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
-index 0a05e7d..22d349b 100644
---- a/src/compositor-fbdev.c
-+++ b/src/compositor-fbdev.c
-@@ -65,7 +65,9 @@ struct fbdev_backend {
- char *clone_device;
- uint32_t output_transform;
- struct wl_listener session_listener;
-+#ifdef ENABLE_EGL
- NativeDisplayType display;
-+#endif
- };
-
- struct fbdev_screeninfo {
-@@ -99,8 +101,10 @@ struct fbdev_output {
- pixman_image_t *hw_surface;
- uint8_t depth;
-
-+#ifdef ENABLE_EGL
- NativeDisplayType display;
- NativeWindowType window;
-+#endif
- };
-
- struct gl_renderer_interface *gl_renderer;
-@@ -452,10 +456,13 @@ fbdev_frame_buffer_destroy(struct fbdev_output *output)
- strerror(errno));
-
- output->fb = NULL;
-+
-+#ifdef ENABLE_EGL
- if(output->window)
- fbDestroyWindow(output->window);
- if(output->display)
- fbDestroyDisplay(output->display);
-+#endif
- }
-
- static void fbdev_output_destroy(struct weston_output *base);
-@@ -532,6 +539,7 @@ fbdev_output_create(struct fbdev_backend *backend,
- goto out_hw_surface;
- }
- } else {
-+#ifdef ENABLE_EGL
- setenv("HYBRIS_EGLPLATFORM", "wayland", 1);
- output->window = fbCreateWindow(backend->display, -1, -1, 0, 0);
- if (output->window == NULL) {
-@@ -545,6 +553,7 @@ fbdev_output_create(struct fbdev_backend *backend,
- weston_log("gl_renderer_output_create failed.\n");
- goto out_hw_surface;
- }
-+#endif
- }
-
- loop = wl_display_get_event_loop(backend->compositor->wl_display);
-@@ -856,6 +865,7 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- }
- }
- } else {
-+#ifdef ENABLE_EGL
- gl_renderer = weston_load_module("gl-renderer.so",
- "gl_renderer_interface");
- if (!gl_renderer) {
-@@ -875,7 +885,9 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
- weston_log("gl_renderer_create failed.\n");
- goto out_launcher;
- }
-+#endif
- }
-+
- if(!backend->use_g2d)
- if (fbdev_output_create(backend, 0, 0, param->device) < 0)
- goto out_launcher;
-@@ -929,12 +941,6 @@ backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
- config_init_to_defaults(&config);
- memcpy(&config, config_base, config_base->struct_size);
-
-- if(config.use_g2d) {
-- config.use_gl = 0;
-- } else {
-- config.use_gl = 1;
-- }
--
- b = fbdev_backend_create(compositor, argc, argv, wc, &config);
- if (b == NULL)
- return -1;
-diff --git a/src/main.c b/src/main.c
-index 18fe5e0..a0a5471 100644
---- a/src/main.c
-+++ b/src/main.c
-@@ -285,8 +285,14 @@ usage(int error_code)
- "Options for fbdev-backend.so:\n\n"
- " --tty=TTY\t\tThe tty to use\n"
- " --device=DEVICE\tThe framebuffer device to use\n"
-- " --use-gl=1\t\tUse the GL renderer\n"
-- " --use-g2d=1\t\tUse the g2d renderer\n\n");
-+#if defined(ENABLE_EGL)
-+ " --use-gl=1\t\tUse the GL renderer (default is 1)\n"
-+ " --use-g2d=1\t\tUse the G2D renderer (default is 0)\n"
-+#else
-+ " --use-gl=1\t\tUse the GL renderer (default is 0)\n"
-+ " --use-g2d=1\t\tUse the G2D renderer (default is 1)\n"
-+#endif
-+ " --clone-mode\t\tClone display to multiple devices\n\n");
- #endif
-
- #if defined(BUILD_HEADLESS_COMPOSITOR)
-@@ -861,7 +867,17 @@ static int
- load_fbdev_backend(struct weston_compositor *c, char const * backend,
- int *argc, char **argv, struct weston_config *wc)
- {
-- struct weston_fbdev_backend_config config = {{ 0, }};
-+ struct weston_fbdev_backend_config config = {
-+ .base = {0},
-+#ifdef ENABLE_EGL
-+ .use_gl = 1,
-+ .use_g2d = 0,
-+#else
-+ .use_gl = 0,
-+ .use_g2d = 1,
-+#endif
-+ .clone_mode = 0,
-+ };
- struct weston_config_section *section;
- char *s = NULL;
- int ret = 0;
---
-2.7.4
-
diff --git a/recipes-graphics/wayland/weston/0006-Link-compositor-to-egl.patch b/recipes-graphics/wayland/weston/0006-Link-compositor-to-egl.patch
deleted file mode 100644
index 3cad74f..0000000
--- a/recipes-graphics/wayland/weston/0006-Link-compositor-to-egl.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: weston-1.11.1/configure.ac
-===================================================================
---- weston-1.11.1.orig/configure.ac 2016-11-08 17:26:14.266564760 -0600
-+++ weston-1.11.1/configure.ac 2016-11-09 19:38:58.000000000 -0600
-@@ -93,6 +93,7 @@
- PKG_CHECK_MODULES(EGL, [egl glesv2])
- PKG_CHECK_MODULES([EGL_TESTS], [egl glesv2 wayland-client wayland-egl])
- PKG_CHECK_MODULES([GL_RENDERER], [libdrm])
-+ COMPOSITOR_MODULES="$COMPOSITOR_MODULES egl"
- fi
-
- AC_ARG_ENABLE(xkbcommon,
diff --git a/recipes-graphics/wayland/weston/0007-xwayland-Fix-crash-when-run-with-no-input-device.patch b/recipes-graphics/wayland/weston/0007-xwayland-Fix-crash-when-run-with-no-input-device.patch
deleted file mode 100644
index e3b1fa8..0000000
--- a/recipes-graphics/wayland/weston/0007-xwayland-Fix-crash-when-run-with-no-input-device.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 60f8817f371123b9c36b3ff1120eec1e8f9e3d10 Mon Sep 17 00:00:00 2001
-From: Tom Hochstein <tom.hochstein at nxp.com>
-Date: Mon, 31 Oct 2016 19:21:58 -0500
-Subject: [PATCH weston] xwayland: Fix crash when run with no input device
-
-Starting an xterm with no input device led to a crash
-because weston_wm_pick_seat() was returning garbage and
-weston_wm_selection_init() was trying to use the garbage.
-
-Upstream-Status: Accepted [https://cgit.freedesktop.org/wayland/weston/commit/?id=e7fff215ada3fd3d1b2af664888f960c082f9065]
-
-Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
----
- xwayland/selection.c | 10 +++++++---
- xwayland/window-manager.c | 6 ++++--
- 2 files changed, 11 insertions(+), 5 deletions(-)
-
-Index: weston-1.11.0/xwayland/selection.c
-===================================================================
---- weston-1.11.0.orig/xwayland/selection.c 2016-05-19 16:36:04.000000000 -0500
-+++ weston-1.11.0/xwayland/selection.c 2016-11-01 14:32:48.000000000 -0500
-@@ -708,6 +708,8 @@
- wm->atom.clipboard, mask);
-
- seat = weston_wm_pick_seat(wm);
-+ if (seat == NULL)
-+ return;
- wm->selection_listener.notify = weston_wm_set_selection;
- wl_signal_add(&seat->selection_signal, &wm->selection_listener);
-
-Index: weston-1.11.0/xwayland/window-manager.c
-===================================================================
---- weston-1.11.0.orig/xwayland/window-manager.c 2016-05-19 16:36:04.000000000 -0500
-+++ weston-1.11.0/xwayland/window-manager.c 2016-11-01 11:47:14.549606964 -0500
-@@ -1303,8 +1303,10 @@
- struct weston_seat *
- weston_wm_pick_seat(struct weston_wm *wm)
- {
-- return container_of(wm->server->compositor->seat_list.next,
-- struct weston_seat, link);
-+ struct wl_list *seats = wm->server->compositor->seat_list.next;
-+ if (wl_list_empty(seats))
-+ return NULL;
-+ return container_of(seats, struct weston_seat, link);
- }
-
- static struct weston_seat *
diff --git a/recipes-graphics/wayland/weston_1.11.1.bb b/recipes-graphics/wayland/weston_1.11.1.bb
deleted file mode 100644
index 22b30ad..0000000
--- a/recipes-graphics/wayland/weston_1.11.1.bb
+++ /dev/null
@@ -1,113 +0,0 @@
-SUMMARY = "Weston, a Wayland compositor"
-DESCRIPTION = "Weston is the reference implementation of a Wayland compositor"
-HOMEPAGE = "http://wayland.freedesktop.org"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \
- file://src/compositor.c;endline=26;md5=e342df749174a8ee11065583157c7a38"
-
-SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
- file://weston.png \
- file://weston.desktop \
- file://0001-make-error-portable.patch \
- file://0001-configure.ac-Fix-wayland-protocols-path.patch \
- file://0001-shared-include-stdint.h-for-int32_t.patch \
- file://xwayland.weston-start \
- file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \
- file://0001-Add-configuration-option-for-no-input-device.patch \
-"
-SRC_URI[md5sum] = "c5fdc02ab67d33c0fca8f72d341facdf"
-SRC_URI[sha256sum] = "548973496a5c8613d6690f9120f21066946a544df65ce4fe0ef153a8dc0bf6de"
-
-inherit autotools pkgconfig useradd distro_features_check
-# depends on virtual/egl
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-DEPENDS = "libxkbcommon gdk-pixbuf pixman cairo glib-2.0 jpeg"
-DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
-
-EXTRA_OECONF = "--enable-setuid-install \
- --disable-rpi-compositor \
- --disable-rdp-compositor \
- WAYLAND_PROTOCOLS_SYSROOT_DIR=${RECIPE_SYSROOT} \
- "
-EXTRA_OECONF_append_qemux86 = "\
- WESTON_NATIVE_BACKEND=fbdev-backend.so \
- "
-EXTRA_OECONF_append_qemux86-64 = "\
- WESTON_NATIVE_BACKEND=fbdev-backend.so \
- "
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms fbdev wayland egl', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd x11', d)} \
- clients launch"
-#
-# Compositor choices
-#
-# Weston on KMS
-PACKAGECONFIG[kms] = "--enable-drm-compositor,--disable-drm-compositor,drm udev virtual/mesa mtdev"
-# Weston on Wayland (nested Weston)
-PACKAGECONFIG[wayland] = "--enable-wayland-compositor,--disable-wayland-compositor,virtual/mesa"
-# Weston on X11
-PACKAGECONFIG[x11] = "--enable-x11-compositor,--disable-x11-compositor,virtual/libx11 libxcb libxcb libxcursor cairo"
-# Headless Weston
-PACKAGECONFIG[headless] = "--enable-headless-compositor,--disable-headless-compositor"
-# Weston on framebuffer
-PACKAGECONFIG[fbdev] = "--enable-fbdev-compositor,--disable-fbdev-compositor,udev mtdev"
-# weston-launch
-PACKAGECONFIG[launch] = "--enable-weston-launch,--disable-weston-launch,drm"
-# VA-API desktop recorder
-PACKAGECONFIG[vaapi] = "--enable-vaapi-recorder,--disable-vaapi-recorder,libva"
-# Weston with EGL support
-PACKAGECONFIG[egl] = "--enable-egl --enable-simple-egl-clients,--disable-egl --disable-simple-egl-clients,virtual/egl"
-# Weston with cairo glesv2 support
-PACKAGECONFIG[cairo-glesv2] = "--with-cairo-glesv2,--with-cairo=image,cairo"
-# Weston with lcms support
-PACKAGECONFIG[lcms] = "--enable-lcms,--disable-lcms,lcms"
-# Weston with webp support
-PACKAGECONFIG[webp] = "--with-webp,--without-webp,libwebp"
-# Weston with unwinding support
-PACKAGECONFIG[libunwind] = "--enable-libunwind,--disable-libunwind,libunwind"
-# Weston with systemd-login support
-PACKAGECONFIG[systemd] = "--enable-systemd-login,--disable-systemd-login,systemd dbus"
-# Weston with Xwayland support (requires X11 and Wayland)
-PACKAGECONFIG[xwayland] = "--enable-xwayland,--disable-xwayland"
-# colord CMS support
-PACKAGECONFIG[colord] = "--enable-colord,--disable-colord,colord"
-# Clients support
-PACKAGECONFIG[clients] = "--enable-clients --enable-simple-clients --enable-demo-clients-install,--disable-clients --disable-simple-clients"
-# Weston with PAM support
-PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
-
-do_install_append() {
- # Weston doesn't need the .la files to load modules, so wipe them
- rm -f ${D}/${libdir}/weston/*.la
-
- # If X11, ship a desktop file to launch it
- if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
- install -d ${D}${datadir}/applications
- install ${WORKDIR}/weston.desktop ${D}${datadir}/applications
-
- install -d ${D}${datadir}/icons/hicolor/48x48/apps
- install ${WORKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps
- fi
-
- if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
- install -Dm 644 ${WORKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland
- fi
-}
-
-PACKAGE_BEFORE_PN += "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', '${PN}-xwayland', '', d)}"
-PACKAGES += "${PN}-examples"
-
-FILES_${PN} = "${bindir}/weston ${bindir}/weston-terminal ${bindir}/weston-info ${bindir}/weston-launch ${bindir}/wcap-decode ${libexecdir} ${libdir}/${BPN}/*.so ${datadir}"
-FILES_${PN}-examples = "${bindir}/*"
-
-FILES_${PN}-xwayland = "${libdir}/${BPN}/xwayland.so"
-RDEPENDS_${PN}-xwayland += "xserver-xorg-xwayland"
-
-RDEPENDS_${PN} += "xkeyboard-config"
-RRECOMMENDS_${PN} = "liberation-fonts"
-RRECOMMENDS_${PN}-dev += "wayland-protocols"
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM_${PN} = "--system weston-launch"
diff --git a/recipes-graphics/wayland/weston_1.11.1.bbappend b/recipes-graphics/wayland/weston_1.11.1.bbappend
deleted file mode 100644
index ccbf393..0000000
--- a/recipes-graphics/wayland/weston_1.11.1.bbappend
+++ /dev/null
@@ -1,46 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI_append_imxgpu3d = " \
- file://0001-MGS-2352-ccc-Add-GPU-VIV-support-for-weston-1.11.patch \
- file://0002-MGS-2521-ccc-Enable-g2d-renderer-for-weston-1.11.patch \
- file://0003-MGS-1783-xwld-Add-clone-mode-support-for-multi-displ.patch \
- file://0004-MGS-1668-xwld-System-can-not-boot-up-to-desktop.patch \
- file://0005-MGS-1724-xwld-G2D-compositor-build-failed-in-slevk-b.patch \
- file://0006-Link-compositor-to-egl.patch \
-"
-
-SRC_URI_append = " \
- file://0007-xwayland-Fix-crash-when-run-with-no-input-device.patch \
-"
-
-# The 'egl' configuration of weston requires gles support, and consideration
-# must be taken for the different SoC capabilities:
-# - For SoCs with 3d support, imx-gpu-viv provides hardware-accelerated
-# egl and gles, so weston egl configuration is enabled.
-# - For SoCs with VG2D, like i.MX 6SoloLite, imx-gpu-viv provides
-# hardware-accelerated egl but does not provide a compatible software
-# version of gles, so weston egl configuration is disabled.
-# - For SoCs with no GPU, mesa provides software implementations of egl
-# and gles, so weston egl configuration is enabled.
-PACKAGECONFIG_IMX_TO_APPEND = ""
-PACKAGECONFIG_IMX_TO_APPEND_imxgpu3d = "cairo-glesv2"
-PACKAGECONFIG_IMX_TO_REMOVE = ""
-PACKAGECONFIG_IMX_TO_REMOVE_imxgpu2d = "egl"
-PACKAGECONFIG_IMX_TO_REMOVE_imxgpu3d = ""
-
-PACKAGECONFIG_append = " ${PACKAGECONFIG_IMX_TO_APPEND}"
-PACKAGECONFIG_remove = " ${PACKAGECONFIG_IMX_TO_REMOVE}"
-
-
-EXTRA_OECONF_IMX_COMMON = " \
- --disable-libunwind \
- --disable-xwayland-test \
- WESTON_NATIVE_BACKEND=fbdev-backend.so \
-"
-EXTRA_OECONF_IMX = ""
-EXTRA_OECONF_IMX_imxpxp = "${EXTRA_OECONF_IMX_COMMON}"
-EXTRA_OECONF_IMX_imxgpu2d = "${EXTRA_OECONF_IMX_COMMON}"
-
-EXTRA_OECONF_append = " ${EXTRA_OECONF_IMX}"
-
-PACKAGE_ARCH = "${MACHINE_SOCARCH}"
diff --git a/recipes-graphics/wayland/weston_2.0.0.bb b/recipes-graphics/wayland/weston_2.0.0.bb
new file mode 100644
index 0000000..8160f55
--- /dev/null
+++ b/recipes-graphics/wayland/weston_2.0.0.bb
@@ -0,0 +1,113 @@
+SUMMARY = "Weston, a Wayland compositor"
+DESCRIPTION = "Weston is the reference implementation of a Wayland compositor"
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \
+ file://libweston/compositor.c;endline=26;md5=e342df749174a8ee11065583157c7a38"
+
+SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
+ file://weston.png \
+ file://weston.desktop \
+ file://0001-make-error-portable.patch \
+ file://0001-configure.ac-Fix-wayland-protocols-path.patch \
+ file://xwayland.weston-start \
+ file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \
+"
+SRC_URI[md5sum] = "15f38945942bf2a91fe2687145fb4c7d"
+SRC_URI[sha256sum] = "b4e446ac27f118196f1609dab89bb3cb3e81652d981414ad860e733b355365d8"
+
+inherit autotools pkgconfig useradd distro_features_check
+# depends on virtual/egl
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+DEPENDS = "libxkbcommon gdk-pixbuf pixman cairo glib-2.0 jpeg"
+DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
+
+EXTRA_OECONF = "--enable-setuid-install \
+ --disable-rdp-compositor \
+ "
+EXTRA_OECONF_append_qemux86 = "\
+ WESTON_NATIVE_BACKEND=fbdev-backend.so \
+ "
+EXTRA_OECONF_append_qemux86-64 = "\
+ WESTON_NATIVE_BACKEND=fbdev-backend.so \
+ "
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms fbdev wayland egl', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd x11', d)} \
+ clients launch"
+#
+# Compositor choices
+#
+# Weston on KMS
+PACKAGECONFIG[kms] = "--enable-drm-compositor,--disable-drm-compositor,drm udev virtual/mesa mtdev"
+# Weston on Wayland (nested Weston)
+PACKAGECONFIG[wayland] = "--enable-wayland-compositor,--disable-wayland-compositor,virtual/mesa"
+# Weston on X11
+PACKAGECONFIG[x11] = "--enable-x11-compositor,--disable-x11-compositor,virtual/libx11 libxcb libxcb libxcursor cairo"
+# Headless Weston
+PACKAGECONFIG[headless] = "--enable-headless-compositor,--disable-headless-compositor"
+# Weston on framebuffer
+PACKAGECONFIG[fbdev] = "--enable-fbdev-compositor,--disable-fbdev-compositor,udev mtdev"
+# weston-launch
+PACKAGECONFIG[launch] = "--enable-weston-launch,--disable-weston-launch,drm"
+# VA-API desktop recorder
+PACKAGECONFIG[vaapi] = "--enable-vaapi-recorder,--disable-vaapi-recorder,libva"
+# Weston with EGL support
+PACKAGECONFIG[egl] = "--enable-egl --enable-simple-egl-clients,--disable-egl --disable-simple-egl-clients,virtual/egl"
+# Weston with cairo glesv2 support
+PACKAGECONFIG[cairo-glesv2] = "--with-cairo-glesv2,--with-cairo=image,cairo"
+# Weston with lcms support
+PACKAGECONFIG[lcms] = "--enable-lcms,--disable-lcms,lcms"
+# Weston with webp support
+PACKAGECONFIG[webp] = "--with-webp,--without-webp,libwebp"
+# Weston with unwinding support
+PACKAGECONFIG[libunwind] = "--enable-libunwind,--disable-libunwind,libunwind"
+# Weston with systemd-login support
+PACKAGECONFIG[systemd] = "--enable-systemd-login,--disable-systemd-login,systemd dbus"
+# Weston with Xwayland support (requires X11 and Wayland)
+PACKAGECONFIG[xwayland] = "--enable-xwayland,--disable-xwayland"
+# colord CMS support
+PACKAGECONFIG[colord] = "--enable-colord,--disable-colord,colord"
+# Clients support
+PACKAGECONFIG[clients] = "--enable-clients --enable-simple-clients --enable-demo-clients-install,--disable-clients --disable-simple-clients"
+# Weston with PAM support
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
+
+do_install_append() {
+ # Weston doesn't need the .la files to load modules, so wipe them
+ rm -f ${D}/${libdir}/libweston-2/*.la
+
+ # If X11, ship a desktop file to launch it
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
+ install -d ${D}${datadir}/applications
+ install ${WORKDIR}/weston.desktop ${D}${datadir}/applications
+
+ install -d ${D}${datadir}/icons/hicolor/48x48/apps
+ install ${WORKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
+ install -Dm 644 ${WORKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland
+ fi
+}
+
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', '${PN}-xwayland', '', d)} \
+ libweston-2 ${PN}-examples"
+
+FILES_${PN} = "${bindir}/weston ${bindir}/weston-terminal ${bindir}/weston-info ${bindir}/weston-launch ${bindir}/wcap-decode ${libexecdir} ${libdir}/${BPN}/*.so ${datadir}"
+
+FILES_libweston-2 = "${libdir}/lib*${SOLIBS} ${libdir}/libweston-2/*.so"
+SUMMARY_libweston-2 = "Helper library for implementing 'wayland window managers'."
+
+FILES_${PN}-examples = "${bindir}/*"
+
+FILES_${PN}-xwayland = "${libdir}/libweston-2/xwayland.so"
+RDEPENDS_${PN}-xwayland += "xserver-xorg-xwayland"
+
+RDEPENDS_${PN} += "xkeyboard-config"
+RRECOMMENDS_${PN} = "liberation-fonts"
+RRECOMMENDS_${PN}-dev += "wayland-protocols"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system weston-launch"
diff --git a/recipes-graphics/wayland/weston_2.0.0.bbappend b/recipes-graphics/wayland/weston_2.0.0.bbappend
new file mode 100644
index 0000000..b32c5e6
--- /dev/null
+++ b/recipes-graphics/wayland/weston_2.0.0.bbappend
@@ -0,0 +1,35 @@
+SUMMARY_append = " (with i.MX support)"
+
+DEPENDS_append_imxgpu2d = " virtual/libg2d"
+
+# Use i.MX fork of weston for customizations.
+SRC_URI_remove_imxgpu2d = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz"
+SRC_URI_prepend_imxgpu2d = "git://source.codeaurora.org/external/imx/weston-imx.git;protocol=https;branch=weston-imx-2.0 "
+SRCREV_imxgpu2d = "506dc2d69b7cf7b7e7d1ea94ce29c8203215a67e"
+S_imxgpu2d = "${WORKDIR}/git"
+
+# Define RECIPE_SYSROOT since it doesn't exist in morty
+# for this backported recipe
+RECIPE_SYSROOT = "${STAGING_DIR}/${MACHINE}"
+
+EXTRA_OECONF_IMX_COMMON = "WESTON_NATIVE_BACKEND=fbdev-backend.so"
+EXTRA_OECONF_IMX = ""
+EXTRA_OECONF_IMX_imxpxp = "${EXTRA_OECONF_IMX_COMMON}"
+EXTRA_OECONF_IMX_imxgpu2d = "${EXTRA_OECONF_IMX_COMMON}"
+EXTRA_OECONF_append = " ${EXTRA_OECONF_IMX}"
+
+# Disable OpenGL for parts with GPU support for 2D but not 3D
+IMX_REQUIRED_DISTRO_FEATURES_REMOVE = ""
+IMX_REQUIRED_DISTRO_FEATURES_REMOVE_imxgpu2d = "opengl"
+IMX_REQUIRED_DISTRO_FEATURES_REMOVE_imxgpu3d = ""
+REQUIRED_DISTRO_FEATURES_remove = "${IMX_REQUIRED_DISTRO_FEATURES_REMOVE}"
+IMX_EXTRA_OECONF_OPENGL = ""
+IMX_EXTRA_OECONF_OPENGL_imxgpu2d = " --disable-opengl"
+IMX_EXTRA_OECONF_OPENGL_imxgpu3d = ""
+EXTRA_OECONF_append = "${IMX_EXTRA_OECONF_OPENGL}"
+
+PACKAGECONFIG_append_imxgpu3d = " cairo-glesv2"
+
+RDEPENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-loginuid', '', d)}"
+
+PACKAGE_ARCH = "${MACHINE_SOCARCH}"
--
1.9.1
More information about the meta-freescale
mailing list