Well, it's mainly due to the crappy driver, etnaviv, that is not very fast and worst of all, not very compliant and very buggy.
Ok, first of all, calling a reverse-engineered driver "crappy" is a bit insulting.
Then I would like to clear something up:
- etnaviv is fast, works quite well, and not that buggy. The binary blobs were much worse
- this is an mobile GPU we're talking about. You can't expect to program it like you would do for a desktop GPU, and expect it to work. Using VBOs and batching the calls would be a good start.
Of course, i'm not saying it is complete trash but it could have been so much better, plus it doesn't support all the OpenGL ES 2.0 features, even though the hardware does.
For example, i have ported MKXP to the GCW Zero and the textures were lacking transparency and it was pretty slow. (before quickly crashing)
The same code on the Pandora works with much less issues. (but you may have to switch between several drivers, which is lame)
I'm sure the binary blobs were worse but etnaviv isn't much better.
I'm surprised the slow SD-RAM memory is responsible for the slowdowns though.
(using opengles probably requires faster memory than the old sdram on old ms-dos computers, for which Fade to Black was released)