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 Chips
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 Chips
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.

M2MF

M2MF, or memory to memory format, is used for copying 2d blocks of memory between segments. Basically a memcpy2d().

Name Class Description Chips
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

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 Chips
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

Video objects

Various objects related to video playback.

Name Class Description Chips
NV04_DVD_SUBPICTURE 0x0038 Blends YUV image and YUVA image into YUV image NV03-NV4X
NV10_DVD_SUBPICTURE 0x0088 ? NV10-NV4X

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 Chips
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 Chips
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.

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 Chips
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

Others

Probably most of them are just software objects used by blob.

Name Class Description Chips
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)