From: Alexander Kanavin <alex.kanavin@gmail.com>
To: openembedded-core@lists.openembedded.org
Subject: [PATCHv3 00/27] Enable accelerated OpenGL in qemu
Date: Thu, 17 Jan 2019 17:39:45 +0100 [thread overview]
Message-ID: <cover.1547743126.git.alex.kanavin@gmail.com> (raw)
V2 changes: addressed feedback from the first review round
V3 changes:
- better fix for missing qemu X11 include, as discussed with upstream
- maintainers.inc entry for virglrenderer
- egl-headless support (see below for details)
- improvements to kmscube recipe
- fix to vte-native to allow building it with gcc 4.8
Why this? Why now?
1. I think we are heading towards a reality where some kind of working
GL is a 'must' for any kind of UI work.
2. Typically people build images and then transfer them to the NUC or
even target boards for testing - using qemu would be less awkward.
3. Current qemu configuration is basically useless here, as it only
provides a very slow software GL driver from mesa.
0. TLDR:
a) Gtk UI frontend
$ . oe-init-build-env build-virgl
$ bitbake core-image-sato-sdk
$ runqemu kvm gl
$$ run glxgears or any other GL-capable binary inside qemu
b) egl-headless
$ . oe-init-build-env build-virgl
$ bitbake core-image-sato-sdk
$ runqemu kvm egl-headless publicvnc
$ <connect with a vnc viewer to 127.0.0.1:5900>
$$ run glxgears or any other GL-capable binary inside qemu
1. For the local UI, qemu is switched over to use gtk frontend. I simply
couldn't get SDL frontend to work properly, it only displays a blank black
window or doesn't start at all. Same thing happens with qemu binaries provided
by Fedora and opensuse (Ubuntu's qemu lacks virgl support). Seems like SDL support
has regressed.
2. What is egl-headless?
In this variant, Qemu does not open a UI window at all. Instead, it renders
all graphics, including GL, into a memory buffer, which can be seen with
a vnc or spice client (over a TCP socket). This has the following advantages:
- no need to be physically present at the host machine, output (including GL bits!)
can be seen remotely
- no need for the host machine to run an X session
3. While the components are built against the most minimum necessary
mesa-native set (gbm, egl, dri with no drivers), libepoxy loads and uses the
host GL implementation (through a chrpath hack). This is both to save build
times, and because the host is likely to have a set of drivers more
appropriate for the physical machine (e.g. proprietary nvidia stack,
although I didn't test that).
4. I tested this with
- glamor X server
- weston compositor with drm backend (build core-image-weston, then edit
weston.ini in the image to use drm backed instead of fbdev).
- kmscube
- glxgears
- https://www.geeks3d.com/gputest/
The latter two show FPS that is similar to running them directly on the host.
5. Some things I am not sure about:
- how much of a 'default' should this be for running qemu. It works for me,
but other people might find it less stable compared to the existing
sdl-vmware-swrast setup.
- what other tests and demos could be run
- how could this be tested on the autobuilder. I wrote two oe-selftests for
this (gtk, egl-headless), but one of them does require an X session, and both
require ability to create opengl contexts on the host.
The following changes since commit 4211a7497886561e9607f18dd4d81d0d41eaadfa:
dev-manual: Added some clarification for nographic qemu option. (2019-01-16 15:35:57 +0000)
are available in the Git repository at:
git://git.yoctoproject.org/poky-contrib akanavin/virgl-gtk
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=akanavin/virgl-gtk
Alexander Kanavin (27):
gtk+3: enable native/nativesdk variant
gtk+3: remove the gtk-icon-utils-native recipe
shared-mime-info: update the database also in native builds
pixbufcache.bbclass: remove a dependency loop introduced by enabling
gtk+3-native
meta: add native and nativesdk variants to various recipes to enable
gtk+3-native/nativesdk
libepoxy: enable native/nativesdk variants
mesa: enable native and nativesdk variants
virglrenderer: add a recipe
qemu: enable virglrenderer and glx options for native/nativesdk builds
qemu: drop --with-gtkabi option, as it is no longer supported
mesa-gl: do not enable nativesdk variant to avoid clashes with main
mesa recipe
local.conf.sample: adjust the qemu config to enable gtk+ instead of
sdl
qemu: build target variant with gtk+, and nativesdk variant without
sdl
qemu: remove support for building against host sdl
atk: disable gobject-introspection for nativesdk
qemu: add a gettext-native dependency to gtk option
libjpeg-turbo: fix nativesdk build in same way as native builds are
qemu: add a patch to avoid a missing definition error
qemu: add environment variable wrappers to make qemu look good with
gtk frontend
qemu: add a backported patch to fix egl-headless support
runqemu: add support for virgl GL acceleration
runqemu: do not check for GL libraries
testimage.bbclass: add support for passing runqemu params
selftest: add tests for virgl GL acceleration
kmscobe: update to latest commit, switch over to meson
kmscube: make gstreamer dependency optional
vte: allow building vte-native with gcc 4.8
meta-poky/conf/local.conf.sample | 9 +-
meta-selftest/lib/oeqa/runtime/cases/virgl.py | 17 +++
meta/classes/pixbufcache.bbclass | 2 +-
meta/classes/testimage.bbclass | 4 +-
meta/conf/distro/include/maintainers.inc | 1 +
meta/conf/machine/include/qemuboot-x86.inc | 2 +-
meta/lib/oeqa/core/target/qemu.py | 4 +-
meta/lib/oeqa/selftest/cases/runtime_test.py | 44 ++++++++
meta/recipes-devtools/qemu/qemu.inc | 38 ++++---
.../qemu/0001-Add-a-missing-X11-include.patch | 65 +++++++++++
...-egl-headless-add-egl_create_context.patch | 50 +++++++++
...x-libcap-header-issue-on-some-distro.patch | 2 +-
...-messages-when-qemi_cpu_kick_thread-.patch | 2 +-
meta/recipes-devtools/qemu/qemu_3.1.0.bb | 2 +
.../gdk-pixbuf/gdk-pixbuf_2.36.11.bb | 2 +-
.../gnome/adwaita-icon-theme_3.28.0.bb | 2 +
meta/recipes-gnome/gtk+/gtk+3.inc | 31 +++++-
.../gtk+/gtk-icon-utils-native_3.22.30.bb | 63 -----------
...endency-from-gtk-encode-symbolic-svg.patch | 102 ------------------
.../hicolor-icon-theme_0.17.bb | 2 +
meta/recipes-graphics/cairo/cairo_1.14.12.bb | 2 +-
.../harfbuzz/harfbuzz_2.2.0.bb | 2 +-
.../jpeg/libjpeg-turbo_2.0.1.bb | 3 +-
meta/recipes-graphics/kmscube/kmscube_git.bb | 9 +-
.../libepoxy/libepoxy_1.5.3.bb | 16 +++
meta/recipes-graphics/mesa/mesa-gl_18.1.9.bb | 2 +
meta/recipes-graphics/mesa/mesa.inc | 12 ++-
meta/recipes-graphics/pango/pango_1.42.4.bb | 2 +-
.../ttf-fonts/liberation-fonts_2.00.1.bb | 2 +
.../virglrenderer/virglrenderer_git.bb | 17 +++
.../xorg-lib/libxcomposite_0.4.4.bb | 2 +-
.../xorg-lib/libxdamage_1.1.4.bb | 2 +-
meta/recipes-graphics/xorg-lib/libxi_1.7.9.bb | 2 +
.../xorg-lib/libxtst_1.2.3.bb | 1 +
.../recipes-support/atk/at-spi2-atk_2.30.0.bb | 2 +
.../atk/at-spi2-core_2.30.0.bb | 1 +
meta/recipes-support/atk/atk_2.30.0.bb | 4 +-
.../shared-mime-info/shared-mime-info.inc | 2 +
...chool-asignment-to-avoid-gcc-4.8-err.patch | 27 +++++
meta/recipes-support/vte/vte_0.52.2.bb | 7 +-
scripts/runqemu | 60 +++++------
41 files changed, 378 insertions(+), 243 deletions(-)
create mode 100644 meta-selftest/lib/oeqa/runtime/cases/virgl.py
create mode 100644 meta/recipes-devtools/qemu/qemu/0001-Add-a-missing-X11-include.patch
create mode 100644 meta/recipes-devtools/qemu/qemu/0001-egl-headless-add-egl_create_context.patch
delete mode 100644 meta/recipes-gnome/gtk+/gtk-icon-utils-native_3.22.30.bb
delete mode 100644 meta/recipes-gnome/gtk+/gtk-icon-utils/Remove-Gdk-dependency-from-gtk-encode-symbolic-svg.patch
create mode 100644 meta/recipes-graphics/virglrenderer/virglrenderer_git.bb
create mode 100644 meta/recipes-support/vte/vte/0001-app.cc-use-old-school-asignment-to-avoid-gcc-4.8-err.patch
--
2.17.1
next reply other threads:[~2019-01-17 16:40 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-17 16:39 Alexander Kanavin [this message]
2019-01-17 16:39 ` [PATCHv3 01/27] gtk+3: enable native/nativesdk variant Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 02/27] gtk+3: remove the gtk-icon-utils-native recipe Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 03/27] shared-mime-info: update the database also in native builds Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 04/27] pixbufcache.bbclass: remove a dependency loop introduced by enabling gtk+3-native Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 05/27] meta: add native and nativesdk variants to various recipes to enable gtk+3-native/nativesdk Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 06/27] libepoxy: enable native/nativesdk variants Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 07/27] mesa: enable native and nativesdk variants Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 08/27] virglrenderer: add a recipe Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 09/27] qemu: enable virglrenderer and glx options for native/nativesdk builds Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 10/27] qemu: drop --with-gtkabi option, as it is no longer supported Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 11/27] mesa-gl: do not enable nativesdk variant to avoid clashes with main mesa recipe Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 12/27] local.conf.sample: adjust the qemu config to enable gtk+ instead of sdl Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 13/27] qemu: build target variant with gtk+, and nativesdk variant without sdl Alexander Kanavin
2019-01-17 16:39 ` [PATCHv3 14/27] qemu: remove support for building against host sdl Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 15/27] atk: disable gobject-introspection for nativesdk Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 16/27] qemu: add a gettext-native dependency to gtk option Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 17/27] libjpeg-turbo: fix nativesdk build in same way as native builds are Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 18/27] qemu: add a patch to avoid a missing definition error Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 19/27] qemu: add environment variable wrappers to make qemu look good with gtk frontend Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 20/27] qemu: add a backported patch to fix egl-headless support Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 21/27] runqemu: add support for virgl GL acceleration Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 22/27] runqemu: do not check for GL libraries Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 23/27] testimage.bbclass: add support for passing runqemu params Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 24/27] selftest: add tests for virgl GL acceleration Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 25/27] kmscobe: update to latest commit, switch over to meson Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 26/27] kmscube: make gstreamer dependency optional Alexander Kanavin
2019-01-17 16:40 ` [PATCHv3 27/27] vte: allow building vte-native with gcc 4.8 Alexander Kanavin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1547743126.git.alex.kanavin@gmail.com \
--to=alex.kanavin@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox