Another Performance BUG : HybridRendererV2 even slower than GameObject-Renderer

100% Performance BUG.On Android platform,HybridRendererV2 Slower than GameObject-Renderer
On my last thread ( https://discussions.unity.com/t/861603 ) shows that maybe performance bug is trunk utilization very low and cause the lower FPS.Bug in this case,the trunk utilization is OK,bug STILL LOWER than GameObject Renderer

Tested on Android MIX2S (Snapdragon 845)

GameObject FASTER !!!!!
7761531--977607--upload_2021-12-26_1-42-29.png

Captured On Mix2S(Android) —— 24 FPS
7761531--977616--upload_2021-12-26_1-51-26.jpeg

DOTS Slower !!!!!
VeryStrange: GPU Cost is Higher ?!
7761531--977610--upload_2021-12-26_1-42-33.png

Here is the Trunk Utilization,almost all the trunk utilization is OK,but the performance is Still Not Good
7761531--977613--upload_2021-12-26_1-48-19.png

Captured On Mix2S(Android) —— 10 FPS
7761531--977619--upload_2021-12-26_1-51-53.jpeg

Need Help!
@SebastianAaltonen @arnaud-carre
@JussiKnuuttila

@Joachim_Ante_1

It looks like it is much much slower on the GPU, not the CPU. 19ms WaitForPresent compared to 82ms. It probably needs specific investigation on that particular device which we will have to discuss how to do when the hybrid rendering team is back from vacation the second week of January.


Thanks for reply.I can upload my test Project if needed

I have also test this VERY SIMPLE scene on 2 Android mid-end devices(Huawei Mate20 and XiaoMi Mix2S),
and the result shows that the DOTS Renderer Slower than GameObject-based render A LOT...
I think this shader is very simple,and should not be GPU bound
@joelv
7766433--978753--upload_2021-12-29_0-24-32.jpg

Yeah shader is simple and should be supported.
However the hybrid renderer uses another variant which loads some data using a different path and that might be unexpectedly slow on certain hardware. We need to test internally to see if this is the case I think

1 Like

[quote=“joelv”, post:6, topic: 866360]
Yeah shader is simple and should be supported.
However the hybrid renderer uses another variant which loads some data using a different path and that might be unexpectedly slow on certain hardware. We need to test internally to see if this is the case I think
[/quote]
Yes.I found that the HRV2 using a different GPU Instancing tech,which is dynamic GPU Instancing(with ByteAddressBuffer),and this is very slow on mobile device(even on Very HighEnd SnapDragon 888).I think maybe traditional GPU instancing(with CBuffer only) is more practical on mobile GPU

I have managed to repro this on my Adreno 612. Not with the exact HRV2 code but with something similar.
We still need to investigate how to handle it as we want these paths for Vulkan on desktop. An UBO path might come with GLES3.1 backend but we can't dynamically switch between SSBO/UBO in a build for a platform since it will explode shader variant count.

[quote=“joelv”, post:8, topic: 866360]
I have managed to repro this on my Adreno 612. Not with the exact HRV2 code but with something similar.
We still need to investigate how to handle it as we want these paths for Vulkan on desktop. An UBO path might come with GLES3.1 backend but we can’t dynamically switch between SSBO/UBO in a build for a platform since it will explode shader variant count.
[/quote]
Yes.Maybe UBO on mobile (Vulkan/GLES) is the best way.
And I have a question, why Apple’s (A12) performance well ? Is this a Adreno Driver bug?