These three pieces of data are used as the feedback from my pipeline tests. I didn't end up implementing all of the tests that I originally wanted, but I am happy with what I ended up with. Here's a quick list of the tests and how they are implemented. The first three are very similar to nVPerfHUD and the last is slightly different:
Frame Buffer Bandwidth Test
This one simply changes the frame buffer from 32 bit to 16 bit. It is only done at startup, but the change in framerate should be apparent if bandwidth is the problem.
Texture Bandwidth Test
This one substitutes a 2x2 texture on every call to set a texture in the renderer. This one was also pretty easy to implement by just adding a check for whether or not the test is active and forcing the texture if it is.
CPU Bound Test
This one simply inhibits all draw calls. Of course, the GPU is still clearing and presenting the back buffer/depth surface, but the bulk of the GPU work is disabled. If the framerate doesn't shoot up here, then the application must be CPU bound.
This test actually substitutes a particular effect with a very simple vertex and pixel shader combo. I allow enabling and disabling the test, as well as cycling through the effects. This allows a quick test of which effect is the current bottleneck.
The shading test is actually the most useful to me right now, since my test system is usually pixel shading bound. It is really nice to be able to quickly understand what performance implications there are for each effect and what the maximum benefit that can be achieved from changing it is.
I think this set of tests are good enough for now. Now I can continue adding dynamic lighting to Lunar Rift!