NvObjectTypes
NV chips separate functions in different objects. Later chips can implement part or all of previous objects supported by older chips, or new ones are added to replace old/obsolete functions. For example, TNT chips only have a 'render triangle' object, whereas Geforce and higher have a complete TCL engine.
Here's a list of known objects, grouped roughly by their purpose
Null object
Nothing to see here, move along.
Name |
Class |
Description |
|
NV01_NULL |
0x0030 |
Used in about the same way as a null pointer everywhere. |
All |
DMA objects
These represent areas of memory and are used by other objects that will do some operations on them.
Name |
Class |
Description |
|
NV01_CONTEXT_DMA |
0x0002 |
DMA engine, system -> nV FB ??? |
NV03-NV5X |
NV01_DEVICE |
0x0003 |
DMA engine, nV FB -> system memory |
NV03-NV5X |
NV01_MEMORY_LOCAL_BANKED |
0x003d |
DMA engine, nV FB -> nV FB |
NV03-NV5X |
Graph objects
These are used for actually doing something, and you can call methods on them.
1. M2MF
M2MF, or memory to memory format, is used for copying 2d blocks of memory between segments. Basically a memcpy2d().
Name |
Class |
Description |
|
NV04_MEMORY_TO_MEMORY_FORMAT |
0x0039 |
DMA 2d memory transfer, supports only linear surfaces |
NV03-NV4X |
NV50_MEMORY_TO_MEMORY_FORMAT |
0x5039 |
Same as above, but got support for NV50 tiling |
NV5X |
NVC0_MEMORY_TO_MEMORY_FORMAT |
0x9039 |
Like above, but updated for Fermi |
NVC0 |
2. 2D objects
Used for various kinds of 2d accelerated ops. On pre-NV50, there are several "context objects" that specify various parameters for the 2d operation, and actual drawing objects that do some 2d op and are linked to the context objects. On NV50, all of the old objects are merged into a single "2d engine" object used for all operations.
Name |
Class |
Description |
|
NV01_CONTEXT_BETA1 |
0x0012 |
? |
NV01-NV50 |
NV01_CONTEXT_COLOR_KEY |
0x0017 |
color to use for color keying (transparency) |
NV01-NV4X |
NV04_CONTEXT_COLOR_KEY |
0x0057 |
NV04-NV50 |
|
NV01_CONTEXT_PATTERN |
0x0018 |
image mask to use |
NV01-NV4X |
NV04_IMAGE_PATTERN |
0x0044 |
NV04-NV50 |
|
NV01_CONTEXT_CLIP_RECTANGLE |
0x0019 |
clipping rectangle |
NV01-NV50 |
NV03_CONTEXT_ROP |
0x0043 |
raster operation |
NV03-NV50 |
NV04_BETA_SOLID |
0x0072 |
? |
NV04-NV50 |
NV03_CONTEXT_SURFACE_DST |
0x0058 |
2d destination surface |
NV03-NV40 |
NV03_CONTEXT_SURFACE_SRC |
0x0059 |
2d source surface |
NV03-NV40 |
NV04_CONTEXT_SURFACES_2D |
0x0042 |
linear 2d source + destination surfaces |
NV04-NV4X |
NV10_CONTEXT_SURFACES_2D |
0x0062 |
NV10-NV4X |
|
NV30_CONTEXT_SURFACES_2D |
0x0362 |
NV3X |
|
NV40_CONTEXT_SURFACES_2D |
0x3062 |
NV4X |
|
NV50_CONTEXT_SURFACES_2D |
0x5062 |
NV50 |
|
NV04_SWIZZLED_SURFACE |
0x0052 |
a swizzled 2d destination surface |
NV04-NV4X |
NV11_SWIZZLED_SURFACE |
0x009e |
NV11-NV4X |
|
NV30_SWIZZLED_SURFACE |
0x039e |
NV3X |
|
NV40_SWIZZLED_SURFACE |
0x309e |
NV4X |
|
NV01_RENDER_SOLID_LINE |
0x001c |
draws lines and line strips |
NV01-NV3X |
NV04_RENDER_SOLID_LINE |
0x005c |
NV04-NV4X |
|
NV30_RENDER_SOLID_LINE |
0x035c |
NV3X |
|
NV40_RENDER_SOLID_LINE |
0x305c |
NV40-NV50 |
|
NV01_RENDER_SOLID_TRIANGLE |
0x001d |
draws solid triangles |
NV01-NV3X |
NV04_RENDER_SOLID_TRIANGLE |
0x005d |
NV04-NV50 |
|
NV01_RENDER_SOLID_RECTANGLE |
0x001e |
draws solid rectangles |
NV01-NV3X |
NV04_RENDER_SOLID_RECTANGLE |
0x005e |
NV04-NV3X |
|
NV01_IMAGE_BLIT |
0x001f |
blitter |
NV01-NV4X |
NV04_IMAGE_BLIT |
0x005f |
NV04-NV50 |
|
NV11_IMAGE_BLIT |
0x009f |
NV11-NV4X |
|
NV04_INDEXED_IMAGE_FROM_CPU |
0x0060 |
upload of paletted images from CPU |
NV04-NV4X |
NV05_INDEXED_IMAGE_FROM_CPU |
0x0064 |
NV05-NV4X |
|
NV30_INDEXED_IMAGE_FROM_CPU |
0x0364 |
NV3X |
|
NV40_INDEXED_IMAGE_FROM_CPU |
0x3064 |
NV40-NV50 |
|
NV01_IMAGE_FROM_CPU |
0x0021 |
upload of images from CPU |
NV01-NV3X |
NV04_IMAGE_FROM_CPU |
0x0061 |
NV04-NV4X |
|
NV05_IMAGE_FROM_CPU |
0x0065 |
NV05-NV4X |
|
NV10_IMAGE_FROM_CPU |
0x008a |
NV10-NV4X |
|
NV30_IMAGE_FROM_CPU |
0x038a |
NV3X |
|
NV40_IMAGE_FROM_CPU |
0x308a |
NV40-NV50 |
|
NV03_STRETCHED_IMAGE_FROM_CPU |
0x0036 |
upload of images from CPU, stretching them up on the go |
NV03-NV3X |
NV04_STRETCHED_IMAGE_FROM_CPU |
0x0076 |
NV04-NV4X |
|
NV05_STRETCHED_IMAGE_FROM_CPU |
0x0066 |
NV05-NV4X |
|
NV30_STRETCHED_IMAGE_FROM_CPU |
0x0366 |
NV3X |
|
NV40_STRETCHED_IMAGE_FROM_CPU |
0x3066 |
NV40-NV50 |
|
NV03_SCALED_IMAGE_FROM_MEMORY |
0x0037 |
blitter with added scaling |
NV03-NV4X |
NV04_SCALED_IMAGE_FROM_MEMORY |
0x0077 |
NV04-NV4X |
|
NV05_SCALED_IMAGE_FROM_MEMORY |
0x0063 |
NV10-NV4X??? |
|
NV10_SCALED_IMAGE_FROM_MEMORY |
0x0089 |
NV10-NV4X |
|
NV30_SCALED_IMAGE_FROM_MEMORY |
0x0389 |
NV3X |
|
NV40_SCALED_IMAGE_FROM_MEMORY |
0x3089 |
NV4X |
|
NV50_SCALED_IMAGE_FROM_MEMORY |
0x5089 |
NV50 |
|
NV04_GDI_RECTANGLE_TEXT |
0x004a |
blitter, clipped and unclipped rectangles, clipped monochrome images |
NV04-NV50 |
NV03_GDI_RECTANGLE_TEXT |
0x004b |
NV03-NV3X |
|
NV50_2D |
0x502d |
NV50+ all-in-one 2D engine |
NV5X |
NVC0_2D |
0x902d |
NVC0 |
3. Video objects
Various objects related to video playback.
Name |
Class |
Description |
|
NV04_DVD_SUBPICTURE |
0x0038 |
Blends YUV image and YUVA image into YUV image |
NV03-NV4X |
NV10_DVD_SUBPICTURE |
0x0088 |
NV10-NV4X |
4. 3d objects
Pre-NV10 3d objects only support drawing already transformed and lit triangles, and have their destination buffer as a separate context object like 2d. NV10 and up have full TCL- or shader-powered 3d engines and have their render target setup merged into the main 3d object.
Name |
Class |
Description |
|
NV03_CONTEXT_SURFACE_COLOR |
0x005a |
3d color surface, used for pre-TCL objects |
NV03-NV40 |
NV03_CONTEXT_SURFACE_ZETA |
0x005b |
3d zeta surface, used for pre-TCL objects |
NV03-NV40 |
NV04_CONTEXT_SURFACES_3D |
0x0053 |
3d color + zeta surfaces, used for pre-TCL objects |
NV04-NV1X |
NV10_CONTEXT_SURFACES_3D |
0x0093 |
NV1X |
|
NV10_TEXTURE_FROM_CPU |
0x007b |
texture upload |
NV10-NV4X |
NV30_TEXTURE_FROM_CPU |
0x037b |
NV3X |
|
NV40_TEXTURE_FROM_CPU |
0x307b |
NV40-NV50 |
|
NV03_TEXTURED_TRIANGLE |
0x0048 |
draws a textured triangle |
NV03 - NV10 |
NV04_TEXTURED_TRIANGLE |
0x0054 |
draws a textured triangle |
NV04-NV1X |
NV10_TEXTURED_TRIANGLE |
0x0094 |
NV1X |
|
NV04_MULTITEX_TRIANGLE |
0x0055 |
draws a multitextured triangle |
NV04-NV1X |
NV10_MULTITEX_TRIANGLE |
0x0095 |
NV1X |
|
NV10TCL |
0x0056 |
NV10 TCL 3d engine (celsius) |
NV10-NV2X |
NV11TCL |
0x0096 |
NV11-NV2X |
|
??? |
0x0098 |
NV17, NV18 |
|
NV17TCL |
0x0099 |
NV17, NV18 |
|
NV20TCL |
0x0097 |
NV20 TCL+shader 3d engine (kelvin) |
NV2X, NV30?, NV31, NV35, NV36? |
NV25TCL |
0x0597 |
NV25-NV3X |
|
NV30TCL |
0x0397 |
NV30 shader+TCL 3d engine (rankine) |
NV3X |
NV35TCL |
0x0497 |
NV35, NV36 |
|
NV34TCL |
0x0697 |
NV34 |
|
NV40TCL |
0x4097 |
NV40 shader 3d engine (curie) |
NV40, some other NV4X |
NV44TCL |
0x4497 |
NV44, some other NV4X |
|
NV50TCL |
0x5097 |
NV50 CUDA 3d engine (tesla) |
NV50, NV8x, NV9x |
NV84TCL |
0x8297 |
NV8x, NV9x |
|
NVA0TCL |
0x8397 |
NVA0, NVAA, NVAC |
|
NVA3TCL |
0x8597 |
NVA3, NVA5, NVA8 |
|
NVAFTCL |
0x8697 |
NVAF |
|
NVC0TCL |
0x9097 |
NVC0 CUDA 3d engine (fermi) |
NVCX |
NVC1TCL |
0x9197 |
NVC1- |
|
NVC8TCL |
0x9297 |
NVC8- |
|
NV50_COMPUTE |
0x50c0 |
NV50 CUDA computing engine (turing) |
NV5X |
NVA3_COMPUTE |
0x85c0 |
NVA3, NVA5, NVA8 |
|
NVC0_COMPUTE |
0x90c0 |
NVC0 CUDA computing engine (dijkstra) |
NVCX |
NVC8_COMPUTE |
0x92c0 |
NVC8- |
Secondary engine objects
These behave like gr objects, but use their own dedicated engines instead of PGRAPH. On NV98+, large parts of them are implemented in fuc microcode, and hence are modifiable.
Name |
Class |
Description |
|
NV31_MPEG |
0x3174 |
MPEG video decoder |
NV31, NV34, NV36??, NV4X, NV50 |
NV84_MPEG |
0x8274 |
NV84-NV96, NVA0 |
|
NV40_MSRCH |
0x4075 |
MPEG video encoder? |
NV4X, NV50 |
NV41_VP |
0x4176 |
Video processor |
All NV4x gen, except NV40??? |
NV50_VP |
0x5076 |
NV50 |
|
NV84_VP |
0x7476 |
NV84-NV96, NVA0 |
|
NV98_VP |
0x88b2 |
NV98, NVAA, NVAC |
|
NVA3_VP |
0x85b2 |
NVA3, NVA5, NVA8, NVAF |
|
NVC0_VP |
0x90b2 |
NVC0 |
|
NV84_CRYPT |
0x74c1 |
AES cryptography |
NV84-NV96, NVA0 |
NV98_CRYPT |
0x88b4 |
NV98, NVAA, NVAC |
|
NV84_BSP |
0x74b0 |
Bitstream processing, with CRYPT merged in since NVA3. |
NV84-NV96, NVA0 |
NV98_BSP |
0x88b1 |
NV98, NVAA, NVAC |
|
NVA3_BSP |
0x85b1 |
NVA3, NVA5, NVA8, NVAF |
|
NVAF_BSP |
0x86b1 |
NVAF |
|
NVC0_BSP |
0x90b1 |
NVC0 |
|
NV98_PPP |
0x88b3 |
Picture Post-Processing? |
NV98, NVAA, NVAC |
NVA3_PPP |
0x85b3 |
NVA3, NVA5, NVA8, NVAF |
|
NVC0_PPP |
0x90b3 |
NVC0 |
|
NVA3_COPY |
0x85b5 |
A memory copying engine. |
NVA3, NVA5, NVA8, NVAF |
NVC0_COPY0 |
0x90b5 |
NVC0 |
|
NVC0_COPY1 |
0x90b8 |
NVC0 |
|
NVAF_??? |
0x86b6 |
??? |
NVAF |
Unknown
No idea what these are.
1. IMAGE objects
Curious bunch. Apparently sort of existing in hardware on NV04 [and maybe NV01/NV03], but gone on NV05 and up. And NV04 being what it is, all actual methods raise MISSING_HW interrupt. Also, their classes collide with actual useful objects on NV05 and up. Most likely totally useless.
Name |
Class |
Description |
|
NV_IMAGE_STENCIL |
0x0010 |
? |
All? |
NV_IMAGE_BLEND_AND |
0x0011 |
? |
All? |
NV_IMAGE_ROP_AND |
0x0013 |
? |
All? |
NV_IMAGE_COLOR_KEY |
0x0015 |
? |
All? |
NV01_IMAGE_SRCCOPY_AND |
0x0064 |
? |
?-NV04 |
NV03_IMAGE_SRCCOPY |
0x0065 |
? |
?-NV04 |
NV04_IMAGE_SRCCOPY_PREMULT |
0x0066 |
? |
?-NV04 |
NV04_IMAGE_BLEND_PREMULT |
0x0067 |
? |
?-NV04 |
2. Others
Probably most of them are just software objects used by blob.
Name |
Class |
Description |
|
NV01_ROOT |
0x0001 |
? |
All? |
NV01_TIMER |
0x0004 |
? |
All? |
NV01_MAPPING_SYSTEM |
0x003e |
? |
All? |
NV03_MEMORY_LOCAL_CURSOR |
0x003f |
? |
All? |
NV01_MEMORY_LOCAL_LINEAR |
0x0040 |
? |
All? |
NV01_MAPPING_LOCAL |
0x0041 |
? |
All? |
NV03_VIDEO_LUT_CURSOR_DAC |
0x0046 |
VGA engine, modesetting, cursor |
NV04 |
? |
0x0047 |
Overlay video engine: read a YUV image, and scales+position it as RGB image |
All? |
NV03_CHANNEL_PIO |
0x006a |
? |
? |
NV03_CHANNEL_DMA |
0x006b |
? |
? |
? |
0x0074 |
Mpeg2 video engine ? |
NV17 (0x1774) |
? |
0x007a |
Overlay video engine: read a YUV image, and scales+position it as RGB image, same as 0x0047 for dual head cards (or cards with TV output?) |
All? |
NV10_VIDEO_DISPLAY |
0x007c |
Video, memory buffer to display, same as 0x0046 for dual head cards (or cards with TV output) |
NV10,NV20,NV30,NV40,G70 (0x357c) |