File:  [NetBSD Developer Wiki] / wikisrc / users / macallan / crime.mdwn
Revision 1.3: download - view: text, annotated - select for diffs
Wed Oct 21 23:22:01 2009 UTC (5 years, 7 months ago) by wiki
Branches: MAIN
CVS tags: HEAD
web commit by macallan


This is the rendering engine, memory controller etc. found in [SGI]('s [[O2]] workstations. NetBSD has hardware accelerated drivers for both the kernel ( [[crmfb]] ) and [[Xorg]] ( [[xf86-video-crime]] ).<br>
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 ).<br>
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 ).<br>
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.<br>
Partial writes to at least a few other registers work though.

CVSweb for NetBSD wikisrc <> software: FreeBSD-CVSweb