Shaders still have plenty of limitations relative to a CPU (you can do virtually anything with them, but some tasks are too expensive to do efficiently).  In particular, taking advantage of temporal and spacial coherence is much more tricky on a GPU - on a CPU the early 3D renderers could effectively use this stuff with scanline and fill tricks.