Previous versions of the image:
==================================================
After a lot of teasers, I have decided to share my Gnome3 Wayland XU4 image.
link: http://oph.mdrjr.net/memeka/images/hips ... 032017.img
md5: 041ea0447ed1fd97da125f43960aa8fb
login: odroid (Odroid User)
password: odroid
root password: odroid
There is a lot of work I have put in this image for many years:
* starting with installing gnome3 on the Odroid U3 in 2014:
https://www.youtube.com/watch?v=COyZJLHMGDs
* trying gnome3 on the XU4 in 2015:
https://www.youtube.com/watch?v=fvhu_OkGKtA
* realising gnome3 can work well only with wayland, and playing with wayland on the original odroid XU in 2014:
https://www.youtube.com/watch?v=DRBzOpxEaiU and 2015:
https://www.youtube.com/watch?v=5Ha6vFol8ck
* finally getting wayland working on the odroid XU3 at the beginning of 2016 using the TIZEN drivers and the 4.0 kernel:
https://www.youtube.com/watch?v=Eza6nIgyZA0
* developing first Mali integration for the 4.x mainline kernel later on in 2016 (kernel 4.7):
https://www.youtube.com/watch?v=o0aFehweAyk
* getting gnome3 working after a lot of patching 6 months ago (gnome 3.20 in ubuntu):
https://www.youtube.com/watch?v=RbMLkXbB3Gs
This is not the final release I wanted, but more of a preview of Gnome on Wayland. Here is what you're getting:
* kernel 4.9.12 custom - mostly similar to the HK 4.9 kernel, with the main difference that it has my own Mali integration that uses devfreq, with a special governor for mali. Currently it's set at boot to "performance" and uses Mali at 600Mhz, but it can be changed to "simple_ondemand" where it lower the Mali clock to 177Mhz. The HK kernel should work, but I find the GPU performance better with my integration.
* debian 7 stretch rootfs (testing but all packages are frozen)
* Wayland Mali userspace drivers from ARM r12p0
* gnome 3.22 and several apps installed
* BE AWARE THE IMAGE IS SET TO BOOT FROM SD-CARD! if you want emmc, you need to replace /dev/mmcblk1
with /dev/mmcblk0
in /boot/boot.ini
and /etc/fstab
. Also the monitor is set to DVI mode in boot.init
so there's no HDMI audio device -- edit boot.ini to enable it!
* Netflix 1080p streaming with kodi: http://forum.odroid.com/viewtopic.php?f ... 84#p185684
What you should be looking for (good and bad):
* gdm3 working. should start automatically on boot
* the image boots in graphical mode mode, but you can run
sudo systemctl set-default multi-user.target
and at next boot it goes to text-mode -- where you can start gdm3 with
sudo service gdm3 start
* from gdm3 login, you can choose Gnome on Wayland session or Wayland session (from the little gear button)
* most gnome3 apps working, with a few caveats: gnome-maps crashes the session (gnome-shell) on exit; gnome-videos (totem) sometimes crashes gnome-shell on exit
* gnome-videos (totem) has full video acceleration: can play video with no issues (using egl and mfc accelerations). like i said above, due to some gnome-shell issue (it works well in weston) sometimes it crashes the session when you exit it.
* gnome videos can play youtube videos accelerated (egl and mfc):
https://www.youtube.com/watch?v=IGk9V5tBOCQ
* mpv can play videos very well using egl without crashing using ffmpeg. However, since I did not include my custom mfc-enabled ffmpeg, mpv uses software decoding. You can try applying the patches to ffmpeg and get mpv fully egl and mfc accelerated:
https://www.youtube.com/watch?v=Ie7BR3WgXWQ&t=9s
* mpv can play youtube too:
https://www.youtube.com/watch?v=ydWF7ADj6jU
* mfc-accelerated decoding on gstreamer (using the default repository package, not my custom encoding-enabled gst) that can use egl accelerated clutterautovideosink and glimagesink (gst-plugins-bad required a simple patch to enable gles2)
* browser: epiphany -- can do egl & gstreamer decoding !!! -- BUT due to a bug in the mali drivers, tabs that use egl (or gstreamer, since it calls for egl) will not be rendered! I have complained about this to ARM, but of course they have not replied. Apparently, there's an internal patch that fixes this bug, which will allow FULL browser acceleration for webgl and video decoding!!! - but these drivers are not published yet. See
https://community.arm.com/graphics/f/di ... -in-webkit and
https://community.arm.com/graphics/f/di ... ce-drivers
* There are some GTK3 firefox builds that might work well, but also I don't think they have EGL yet.
* XWayland works well, but without EGL. This means you can run chromium and should work well, but without EGL.
* LibreOffice should work well since it's using GTK3:
https://www.youtube.com/watch?v=4WT1i9NU7Tk
Well, this turned out to be a long summary. Please let me know your findings. And please try and debug issues and contribute.
Cheers and thanks to all that helped and made this possible!
PS: kodi and retroarch should work on this image if they are configured for the wayland backend (even if the latest kodi doesn't support officially wayland anymore, there are unofficial repositories that still maintain wayland compatibility). You've already seen kodi on wayland working on my image:
https://www.youtube.com/watch?v=o0aFehweAyk
PSS: if you're wondering about the naming:
* hipster - well, according to @mdrjr, wayland is for hipsters

* stretchy - based on debian stretch
* pants - first release, getting you all with your pants down
==================================================
PATCHES:
Gnome3/Mutter
==============
Gnome3 Wayland support has improved A LOT and continues to improve each version. For example, in Gnome 3.18, I had to patch mutter, clutter, and cogl. Now, in 3.22, there is only mutter to apply a few patches. In 3.24, I've seen the patching is way simpler - just replace one string for another (the string checks an OpenGL-ES extension), and that's it!
Here are the patches for 3.22:
1: use software cursor (else the mouse cursor will not be rendered)
Code: Select all
commit d2a6c6a55ba3d7aaf88a494de3e4e84a08325cac
Author: memeka <mihailescu2m@gmail.com>
Date: Tue Nov 1 09:39:01 2016 +1030
exynos: use software cursor
Signed-off-by: memeka <mihailescu2m@gmail.com>
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
index f4ea8d2..aad315c 100644
--- a/src/backends/native/meta-cursor-renderer-native.c
+++ b/src/backends/native/meta-cursor-renderer-native.c
@@ -329,7 +329,9 @@ should_have_hw_cursor (MetaCursorRenderer *renderer,
if (!has_valid_cursor_sprite_gbm_bo (cursor_sprite))
return FALSE;
- return TRUE;
+ // exynos hack: use software cursor
+ return FALSE;
+ // return TRUE;
}
static gboolean
2. enable GLES2 driver as default (or else it will try OpenGL and fail)
Code: Select all
commit 220e562b0f92d457c2b06a5d04ace86219fb7dfa
Author: memeka <mihailescu2m@gmail.com>
Date: Tue Nov 1 10:03:18 2016 +1030
mali on wayland: enable gles2 driver as default
Signed-off-by: memeka <mihailescu2m@gmail.com>
diff --git a/debian/rules b/debian/rules
index 6aba938..92611a8 100755
--- a/debian/rules
+++ b/debian/rules
@@ -13,7 +13,14 @@ override_dh_autoreconf:
ifeq ($(DEB_HOST_ARCH_OS),linux)
CONFFLAGS = \
--enable-wayland \
- --enable-native-backend
+ --enable-native-backend \
+ --enable-kms-egl-platform \
+ --enable-wayland-egl-platform \
+ --enable-wayland-egl-server \
+ --with-default-driver=gles2 \
+ --enable-cogl-gles2 \
+ --enable-gles2 \
+ --with-gles2-libname=libGLESv2.so.2
else
CONFFLAGS += \
--disable-wayland-egl-platform \
This patch is for the debian packaging; for other systems you need to adapt it and add the configure flags from above.
3. use eglGetPlatformDisplayEXT instead of eglGetDisplay to initialize EGL (because eglGetDisplay fails)
Code: Select all
commit 250520ace3c953667e8e9d10b2568be851797815
Author: memeka <mihailescu2m@gmail.com>
Date: Mon Feb 27 12:45:57 2017 +1030
mali on wayland: try eglGetPlatformDisplayEXT before eglGetDisplay
Signed-off-by: memeka <mihailescu2m@gmail.com>
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 103e6ad..ae7f247 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -235,31 +235,15 @@ static EGLDisplay
meta_egl_get_display (void *native)
{
EGLDisplay dpy = NULL;
- const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS);
- if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base"))
- {
- PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
- (void *) eglGetProcAddress ("eglGetPlatformDisplay");
-
- if (get_platform_display)
- dpy = get_platform_display (EGL_PLATFORM_GBM_MESA, native, NULL);
-
- if (dpy)
- return dpy;
- }
-
- if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base"))
- {
- PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
+ PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
(void *) eglGetProcAddress ("eglGetPlatformDisplayEXT");
- if (get_platform_display)
- dpy = get_platform_display (EGL_PLATFORM_GBM_MESA, native, NULL);
+ if (get_platform_display)
+ dpy = get_platform_display (EGL_PLATFORM_GBM_KHR, native, NULL);
- if (dpy)
+ if (dpy)
return dpy;
- }
return eglGetDisplay ((EGLNativeDisplayType) native);
}
That's it! Pretty easy
Linux kernel
===========
Like I said, everything should be ok (albeit maybe slower EGL) with the HK kernel. But for those that want to keep track of my own kernel, you can find it at
https://github.com/mihailescu2m/linux/t ... dxu4-4.9.y.
Please not I am always rebasing the patches, so you'll need to force updates

My config:
https://transfer.sh/t5zqE/memeka.config