Panfrost for Bifrost GPUs - Big improvements

Just an update after “reboot” with latest “mesa-arm-git” from http://archlinuxdroid.tk/archlinuxdroid/aarch64 repo.

TV Box: Beelink GT King Pro Rev A (S922X-H CPU and GPU: G52)
Manjaro_Vim3_Xfce with linux kernel 5.9.8-1 (no sound is really inconvenient) instead of linux-vim kernel 5.9.8-1.

glxgears with mesa-arm-git performance is much closer to 60 fps (actual results 55.9 to 59.9) to my monitor refresh rate of 60Hz as it should be. Compared to mesa-git 21.0.0, glxgears results (44.3-50.9 fps).

Furthermore text editing is not as lagging compared to earlier mesa-git-21.0.0-devel.

[jfl@GTKPro ~]$ glxinfo -B
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Panfrost (0xffffffff)
Device: Mali G52 (Panfrost) (0xffffffff)
Version: 21.0.0
Accelerated: yes
Video memory: 3627MB
Unified memory: yes
Preferred profile: compat (0x2)
Max core profile version: 0.0
Max compat profile version: 2.1
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 2.0
OpenGL vendor string: Panfrost
OpenGL renderer string: Mali G52 (Panfrost)
OpenGL version string: 2.1 Mesa 21.0.0-devel (git-01e3f43007)
OpenGL shading language version string: 1.20

OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.0.0-devel (git-01e3f43007)
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

[jfl@GTKPro ~]$ glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
291 frames in 5.0 seconds = 58.198 FPS
296 frames in 5.0 seconds = 58.998 FPS
295 frames in 5.0 seconds = 58.989 FPS
296 frames in 5.0 seconds = 58.996 FPS
300 frames in 5.0 seconds = 59.900 FPS
298 frames in 5.0 seconds = 59.424 FPS
290 frames in 5.0 seconds = 57.971 FPS
293 frames in 5.0 seconds = 58.405 FPS
293 frames in 5.0 seconds = 58.498 FPS
297 frames in 5.0 seconds = 59.230 FPS
297 frames in 5.0 seconds = 59.312 FPS
294 frames in 5.0 seconds = 58.490 FPS
294 frames in 5.0 seconds = 58.472 FPS
297 frames in 5.0 seconds = 59.316 FPS
289 frames in 5.0 seconds = 57.685 FPS
296 frames in 5.0 seconds = 58.939 FPS
285 frames in 5.1 seconds = 55.963 FPS
295 frames in 5.0 seconds = 58.880 FPS
296 frames in 5.0 seconds = 58.882 FPS
296 frames in 5.0 seconds = 58.963 FPS
290 frames in 5.0 seconds = 57.972 FPS
294 frames in 5.0 seconds = 58.629 FPS
298 frames in 5.0 seconds = 59.534 FPS

glmark2-es2 (glmark2 2014.03) with mesa-arm-git-21.0.0-(e7802-1) is 44 compared to 37 with mesa-git-21.0.0 earlier.
[jfl@GTKPro ~]$ glmark2-es2

glmark2 2014.03

=======================================================
OpenGL Information
GL_VENDOR: Panfrost
GL_RENDERER: Mali G52 (Panfrost)
GL_VERSION: OpenGL ES 2.0 Mesa 21.0.0-devel (git-01e3f43007)

[build] use-vbo=false: FPS: 48 FrameTime: 20.833 ms
[build] use-vbo=true: FPS: 50 FrameTime: 20.000 ms
[texture] texture-filter=nearest: FPS: 56 FrameTime: 17.857 ms
[texture] texture-filter=linear: FPS: 50 FrameTime: 20.000 ms
[texture] texture-filter=mipmap: FPS: 50 FrameTime: 20.000 ms
[shading] shading=gouraud: FPS: 42 FrameTime: 23.810 ms
[shading] shading=blinn-phong-inf: FPS: 48 FrameTime: 20.833 ms
[shading] shading=phong: FPS: 38 FrameTime: 26.316 ms
[shading] shading=cel: FPS: 40 FrameTime: 25.000 ms
[bump] bump-render=high-poly: FPS: 37 FrameTime: 27.027 ms
[bump] bump-render=normals: FPS: 46 FrameTime: 21.739 ms
[bump] bump-render=height: FPS: 49 FrameTime: 20.408 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 52 FrameTime: 19.231 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 41 FrameTime: 24.390 ms
[pulsar] light=false:quads=5:texture=false: FPS: 54 FrameTime: 18.519 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 27 FrameTime: 37.037 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] effect=shadow:windows=4: FPS: 52 FrameTime: 19.231 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 43 FrameTime: 23.256 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 42 FrameTime: 23.810 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 47 FrameTime: 21.277 ms
[ideas] speed=duration: FPS: 48 FrameTime: 20.833 ms
[jellyfish] : FPS: 47 FrameTime: 21.277 ms
[terrain] : FPS: 10 FrameTime: 100.000 ms
[shadow] : FPS: 36 FrameTime: 27.778 ms
[refract] : FPS: 16 FrameTime: 62.500 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 50 FrameTime: 20.000 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 48 FrameTime: 20.833 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 48 FrameTime: 20.833 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 53 FrameTime: 18.868 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 50 FrameTime: 20.000 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 45 FrameTime: 22.222 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 54 FrameTime: 18.519 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 45 FrameTime: 22.222 ms

                              glmark2 Score: 44 

=======================================================
[jfl@GTKPro ~]$

glmark2-es2 (glmark2 2020.04). Score 44 is the same as glmark2 2014.03, just without warning message.

[jfl@GTKPro ~]$ glmark2-es2

glmark2 2020.04

=======================================================
OpenGL Information
GL_VENDOR: Panfrost
GL_RENDERER: Mali G52 (Panfrost)
GL_VERSION: OpenGL ES 2.0 Mesa 21.0.0-devel (git-01e3f43007)

[build] use-vbo=false: FPS: 52 FrameTime: 19.231 ms
[build] use-vbo=true: FPS: 47 FrameTime: 21.277 ms
[texture] texture-filter=nearest: FPS: 59 FrameTime: 16.949 ms
[texture] texture-filter=linear: FPS: 50 FrameTime: 20.000 ms
[texture] texture-filter=mipmap: FPS: 50 FrameTime: 20.000 ms
[shading] shading=gouraud: FPS: 49 FrameTime: 20.408 ms
[shading] shading=blinn-phong-inf: FPS: 52 FrameTime: 19.231 ms
[shading] shading=phong: FPS: 48 FrameTime: 20.833 ms
[shading] shading=cel: FPS: 42 FrameTime: 23.810 ms
[bump] bump-render=high-poly: FPS: 33 FrameTime: 30.303 ms
[bump] bump-render=normals: FPS: 50 FrameTime: 20.000 ms
[bump] bump-render=height: FPS: 49 FrameTime: 20.408 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 51 FrameTime: 19.608 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 44 FrameTime: 22.727 ms
[pulsar] light=false:quads=5:texture=false: FPS: 51 FrameTime: 19.608 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 24 FrameTime: 41.667 ms
[desktop] effect=shadow:windows=4: FPS: 54 FrameTime: 18.519 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 35 FrameTime: 28.571 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 37 FrameTime: 27.027 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 46 FrameTime: 21.739 ms
[ideas] speed=duration: FPS: 47 FrameTime: 21.277 ms
[jellyfish] : FPS: 48 FrameTime: 20.833 ms
[terrain] : FPS: 11 FrameTime: 90.909 ms
[shadow] : FPS: 36 FrameTime: 27.778 ms
[refract] : FPS: 17 FrameTime: 58.824 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 49 FrameTime: 20.408 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 54 FrameTime: 18.519 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 49 FrameTime: 20.408 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 45 FrameTime: 22.222 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 50 FrameTime: 20.000 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 48 FrameTime: 20.833 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 50 FrameTime: 20.000 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 49 FrameTime: 20.408 ms

                              glmark2 Score: 44 

=======================================================
[jfl@GTKPro ~]$

Hi,

Does anyone know what is the difference between mesa-arm-git and mesa-panfrost-git build in “archlinuxdroid” repo?

mesa-panfrost-git belongs to the first tests of jgmdev who setup archlinuxdroid repo. He wrote you should better use mesa-arm-git instead because this contains the most recent updates of mesa.

Hm, that is surprising low.

Here are results of jgmdev running glmark2-es2 before it crashed:

glmark2 2020.04
=======================================================
OpenGL Information
GL_VENDOR:     Panfrost
GL_RENDERER:   Mali G52 (Panfrost)
GL_VERSION:    2.1 Mesa 21.0.0-devel (git-f89b29f708)
=======================================================
[build] use-vbo=false: FPS: 312 FrameTime: 3.205 ms
[build] use-vbo=true: FPS: 347 FrameTime: 2.882 ms
[texture] texture-filter=nearest: FPS: 404 FrameTime: 2.475 ms
[texture] texture-filter=linear: FPS: 405 FrameTime: 2.469 ms
[1]    2153 segmentation fault (core dumped)  glmark2

Does not work perfectly for me. I still have dropped frames (~9 fps) on X96Max+ with Mali G31. Maybe because libvdpau_meson and libcuda are missing. Did not find it in one of the packages.

[themojoman@manjaro-arm64 ~]$ mpv --hwdec=auto --hwdec-codecs=all https://youtube.com/watch?v=BHACKCNDMW8
 (+) Video --vid=1 (*) (h264 1920x1080 30.000fps)
 (+) Audio --aid=1 --alang=eng (*) (opus 2ch 48000Hz)
Cannot load libcuda.so.1
[vaapi] libva: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
Failed to open VDPAU backend libvdpau_meson.so: cannot open shared object file: No such file or directory
AO: [pulse] 48000Hz stereo 2ch float
Using hardware decoding (v4l2m2m-copy).
VO: [gpu] 1920x1080 nv12
AV: 00:01:40 / 03:00:08 (0%) A-V:  0.000 Dropped: 852 Cache: 140s/54MB
[ffmpeg/demuxer] mov,mp4,m4a,3gp,3g2,mj2: Packet corrupt (stream = 0, dts = 3776000).
[ffmpeg] NULL: Invalid NAL unit size (234662 > 206658).
[ffmpeg] NULL: missing picture in access unit with size 206716
Exiting... (Quit)

Wow is like up to 6 times slow 52 fps vs 312 fps for the first test! May be some other settings might be involved to optimize the performance.

There was an update of mesa-arm-git (Mesa 21.0.0-devel (git-1200f6da0b) and just update it and ran glmark2-es2 (glmark2 20.20.04) and GT King Pro score is slightly lower 41.

Do you have to install any other packages from the repo other than mesa-arm-git for the video hardware acceleration?

Hi Strit,

You are using an Odroid N2, how is your N2 glmark2-es2 score like?

Hi Spikerguy,

Your GT King Pro have a higher speed than mine Rev A. How is your glmark2-es2 like with Panfrost.

TheMojoMan,

Somehow, glmark2-es2-wayland doesn’t start.
[jfl@GTKPro ~]$ glmark2-es2-wayland
Error: main: Could not initialize canvas

Don’t know. Haven’t tried. :slight_smile:

Will try when I get a larger drive, so I can actually install stuff. :stuck_out_tongue:

This does not work when using XFCE. You have to use wayland instead of X11. You might install gnome or sway to test it.

Thanks for the info. Will stick with Xfce for the time being.

Today, I’ve struggled panfrost on odroid-N2 & testing branch.
all os images were built by manjaro-arm-installer.

  • KDE + kernel 5.9.8-2 + mesa = no panfrost
  • KDE + kernel 5.9.8-2 + mesa-git = panfrost, glxgears with 60fps but crash X(screen freeze) frequently
  • xfce + kernel 5.9.8-2 + mesa = no panfrost
  • xfce + kernel 5.9.8-2 + mesa-git = panfrost, glxgears with 40-50fps but crash X frequently

I also tried mesa-arm-git but frequent X crashes(screen freeze) were still existing.
(I didnt check dmsg when crashes occured, sorry)

My conclusion is that panfrost on odroid-N2 is hard to work so far. I’ll keep tracking after the next testing branch release.

1 Like

Thank you very much for testing out so many probabilities.

Highly appreciate your work and yes panfrost is causing freezing but you can switch to waylanf on. Kde and try.

I think it doesnt freeze on wayland.

Cheers

1 Like

wayland is enable with KDE by default but it seems causing freeze.
(the installed version is based on testing branch, of course)

Looking at your glmark2-es2 results with a supposedly lower GPU (and with a much earlier mesa-git-20.3.0) than in GTKPro with G52 and your score is significantly better and the Odroid N2 results by jgmdev are way better. This lead me to suspect that Manjaro image for GT King Pro have not been optimized, missing drivers or enviromental set up?

I know you guys are excited for Panfrost on the Bifrost architectures. But it’s still very early days.

It’s normal for results to be all over the place, when the development moves as quickly as it does.

You don’t see users testing Alpha drivers for Nvidia cards, do you? :stuck_out_tongue:

The fact that it’s actually just around the corner is a amazing to be honest. So I don’t get the “your benchmark score is higher than mine” thing. It means absolutely nothing this early in the development cycle.

1 Like

I hope we all know Panfrost is under development!

I see improvements almost every day and like Strit says this is very exciting. I just want to cry for all the people involved in this BRAVO!!! :clap: :clap: :clap: