- /* Write the register combiner state out to the hardware. */
- BEGIN_RING(chan, fahrenheit,
- NV04_MULTITEX_TRIANGLE_COMBINE_ALPHA(i), 2);
- OUT_RING(chan, rc_a.hw);
- OUT_RING(chan, rc_c.hw);
-
- BEGIN_RING(chan, fahrenheit,
- NV04_MULTITEX_TRIANGLE_COMBINE_FACTOR, 1);
- OUT_RING(chan, pack_rgba_f(MESA_FORMAT_ARGB8888,
- ctx->Texture.Unit[0].EnvColor));
+ /* calculate non-multitex state */
+ nv04->blend &= ~NV04_TEXTURED_TRIANGLE_BLEND_TEXTURE_MAP__MASK;
+ if (ctx->Texture._MaxEnabledTexImageUnit != -1)
+ nv04->blend |= get_texenv_mode(ctx->Texture.Unit[0].EnvMode);
+ else
+ nv04->blend |= get_texenv_mode(GL_MODULATE);
+
+ /* update calculated multitex state */
+ nv04->alpha[i] = rc_a.hw;
+ nv04->color[i] = rc_c.hw;
+ nv04->factor = pack_rgba_f(MESA_FORMAT_B8G8R8A8_UNORM,
+ ctx->Texture.Unit[0].EnvColor);