Context objects

Introducton

Todo

write m

BETA

The BETA object family deals with setting the beta factor for the BLEND operation. The objects in this family are:

  • objtype 0x01: NV1_BETA [NV1:NV4]
  • class 0x0012: NV1_BETA [NV4:G84]

The methods are:

0100 NOP [NV4-] 0104 NOTIFY 0110 WAIT_FOR_IDLE [G80-] 0140 PM_TRIGGER [NV40-?] [XXX] 0180 N DMA_NOTIFY [NV4-] 0200 O PATCH_BETA_OUTPUT [NV4:NV20] 0300 BETA

mthd 0x300: BETA [NV1_BETA]
Sets the beta factor. The parameter is a signed fixed-point number with a sign bit and 31 fractional bits. Note that negative values are clamped to 0, and only 8 fractional bits are actually implemented in hardware.

Operation:

if (param & 0x80000000) /* signed < 0 */
        BETA = 0;
else
        BETA = param & 0x7f800000;
mthd 0x200: PATCH_BETA_OUTPUT [NV1_BETA] [NV4:NV20]
Reserved for plugging a beta patchcord to output beta factor into.
Operation::
throw(UNIMPLEMENTED_MTHD);

ROP

The ROP object family deals with setting the ROP [raster operation]. The ROP value thus set is only used in the ROP_* operation modes. The objects in this family are:

  • objtype 0x02: NV1_ROP [NV1:NV4]
  • class 0x0043: NV1_ROP [NV4:G84]

The methods are:

0100 NOP [NV4-] 0104 NOTIFY 0110 WAIT_FOR_IDLE [G80-] 0140 PM_TRIGGER [NV40-?] [XXX] 0180 N DMA_NOTIFY [NV4-] 0200 O PATCH_ROP_OUTPUT [NV4:NV20] 0300 ROP

mthd 0x300: ROP [NV1_ROP]
Sets the raster operation.

Operation:

if (param & ~0xff)
        throw(INVALID_VALUE);
ROP = param;
mthd 0x200: PATCH_ROP_OUTPUT [NV1_ROP] [NV4:NV20]
Reserved for plugging a ROP patchcord to output the ROP into.

Operation:

throw(UNIMPLEMENTED_MTHD);

CHROMA and PLANE

The CHROMA object family deals with setting the color for the color key. The color key is only used when enabled in options for a given graph object. The objects in this family are:

  • objtype 0x03: NV1_CHROMA [NV1:NV4]
  • class 0x0017: NV1_CHROMA [NV4:G80]
  • class 0x0057: NV4_CHROMA [NV4:G84]

The PLANE object family deals with setting the color for plane masking. The plane mask operation is only done when enabled in options for a given graph object. The objects in this family are:

  • objtype 0x04: NV1_PLANE [NV1:NV4]

For both objects, colors are internally stored in A1R10G10B10 format. [XXX: check NV4+]

The methods for these families are:

0100 NOP [NV4-] 0104 NOTIFY 0110 WAIT_FOR_IDLE [G80-] 0140 PM_TRIGGER [NV40-?] [XXX] 0180 N DMA_NOTIFY [NV4-] 0200 O PATCH_IMAGE_OUTPUT [NV4:NV20] 0300 COLOR_FORMAT [NV4-] 0304 COLOR

mthd 0x304: COLOR [*_CHROMA, NV1_PLANE]
Sets the color.

Operation:

struct {
        int B : 10;
        int G : 10;
        int R : 10;
        int A : 1;
} tmp;
tmp.B = get_color_b10(cur_grobj, param);
tmp.G = get_color_g10(cur_grobj, param);
tmp.R = get_color_r10(cur_grobj, param);
tmp.A = get_color_a1(cur_grobj, param);
if (cur_grobj.type == NV1_PLANE)
        PLANE = tmp;
else
        CHROMA = tmp;

Todo

check NV3+

mthd 0x200: PATCH_IMAGE_OUTPUT [*_CHROMA, NV1_PLANE] [NV4:NV20]
Reserved for plugging an image patchcord to output the color into.

Operation:

throw(UNIMPLEMENTED_MTHD);

CLIP

The CLIP object family deals with setting up the user clip rectangle. The user clip rectangle is only used when enabled in options for a given graph object. The objects in this family are:

  • objtype 0x05: NV1_CLIP [NV1:NV4]
  • class 0x0019: NV1_CLIP [NV4:G84]

The methods for this family are:

0100 NOP [NV4-] 0104 NOTIFY 0110 WAIT_FOR_IDLE [G80-] 0140 PM_TRIGGER [NV40-?] [XXX] 0180 N DMA_NOTIFY [NV4-] 0200 O PATCH_IMAGE_OUTPUT [NV4:NV20] 0300 CORNER 0304 SIZE

The clip rectangle state can be loaded in two ways:

  • submit CORNER method twice, with upper-left and bottom-right corners
  • submit CORNER method with upper-right corner, then SIZE method

To enable that, clip rectangle method operation is a bit unusual.

Todo

check if still applies on NV3+

Note that the clip rectangle state is internally stored relative to the absolute top-left corner of the framebuffer, while coordinates used in methods are relative to top-left corner of the canvas.

mthd 0x300: CORNER [NV1_CLIP]
Sets a corner of the clipping rectangle. bits 0-15: X coordinate bits 16-31: Y coordinate

Operation:

ABS_UCLIP_XMIN = ABS_UCLIP_XMAX;
ABS_UCLIP_YMIN = ABS_UCLIP_YMAX;
ABS_UCLIP_XMAX = CANVAS_MIN.X + param.X;
ABS_UCLIP_YMAX = CANVAS_MIN.Y + param.Y;

Todo

check NV3+

mthd 0x304: SIZE [NV1_CLIP]
Sets the size of the clipping rectangle. bits 0-15: width bits 16-31: height

Operation:

ABS_UCLIP_XMIN = ABS_UCLIP_XMAX;
ABS_UCLIP_YMIN = ABS_UCLIP_YMAX;
ABS_UCLIP_XMAX += param.X;
ABS_UCLIP_YMAX += param.Y;

Todo

check NV3+

mthd 0x200: PATCH_IMAGE_OUTPUT [NV1_CLIP] [NV4:NV20]
Reserved for plugging an image patchcord to output the rectangle into.

Operation:

throw(UNIMPLEMENTED_MTHD);

BETA4

The BETA4 object family deals with setting the per-component beta factors for the BLEND_PREMULT and SRCCOPY_PREMULT operations. The objects in this family are:

  • class 0x0072: NV4_BETA4 [NV4:G84]

The methods are:

0100 NOP [NV4-] 0104 NOTIFY 0110 WAIT_FOR_IDLE [G80-] 0140 PM_TRIGGER [NV40-?] [XXX] 0180 N DMA_NOTIFY [NV4-] 0200 O PATCH_BETA_OUTPUT [NV4:NV20] 0300 BETA4

mthd 0x300: BETA4 [NV4_BETA4]
Sets the per-component beta factors. bits 0-7: B bits 8-15: G bits 16-23: R bits 24-31: A

Operation:

/* XXX: figure it out */
mthd 0x200: PATCH_BETA_OUTPUT [NV4_BETA4] [NV4:NV20]
Reserved for plugging a beta patchcord to output beta factors into.

Operation:

throw(UNIMPLEMENTED_MTHD);

Surface setup

Todo

write me

SURF

Todo

write me

SURF2D

Todo

write me

SURF3D

Todo

write me

SWZSURF

Todo

write me