ModelViewer.pick almost always returns 0 on certain devices
Describe the bug In my application, I noticed that the pick() method works incorrectly on certain devices — it almost always returns 0. I verified this using the sample-gltf-viewer from this repository and confirmed that the issue is reproducible.
To Reproduce Steps to reproduce the behavior:
- Open the sample-gltf-viewer app on Samsung S22.
- Tap on the model.
- Observe that the returned pick result is 0 almost every time.
Expected behavior Tapping on a visible part of the model should return a valid entity, not 0.
Logs There are no errors or crashes in the logs. The issue is purely about unexpected behavior of the pick() method.
Smartphone: Device with issue:
- Device: Samsung Galaxy S22, S22+, S22 Ultra
- OS: Android 12
Additional context The issue was tested via BrowserStack. It consistently reproduces on Galaxy S22 devices, works fine on Galaxy S23, and is partially reproducible on Galaxy S24.
Video demonstration:
Software information:
Filament 1.60.0
Maybe you need some more information, please let me know. We have users who is awaiting for fix. Thank you.
@pixelflinger Sorry to bother you. Do you have any idea what this problem could be and how to fix it? New users of our app keep contacting us about this problem. Maybe we can fix it ourselves, and if you have any ideas on where to look first, please share. Thank you.
When you say it's partially reproducible on some devices, do you mean that it fully works on some S24 and fully doesn't work on some other S24, or do you mean it partially works on the same device?
I suspect it's related to the GPU, Samsung is known to have different SoCs depending on the market, for the same device denomination.
It would be useful to know on which GPUs this issue appears and on which it doesn't.
@pixelflinger By partially reproducible on S24 I mean that it's working most of the time, but sometime pick() method return 0.
I could check GPUs characteristics on Samsung devices that I have via BrowserStack. I will do it tomorrow from the morning and write here. Maybe I need to check something else also?
@pixelflinger Here are GPU that have this issue:
- Xclipse 920 (s22 characteristic)
- Xclipse 940 (s24 characteristic)
No issues:
- Adreno 740 (s23 characteristic)
@pixelflinger we have new complain from user with device Samsung Galaxy A56, it's the same issue. It's new 2025 device and it's have also Xclipse 540 GPU. https://www.gsmarena.com/samsung_galaxy_a56-13603.php
So it's looks like we need some urgent fix of this issue, as many top Samsung devices affected that have chips on Xclipse. Could you advise us what we can look by ourself in code sources?
ChatGPT info:
Samsung’s Xclipse GPUs are found in their recent Exynos mobile chipsets, built using AMD’s RDNA architecture. Here’s where you’ll find them: ⸻ Xclipse GPUs and Their Devices Xclipse 920 • Integrated into the Exynos 2200 (launched January 2022) • Samsung Galaxy S22 series, S22+, S22 Ultra (in regions using Exynos chips). Xclipse 940 • Part of the newer Exynos 2400, which uses AMD’s RDNA 3 architecture, released in 2024 • Likely found in 2024–2025 Samsung flagship phones (e.g. S24 series in regions using Exynos). Xclipse 530 • Used in the Exynos 1480 (an RDNA 2-based mid‑range chip), released Q1 2024 • Samsung A-series. Xclipse 540 • Found in the Exynos 1580, an RDNA 3-based mid-range SoC, launched Q4 2024 • Samsung F-series. ⸻
My gut feeling is that filament is using a pixel format for rendering the picking map that's not supported on these devices. I can have a look when I'm back from vacation.
@pixelflinger It's interesting that when we switch to the Vulkan engine, there are no issues on Samsung devices with the Xclipse GPU. While Vulkan crashes on some Android devices, it works fine on the newer Samsung models. The issue where pick() returns 0 looks like only occurs when using the OpenGL engine. Maybe it's will help you to understand what wrong and fix it. Thank you.
I'm not surprised, this must be either a bug or a limitation in ANGLE. The commonality here is ANGLE.
@olenev could you try this #8917 and let us know?
@pixelflinger The results are the same. It doesn't work on Samsung devices with their own Xclipse GPU.
@pixelflinger The results are the same. It doesn't work on Samsung devices with their own Xclipse GPU.
That's unfortunate, we're now using only always supported formats. So you see any new/different errors in logcat?
@pixelflinger There are no errors or new logs — the pick() method consistently returns 0. However, an interesting observation: clicking repeatedly on the same point occasionally yields correct coordinates, but more often it returns 0.
I haven't been able to reproduce with ANGLE + a S24. Seems to work for me.
@pixelflinger you have tested on S24 with XClipse GPU? As I understand this own Samsung GPU installed only for some markets.
Please try also on Samsung Galaxy S22, S22+, S22 Ultra with XClipse GPU. For me via BrowserStack on S24 working partially, time to time. I don't have real devices to test on my hand.
@pixelflinger I have tested this fix (on v.1.65.3) and it's now working only time to time.
Attached video of how it's working on your demo project and model, please check. Video of bug on S22
Are you saying that it's working better but still not always?
@pixelflinger yes, it's working now better, sometime .pick return value, but still return 0 time to time.