Vulkan on Android

Hey there,

I’m not using SDL. But, if anyone has any experience/hints - would be great. I have a feeling some pretty experienced game devs are on this project.

I’m writing a mobile game. It uses Vulkan as the graphics renderer.
On iOS, via MoltenVK, it works flawlessly. It’s stunning the throughput I can get.

On Android, it is incredibly problematic.

For instance:

on a Sony test phone, it doesn’t handle any integers, so I had to remove all integers being passed into and through shaders. And it’s weirder than that, as in, some things it might be able to handle in some circumstances, but it is impossible to deduce exactly what circumstances. In the end it was safer to just remove.

a LineageOS PH-1 phone, the Vulkan drivers, perhaps, are entirely wrong. Vulkan doesn’t function, even for the “draw triangle” tester published by Kronos. Even weirder, this phone use to work, a year ago, someone must have updated it, or it updated itself, or something. Meanwhile the Vulkan capabilities reports a functioning device.

One Note 9 - using the same Adreno 5xx chip I think as the PH-1 - doesn’t work at all. Or I need to completely confirm, but, argh. On the phone I tested on, no triangle. Also, Adreno seems to have their own Vulkan SDK - does that mean I have to compile with their Vulkan SDK just to work on their chip set?


When I started the project, I thought, “if I use Vulkan, it will work everywhere, and will be future proof.” But it seems now that I’ll have to write an OpenGLES renderer.

Is this just “the way?” Is this what other devs encounter? Does anyone know what percentages of Android phone actually handle Vulkan (rather than reporting they do, but actually not.) Is there any resource that has real-world statistics on real-capabilities of phone, not marketing?

I realize this is off-topic for SDL, and I promise not to post other non-sdl messages after this one, but, if you have any information, it would be greatly appreciated.

I’m sticking with OpenGL/GLES because this seems to be the only back-end that really does work ‘everywhere’. There are regular scare stories about Apple dropping OpenGL (particularly on the Mac) but I’m not aware of any definite plans to do that, and in my iOS build I continue to get no warnings at all, either at the Xcode stage or on submission to the App Store, about my use of OpenGLES.