1
\$\begingroup\$

I was trying to google and understand my problem in two weeks but i am defeated, so i am asking for help.

The main problem is that my custom unlit frag shader after certain amount of time on devices with mali gpu starts to drop fps - i see it via fps counter in the cpu section. I dont know why in that section and not in render section, but with out this fps counter i can still feel the drop of fps.

So on Samsung S4, Samsung sm-t 380, xiaomi redmi note 5, samsung tab s2 is all ok, the drop was only on samsung s6 - to solve the problem i just half the resolution by Screen.SetResolution function.

I was thinking that drawing the full screen sprite on such a high res device is the point. Then i can test app on samsung sm-t580 - and the drop was there - this device has low resolution than S6.

I assume that the problem in arm mali gpu - or i am sure in my hands.

So again, i am rendering full-screen with draw-mode = tile(countinuous) sprite with 3 textures, just changing theirs uvs in vert func and apply in fragment. This makes distorting effect. The shader show that i have 10 maths and 4 textures, yes 3 textures but i am making 4 sampling.

The textures are 256x256 with repeat mode. I was trying diferrent textures compressions, dxt5, etc1-2, alpha8, R5 - no effect.

I was trying to different precisions half and float in different parts in shader - no effect.

I was thinking in alpha, so i took textures without alpha and not getting it from tex2D. Even the size of textures is doesnt matter, even if they 64x64.

The dance with ZTest, ZWrite, Blend, Queue RenderType, other params - no effect.

My guess was that maybe on mali uv : TEXCOORD0 must be only float2, not float3 or float4 - no effect.

I am applying _Time.y and replace it with float from script - no effect.

Only reducing amount of tex2d in shader - is working. Why?

What i`m doing wrong?

\$\endgroup\$
  • \$\begingroup\$ Some additional info: I tried to capture background by second cam with ortosize of half of screen, so to render less pixels and then render to RT texture (also half of the screen), and than pass to material in sprite, that will displayed like BackGround, --- But! stretched to full screen - and also no effect. It seems for Mali is critical the area of whole pixels on Screen. If i sclae down the BG sprite - yes, the drop wil gone. \$\endgroup\$ – Cafe UCafe Aug 31 '18 at 10:40
  • \$\begingroup\$ Edit 2 : I see on wiki - en.wikipedia.org/wiki/Mali_(GPU) - that Mali-T830 is Shader-Core-Count is1-4. Does it means that this is ALU ? \$\endgroup\$ – Cafe UCafe Aug 31 '18 at 10:49
1
\$\begingroup\$

To summarise the symptoms:

  • New phone loses FPS
  • Takes a while for FPS to drop
  • Profiler says CPU usage increases, not GPU usage.
  • Older, slower phones don't lose FPS

My guess is your new faster phone is overheating and the CPU throttles down, increasing the relative CPU usage per frame.

You can verify this by cooling the phone down and see if the FPS goes back up and/or CPU usage goes down. Watch out for thermal shock breaking the screen's glass and water condensation if you try cooling the phone with an ice pack or a freezer.

Older, slower phones don't heat up as much. It takes time for the new phone to hit its thermal limit after which it has to slow down to not crash and take damage due to the heat.

By reducing the resolution the GPU (and CPU waiting on the GPU) produce less heat which allows the game to run without throttling.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.