Apologies for the odd title but I was wondering if you could perhaps shed some light when it comes do driver-side behavior. We're seeing some suspiciously high time "around" a single draw call - slightly above 2ms on a Mali-G72MP2 (Samsung A20). This represents an upscale pass (in Unity). I'd expect this to cost next to "nothing", CPU-wise, but I was wondering if what we're seeing could be related with the driver making sure the framebuffer that is being upscaled is fully resolved before the draw call and therefore stalling?
A simplified view of the GL calls would be:
glInvalidateFramebuffer( intermediateFBO ); // DEPTH and Stencil ... glBindTexture( intermediateTexture); // the texture attached to intermediateFBO glBindFramebuffer( backbuffer ); glInvalidateFramebuffer( backbuffer ); // COLOR ... glDrawElements(); // the fullscreen quad
My only thought here is just "beware of frequency scaling". If you are hitting your vsync or software-enforced performance target, whether you get idle time per frame or not depends on the workload vs the available frequency choices.
Back-of-envelope scribbles seem to show that the GPU is running at ~325MHz, which is likely the min frequency for this device. The CPU might well have more frequency choice available, meaning it "just fits" the workload demand.
Cheers Pete! I think I see what you mean. I had a look at the Streamline plot and it does seem that one of A73 cores seems well below, at times, from the max 1.6Ghz spec'ed for the Exynos 7884.