So in a fit of "avoid finishing what I started", I decided to see just how horribly slow I've made things in my library. I wasn't disappointed. It was just as miserable as I had thought. I would have expected more out of a GeForce 7900 GT, even with my shitty attempts at optimization.
The HGE tutorial7 demo is quite similar to my bouncing ball demo. It is getting rediculous speeds with 1000 sprites on the screen. Something like 580-600 FPS. Naturally I felt that I could best this, because I am, after all, godlike. I spent all afternoon, and all evening running through a profiler and shit to squeeze what I could out of my library. Sadly, I was only able to get it up from 200-250ish FPS to 400 FPS (in windowed mode, D3D release mode, with the exact same bells and whistles, which is to say: none, as my competition demo). I just could not squeeze out 200 more FPS, no matter what I tried. And so the HGE demo sits there, taunting, nay, mocking me... Fucker.
I did however notice something unusual. If I lowered the HGE demo and my demo to 100 sprites, mine was faster by about 100 FPS (i.e. his was at like 900 FPS, mine was at 1000 FPS, which at those high values really means a marginal speed improvement). At 2000 sprites, the HGE demo was at ~300 FPS, mine was at ~250 FPS, so the gap was closing. The HGE demo cannot go above 2000 or less than 100, so I can't judge beyond that (and I am unable to recompile the source due to the DirectX 8 requirement).
This is frustrating. Thanks to the profiler I've gotten to the point of where I can say with some confidence that the bottle neck is in my state checking/setting code. Sadly, I can't possibly think of a better way to do what it does. And furthermore, doing so would likely break some core functionality. I don't know if I'm up for that kind of surgery. So I might have to be content with sitting at 400 FPS.
This may not be so bad, I ramped the demo up to 18000 sprites and was getting 30 FPS. I guess that's not too bad. As I said earlier, I just expected more out of a GeForce 7900 GT on my end.