Pixomatic Rendering Technology

Pixomatic SDK Features

RAD licenses two different versions of Pixo: version 3 (which is a DX9 level rasterizer) and version 2 (which is a DX7 level rasterizer). We'll describe each version next.

Pixomatic 3 Features:

  • Fully DX9 compatible
  • Full vertex shader and pixel shader 2.0 and 3.0 support
  • Supports all texture formats and filters, including DXT textures and bilinear, trilinear, and anisotropic filters
  • Selectable 4X MSAA anti-aliasing
  • 32- and 64-bit versions
  • SSE-optimized vertex and pixel shaders
  • SSE2 used if available
  • 16 general-purpose and 16-XMM registers used in 64-bit mode
  • Automatic support for multithreading across up to 16 cores

Pixomatic 3 Requirements

  • An x86-compatible processor with SSE
  • Microsoft Windows, either 32- or 64-bit

Pixomatic 2 Features:

Pixel shading
  • Three fully-programmable stages, supporting two textures
  • Supported stage operations: modulate, add, add signed, lerp, multiply-add, select, and dot3
  • Supported stage inputs: texture, diffuse, specular, stage constant, global constant, zero, temp, and current
  • Stage inputs may be inverted and/or replicated
  • Stage output may be scaled and/or directed to temp
  • Independently programmable RGB and alpha channels for each stage, except for dot3
  • Additional specular additive stage
  • Flat or Gouraud diffuse color modulation
  • Linearly-interpolated fog
  • Full standard set of independent source and destination frame buffer blends, the results of which can be combined via add, subtract, reverse subtract, min, or max; alternatively, user-defined blending code may be welded directly into the pixel pipeline
  • All pixel calculations are 32-bit (8 bits per color component)
Other per-pixel
  • 16- or 24-bit z buffering, with seven compare modes and z scaling
  • Full set of alpha tests against alpharef value
  • Stencil test, with seven compare modes
  • Stencil rendering, with six z-pass modes and six z-fail modes, and support for single-pass stencil shadows
  • Fast early-out z and/or stencil visibility determination (useful for bounding box pretests of complex objects)
  • Pixel counting
  • Subpixel correct rasterization
  • Features work in any combination, except that stencil rendering can't be combined with pixel rendering
  • Z bias
Texture mapping
  • 8888 and palettized formats
  • Wrap and clamp border modes
  • Texture sizes up to 4096x4096
  • Subtexel-correct
  • Perspective-correct
  • Point, bilinear, and fast two- and four-point averaging filters
  • Per-triangle mipmapping
  • Mipmap level-of-detail bias
  • Texture transforms
  • Projected and unprojected screen texgen
  • Projected textures, independently enabled and specified for each texture stage
  • Trilists, tristrips, trifans, quadlists, polygons, pointsprites, linelists, and linestrips
  • Pointsprites can be automatically scaled by depth
Drawing interfaces
  • Indexed streams, non-indexed streams, and begin/end primitive interfaces
  • Up to 8 streams, all fully configurable
  • Custom API designed for maximum efficiency while allowing easy porting from DX and OpenGL
Other 3D features
  • Transformation, projection, and scaling to the viewport
  • Per-triangle callback
  • Per-vertex callback allows user-defined vertex shading, such as texgen and lighting
  • Top-down or bottom-up screen coordinate system
  • Backface culling
  • Vertex fog (device space, camera space, and w camera space calculations supported)
  • Dynamically-settable viewport
  • Homogenous clipping
  • Wireframe
  • Billboarded text, drawn through the full rasterization pipeline
  • 4X bilinear filtered antialiasing
  • 2X or 4X bilinear filtered or point sampled zoom
  • Bilinear filtered or point sampled stretch blt
Other features
  • Optimized blt to front buffer, detecting whether GDI or DirectDraw is faster
  • Support for 32-, 24-, and 16-bit front buffers, with dithering to 16-bit (565 and 1555)
  • Fill and clear support
  • Fills and blts can alpha-blend
  • The pixel-shading pipeline is optimized MMX code, compiled on the fly, with enregistration of virtually all interpolants and intermediate values
  • The geometry and vertex-shading pipelines are MMX, SSE, and 3DNow optimized
  • SSE, SSE2, and 3DNow are automatically used if present, but are not required

Pixomatic 2 Performance

It's difficult to characterize rasterizer performance, because there are so many possible configurations and data sets, but the following numbers provide a ballpark idea of Pixomatic 2's performance.

Fill Rate:

24.54 MPix/sec
24.64 MPix/sec
54.78 MPix/sec
86.54 MPix/sec

Fill rate test case: multitexture with two 256x256 textures, Gouraud shading, 16-bit z buffer with z compare and z write enabled, drawing one quad (two triangles) to fill a 640x480, 32-bpp window.

Triangle Rate:

1.39 MTri/sec
3.17 MTri/sec
3.16 MTri/sec
4.86 MTri/sec

Triangle rate test case: one 256x256 texture with texcoords generated by PIXO_TEXGEN_PROJECTED_XYZ1, Gouraud shading, 16-bit z buffer with z compare and z write enabled, drawing a model consisting of 77 indexed meshes that contain 27,296 triangles in total, 12,841 of which are front-facing with a non-zero area; culled triangles are counted for purposes of triangle rate calculations. Target window is 640x480, 32-bpp; bounding box of model covers about 5 percent of the window; only rendering time is counting, not the blt to the screen; no triangles are clipped.

Transform & project rate

5.04 MTri/sec
12.82 MTri/sec
12.82 MTri/sec
12.82 MTri/sec

Transform & project rate test case: same as triangle rate test, except that the model is moved far enough away from the viewer so that all triangles are culled and no rasterization is performed.

Quake II timedemo 640x480, 32-bpp, point sampling

28.4 frames/second
37.5 frames/second
67.2 frames/second
108.8 frames/second

Includes the blt to the screen, as well as all drawing time.

Quake II timedemo 640x480, 32-bpp, bilinear base,
fast two-point lightmap

20.3 frames/second
26.7 frames/second
47.4 frames/second
75.1 frames/second

Includes the blt to the screen, as well as all drawing time.

Quake II timedemo 640x480, 32-bpp, full bilinear

17.7 frames/second
25.1 frames/second
40.4 frames/second
63.5 frames/second

Includes the blt to the screen, as well as all drawing time.

Platforms used for performance tests:

  • PIII/733MHz: 830 MB/sec memory bandwidth and 2.2 GB/sec bandwidth to 256KB L2 cache
  • Athlon/1.8GHz (3DNow and SSE): 1.3GB/sec memory bandwidth and 3.5 GB/sec bandwidth to 256KB L2 cache
  • P4/2.2GHz: 2.0 GB/sec memory bandwidth and 9.3 GB/sec bandwidth to 512KB L2 cache
  • P4/3.3GHz: 3.0 GB/sec memory bandwidth and 13.9 GB/sec bandwidth to 512KB L2 cache

Pixomatic 2 Size

  • The Pixomatic 2 DLL is 255KB in size. Pixomatic 2 additionally performs one 4KB allocation; all other memory, such as pixel buffers, z buffers, and textures, is allocated by the calling application.

Pixomatic 2 Requirements

  • An x86-compatible processor with MMX
  • Microsoft Windows, MacOS X or Linux

Pixomatic 2 DX-compatible wrapper

In addition to the native API, a DX9-compatible wrapper is available for Pixomatic 2. This wrapper supports a broad subset of Pixomatic 2's functionality, including two textures, three stages, mipmapping, full sets of stage ops and frame buffer blends, and much more. However, since Pixomatic 2 does not support Vertex Shaders, Pixel Shaders, Cube Maps, or DXT textures, the wrapper does not support those features.

The wrapper has been tested against the D3D samples and in several games and other 3D applications (Medal of Honor, Backyard Baseball 2005, Backyard Hockey, Backyard Skateboarding, Logitech and more) but it has not been run through WHQL tests. If you do run into any implementation/compatibility issues or bugs, please contact mitchs@radgametools.com.

The wrapper does not require any versions of DX to be installed, since it can use GDI to blt to the screen. Alternatively, if DDraw3 is available, the wrapper can use that to lock the primary buffer, in which case it tries both GDI blts and direct copying to the primary buffer, and uses whichever is faster.

Typically, using the wrapper will require adding/changing about four lines of code, in order to implement the following:

1. Add a prototype for the Pixomatic 2 Direct3D Wrapper create function: PixoDirectCreate9().

2. Replace the Direct3DCreate9() call with PixoDirectCreate9().

3. Link with dx9pixo.lib or dx9pixo_debug.lib.

The PixoDirect3DCreate9() call will return a IDirect3D9 interface pointer which you should then be able to use just like a standard Direct3DDevice9 object.

There is also a Direct3D 8.1 wrapper.

Pixomatic 2 features that are not exposed through the wrapper can be accessed by calling Pixomatic 2 directly. The most significant such case is that while the Pixomatic 2 software renderer supports bilinear texture filtering, the DX texture filter state is ignored and point filtering is always used in the DX-compatible wrapper. This is because most games just turn on bilinear filtering and leave it on, which would often result in unacceptable performance levels for Pixomatic 2, especially on low-end machines. If you do want to run Pixomatic 2 with bilinear filtering enabled, you can simply call Pixomatic 2 directly to enable bilinear when desired.

Our Customers Love Pixomatic:

"Pixomatic is great! With Unreal Tournament 2003, it gives us a reliable way to run well on the millions of PC's which lack decent 3D hardware acceleration or drivers."
Tim Sweeney, Epic Games
"Pixomatic wast just the thing we needed at the end of Lionheart. We were under intense pressure to get the game done and there was no way we could match the incredible optimization effort that has gone into Pixomatic. Rad Game Tools and Michael Sartain were also incredibly helpful in getting Pixomatic working in Lionheart in as little time as possible."
Lars Brubaker, CEO, Reflexive Entertainment Inc.

Partial List of Pixomatic Games:

Amaze Entertainment
Shrek 2
Anark Corporation
Anark Studio
Backyard Hockey, Backyard Skateboarding, Backyard Baseball 2005
Electonic Arts
Medal of Honor Allied Assault Breakthrough patch 2.4, Need for Speed World
Epic Games
Unreal Engine2, Unreal Tournament 2003, Unreal Tournament 2004
Slingo Mystery
Haansoft Office for Windows
Legacy Interactive
ER: The Game
Legendo Entertainment
The 3 Musketeer
Microsoft Train Simulator 2, Microsoft Flight Simulator 2004 - A Century of Flight
Northrop-Grumman Mission Systems
Multiple projects
Reflexive Entertainment
Lionheart - Legacy of the Crusader
SnapStream Media
Beyond TV