Best way to run GPU-accelerated applications

To be clear, the effort I’m talking about is for properly rebasing the kernel patches on top of the modern mainline kernel, since right now everything is a mess, as well as making sure the main Mesa tree has the relevant code from “panfork”. Why does the fork exist in the first place? I believe I saw something about icecream95 leaving the Freedesktop team, but maybe my memory is playing tricks on me…
I would really-really like to be wrong and see major leaps in upstreaming and mainlining everything sooner rather than later, but chances are, it’s going to take time.

Here I’m just looking to make the best of the current situation so that I can use the board for what I bought it (emulation/kodi). Whether it’s on Linux or Android I don’t care, but I think it is very unlikely that Linux drivers will improve quickly as they are bad for every board. So no, I don’t have a demonstration of full acceleration on Linux. So android seems to be the only option now.

I’m pretty sure something is broken on the android we have now, maybe it’s governor, maybe the dev console being enabled (unlikely), maybe the included drivers are old. I don’t believe there are good hardware reasons for the GPU performance being so bad. No idea how that was missed in the Debug Party but I guess we’ll just have to deal with it now.

The above might be hardware and something isn’t right as far as I know everybody is sharing and using the same Rockchip BSP Android image more or less.
So the software and drivers are likely the same but there is a difference…

The drivers on Linux with the Panfrost hacks would seem to be missing the importance of the CFS which is microcontroller based Command Stream Frontend that acts as a asynchronous arbiter between CPU IRQ and GPU so they both run in parallel, which they are not doing very well, with various other differences.
There is a reason why Collabora and FreeDesktop have stopped MESA at the Mali G52 which I don’t know what but presume its some politics or payment, maybe even licence…

Ah. Is there someone here who could compare the GPU performance of Rock 5B and another RK3588 board under the most similar software possible? Starting to worry I bought a cat in a poke now.

Could I suggest discussing technical details of drivers or whoever stopped supporting them in a different topic? Let’s try to keep this on point (it is useful and all but more for developers - as Linus Torvalds said, “the user doesn’t care”).

1 Like

That’s what I feared, if we are using same android base as competitors, then it directly points toward hardware issues, which would be embarassing.
The only hope then would be that a software fix can overcome it which isn’t a sure thing.

Probably this board went production too soon, knowing they were already late compared to other competitor. My guess is they probably rushed hoping everything would get fixed by software afterwards.

Now wondering what’s next, not sure we can get refunded if we want to return it?

Let’s not rush to conclusions before we have an actual test though.

Looking for someone with a non-Radxa RK3588 or RK3588S board!

Might buy one, if this board stays messy too long…
One thing I’m wondering, it seems community here is quite active, not sure how it is for other manufacturers like khadas, mekotronics…
Then wondering why they manage better on their side, if they do not have bigger community support.

The OP has hence why the discus but on Linux its generally there is no decent driver as if you watch the gpu load in sys often its not being loaded more than 60-70%
I am taking the OP at face value as for me Geekbench gave reasonable results but Glmark2-es2 was far off the mark I expected, but that is the current state of the driver.

If what you want is test/comparision with existing board, a YT channel you probably know has tested several RK3588(s) based boards (like this one https://youtu.be/JQ3sScPzfqs), not sure he included benchmark though, but he is testing emulation/ android games.

Then you can just install same games, emulators and see how it performs.
On my side I tried WoT but not very demanding game, also Fortnite, but for some reason can’t log in, seems like button doesn’t respond (will retry with joystick).
Probably Genshin Impact is the best to have an idea (he says from previous video, 60FPS, medium settings).

EDIT: finally found some android benchmark for mekotronics,
see https://youtu.be/A1lIjwBCn2A?t=369
score he got is 4054 which is a bit better to what I got (around 3700 I think) not huge difference it seems at the end.

I appreciate your advice… You must have searched for these things for a bit.
I can see that there are benchmarks there but these are overall scores, so one problem is that the CPU affects the results. We already know that the CPU on Rock 5B performs similarly (if not better) to the competing boards, but we’d like to isolate GPU performance as the variable. You can’t do this just by looking at YouTube, you have to do the tests yourself. In this way you can control other variables as well. Otherwise the numbers don’t mean much.

You also won’t get any info from running a game. You need a dedicated GPU test, with scores for various tasks done with various APIs. Then we can start to figure out what goes wrong and which driver combination actually works, or whether it’s a hardware problem.

I’ll check the Compute benchmark in Geekbench. Looks like it runs on the GPU, and is cross-platform. But we need something to compare to. So I am looking for

  1. Someone with another RK3588(S) board
  2. Someone who can boot the newest android image (20221104) from NVME as I don’t have a spare disk, and run it on their board
  3. Some suggestions for good GPU tests (games aren’t)

On second video link, he performs benchmarks both for CPU and GPU.

  • 3D Mark : 4050
  • Antutu (GPU) 222985

I just linked benchmark from YT because no one here seems to have other boards to test on.
Whether it was done by you or someone else, don’t really change the score you’ll get from benchmarks

As for accuracy, I would believe they still give good approximation of performance level you can expect from your GPU. Unless there are other way of testing …
Of course there is probably more in depth testing like Vulkan API…

1 Like

Ah yes. I’ll do antutu then and run the Vulkan and OpenGL Geekbench benchmarks. Then we can compare. I will edit the first post for the scores, and wait for someone to join…

Don’t forget to treat all kinds of “scores” with a grain of doubt. For example, I’ve just ran glmark-es2 with panfork and blob drivers, and got interesting results…

Panfork:

    GL_VENDOR:     Panfrost
    GL_RENDERER:   Mali-G610 (Panfrost)
    GL_VERSION:    OpenGL ES 3.1 Mesa 23.0.0-devel
=======================================================
[build] use-vbo=false: FPS: 1164 FrameTime: 0.859 ms
[build] use-vbo=true: FPS: 1223 FrameTime: 0.818 ms
[texture] texture-filter=nearest: FPS: 1314 FrameTime: 0.761 ms
[texture] texture-filter=linear: FPS: 1286 FrameTime: 0.778 ms
[texture] texture-filter=mipmap: FPS: 1276 FrameTime: 0.784 ms
[shading] shading=gouraud: FPS: 1195 FrameTime: 0.837 ms
[shading] shading=blinn-phong-inf: FPS: 1170 FrameTime: 0.855 ms
[shading] shading=phong: FPS: 1132 FrameTime: 0.883 ms
[shading] shading=cel: FPS: 1110 FrameTime: 0.901 ms
[bump] bump-render=high-poly: FPS: 843 FrameTime: 1.186 ms
[bump] bump-render=normals: FPS: 1302 FrameTime: 0.768 ms
[bump] bump-render=height: FPS: 1170 FrameTime: 0.855 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1162 FrameTime: 0.861 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 928 FrameTime: 1.078 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1203 FrameTime: 0.831 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 304 FrameTime: 3.289 ms
[desktop] effect=shadow:windows=4: FPS: 943 FrameTime: 1.060 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 352 FrameTime: 2.841 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 351 FrameTime: 2.849 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 402 FrameTime: 2.488 ms
[ideas] speed=duration: FPS: 849 FrameTime: 1.178 ms
[jellyfish] <default>: FPS: 1039 FrameTime: 0.962 ms
[terrain] <default>: FPS: 69 FrameTime: 14.493 ms
[shadow] <default>: FPS: 870 FrameTime: 1.149 ms
[refract] <default>: FPS: 299 FrameTime: 3.344 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1227 FrameTime: 0.815 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1227 FrameTime: 0.815 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1249 FrameTime: 0.801 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 1238 FrameTime: 0.808 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1219 FrameTime: 0.820 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1237 FrameTime: 0.808 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1233 FrameTime: 0.811 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1232 FrameTime: 0.812 ms
=======================================================
                                  glmark2 Score: 994

Blob:

    GL_VENDOR:     ARM
    GL_RENDERER:   Mali-LODX
    GL_VERSION:    OpenGL ES 3.2 v1.g6p0-01eac0.efb75e2978d783a80fe78be1bfb0efc1
=======================================================
[build] use-vbo=false: FPS: 1005 FrameTime: 0.995 ms
[build] use-vbo=true: FPS: 1070 FrameTime: 0.935 ms
[texture] texture-filter=nearest: FPS: 1090 FrameTime: 0.917 ms
[texture] texture-filter=linear: FPS: 1120 FrameTime: 0.893 ms
[texture] texture-filter=mipmap: FPS: 1150 FrameTime: 0.870 ms
[shading] shading=gouraud: FPS: 1020 FrameTime: 0.980 ms
[shading] shading=blinn-phong-inf: FPS: 1027 FrameTime: 0.974 ms
[shading] shading=phong: FPS: 972 FrameTime: 1.029 ms
[shading] shading=cel: FPS: 1010 FrameTime: 0.990 ms
[bump] bump-render=high-poly: FPS: 804 FrameTime: 1.244 ms
[bump] bump-render=normals: FPS: 1169 FrameTime: 0.855 ms
[bump] bump-render=height: FPS: 1133 FrameTime: 0.883 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1148 FrameTime: 0.871 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 956 FrameTime: 1.046 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1142 FrameTime: 0.876 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 737 FrameTime: 1.357 ms
[desktop] effect=shadow:windows=4: FPS: 987 FrameTime: 1.013 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 200 FrameTime: 5.000 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 190 FrameTime: 5.263 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 286 FrameTime: 3.497 ms
[ideas] speed=duration: FPS: 614 FrameTime: 1.629 ms
[jellyfish] <default>: FPS: 952 FrameTime: 1.050 ms
[terrain] <default>: FPS: 234 FrameTime: 4.274 ms
[shadow] <default>: FPS: 955 FrameTime: 1.047 ms
[refract] <default>: FPS: 362 FrameTime: 2.762 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1047 FrameTime: 0.955 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1074 FrameTime: 0.931 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1092 FrameTime: 0.916 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 1097 FrameTime: 0.912 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1100 FrameTime: 0.909 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1108 FrameTime: 0.903 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1122 FrameTime: 0.891 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1135 FrameTime: 0.881 ms
=======================================================
                                  glmark2 Score: 912

You may notice that the score of the blob driver is somewhat lower. However, the most complicated tests, e.g. terrain and refract, were actually running a lot faster!

1 Like

Can someone explain step by step how to install the blob driver with radxa debian image and x11? I can’t find one anywhere.
Actually it’s in the repos and already installed. But Xorg is still using llvmpipe.

1 Like

Hi. Just booted amazingfates Armbian Ubu 22 Gnome build and I also get 995 for glmark2-es2-wayland score so I’d say that’s the confirmed speed status of panfork at this time for the G610.

I also have a Linux fr Scratch build of KDE on usb3 hdd working with X. Wayland wont fully start yet. That’s with mesa-panfork-git 23.0.0 I built myself. Happy so far with my Rock5. It’s noticibly faster than my N2+ and i’ve enjoyed that board for 2+ yrs.

1 Like

As mentioned above, that score of 995 is a bit misleading: you get ~1000 fps in all simple tests, but when it comes to the “terrain” test (the most computationally intensive one), the blob driver will get you a 3x speedup. In the “real life” performance, like Minecraft, that could mean some hefty 3x speedup too: Guide: run Minecraft at full speed on Rock 5B

What’s the package name?

It’s pretty much the same, I wouldn’t worry about that being an issue.

Using the Khadas Edge2 image for userspace, glmark2-es2-wayland gave me just about exactly the same score as cnx-software got in their review—slightly over 4000.

It’s somewhere in the middle. The difference in performance is less from being “computationally intensive”, and more about the number of GPU jobs required per frame.

The terrain and refract tests both do mipmapping every frame, which requires a lot of separate GPU jobs. Most games don’t do that, and only require one or two jobs, so the slow down will not be so bad.

That said, I do have some patches that improve performance a lot, with some games more than doubling in performance, but they are not quite ready. glmark2 improves a lot, though terrain and refract are still not as good as the blob:

[bump] bump-render=high-poly: FPS: 1907 FrameTime: 0.524 ms
[bump] bump-render=normals: FPS: 7389 FrameTime: 0.135 ms
[bump] bump-render=height: FPS: 7348 FrameTime: 0.136 ms
[terrain] <default>: FPS: 147 FrameTime: 6.803 ms
[shadow] <default>: FPS: 2905 FrameTime: 0.344 ms
[refract] <default>: FPS: 282 FrameTime: 3.546 ms

Finally, note that “real life” is not just about performance, but compatibility. gl4es works sometimes, but some hardware features (e.g. BCn texture compression, precise occlusion queries) cannot be used, and emulating features can only get so far… often gl4es+blob crashes or has game-breaking graphical artefacts.

1 Like

The OPi folks set up the apt configuration to hold back some upgrades. If you try to manually apt install gnome on debian, apt will abort because dependency on xserver-common. The X stuff seems to be what is held back form upgrading.

I believe (gut feel) the issues are centered around gnomes switch to Wayland. The Mali drivers apparently don’t want to play with Wayland yet, …

So, I think rockchip or someone at BSP level is still cooking the RK3588’ Mali drivers. Hence, at least 2 different 3588x boards (radxa and orngPi) won’t play with newer gnome packages.

1 Like