The real point is that, of the three major transforms, we need to update them separately, and combine them in the shader, or we have to do it MANY times on the cpu, for a single scene.
Uhhh... Shaders are stateless. If you multiply inside a vertex shader, that multiply is done for EVERY vertex. Which is a LOT more often than whatever work you need to do on the CPU (which, as I said already, will mostly be hidden by the driver/bus overhead).
Example. The projection transform normally only changes if we changed the screen resolution (or just created a window). View transform changes once per frame, assuming the player wiggled a controller.
So we have already established that view*projection only changes once per frame at most... Gee, one whole matrix multiply per frame. You really think our multi-GHz, multi-core, SIMD-capable CPUs are up to that?
Not to mention that CPU and GPU work mostly asynchronously. So in many cases the CPU can work ahead and queue up work in the driver. So your matrix multiplies can be performed while the GPU is busy, which would otherwise be time wasted by the CPU waiting on the GPU anyway.
World transform needs to change once for every rendered instance of a reference mesh.. possibly several times per frame.
Oh dear, 'several times per frame'... Compared to 'everytime per vertex' (as stated, thousands to millions of times per frame). Yes, I really see where you're going with this... Wait, what?
it's usually going to be faster on the gpu
Wrong, see above.
As I already said, you are moving more workload into the innerloop.
and, we are reducing our bus bandwidth, and achieving higher framerates.
Again, wrong.
The theoretical bus savings are immaterial given the other overhead.
Perhaps you are not aware of this, but there was a time when ALL 3d mathematics were performed on the CPU. So instead of just a handful of matrix multiplies to set up shader constants, the CPU also had to do the thousands of multiplies for per-vertex T&L and all that.
I think you have completely lost all perspective here (no pun intended).