PowerVR Villagemark D3D

Around the year 2000, graphics processors were very different. Having just completed the jump to playable fps rates for most games in standard resolutions of 1024x768 or 1280x1024, most of the graphics horse power was achieved by using brute force: As soon as a new process technology became available, more pipelines were added and clocks were raised. Also just recently, memory had doubled its data rate, transferring at both the rising and falling edges of the clock signal. It was a time of „the more MHz/pipelines, the better”.

Only very slowly ideas to render more efficiently were implemented, such as texture caches or the Hyper-z package in Atis Radeon. In this environment PowerVR unleashed a chip onto the market, whose specs were more than underwhelming. With only two rendering pipelines working at 115 MHz and equally un-speedy memory, the Kyro was roughly at the level of yesteryears mid-range cards such as the 1998 Riva TNT or Ati Rage – if you made the grave error and only looked at the specs!

PowerVR employed a concept of smart rendering called TBDR, tile-based deferred rendering. The chip received the incoming 3D command stream from the host processor but instead of just beginning to render stuff like mad, it waited until all information for a single image had been sent and then started to sort all the geometry and other information in small tiles. Those were by design small enough that every operation other than texture fetch was kept completely internal to the chip and its buffers - no time consuming memory operations interrupted the process. Plus, because it had all the information it needed to complete any given tile, it could also sort the polygons before doing any other work on them. This enabled the PowerVR chip to effectively on render pixels that were also going to be displayed to the user whereas in other architectures it was common that already drawn pixels were overwritten by others nearer to the users point of view – that is called „overdraw”.

Since PowerVRs Kyro (Series 3) did not waste time on those discarded pixels, the company decided to incorporate this feature into the marketed specs. Instead of citing its nominal texture fillrate of 230 MTex/sec. (2 pipelines x 115 MHz), they factored in supposedly typical overdraw into the so called super-fillrate.

In order to demonstrate this features, PowerVR also included several tests in their SDK, one of them being called Villagemark. This test exists both for Open GL and Direct 3D and is designed to have a rather high depth complexity with many objects occluding each other. It also makes use of Hardware TnL (a feature that Series 3 doesn't even sport), fairly large textures of up to 1024x1024 pixels and uses three texture layers – again, something that made traditional architectures (read: Geforce cards, which all used a 4x2 or 2x2 configuration) look bad.

Via commandline you can control the kind of benchmark you want to run as well as parameters like resolution, color bit depth or texture filtering.
Quote Originally Posted by Villagemark D3D v1.22 readme.txt
D3DVillageMark
--------------

Command line options: (they are not case sensitive)

-Width=???
Sets horizontal resolution.

-Height=???
Sets vertical resolution.

-Bpp=??
Sets colour depth.
(Note: To use this option, With and Depth have to be defined as well)

-TrilinearOFF
Disables trilinear.

-CompressionOFF
Disables DXT texture compression.

-T&LOFF
Disables T&L optimised code. (T&LHal will not be displayed in the devices list).

-VSyncON
Enables Vertical Syncronisation.

-Benchmark or -Benchmark=1
Enable benchmark mode where only one loop is performed. It will run for 1800 frames.
At the end press F12 to get a screen-shot and press ESC to finish.
On these modes VSync will be disabled.

-Benchmark=2
Enable benchmark mode. This benchmark is timed, and it will take 2 minutes to complete a full loop.

-AutoPAUSE
Start in PAUSE mode (incompatible with benchmark mode).

-AutoQuit
Quit the benchmark after one loop (only works in benchmark modes).

-Secondary
Runs on the secondary device.

-ForceMaxTexture= (256,128,64 or 32)
Force maximun size allowed for textures. Will be not DXT texture compression.

Example:
VillageMark.exe -Width=640 -Height=480 -Benchmark

Note:
A file called D3DVillageMarkResult.txt will be written in the application folder (benchmark mode only).
Since it runs also with modern hardware, such as a Radeon HD 5870 which I used, I made a video of the Benchmark run in Mode 2, were a two-minute fly-through is performaned in real-time and the framerate is measured. Here it is: