Here's a recent screenshot from my software rendering project. It started out as a simple spinning cube renderer, but it is now turning into an alternative for hardware acceleration API's. Although it is capable of most of Quake III's map rendering, it is not 'yet another Quake clone' as I'm only using these maps for testing its true power in a situation normally meant for hardware rendering.
Some of its current features are:
a.. Bilinear filtering
c.. Pixel & vertex shaders
d.. Flexible render states
e.. Sub-pixel/texel accuracy
f.. Per-pixel perspective correction
g.. Per-pixel exact mipmapping
h.. Homogeneous clipping
i.. Frustum culling
j.. Dynamic lighting
k.. Gamma correction
The pixel and vertex shading was made possible with dynamic code generation using my assembler: SoftWire. This also made it possible to have dozens of render states created at run-time. All assembly code is heavily optimized using the Pentium III instruction set.
About the performance. With all features turned on, this kind of scenes render at about 20 FPS in 640x480x32 on my Celeron 1200 MHz. My goal is to reach at least 30 FPS, and this will certainly be possible by using some tricks common to software rendering. Per-pixel computations could be approximated by sub-affine interpolation. To eliminate overdraw, I'll probably replace the depth-buffer by a geometry based visibility algorithm like portal clipping. I am also still trying to make a scheduler for the run-time assembler to get the most out of the inner loops.
A preliminary demo can be expected around the first quarter of 2003.
More information and older screenshots can be found at: http://softwire.sourceforge.net/extra.html