We have our own Linux Distro based on Yocto Hardknott using meta-tegra layer running on our
custom PCB with a Jetson Nano Module (emmc or sd). We have meta-browser layer and meta-clang
layer. The glx demo programs seem to be working and show very smooth gears and cubes turning in
3d at a reported 60 fps. We don’t need video or audio playback, but have verified gstreamer does work.
Everything is working great, except for chromium graphics hardware acceleration.
The Jetson Nano Evaluation Board with the JetPack software installed on it has a chromium with
working graphics hardware acceleration. We want to have the same performance on our Linux Distro
as NVIDIA has on their JetPack code. Here is a video of the Jetson Nano with JetPack.
We have downloaded the Chromium accelerated v90.0.4400.4 .deb file from the RidgeRun website and
installed it on our Linux Distro, but the chromium graphics don’t look hardware accelerated as shown
in the video.
Building chromium 90.0.4430.93 stable using meta-browser did not improve the chromium graphics.
This includes the RidgeRun patches and PACKAGECONFIG for chromium. Result shown in video.
And building a newer version of chromium 97.0.4692.71 stable gave about the same results as shown
in the video.
The JetPack has the following destops: Unity, LXDE, OpenBox, and Ubuntu. First we tried using xfce
and found that the mesa demos were dropping frames. We got better results using gnome as shown in
the videos.
xfce:
https://streamable.com/mekt64
gnome:
https://streamable.com/ffrybw
https://streamable.com/x56ei5
https://streamable.com/rlfskd
https://streamable.com/kennkt
The ctree l4t x11 demo has lots of flashing strips across the screen. The other demos looked good.
gnome:
https://streamable.com/0z6v06
https://streamable.com/c17hse
https://streamable.com/m56bte
We see the below error when running the chromium build from meta-browser. I think this error
indicates it is not using the GPU.
chromium --no-sandbox --show-fps-counter
…
Passthrough is not supported, GL is egl
…
We are using the following version of Linux-4-Tegra.
$ uname -a
Linux jetson-nano-hive-emmc 4.9.201-l4t-r32.5+g8f97b4ec4c5b #1 SMP PREEMPT Wed Mar 23
20:47:35 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
Our current Yocto image setup:
DISTRO_FEATURES = "acl argp ext2 vfat ipv4 ipv6 usbgadget usbhost systemd"
DISTRO_FEATURES += "bluetooth wifi xattr zeroconf pci multiarch ptest"
DISTRO_FEATURES += "largefile virtualization aufs pam opengl x11 wayland vulkan polkit"
NVIDIA_PACKAGES = "\
tegra-firmware-xusb \
tegra-minimal-init \
tegra-tools \
nvidia-docker \
nvidia-container-toolkit \
cuda-toolkit \
cuda-libraries \
tegra-firmware \
tegra-nvpmodel \
tegra-nvphs \
tegra-nvs-service \
tegra-nvstartup \
tegra-configs-udev \
tegra-configs-xorg \
tegra-configs-omx-tegra \
tegra-libraries-libv4l-plugins \
tegra-libraries-libnvosd \
tegra-udrm-probeconf \
kernel-module-nvgpu \
kernel-module-tegra-udrm \
gstreamer1.0-omx-tegra \
gstreamer1.0-plugins-nvvideo4linux2 \
nvgstapps \
libxkbcommon \
libdrm-nvdc \
libffi \
libglvnd \
tegra-nvphs-base \
egl-wayland \
vulkan-loader \
vulkan-tools \
l4t-graphics-demos-x11 \
l4t-graphics-demos-wayland \
l4t-graphics-demos-egldevice"
\
STANDARD_PACKAGES = "\
busybox \
run-postinsts \
u-boot-fw-utils \
kernel-devicetree \
kernel-modules \
util-linux \
sudo \
udev \
dhcpcd \
pciutils \
usbutils \
i2c-tools \
devmem2 \
python3 \
tzdata \
cpufrequtils \
avahi-daemon \
avahi-utils \
iperf3 \
tmux \
htop \
vim-tiny \
ethtool \
e2fsprogs-mke2fs \
e2fsprogs-e2fsck \
file \
linux-firmware-bcm43455 \
wpa-supplicant \
coreutils \
tar \
hostapd \
docker-ce \
gnupg \
stm32flash \
pv \
dfu-util \
openocd \
chromium-x11 \
gstreamer1.0 \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-python \
pointercal-xinput \
gdb \
mesa \
mesa-demos \
libglapi \
libvdpau \
libgbm \
libdrm \
wayland \
ffmpeg \
xdg-utils \
"
IMAGE_INSTALL = "\
packagegroup-core-boot \
packagegroup-gnome-desktop \
packagegroup-gnome-apps \
packagegroup-core-x11-xserver \
packagegroup-core-x11 \
${STANDARD_PACKAGES} \
${NVIDIA_PACKAGES} \
${PL_PACKAGES} \
"
IMAGE_FEATURES = "\
splash \
hwcodecs \
package-management \
ssh-server-openssh \
x11-base \
"
Here is our chromium-x11_%.bbappend:
DEPENDS += " \
mesa \
libglvnd \
virtual/egl \
virtual/libgl \
virtual/libgles1 \
virtual/libgles2 \
wayland \
wayland-utils \
wayland-protocolswayland-native \
egl-wayland \
vulkan-loader \
vulkan-headers \
vulkan-cts \
vulkan-tools \
vulkan-samples \
"
PACKAGECONFIG += " \
proprietary-codecs \
use-egl \
upower \
"
Here is our mesa_%.bbappends:
PACKAGECONFIG += "dri dri3 libgl libgl1 egl libegl libegl1 gles libgles1 libglesv1-cm1 libgles2
libglesv2-2 libgles3 gallium gbm opengl x11 wayland vulkan unwind"
EXTRA_OECONF += "--enable-texture-float --without-dri-drivers --enable-glx --enable-osmesa --
enable-debug"
DRIDRIVERS = " "
GALLIUMDRIVERS = "nouveau,tegra"
Below is our xserver-xorg_%.bbappends:
DEPENDS += " \
mesa \
virtual/libgles2 \
"
COMPATIBLE_MACHINE = "(tegra)"
OPENGL_PKGCONFIGS = "dri glx dri3 xshmfence"
PACKAGECONFIG = " \
unwind \
dga \
dri \
dri3 \
glx \
udev \
xshmfence \
xinerama \
${XORG_CRYPTO} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '${OPENGL_PKGCONFIGS}', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl wayland', 'xwayland', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-logind', '', d)} \
"
PACKAGE_ARCH_tegra = "${TEGRA_PKGARCH}"
Some questions:
- Does NVIDIA use vulkan for 3d graphics? Or something else?
- Does NVIDIA support DRI (Direct Rendering Infrastructure)? DRI1, DRI2, DIR3?
- Is DGA (Direct Graphics Access) required? If removed from xserver, then chromium fails to start.
- Is chromium version 90.0.4400.4 unstable required (or would chromium version v90.0.4430.93
stable work)? Or the newer version 97.0.4692.71 stable? - Which is best: wayland, x11, or xwayland?
- What are the requirements for libglvnd and mesa?
- NVIDIA uses desktops: Unity, LXDE, OpenBox, Ubuntu. Was there a problem with xfce?
I see glx demos dropping frames on xfce. The glx demo frames are not dropped on gnome. - Does NVIDIA support Meta-Tegra for Yocto?
- How did NVIDIA get chromium 3d graphics working?
- Any suggestions on how to get graphics hardware acceleration working on our Linux Distro?