Hello, I would like to report a bunch of problems we found when we started using Vulkan instead of OpenGL on a wide range of Android devices.
- We have a feature of rendering tank silhouette using stencil and when we switched to Vulkan following artifacts (see them attached) appeared on Adreno 610 with Android 10 (Xiaomi Redmi Note 8) - so instead of enabling Vulkan for Android 10, we enabled it for Android 11+ only.
- We faced random device lost crashes on Pixel 4 with Adreno 640 - so we explicitly disabled Vulkan for this device.
- On Mali-G52/G72 (Xiaomi Redmi 10, Samsung Galaxy S9) with Vulkan enabled there is a 100% crash when MSAA is enabled, regardless of the Android version (it could be caused by deferred decals rendering the same as on Mali-G76) - we restricted MSAA for these devices.
- On Mali-G52 with Mediatek Helio (mt676[8-9]) or Unisoc T618 hardware there are random crashes when Vulkan is enabled, these crashes are not related to MSAA - we disabled Vulkan for these devices.
- On Mali-G76 with Mediatek Helio (mt6785) hardware regardless of the Android version there is a crash caused by Vulkan + MSAA + deferred decals, disabling any of these solves the crash - we disabled Vulkan.
- On other Mali-G76 (Samsung S10, Huawei P30 Pro, Redmi Note 8 Pro) the same crash caused by Vulkan + MSAA + deferred decals happens only with Android 10 and 11 - so we enabled Vulkan only on Android 12+.
- On Mali-G77 with Android 11 (Samsung S20) there is a crash when rendering our “camouflage” material with Vulkan enabled, we didn’t investigate it deeper but most likely it is because of texture arrays which are used in this material - we also enabled Vulkan only on Android 12+ for these devices.
- For Mali-G57 we also enabled Vulkan for Android 12+, just in case, because it has the same architecture as Mali-G77.
- On PowerVR GM9446 (Oppo Reno 5 Lite) with Android 12 there is a crash when creating a compute shader - so for PowerVR we enabled Vulkan for B-series only.
Could you please review all these problems and comment if you’ve seen any of them, because it seems that the device profiles from BaseDeviceProfiles.ini don’t handle them properly, at least for our project.
Also, during our meetings with Epic’s dev relations team, Stéphane Jacoby mentioned that he can share the device profiles used by Epic Games for the game projects internally. We would highly appreciate it if that’s really possible.
Hi Alexander,
The suggestion to move to Vulkan was in the context of devices that reported supporting GLES 3.2 but were actually running GLES 3.1 under the hood.
For PowerVR devices in general, we do not enable Vulkan on any devices prior to the new Series GPUs.
For Mali GPUs, Vulkan isn’t targeted below the G72. As for the issues you’ve identified on G76/G77 devices, these are likely use cases against older driver versions that do not affect our internal products. MSAA sppears to be behind most of these driver issues but we do not have any special device exceptions on this as it isn’t employed. It may be worth isolating Mali driver version that resolves this issue and use that rather than Android version to disable it as different device manufacturers may not necessarily be in sync step between Android and MALI driver versions.
Lastly for Adreno 6xx devices, Vulkan is limited to driver version 525 and above.
Best regards.
Hi Stephane, thank you for the answer!
Yes, we began discussing the move to Vulkan in relation to the topic you’ve mentioned. Since then, we’ve completed the transition, which helped us resolve several random OpenGL crashes. However, some new issues have appeared, even though we’re using the same driver and Android version limitations as those specified in BaseDeviceProfiles.ini at the time of UE 5.3.
- Regarding the Adreno 6xx - I see that in release branch of UE5 Vulkan is limited to driver version 525 only for Adreno 660, while other Adreno GPUs start using Vulkan with driver version 400 (500 in ue5-main branch), I suppose we should also use 500, as in the main branch - or do you have any insights suggesting that 525 is preferable?
- Regarding Mali, you mentioned that Vulkan isn’t targeted for GPUs below the G72. Does that mean the Mali-G52 shouldn’t use Vulkan? But as I see in the release branch at BaseDeviceProfile.ini#828 this GPU seems to be using Android_Unknown_Vulkan (Enable Vulkan on any unknown Mali running Android 10 or later)
- It’s interesting that you don’t use MSAA. Is that because you’re using the Mobile Deferred renderer on mobile, or is there another reason?
- Anyway, the idea of limiting devices based on the driver rather than the Android version sounds reasonable - we will try.
- Regarding PowerVR, again, in the release branch at BaseDeviceProfiles#843 I see that PowerVR GM9xxx uses Vulkan regardless of the driver or Android version. That’s why I’m reporting the issue we encountered there. Do you mean that, for your games, you use a different device profile setup for PowerVR which excludes the GM series from Vulkan support?
Kind regards,
Alexander
Hi Alexander,
The previous comments above pertain to product specific override of DeviceProfile’s and not the base engine’s. As these overrides can be highly dependent on engine usage and driver specific bugs that can be triggered by various scenarios, there isn’t really a one size fits all workaround. I don’t have any visibility on the history of the AA methods used on mobile internally, beyond the fact that MSAA isn’t currently employed.
Best regards.
Hi Stephane,
Thanks, that makes sense now!
Is there any chance we could take a look at the overridden DeviceProfiles? If they’re not intended for public use, maybe you could share them with us via email?
Kind regards
Hi Alexander,
We’ll reach out directly depending on legal approval. In the meantime, we can still answer questions but cannot share the files directly (these would not be usable verbatim anyway).
Best regards/
Hi Stéphane,
Understood, thank you for the clarification.
Best regards,
Alexander