All elements of pre-DRI_NEW_INTERFACE_ONLY are removed. This allows
[mesa.git] / src / mesa / drivers / dri / mga / mga_texcombine.c
index f0664e37cfac6b0fa10952aea67e11c238b25728..bbfa29be5fe9aeee19681196ebe5dc7eef6c35d8 100644 (file)
@@ -52,7 +52,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
    int args[3];
    int i;
 
-   switch (texUnit->CombineModeRGB) {
+   switch (texUnit->Combine.ModeRGB) {
    case GL_REPLACE:
       numColorArgs = 1;
       break;
@@ -72,7 +72,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       return GL_FALSE;
    }
 
-   switch (texUnit->CombineModeA) {
+   switch (texUnit->Combine.ModeA) {
    case GL_REPLACE:
       numAlphaArgs = 1;
       break;
@@ -97,7 +97,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
    }
 
    for (i = 0;i < numColorArgs; i++) {
-      switch (texUnit->CombineSourceRGB[i]) {
+      switch (texUnit->Combine.SourceRGB[i]) {
       case GL_TEXTURE:
          arg1[i] |= 0;
          arg2[i] |= ARG_DISABLE;
@@ -143,9 +143,16 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          }
          break;
       case GL_CONSTANT:
+         if (mmesa->fcol_used &&
+             mmesa->envcolor[source] != mmesa->envcolor[!source])
+            return GL_FALSE;
+
          arg1[i] |= ARG_DISABLE;
          arg2[i] |= TD0_color_arg2_fcol;
          alpha[i] |= TD0_color_alpha_fcol;
+
+         mmesa->setup.fcol = mmesa->envcolor[source];
+         mmesa->fcol_used = GL_TRUE;
          break;
       case GL_PRIMARY_COLOR:
          arg1[i] |= ARG_DISABLE;
@@ -174,16 +181,27 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          return GL_FALSE;
       }
 
-      switch (texUnit->CombineOperandRGB[i]) {
+      switch (texUnit->Combine.OperandRGB[i]) {
       case GL_SRC_COLOR:
          arg1[i] |= 0;
          arg2[i] |= 0;
-         alpha[i] |= ARG_DISABLE;
+         if (texUnit->Combine.SourceRGB[i] == GL_CONSTANT &&
+             RGBA_EQUAL( mmesa->envcolor[source] )) {
+            alpha[i] |= 0;
+         } else {
+            alpha[i] |= ARG_DISABLE;
+         }
          break;
       case GL_ONE_MINUS_SRC_COLOR:
          arg1[i] |= TD0_color_arg1_inv_enable;
          arg2[i] |= TD0_color_arg2_inv_enable;
-         alpha[i] |= ARG_DISABLE;
+         if (texUnit->Combine.SourceRGB[i] == GL_CONSTANT &&
+             RGBA_EQUAL( mmesa->envcolor[source] )) {
+            alpha[i] |= (TD0_color_alpha1inv_enable |
+                         TD0_color_alpha2inv_enable);
+         } else {
+            alpha[i] |= ARG_DISABLE;
+         }
          break;
       case GL_SRC_ALPHA:
          arg1[i] |= TD0_color_arg1_replicatealpha_enable;
@@ -201,7 +219,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       }
    }
 
-   switch (texUnit->CombineModeRGB) {
+   switch (texUnit->Combine.ModeRGB) {
    case GL_MODULATE_ADD_ATI:
    case GL_MODULATE_SIGNED_ADD_ATI:
       /* Special handling for ATI_texture_env_combine3.
@@ -284,12 +302,12 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          args[0] = MGA_ARG1; args[1] = MGA_ARG2; args[2] = MGA_ALPHA;
       } else
       if ((arg1[1] | arg2[0] | alpha[2]) != ARG_DISABLE &&
-          texUnit->CombineModeRGB != GL_MODULATE_SUBTRACT_ATI) {
+          texUnit->Combine.ModeRGB != GL_MODULATE_SUBTRACT_ATI) {
          *reg |= arg1[1] | arg2[0] | alpha[2];
          args[0] = MGA_ARG2; args[1] = MGA_ARG1; args[2] = MGA_ALPHA;
       } else
       if ((arg1[1] | arg2[2] | alpha[0]) != ARG_DISABLE &&
-          texUnit->CombineModeRGB != GL_MODULATE_SUBTRACT_ATI) {
+          texUnit->Combine.ModeRGB != GL_MODULATE_SUBTRACT_ATI) {
          *reg |= arg1[1] | arg2[2] | alpha[0];
          args[0] = MGA_ALPHA; args[1] = MGA_ARG1; args[2] = MGA_ARG2;
       } else
@@ -310,9 +328,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       }
    }
 
-   switch (texUnit->CombineModeRGB) {
+   switch (texUnit->Combine.ModeRGB) {
    case GL_REPLACE:
-      if (texUnit->CombineScaleShiftRGB) {
+      if (texUnit->Combine.ScaleShiftRGB) {
          return GL_FALSE;
       }
 
@@ -326,9 +344,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       }
       break;
    case GL_MODULATE:
-      if (texUnit->CombineScaleShiftRGB == 1) {
+      if (texUnit->Combine.ScaleShiftRGB == 1) {
          *reg |= TD0_color_modbright_2x;
-      } else if (texUnit->CombineScaleShiftRGB == 2) {
+      } else if (texUnit->Combine.ScaleShiftRGB == 2) {
          *reg |= TD0_color_modbright_4x;
       }
 
@@ -346,13 +364,13 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       *reg |= TD0_color_addbias_enable;
       /* fallthrough */
    case GL_ADD:
-      if (args[0] == MGA_ALPHA || args[1] == MGA_ALPHA){
+      if (args[0] == MGA_ALPHA || args[1] == MGA_ALPHA) {
          /* Can't get alpha to the adder */
          return GL_FALSE;
       }
-      if (texUnit->CombineScaleShiftRGB == 1) {
+      if (texUnit->Combine.ScaleShiftRGB == 1) {
          *reg |= TD0_color_add2x_enable;
-      } else if (texUnit->CombineScaleShiftRGB == 2) {
+      } else if (texUnit->Combine.ScaleShiftRGB == 2) {
          return GL_FALSE;
       }
 
@@ -364,9 +382,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          /* Only alpha can function as Arg2 */
          return GL_FALSE;
       }
-      if (texUnit->CombineScaleShiftRGB == 1) {
+      if (texUnit->Combine.ScaleShiftRGB == 1) {
          *reg |= TD0_color_add2x_enable;
-      } else if (texUnit->CombineScaleShiftRGB == 2) {
+      } else if (texUnit->Combine.ScaleShiftRGB == 2) {
          return GL_FALSE;
       }
 
@@ -396,7 +414,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
                      TD0_color_sel_arg2 |
                      TD0_alpha_arg2_prevstage |
                      TD0_alpha_sel_arg2);
-         mmesa->dualtex_env = GL_TRUE;
+         mmesa->force_dualtex = GL_TRUE;
       }
       break;
    case GL_SUBTRACT:
@@ -404,9 +422,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          /* Can't get alpha to the adder */
          return GL_FALSE;
       }
-      if (texUnit->CombineScaleShiftRGB == 1) {
+      if (texUnit->Combine.ScaleShiftRGB == 1) {
          *reg |= TD0_color_add2x_enable;
-      } else if (texUnit->CombineScaleShiftRGB == 2) {
+      } else if (texUnit->Combine.ScaleShiftRGB == 2) {
          return GL_FALSE;
       }
 
@@ -427,9 +445,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          /* Can't get alpha to the adder */
          return GL_FALSE;
       }
-      if (texUnit->CombineScaleShiftRGB == 1) {
+      if (texUnit->Combine.ScaleShiftRGB == 1) {
          *reg |= TD0_color_add2x_enable;
-      } else if (texUnit->CombineScaleShiftRGB == 2) {
+      } else if (texUnit->Combine.ScaleShiftRGB == 2) {
          return GL_FALSE;
       }
 
@@ -469,9 +487,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          /* Can't swap arguments */
          return GL_FALSE;
       }
-      if (texUnit->CombineScaleShiftRGB == 1) {
+      if (texUnit->Combine.ScaleShiftRGB == 1) {
          *reg |= TD0_color_add2x_enable;
-      } else if (texUnit->CombineScaleShiftRGB == 2) {
+      } else if (texUnit->Combine.ScaleShiftRGB == 2) {
          return GL_FALSE;
       }
 
@@ -497,7 +515,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
    }
 
    for (i = 0; i < numAlphaArgs; i++) {
-      switch (texUnit->CombineSourceA[i]) {
+      switch (texUnit->Combine.SourceA[i]) {
       case GL_TEXTURE:
          arg1[i] |= 0;
          arg2[i] |= ARG_DISABLE;
@@ -538,8 +556,15 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          }
          break;
       case GL_CONSTANT:
+         if (mmesa->fcol_used &&
+             mmesa->envcolor[source] != mmesa->envcolor[!source])
+            return GL_FALSE;
+
          arg1[i] |= ARG_DISABLE;
          arg2[i] |= TD0_alpha_arg2_fcol;
+
+         mmesa->setup.fcol = mmesa->envcolor[source];
+         mmesa->fcol_used = GL_TRUE;
          break;
       case GL_PRIMARY_COLOR:
          arg1[i] |= ARG_DISABLE;
@@ -564,7 +589,7 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
          return GL_FALSE;
       }
 
-      switch (texUnit->CombineOperandA[i]) {
+      switch (texUnit->Combine.OperandA[i]) {
       case GL_SRC_ALPHA:
          arg1[i] |= 0;
          arg2[i] |= 0;
@@ -589,22 +614,22 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       return GL_FALSE;
    }
 
-   switch (texUnit->CombineModeA) {
+   switch (texUnit->Combine.ModeA) {
    case GL_REPLACE:
-      if (texUnit->CombineScaleShiftA) {
+      if (texUnit->Combine.ScaleShiftA) {
          return GL_FALSE;
       }
 
-      if (args[0] == MGA_ARG1){
+      if (args[0] == MGA_ARG1) {
          *reg |= TD0_alpha_sel_arg1;
       } else if (args[0] == MGA_ARG2) {
          *reg |= TD0_alpha_sel_arg2;
       }
       break;
    case GL_MODULATE:
-      if (texUnit->CombineScaleShiftA == 1) {
+      if (texUnit->Combine.ScaleShiftA == 1) {
          *reg |= TD0_alpha_modbright_2x;
-      } else if (texUnit->CombineScaleShiftA == 2) {
+      } else if (texUnit->Combine.ScaleShiftA == 2) {
          *reg |= TD0_alpha_modbright_4x;
       }
 
@@ -614,9 +639,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
       *reg |= TD0_alpha_addbias_enable;
       /* fallthrough */
    case GL_ADD:
-      if (texUnit->CombineScaleShiftA == 1) {
+      if (texUnit->Combine.ScaleShiftA == 1) {
          *reg |= TD0_alpha_add2x_enable;
-      } else if (texUnit->CombineScaleShiftA == 2) {
+      } else if (texUnit->Combine.ScaleShiftA == 2) {
          return GL_FALSE;
       }
 
@@ -624,9 +649,9 @@ GLboolean mgaUpdateTextureEnvCombine( GLcontext *ctx, int unit )
                TD0_alpha_sel_add);
       break;
    case GL_SUBTRACT:
-      if (texUnit->CombineScaleShiftA == 1) {
+      if (texUnit->Combine.ScaleShiftA == 1) {
          *reg |= TD0_alpha_add2x_enable;
-      } else if (texUnit->CombineScaleShiftA == 2) {
+      } else if (texUnit->Combine.ScaleShiftA == 2) {
          return GL_FALSE;
       }