Turnip KGSL (and maybe Zink) - Vertex explosions with certain applications and black screen on DirectX9 games
System information
- OS: Android 10 and Ubuntu 20.04 inside a chroot
- GPU: Qualcomm Adreno 650
- Kernel version: 4.19.81-perf+
- Mesa version: 21.2.0-devel (git-ef5a97fe8e)
- Xserver version: Xvfb in the chroot, ExaGear Emulator X Server (unknown implementation)
- Desktop manager and compositor: none
Wine
- Wine/Proton version: Wine 5.22-devel inside ExaGear (x86 Emulator)
Describe the issue
I am currently trying to get 3D acceleration inside the ExaGear Windows Emulator for Android (an x86 emulator which emulates an Ubuntu x86 system with Wine installed on it to run x86 Windows games on Android) with the help of the Turnip KGSL driver, Zink and virgl vtest. The problem of ExaGear is that it has no direct access to the Android GPU drivers, so I am trying to get around that issue that with virgl. My current setup is as follows: I have set up on the one side an AARCH64 chroot with Ubuntu 20.04 on my Android device. Inside that chroot environment, I installed Turnip KGSL to get access to my Adreno 650 via the Vulkan API, then I am wrapping OpenGL on top of Vulkan with Zink and finally, I am forwarding the OpenGL calls via the virgl vtest server to ExaGear. On ExaGear, I am using Ubuntu 18.04 i386 with Wine 5.22-devel and Mesa compiled for virgl which establishes a connection to the vtest server to get 3D acceleration via virgl.
I have tested some games and apps inside ExaGear with Turnip + Zink + virgl vtest on the server side (AARCH64 chroot) and Mesa compiled for virgl on the client side (x86 Ubuntu in ExaGear) as the OpenGL backend and for comparison purposes I ran the same applications with LLVMpipe + virgl vtest instead of Turnip + Zink.
I have noticed that with Turnip KGSL, Zink and virgl some applications seem to suffer from vertex explosions and DirectX9 software/games only seem to show a black screen. Those issues don't happen when I am using LLVMpipe and virgl though. I am not entirely sure if all the issues are Turnip related but I think that most are, since with other drivers combined with Zink, these issues don't seem to happen.
A list of games/tests includes:
- Max Payne 3 (DX9 - Wine) - only renders a black screen but goes ingame (rendering is normal with LLVMpipe + virgl)
- GTA IV (DX9 - Wine) - only renders a black screen (rendering is as expected with LLVMpipe + virgl)
- Silent Hill 2 (DX8 - Wine) - suffers from a lot of vertex explosions (again, renders fine on LLVMpipe + virgl)
- glmark2 (Wine not used) - has some issues on some tests (again, behaves as expected on LLVMpipe + virgl)
- glxgears (Wine not used) - also has some vertex explosions (renders fine on LLVMpipe + virgl)
- SphereMap test (DX9 - Wine) - vertex explosions (normal behaviour with LLVMpipe + virgl)
Screenshots/video files
-
glxgears (Turnip + zink + virgl at the top, LLVMpipe + virgl at the bottom)
-
Additional tests (Aquamark 3 DX9 benchmark, glmark2, glxgears, Sphere Map DX9): https://www.youtube.com/watch?v=8nsq2Yz20Io