##CRIME
This is the rendering engine, memory controller etc. found in [SGI](http://www.sgi.com/)'s [[O2]] workstations. NetBSD has hardware accelerated drivers for both the kernel ( [[crmfb]] ) and [[Xorg]] ( [[xf86-video-crime]] ).
Video memory is allocated from main memory in chunks of 64KB which, depending on pixel size, result in 128x128, 256x128 or 512x128 tiles. Output is handled by either [[GBE]] for the VGA port or [[mace]] and the AV module for composite video or s-video ( we don't support TV output yet ).
The drawing engine has two parts - the main Rendering Engine which supports all kinds of fancy operations including alpha blending, z-buffering and whatnot, and the Memory Transfer Engine which only supports simple fills and copies but does them really, really fast ( at memory bandwidth speed according to the docs we have ).
Both engines share a set of TLBs:
* Three TLBs map tiled buffers with up to 16x16 tiles. Entries are the upper 16 bit of each tile's physical address so tiles have to be 64KB-aligned.
* Two TLBs map linear buffers with 4KB-aligned pages, up to 128KB each.
* There are other TLBs for texture buffers, stencil buffers etc. but for now we don't really know how to use them.
All TLBs can only be written with 64bit-aligned writes, unaligned writes are ignored, writes smaller than 64bit result in the upper bits being written as zeroes. Reads can be any size with natural alignment.
Partial writes to at least a few other registers work though.