NvObjectTypes

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

All

NV01_DEVICE

0x0003

DMA engine, nV FB -> system memory

All

NV01_MEMORY_LOCAL_BANKED

0x003d

DMA engine, nV FB -> nV FB

All

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

NV04-NV40

NV50_MEMORY_TO_MEMORY_FORMAT

0x5039

Same as above, but got support for NV50 tiling

NV50

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

NV01_CONTEXT_COLOR_KEY

0x0017

color to use for color keying (transparency)

NV01-?

NV04_CONTEXT_COLOR_KEY

0x0057

NV04-NV40

NV01_CONTEXT_PATTERN

0x0018

image mask to use

NV01-?

NV04_IMAGE_PATTERN

0x0044

NV04-NV40

NV01_CONTEXT_CLIP_RECTANGLE

0x0019

clipping rectangle

NV01-NV40

NV03_CONTEXT_ROP

0x0043

raster operation

NV03-NV40

NV04_BETA_SOLID

0x0072

?

NV04-NV40

NV04_CONTEXT_SURFACES_2D

0x0042

a linear surface

NV04-?

NV10_CONTEXT_SURFACES_2D

0x0062

NV10-?

NV30_CONTEXT_SURFACES_2D

0x0362

NV30-?

NV40_CONTEXT_SURFACES_2D

0x3062

NV40

NV04_SWIZZLED_SURFACE

0x0052

a swizzled surface

NV04-?

NV10_SWIZZLED_SURFACE

0x009e

NV10-?

NV30_SWIZZLED_SURFACE

0x039e

NV30-?

NV40_SWIZZLED_SURFACE

0x309e

NV40

NV01_RENDER_SOLID_LINE

0x001c

draws lines and line strips

NV01-?

NV04_RENDER_SOLID_LINE

0x005c

NV04-?

NV01_RENDER_SOLID_TRIANGLE

0x001d

draws solid triangles

NV01-?

NV04_RENDER_SOLID_TRIANGLE

0x005d

NV04-?

NV01_RENDER_SOLID_RECTANGLE

0x001e

draws solid rectangles

NV01-?

NV04_RENDER_SOLID_RECTANGLE

0x005e

NV04-?

NV01_IMAGE_BLIT

0x001f

blitter

NV01-?

NV04_IMAGE_BLIT

0x005f

NV03-?

NV12_IMAGE_BLIT

0x009f

NV11-?

NV04_INDEXED_IMAGE_FROM_CPU

0x0060

upload of paletted images from CPU

NV04-?

NV05_INDEXED_IMAGE_FROM_CPU

0x0064

NV05-?

NV01_IMAGE_FROM_CPU

0x0021

upload of images from CPU

NV01-?

NV04_IMAGE_FROM_CPU

0x0061

NV04, ?NV03??

NV05_IMAGE_FROM_CPU

0x0065

NV05-?

NV10_IMAGE_FROM_CPU

0x008a

NV10-?

NV30_IMAGE_FROM_CPU

0x038a

NV30-?

NV40_IMAGE_FROM_CPU

0x308a

NV40

NV03_STRETCHED_IMAGE_FROM_CPU

0x0036

upload of images from CPU, stretching them up on the go

NV03-?

NV04_STRETCHED_IMAGE_FROM_CPU

0x0076

NV04-?

NV05_STRETCHED_IMAGE_FROM_CPU

0x0066

NV05-?

NV30_STRETCHED_IMAGE_FROM_CPU

0x0366

NV30-?

NV40_STRETCHED_IMAGE_FROM_CPU

0x3066

NV40

NV03_SCALED_IMAGE_FROM_MEMORY

0x0037

blitter with added scaling

NV03-?

NV04_SCALED_IMAGE_FROM_MEMORY

0x0077

NV04-?

NV05_SCALED_IMAGE_FROM_MEMORY

0x0063

NV05-?

NV10_SCALED_IMAGE_FROM_MEMORY

0x0089

NV10-?

NV30_SCALED_IMAGE_FROM_MEMORY

0x0389

NV30-?

NV40_SCALED_IMAGE_FROM_MEMORY

0x3089

NV40

NV04_GDI_RECTANGLE_TEXT

0x004a

blitter, clipped and unclipped rectangles, clipped monochrome images

NV04-NV40

NV03_GDI_RECTANGLE_TEXT

0x004b

NV03-?

NV50_2D

0x502d

NV50 all-in-one 2D engine

NV50

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

NV04-?

NV10_DVD_SUBPICTURE

0x0088

NV10-?

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

NV04_CONTEXT_SURFACES_3D

0x0053

3D surface with color and Z buffers, used for pre-TCL objects

NV04

NV10_CONTEXT_SURFACES_3D

0x0093

NV10

NV10_TEXTURE_FROM_CPU

0x007b

texture upload

NV10

NV30_TEXTURE_FROM_CPU

0x037b

NV30

NV40_TEXTURE_FROM_CPU

0x307b

NV40,G70

NV03_TEXTURED_TRIANGLE

0x0048

draws a textured triangle

NV03

NV04_TEXTURED_TRIANGLE

0x0054

draws a textured triangle

NV04

NV10_TEXTURED_TRIANGLE

0x0094

NV10

NV04_MULTITEX_TRIANGLE

0x0055

draws a multitextured triangle

NV04

NV10_MULTITEX_TRIANGLE

0x0095

NV10

NV10TCL

0x0056

NV10 TCL 3d engine (celsius)

NV10

NV11TCL

0x0096

NV11, NV15

NV17TCL

0x0099

NV17, NV18

NV20TCL

0x0097

NV20 TCL+shader 3d engine (kelvin)

NV20

NV25TCL

0x0597

NV25

NV30TCL

0x0397

NV30 shader+TCL 3d engine (rankine)

NV30

NV35TCL

0x0497

NV35

NV34TCL

0x0697

NV34

NV40TCL

0x4097

NV40 shader 3d engine (curie)

NV40

NV44TCL

0x4497

NV44

NV50TCL

0x5097

NV50 CUDA 3d engine (tesla)

NV50

NV84TCL

0x8297

NV8x, NV9x

NVA0TCL

0x8397

NVA0, NVAA, NVAC

NVA8TCL

0x8597

NVA5, NVA8

NV50_COMPUTE

0x50c0

NV50 CUDA computing engine (turing)

NV50

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_CONTEXT_SURFACES_2D

0x0058

?

NV03-?

NV03_CONTEXT_SURFACES_3D

0x005a

?

NV03

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)