browser icon indicating copy to clipboard operation
browser copied to clipboard

Raspberry Pi 4 GPU Acceleration only partially enabled?

Open sashahilton00 opened this issue 3 years ago • 8 comments

Hi,

I have been testing this block out in the hopes of using if for a kiosk where hardware accelerated graphics are required. After launching the block with the following configuration:

browser:
    image: bhcr.io/balenablocks/browser-aarch64
    privileged: true
    network_mode: host
    ports:
      - '5011'
    volumes:
      - 'browser-settings:/data'

    environment:
      LAUNCH_URL: 'https://testufo.com/'
      KIOSK: 0
      SHOW_CURSOR: 1
      ENABLE_GPU: 1

The chrome://gpu page is reporting that only rasterization is hardware accelerated - canvas, compositing and video decode are all software only, and opengl/webgl are unavailable all together. Please find attached a pastebin link for the full log from chrome://gpu: https://pastebin.com/XkZbdS75

Is there something basic that I am missing? @rahul-thakoor commented on the balena forums a while back about needing to use a Pi specific build of chromium, but looking through this repo it looks as though any pi specific stuff has been removed/replaced by the generic aarch64 image. Thread is here. When trying the older, unmaintained balena blocks image hosted on Docker (balenablocks/browser:raspberrypi4-64) the hardware acceleration is fully functional. A pastebin of the chrome://gpu report when running that block is available here: https://pastebin.com/1B5TsJtz, which shows hardware acceleration working as expected.

Any thoughts on where I might be going wrong would be much appreciated.

sashahilton00 avatar Apr 09 '22 16:04 sashahilton00

Hello @sashahilton00

In the current version, GPU hardware acceleration is disabled by default. You will need to set up ENABLE_GPU=1 as an environment variable for the browser service.

rahul-thakoor avatar Apr 11 '22 11:04 rahul-thakoor

You can find more details here

rahul-thakoor avatar Apr 11 '22 11:04 rahul-thakoor

Hi Rahul,

I have set that environment variable to enable the GPU - the config at the top of my comment is the one that I am using.

The problem is that it only appears to enable the GPU for rasterisation - WebGL and OpenGL are both disabled

sashahilton00 avatar Apr 11 '22 11:04 sashahilton00

Hi

Yes, we were originally using the following flags when enabling GPU

--enable-features=WebRTC-H264WithOpenH264FFmpeg 
--ignore-gpu-blacklist 
--enable-gpu-rasterization 
--force-gpu-rasterization 
--gpu-sandbox-failures-fatal=no 
--enable-native-gpu-memory-buffers

see here

Now, we set the following

 --enable-zero-copy
--num-raster-threads=4
--ignore-gpu-blacklist
--enable-gpu-rasterization

as set here

You can use the FLAGS var to try and find a working configuration for you.

Please note that this will overwrite the default flags we are using.

Can you please provide more details about your setup?

  • which balenaOS version are you using?
  • do you have any dtoverlays or config variable set?
  • can you ssh into the hostOS and provide the output of cat /mnt/boot/config.txt?
  • can you provide some output logs when the block starts?

Thanks

rahul-thakoor avatar Apr 11 '22 13:04 rahul-thakoor

I'll run some tests with the flags provided above. With regards to version and config, I'm running balenaOS 2.95.8 (development), I have vc4-kms-v3d as a dtoverlay, and "i2c_arm=on","spi=on","audio=on" as dtparams. I'll provide some logs and the boot config when I run the tests.

sashahilton00 avatar Apr 12 '22 12:04 sashahilton00

Hey all, I'm having similar issues. Interestingly I had no issues with WebGL on RPi3. On RPi4 I can't get it to work (trying to render https://get.webgl.org/).

Marcocanc avatar May 17 '22 10:05 Marcocanc

This is seems to be caused by the version change in b2dd1a2067c561003b55a4bb5cd88d09df115a43. EDIT: Okay maybe it's caused by this #100 (0bc5e8933478a2c16a398a433e093c4fad09ebdf)

I have tested two versions of the browser block on a Raspberry Pi 4.

version Chrome Version WebGL
2.2.0 Chromium 92.0.4515.98 Built on Raspbian , running on Debian 10
2.4.3 Chromium 89.0.4389.114 built on Debian 10.9, running on Debian 10.6

Seems newer versions of the browser-block use a generic chromium build. And this causes issues.

Host Config
BALENA_HOST_CONFIG_disable_overscan 1
BALENA_HOST_CONFIG_gpu_freq         700
BALENA_HOST_CONFIG_gpu_mem          256
BALENA_HOST_CONFIG_over_voltage     4
RESIN_HOST_CONFIG_arm_64bit         1
RESIN_HOST_CONFIG_avoid_warnings    1
RESIN_HOST_CONFIG_disable_splash    1
RESIN_HOST_CONFIG_dtoverlay         "vc4-fkms-v3d"                   
RESIN_HOST_CONFIG_dtparam           "i2c_arm=on","spi=on","audio=on"

Chrissi2812 avatar Jul 13 '22 08:07 Chrissi2812

We have this issue with the browser-aarch64 version 2.4.6.

By changing the base image from balenalib/%%BALENA_MACHINE_NAME%%-debian-node:${NODEJS_VERSION}-buster-run to balenalib/%%BALENA_MACHINE_NAME%%-node:${NODEJS_VERSION}-run, I made the hardware acceleration working.

It seems the debian buster node base image doesn't come with the GPU acceleration support for RPI v4. I hope this can help.

hanyufoodles avatar Nov 28 '22 09:11 hanyufoodles