[FrontPage] [TitleIndex] [WordIndex

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.

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

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

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

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

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

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.

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

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

2. 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)


2013-03-24 13:16