Index: Mesa/src/mesa/drivers/dri/radeon/radeon_texstate.c
===================================================================
RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/radeon/radeon_texstate.c,v
retrieving revision 1.5
diff -u -r1.5 radeon_texstate.c
--- Mesa/src/mesa/drivers/dri/radeon/radeon_texstate.c	6 Feb 2004 17:39:03 -0000	1.5
+++ Mesa/src/mesa/drivers/dri/radeon/radeon_texstate.c	8 Feb 2004 23:02:54 -0000
@@ -238,375 +238,6 @@
  * Texture combine functions
  */
 
-#define RADEON_DISABLE		0
-#define RADEON_REPLACE		1
-#define RADEON_MODULATE		2
-#define RADEON_DECAL		3
-#define RADEON_BLEND		4
-#define RADEON_ADD		5
-#define RADEON_MAX_COMBFUNC	6
-
-static GLuint radeon_color_combine[][RADEON_MAX_COMBFUNC] =
-{
-   /* Unit 0:
-    */
-   {
-      /* Disable combiner stage
-       */
-      (RADEON_COLOR_ARG_A_ZERO |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_CURRENT_COLOR |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_REPLACE = 0x00802800
-       */
-      (RADEON_COLOR_ARG_A_ZERO |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_T0_COLOR |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_MODULATE = 0x00800142
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_T0_COLOR |
-       RADEON_COLOR_ARG_C_ZERO |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_DECAL = 0x008c2d42
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_T0_COLOR |
-       RADEON_COLOR_ARG_C_T0_ALPHA |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_BLEND = 0x008c2902
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_TFACTOR_COLOR |
-       RADEON_COLOR_ARG_C_T0_COLOR |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_ADD = 0x00812802
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_T0_COLOR |
-       RADEON_COMP_ARG_B |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-   },
-
-   /* Unit 1:
-    */
-   {
-      /* Disable combiner stage
-       */
-      (RADEON_COLOR_ARG_A_ZERO |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_CURRENT_COLOR |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_REPLACE = 0x00803000
-       */
-      (RADEON_COLOR_ARG_A_ZERO |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_T1_COLOR |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_MODULATE = 0x00800182
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_T1_COLOR |
-       RADEON_COLOR_ARG_C_ZERO |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_DECAL = 0x008c3582
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_T1_COLOR |
-       RADEON_COLOR_ARG_C_T1_ALPHA |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_BLEND = 0x008c3102
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_TFACTOR_COLOR |
-       RADEON_COLOR_ARG_C_T1_COLOR |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_ADD = 0x00813002
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_T1_COLOR |
-       RADEON_COMP_ARG_B |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-   },
-
-   /* Unit 2:
-    */
-   {
-      /* Disable combiner stage
-       */
-      (RADEON_COLOR_ARG_A_ZERO |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_CURRENT_COLOR |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_REPLACE = 0x00803800
-       */
-      (RADEON_COLOR_ARG_A_ZERO |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_T2_COLOR |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_MODULATE = 0x008001c2
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_T2_COLOR |
-       RADEON_COLOR_ARG_C_ZERO |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_DECAL = 0x008c3dc2
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_T2_COLOR |
-       RADEON_COLOR_ARG_C_T2_ALPHA |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_BLEND = 0x008c3902
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_TFACTOR_COLOR |
-       RADEON_COLOR_ARG_C_T2_COLOR |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_ADD = 0x00813802
-       */
-      (RADEON_COLOR_ARG_A_CURRENT_COLOR |
-       RADEON_COLOR_ARG_B_ZERO |
-       RADEON_COLOR_ARG_C_T2_COLOR |
-       RADEON_COMP_ARG_B |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-   }
-};
-
-static GLuint radeon_alpha_combine[][RADEON_MAX_COMBFUNC] =
-{
-   /* Unit 0:
-    */
-   {
-      /* Disable combiner stage
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_CURRENT_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_REPLACE = 0x00800500
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_T0_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_MODULATE = 0x00800051
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_T0_ALPHA |
-       RADEON_ALPHA_ARG_C_ZERO |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_DECAL = 0x00800100
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_CURRENT_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_BLEND = 0x00800051
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_TFACTOR_ALPHA |
-       RADEON_ALPHA_ARG_C_T0_ALPHA |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_ADD = 0x00800051
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_T0_ALPHA |
-       RADEON_COMP_ARG_B |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-   },
-
-   /* Unit 1:
-    */
-   {
-      /* Disable combiner stage
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_CURRENT_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_REPLACE = 0x00800600
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_T1_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_MODULATE = 0x00800061
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_T1_ALPHA |
-       RADEON_ALPHA_ARG_C_ZERO |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_DECAL = 0x00800100
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_CURRENT_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_BLEND = 0x00800061
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_TFACTOR_ALPHA |
-       RADEON_ALPHA_ARG_C_T1_ALPHA |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_ADD = 0x00800061
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_T1_ALPHA |
-       RADEON_COMP_ARG_B |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-   },
-
-   /* Unit 2:
-    */
-   {
-      /* Disable combiner stage
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_CURRENT_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_REPLACE = 0x00800700
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_T2_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_MODULATE = 0x00800071
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_T2_ALPHA |
-       RADEON_ALPHA_ARG_C_ZERO |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_DECAL = 0x00800100
-       */
-      (RADEON_ALPHA_ARG_A_ZERO |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_CURRENT_ALPHA |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_BLEND = 0x00800071
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_TFACTOR_ALPHA |
-       RADEON_ALPHA_ARG_C_T2_ALPHA |
-       RADEON_BLEND_CTL_BLEND |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-
-      /* GL_ADD = 0x00800021
-       */
-      (RADEON_ALPHA_ARG_A_CURRENT_ALPHA |
-       RADEON_ALPHA_ARG_B_ZERO |
-       RADEON_ALPHA_ARG_C_T2_ALPHA |
-       RADEON_COMP_ARG_B |
-       RADEON_BLEND_CTL_ADD |
-       RADEON_SCALE_1X |
-       RADEON_CLAMP_TX),
-   }
-};
-
-
 /* GL_ARB_texture_env_combine support
  */
 
@@ -774,196 +405,35 @@
        */
       rmesa->state.texture.unit[unit].format = 0;
       rmesa->state.texture.unit[unit].envMode = 0;
-      color_combine = radeon_color_combine[unit][RADEON_DISABLE];
-      alpha_combine = radeon_alpha_combine[unit][RADEON_DISABLE];
+      color_combine = RADEON_COLOR_ARG_A_ZERO | RADEON_COLOR_ARG_B_ZERO
+         | RADEON_COLOR_ARG_C_CURRENT_COLOR | RADEON_BLEND_CTL_ADD
+         | RADEON_SCALE_1X | RADEON_CLAMP_TX;
+      alpha_combine = RADEON_ALPHA_ARG_A_ZERO | RADEON_ALPHA_ARG_B_ZERO
+         | RADEON_ALPHA_ARG_C_CURRENT_ALPHA | RADEON_BLEND_CTL_ADD
+         | RADEON_SCALE_1X | RADEON_CLAMP_TX;
    }
    else {
-      const struct gl_texture_object *tObj = texUnit->_Current;
-      const GLenum format = tObj->Image[0][tObj->BaseLevel]->Format;
       GLuint color_arg[3], alpha_arg[3];
-      GLuint i, numColorArgs = 0, numAlphaArgs = 0;
-      GLuint RGBshift = texUnit->Combine.ScaleShiftRGB;
-      GLuint Ashift = texUnit->Combine.ScaleShiftA;
-
-      switch ( texUnit->EnvMode ) {
-      case GL_REPLACE:
-         switch ( format ) {
-	 case GL_RGBA:
-         case GL_LUMINANCE_ALPHA:
-         case GL_INTENSITY:
-	    color_combine = radeon_color_combine[unit][RADEON_REPLACE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_REPLACE];
-	    break;
-	 case GL_ALPHA:
-	    color_combine = radeon_color_combine[unit][RADEON_DISABLE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_REPLACE];
-	    break;
-	 case GL_LUMINANCE:
-	 case GL_RGB:
-	 case GL_YCBCR_MESA:
-	    color_combine = radeon_color_combine[unit][RADEON_REPLACE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_DISABLE];
-	    break;
-	 case GL_COLOR_INDEX:
-	 default:
-	    return GL_FALSE;
-	 }
-	 break;
-
-      case GL_MODULATE:
-	 switch ( format ) {
-	 case GL_RGBA:
-	 case GL_LUMINANCE_ALPHA:
-	 case GL_INTENSITY:
-	    color_combine = radeon_color_combine[unit][RADEON_MODULATE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_MODULATE];
-	    break;
-	 case GL_ALPHA:
-	    color_combine = radeon_color_combine[unit][RADEON_DISABLE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_MODULATE];
-	    break;
-	 case GL_RGB:
-	 case GL_LUMINANCE:
-	 case GL_YCBCR_MESA:
-	    color_combine = radeon_color_combine[unit][RADEON_MODULATE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_DISABLE];
-	    break;
-	 case GL_COLOR_INDEX:
-	 default:
-	    return GL_FALSE;
-	 }
-	 break;
-
-      case GL_DECAL:
-	 switch ( format ) {
-	 case GL_RGBA:
-	 case GL_RGB:
-	 case GL_YCBCR_MESA:
-	    color_combine = radeon_color_combine[unit][RADEON_DECAL];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_DISABLE];
-	    break;
-	 case GL_ALPHA:
-	 case GL_LUMINANCE:
-	 case GL_LUMINANCE_ALPHA:
-	 case GL_INTENSITY:
-	    color_combine = radeon_color_combine[unit][RADEON_DISABLE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_DISABLE];
-	    break;
-	 case GL_COLOR_INDEX:
-	 default:
-	    return GL_FALSE;
-	 }
-	 break;
-
-      case GL_BLEND:
-	 switch ( format ) {
-	 case GL_RGBA:
-	 case GL_RGB:
-	 case GL_LUMINANCE:
-	 case GL_LUMINANCE_ALPHA:
-	 case GL_YCBCR_MESA:
-	    color_combine = radeon_color_combine[unit][RADEON_BLEND];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_MODULATE];
-	    break;
-	 case GL_ALPHA:
-	    color_combine = radeon_color_combine[unit][RADEON_DISABLE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_MODULATE];
-	    break;
-	 case GL_INTENSITY:
-	    color_combine = radeon_color_combine[unit][RADEON_BLEND];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_BLEND];
-	    break;
-	 case GL_COLOR_INDEX:
-	 default:
-	    return GL_FALSE;
-	 }
-	 break;
+      GLuint i;
+      const GLuint numColorArgs = texUnit->_CurrentCombine->_NumArgsRGB;
+      const GLuint numAlphaArgs = texUnit->_CurrentCombine->_NumArgsA;
+      GLuint RGBshift = texUnit->_CurrentCombine->ScaleShiftRGB;
+      GLuint Ashift = texUnit->_CurrentCombine->ScaleShiftA;
 
-      case GL_ADD:
-	 switch ( format ) {
-	 case GL_RGBA:
-	 case GL_RGB:
-	 case GL_LUMINANCE:
-	 case GL_LUMINANCE_ALPHA:
-	 case GL_YCBCR_MESA:
-	    color_combine = radeon_color_combine[unit][RADEON_ADD];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_MODULATE];
-	    break;
-	 case GL_ALPHA:
-	    color_combine = radeon_color_combine[unit][RADEON_DISABLE];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_MODULATE];
-	    break;
-	 case GL_INTENSITY:
-	    color_combine = radeon_color_combine[unit][RADEON_ADD];
-	    alpha_combine = radeon_alpha_combine[unit][RADEON_ADD];
-	    break;
-	 case GL_COLOR_INDEX:
-	 default:
-	    return GL_FALSE;
-	 }
-	 break;
-
-      case GL_COMBINE:
 	 /* Don't cache these results.
 	  */
 	 rmesa->state.texture.unit[unit].format = 0;
 	 rmesa->state.texture.unit[unit].envMode = 0;
 
-	 /* Step 0:
-	  * Calculate how many arguments we need to process.
-	  */
-	 switch ( texUnit->Combine.ModeRGB ) {
-	 case GL_REPLACE:
-	    numColorArgs = 1;
-	    break;
-	 case GL_MODULATE:
-	 case GL_ADD:
-	 case GL_ADD_SIGNED:
-	 case GL_SUBTRACT:
-	 case GL_DOT3_RGB:
-	 case GL_DOT3_RGBA:
-	 case GL_DOT3_RGB_EXT:
-	 case GL_DOT3_RGBA_EXT:
-	    numColorArgs = 2;
-	    break;
-	 case GL_INTERPOLATE:
-	 case GL_MODULATE_ADD_ATI:
-	 case GL_MODULATE_SIGNED_ADD_ATI:
-	 case GL_MODULATE_SUBTRACT_ATI:
-	    numColorArgs = 3;
-	    break;
-	 default:
-	    return GL_FALSE;
-	 }
-
-	 switch ( texUnit->Combine.ModeA ) {
-	 case GL_REPLACE:
-	    numAlphaArgs = 1;
-	    break;
-	 case GL_MODULATE:
-	 case GL_ADD:
-	 case GL_ADD_SIGNED:
-	 case GL_SUBTRACT:
-	    numAlphaArgs = 2;
-	    break;
-	 case GL_INTERPOLATE:
-	 case GL_MODULATE_ADD_ATI:
-	 case GL_MODULATE_SIGNED_ADD_ATI:
-	 case GL_MODULATE_SUBTRACT_ATI:
-	    numAlphaArgs = 3;
-	    break;
-	 default:
-	    return GL_FALSE;
-	 }
 
 	 /* Step 1:
 	  * Extract the color and alpha combine function arguments.
 	  */
 	 for ( i = 0 ; i < numColorArgs ; i++ ) {
-	    const GLuint op = texUnit->Combine.OperandRGB[i] - GL_SRC_COLOR;
+	    const GLuint op = texUnit->_CurrentCombine->OperandRGB[i] - GL_SRC_COLOR;
 	    assert(op >= 0);
 	    assert(op <= 3);
-	    switch ( texUnit->Combine.SourceRGB[i] ) {
+	    switch ( texUnit->_CurrentCombine->SourceRGB[i] ) {
 	    case GL_TEXTURE:
 	       color_arg[i] = radeon_texture_color[op][unit];
 	       break;
@@ -988,10 +458,10 @@
 	 }
 
 	 for ( i = 0 ; i < numAlphaArgs ; i++ ) {
-	    const GLuint op = texUnit->Combine.OperandA[i] - GL_SRC_ALPHA;
+	    const GLuint op = texUnit->_CurrentCombine->OperandA[i] - GL_SRC_ALPHA;
 	    assert(op >= 0);
 	    assert(op <= 1);
-	    switch ( texUnit->Combine.SourceA[i] ) {
+	    switch ( texUnit->_CurrentCombine->SourceA[i] ) {
 	    case GL_TEXTURE:
 	       alpha_arg[i] = radeon_texture_alpha[op][unit];
 	       break;
@@ -1018,7 +488,7 @@
 	 /* Step 2:
 	  * Build up the color and alpha combine functions.
 	  */
-	 switch ( texUnit->Combine.ModeRGB ) {
+	 switch ( texUnit->_CurrentCombine->ModeRGB ) {
 	 case GL_REPLACE:
 	    color_combine = (RADEON_COLOR_ARG_A_ZERO |
 			     RADEON_COLOR_ARG_B_ZERO |
@@ -1119,7 +589,7 @@
 	    return GL_FALSE;
 	 }
 
-	 switch ( texUnit->Combine.ModeA ) {
+	 switch ( texUnit->_CurrentCombine->ModeA ) {
 	 case GL_REPLACE:
 	    alpha_combine = (RADEON_ALPHA_ARG_A_ZERO |
 			     RADEON_ALPHA_ARG_B_ZERO |
@@ -1191,8 +661,8 @@
 	    return GL_FALSE;
 	 }
 
-	 if ( (texUnit->Combine.ModeRGB == GL_DOT3_RGB_EXT)
-	      || (texUnit->Combine.ModeRGB == GL_DOT3_RGB) ) {
+	 if ( (texUnit->_CurrentCombine->ModeRGB == GL_DOT3_RGB_EXT)
+	      || (texUnit->_CurrentCombine->ModeRGB == GL_DOT3_RGB) ) {
 	    alpha_combine |= RADEON_DOT_ALPHA_DONT_REPLICATE;
 	 }
 
@@ -1204,11 +674,6 @@
 
 	 /* All done!
 	  */
-	 break;
-
-      default:
-	 return GL_FALSE;
-      }
    }
 
    if ( rmesa->hw.tex[unit].cmd[TEX_PP_TXCBLEND] != color_combine ||
