Graphics API support on the VisionFive 2

I am curious what the current state of graphics API support on the VisionFive 2 is.

I was under the impression that basic Vulkan support was available, but I am not able to get Vulkan apps to launch, and running vulkaninfo in the terminal gives an output of Segmentation fault. If I try to run Godot, it crashes when it gets to loading Vulkan. vkcube runs successfully, but it stutters, and that’s the only one that I’ve gotten to work. Are there any other tools I can use to test Vulkan?

I am also unable to get OpenGL applications to run. If I run glxgears then it gives me a message of “Error: couldn’t get an RGB, Double-buffered visual”. If I try to run Godot, it gives me a message that OpenGL is not supported.

1 Like

These demos all work fine for me (I had to patch a few to get them to compile):

If it helps, I also hacked the reporting tool to compile (somehow the surface lookups failed, but the report is otherwise fairly complete) and reported the GPU info here:

That said, I get terrible performance issues - vkQueueSubmit and vkQueuePresentKHR each start taking around 1s after a few calls, and performance is terrible. I tried digging reducing to minimal calls and running through pvrdebug and couldn’t see why - also the demos above don’t have this problem, although my software runs fine on a wide range of other devices (including other IMG/PowerVR GPUs.)

For OpenGL, I did notice that the installed SDL2 was compiled without GL/GLX support. I suspect there’s just more parts of the system without GLX compiled in, causing OpenGL init failures. I haven’t been adventurous enough to go on a recompiling spree, since other PowerVR/IMG devices have given me better performance through Vulkan anyway and it’s more interesting.

Not sure if that helps but some of Sascha’s demos run pretty decently.


1 Like

IMG BXE are not support OpenGL by now

Then what is this video: Playing SuperTuxKart on VisionFive 2 - YouTube

Vulkan doesn’t even run properly on the Raspberry 4 after 4 years of development. But OpenGL should run on everything by now.

I’m a bit confused now. VisionFive 2 has IMG BXE-4-32 MC1, and the official SuperTuxKart demo is running. But you said IMG BXE does not support OpenGL by now. So how is it possible for the official demo to run?

I think it might be language barrier, Vulkan does not work and will probably never work, but OpenGL (ES) obviously needs to work or the product does not exist!

We could use gl4es to convert opengl es to opengl, or using zink to implement opengl on vulkan

The VF2 has a Imagination Technologies BXE-4-32 (MC1) for it’s GPU as part of the JH7110 SoC.
My ASSumption would be that everything that is possible with that hardware, which should eventually be open sourced by Imagination Technologies will become available. So:

OpenCL 3.0
OpenGL ES 3.2/2.0/1.1 + Extensions
Vulkan 1.2

The key features on Imagination Technologies website for the BXE-4-32 (mc1) are:

API Support
  • Vulkan 1.2
  • OpenGL ES 3.x/2.0/1.1 + Extensions
  • OpenCL 3.0
  • Android NN HAL
OS Support
  • Linux Consumer
  • Linux
  • IMGIC Framebuffer Compression
  • PVRTC, ETC and ASTC Support
Floating point operations per clock
  • 32 FP32 FLOPs/Clock
  • 64 FP16 FLOPs/Clock
Pixels per Clock
  • 4ppc

The features in the JH7110 datasheet, are far more detailed, currently in listed in section “2.3.3. GPU”, but I’m only going to list the first few lines:
The GPU of JH7110 has the following features.

• IMG BXE-4-32 MC1 with work frequency up to 600 MHz (400 MHz by default)
• Fully compliant with the following APIs:
◦ Support OpenCL 3.0
◦ Support OpenGL ES 3.2
◦ Support Vulkan 1.2

Debian Image 69 does not have any drivers or software support for OpenGL. All of the system libraries are compiled without OpenGL support. glxgears does not run. I don’t know how they managed to run SuperTuxKart.

Yes same as on reddit, I meant ES! Of course…

Because of Raspberry making OpenGL work on OpenGL ES I didn’t think that glxgears was OpenGL -ES…

Most OpenGL compiles on ES if you don’t use stupid parts of OpenGL…

I use the same OpenGL for my 3D MMO on Windows and Raspberry (ES not the OpenGL shim they made).

Khronos really screwed this one up, we can’t even communicate properly.

Anywho OpenGL(ES)3 is the final GL language because VAO is the last feature. Everything else since then is meaningless.

Done some research and thanks everyone for the previous explanations.

I’ve been using OpenGL for so long that I forgot OpenGL ES exists.

In short, although long long ago OpenGL and OpenGL ES evolved at different paces, OpenGL ES 3.x can be considered as a subset of OpenGL that has clean APIs.

So I guess SuperTuxKart only uses these APIs that are both in OpenGL and OpenGL ES, so then VisionFive 2 can run it with no or few code modifications.

Compared to OpenGL and OpenGL ES, I really miss Vulkan. Hope it will be nicely supported without glitches soon.

Yes, but don’t get your hopes up for Vulkan, it’s an over-engineered mess and as I said Raspberry has been hiring a company with many employees for 4 years and still it’s nowhere near complete.

OpenGL (ES) 3 is the final GL, VAO is the last feature.

1 Like

Its interesting, vkcube is kinda jittery but Sascha’s demos compiled and ran for me just fine and smoothly in terms of consistent FPS and on screen appearance.

+1 for the vulkaninfo segfault.

I also tried connecting the PVRTune profiler from a windows host - its has riscv64 support etc, I did have to add RSA to the sshd HostKeyAlgorithms for it to connect. However I ran into issues with the device binary due to the glibc version on the debian image and missing from GCC (I think?)

My ASSumption would be that everything that is possible with that hardware, which should eventually be open sourced by Imagination Technologies will become available. So:
OpenCL 3.0
OpenGL ES 3.2/2.0/1.1 + Extensions
Vulkan 1.2

WRT this they’ve committed to open sourcing a mesa vulkan driver only, with GLES to be provided by the ANGLE translation layer.

1 Like