TLDR
On Pixel 10 Pro (PowerVR DXT-48-1536), GLES now renders some skeletal characters with exploded/corrupted meshes. Vulkan renders those characters correctly, but Vulkan is not shippable due to reproducible crashes in vulkan.powervr.so pipeline destruction paths. Current only workaround is forcing CPU skinning at runtime, which is temporary and not viable long-term.
Environment
- UE 5.6.1 (
5.6.1-5132498) - Device under issue: Pixel 10 Pro (PowerVR D-Series DXT-48-1536)
- Comparison devices: Pixel 8/9
- Android versions:Pixel 8/9: looks correct on older and newer Android tested
- Pixel 10: looked correct on older Android 16 (months ago), now broken on newer Android 16 and Android 17
How it started
We were running with Vulkan disabled. On Pixel 10, characters that used to look correct on GLES now show exploded skeletal meshes. We then enabled Vulkan: visuals are correct, but app crashes.
GLES observations
- Confirmed OpenGL ES path (
OPENGL_ES3_1_ANDROID) - Pixel 10-specific skeletal corruption (not seen on Pixel 8/9)
- Not all characters are affected: two characters remain correct. Those have lower vertex counts, but not by much compared to broken characters, so this does not look like a simple vertex-count threshold.
Vulkan observations
- Characters render correctly
- Reproducible crashes, often on
RHIThread, with signatures including:DestroyShader GraphicsPipelineDestroy
- Reproducible crashes, often on
IMG_vkDestroyPipeline- (all in
vulkan.powervr.so)
- (all in
- Signals observed:
SIGABRT,SIGTRAP - One variant also showed UE fatal around
MallocBinnedCommon.hunrecognized pointer prior to trap.
What we tried
Vulkan/PSO tests:
r.PSOPrecaching=0/1r.ShaderPipelineCache.Enabled=0/1r.PSOPrecache.Mode=1-deleteuserpsocache- Result: reduced/delayed in some runs, but did not eliminate Vulkan crashes.
GLES tests:
r.SkinCache.Mode=0(no change)r.Mobile.FloatPrecisionMode=2(no change)r.ShaderPipelineCache.Enabled=0+r.PSOPrecaching=0(no change)r.Mobile.SupportGPUScene=0caused immediate fatal when character content loads:OpenGLShaders.cpp line 3334CommitPackedUniformBuffers null UB stage 0...
Temporary workaround:
- Forcing CPU skinning on skeletal meshes fixes visuals, but is not practical as a long-term production solution.
Request / Questions
- Is this a known UE 5.6 issue on Pixel 10 PowerVR + newer Android 16/17 drivers?
- Any known fixes in 5.7/5.8 or specific CLs for:GLES skeletal corruption on PowerVR
- Vulkan pipeline destruction crashes on PowerVR
- Recommended device-profile mitigations or driver-version gating for Pixel 10?
- Any guidance on the OpenGL null UB failure when disabling mobile GPUScene on this device path?
[Attachment Removed]