Navigate to the top level

Combiner

Description
Tests behavior of NV097_SET_COMBINER_* and NV097_SET_SPECULAR_* final combiner operations.
Suite class def

AlphaFromBlue

Demonstrates behavior of the "blue to alpha" flags.

Image with alpha
Test result for Combiner::AlphaFromBlue
Image as seen on display
No alpha test result for Combiner::AlphaFromBlue

ColorAlphaIndependence

Demonstrates that setting color on a combiner register does not affect alpha.

Image with alpha
Test result for Combiner::ColorAlphaIndependence
Image as seen on display
No alpha test result for Combiner::ColorAlphaIndependence

CombinerOps

Tests the various output operations.

Image with alpha
Test result for Combiner::CombinerOps
Image as seen on display
No alpha test result for Combiner::CombinerOps

Flags

Image with alpha
Test result for Combiner::Flags
Image as seen on display
No alpha test result for Combiner::Flags

Independence

Demonstrates that setting a register's value in a combiner stage does not mutate the value until after it is assigned as an output. The test performs several draws where R0 is initialized to some color then both mutated and copied into R1, demonstrating that the original value of R0 is copied into R1 before being replaced with the new value.

Image with alpha
Test result for Combiner::Independence
Image as seen on display
No alpha test result for Combiner::Independence

InputMappings

Tests behavior of each CombinerMapping input modifier (UNSIGNED_IDENTITY, UNSIGNED_INVERT, EXPAND_NORMAL, EXPAND_NEGATE, HALFBIAS_NORMAL, HALFBIAS_NEGATE, SIGNED_IDENTITY, SIGNED_NEGATE) across positive (+0.70) and negative (-0.40) input registers. Output is scaled and biased (0.5 * mapping(x) + 0.5) to keep all results within [0.0, 1.0]. Each quad is split into actual (left) and expected reference (right) halves.

Image with alpha
Test result for Combiner::InputMappings
Image as seen on display
No alpha test result for Combiner::InputMappings

Mux

Tests behavior of the "MUX" combiner mode, in which R0.a is used to select between the AB and CD outputs.

Image with alpha
Test result for Combiner::Mux
Image as seen on display
No alpha test result for Combiner::Mux

ShiftClamping

Validates clamping behavior combined with combiner output shift and bias operations (OP_IDENTITY, OP_SHIFT_RIGHT_1, OP_BIAS, OP_SHIFT_LEFT_1, OP_SHIFT_LEFT_1_BIAS, OP_SHIFT_LEFT_2). Each rectangular quad is split in half: the left half displays the actual tested combiner result, while the right half displays the forced exact expected reference value. Demonstrates post-shift/bias clamping on sums exceeding 1.0 (internal accumulator headroom is preserved before scale/bias) and verifies positive saturation.

Image with alpha
Test result for Combiner::ShiftClamping
Image as seen on display
No alpha test result for Combiner::ShiftClamping

SignedCombinerOps

Tests behavior of combiner output operations (OP_IDENTITY, OP_SHIFT_LEFT_1, OP_SHIFT_LEFT_2, OP_SHIFT_RIGHT_1, OP_BIAS) in conjunction with signed (negative) values. Verifies that negative values are properly scaled and clamped when added to a positive base value in subsequent stages.

Image with alpha
Test result for Combiner::SignedCombinerOps
Image as seen on display
No alpha test result for Combiner::SignedCombinerOps

SignedToUnsignedMapping

Validates behavior when known signed (negative) values are mapped as MAP_UNSIGNED_IDENTITY versus MAP_SIGNED_IDENTITY across intermediate registers, pass-through texture coordinates, and a multi-stage pipeline. Verifies that MAP_UNSIGNED_IDENTITY properly clamps negative values to 0.0 (preserving base colors), while MAP_SIGNED_IDENTITY preserves negative values (allowing subtraction).

Image with alpha
Test result for Combiner::SignedToUnsignedMapping
Image as seen on display
No alpha test result for Combiner::SignedToUnsignedMapping

SpecialInputs

Tests the special input registers in the final combiner.

Image with alpha
Test result for Combiner::SpecialInputs
Image as seen on display
No alpha test result for Combiner::SpecialInputs

SpecularR0Sum

Validates final combiner SRC_SPEC_R0_SUM (R0 + Specular) across general combiner output operations (IDENTITY, OP_SHIFT_LEFT_1, OP_SHIFT_LEFT_2, OP_SHIFT_RIGHT_1, OP_BIAS, OP_SHIFT_LEFT_1_BIAS) with specular zeroed. Each quad is split into tested (left) and expected reference (right) halves, comparing direct SRC_R0 against SRC_SPEC_R0_SUM to isolate emulator discrepancies under bias operations.

Image with alpha
Test result for Combiner::SpecularR0Sum
Image as seen on display
No alpha test result for Combiner::SpecularR0Sum

SpecularR0SumFlags

Tests behavior of specular_add_invert_r0, specular_add_invert_v1, and specular_clamp on final combiner sum (SRC_SPEC_R0_SUM). Each quad is split into tested (left) and expected reference (right) halves. Validates positive overflow clamping on sums exceeding 1.0, individual and simultaneous operand inversion (1 - R0, 1 - V1), and clamping behavior with negative/underflowing input registers.

Image with alpha
Test result for Combiner::SpecularR0SumFlags
Image as seen on display
No alpha test result for Combiner::SpecularR0SumFlags

TextureDestination

Demonstrates and validates behavior when general combiner stages write to texture registers (DST_TEX0, DST_TEX1). Tests cross-stage register forwarding, in-place read-modify-write, multi-stage pipeline flow, direct Final Combiner register reads, alpha channel destination writes, and unbound texture registers as general scratch registers.

Image with alpha
Test result for Combiner::TextureDestination
Image as seen on display
No alpha test result for Combiner::TextureDestination

UnboundTexSampler

Image with alpha
Test result for Combiner::UnboundTexSampler
Image as seen on display
No alpha test result for Combiner::UnboundTexSampler