-
- /* Dithering. */
- if (ctx->Color.DitherFlag)
- ctrl |= NV04_TEXTURED_TRIANGLE_CONTROL_DITHER_ENABLE;
-
- /* Cull mode. */
- if (!ctx->Polygon.CullFlag)
- ctrl |= NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_NONE;
- else if (cull_mode == GL_FRONT_AND_BACK)
- ctrl |= NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_BOTH;
- else
- ctrl |= (cull_mode == GL_FRONT) ^ (front_face == GL_CCW) ?
- NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CW :
- NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CCW;
-
- /* Depth test. */
- if (ctx->Depth.Test)
- ctrl |= NV04_TEXTURED_TRIANGLE_CONTROL_Z_ENABLE;
- if (ctx->Depth.Mask)
- ctrl |= NV04_TEXTURED_TRIANGLE_CONTROL_Z_WRITE;
-
- ctrl |= get_comparison_op(ctx->Depth.Func) << 16;
-
- /* Alpha test. */
- if (ctx->Color.AlphaEnabled)
- ctrl |= NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_ENABLE;
-
- ctrl |= get_comparison_op(ctx->Color.AlphaFunc) << 8 |
- FLOAT_TO_UBYTE(ctx->Color.AlphaRef);
-
- BEGIN_RING(chan, fahrenheit, NV04_TEXTURED_TRIANGLE_CONTROL, 1);
- OUT_RING(chan, ctrl);
- }
+ nv04->ctrl[1] = 0;
+ nv04->ctrl[2] = 0;
+
+ /* Dithering. */
+ if (ctx->Color.DitherFlag)
+ nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_DITHER_ENABLE;
+
+ /* Cull mode. */
+ if (!ctx->Polygon.CullFlag)
+ nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_NONE;
+ else if (cull == GL_FRONT_AND_BACK)
+ nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_BOTH;
+ else
+ nv04->ctrl[0] |= (cull == GL_FRONT) ^ (front == GL_CCW) ?
+ NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CW :
+ NV04_TEXTURED_TRIANGLE_CONTROL_CULL_MODE_CCW;
+
+ /* Depth test. */
+ if (ctx->Depth.Test && fb->Visual.depthBits > 0)
+ nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_Z_ENABLE;
+ if (ctx->Depth.Mask && fb->Visual.depthBits > 0)
+ nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_Z_WRITE;
+
+ nv04->ctrl[0] |= get_comparison_op(ctx->Depth.Func) << 16;
+
+ /* Alpha test. */
+ if (ctx->Color.AlphaEnabled)
+ nv04->ctrl[0] |= NV04_TEXTURED_TRIANGLE_CONTROL_ALPHA_ENABLE;
+
+ nv04->ctrl[0] |= get_comparison_op(ctx->Color.AlphaFunc) << 8 |
+ FLOAT_TO_UBYTE(ctx->Color.AlphaRef);
+
+ /* Color mask. */
+ if (ctx->Color.ColorMask[0][RCOMP])
+ nv04->ctrl[0] |= NV04_MULTITEX_TRIANGLE_CONTROL0_RED_WRITE;
+ if (ctx->Color.ColorMask[0][GCOMP])
+ nv04->ctrl[0] |= NV04_MULTITEX_TRIANGLE_CONTROL0_GREEN_WRITE;
+ if (ctx->Color.ColorMask[0][BCOMP])
+ nv04->ctrl[0] |= NV04_MULTITEX_TRIANGLE_CONTROL0_BLUE_WRITE;
+ if (ctx->Color.ColorMask[0][ACOMP])
+ nv04->ctrl[0] |= NV04_MULTITEX_TRIANGLE_CONTROL0_ALPHA_WRITE;
+
+ /* Stencil test. */
+ if (ctx->Stencil.WriteMask[0])
+ nv04->ctrl[0] |= NV04_MULTITEX_TRIANGLE_CONTROL0_STENCIL_WRITE;
+
+ if (_mesa_stencil_is_enabled(ctx))
+ nv04->ctrl[1] |= NV04_MULTITEX_TRIANGLE_CONTROL1_STENCIL_ENABLE;
+
+ nv04->ctrl[1] |= get_comparison_op(ctx->Stencil.Function[0]) << 4 |
+ _mesa_get_stencil_ref(ctx, 0) << 8 |
+ ctx->Stencil.ValueMask[0] << 16 |
+ ctx->Stencil.WriteMask[0] << 24;
+
+ nv04->ctrl[2] |= get_stencil_op(ctx->Stencil.ZPassFunc[0]) << 8 |
+ get_stencil_op(ctx->Stencil.ZFailFunc[0]) << 4 |
+ get_stencil_op(ctx->Stencil.FailFunc[0]);