Fix ColorMask
authorAlan Hourihane <alanh@tungstengraphics.com>
Tue, 11 Jan 2005 16:42:56 +0000 (16:42 +0000)
committerAlan Hourihane <alanh@tungstengraphics.com>
Tue, 11 Jan 2005 16:42:56 +0000 (16:42 +0000)
src/mesa/drivers/dri/unichrome/via_state.c

index 6b16a17f96994334b114e589203bf858a01d1500..a40aba43694ff1f0190f3714f86e53b00560928c 100644 (file)
@@ -1320,8 +1320,18 @@ static void viaChooseColorState(GLcontext *ctx)
     else
         vmesa->regHROP = HC_HROP_P;
 
-    vmesa->regHFBBMSKL = (*(GLuint *)&ctx->Color.ColorMask[0]) & 0xFFFFFF;
-    vmesa->regHROP |= ctx->Color.ColorMask[3];
+    if (vmesa->viaScreen->bitsPerPixel == 32) {
+       vmesa->regHFBBMSKL = PACK_COLOR_888(ctx->Color.ColorMask[0],
+                                           ctx->Color.ColorMask[1],
+                                           ctx->Color.ColorMask[2]);
+       vmesa->regHROP |= ctx->Color.ColorMask[3];
+    } else {
+       GLushort color = PACK_COLOR_565(ctx->Color.ColorMask[0],
+                                       ctx->Color.ColorMask[1],
+                                       ctx->Color.ColorMask[2]);
+       vmesa->regHFBBMSKL = (color & 0xFF) << 16;
+       vmesa->regHROP |= (color & 0xFF00) >> 8;
+    }
 
     if (ctx->Color.ColorMask[3])
         vmesa->regEnable |= HC_HenAW_MASK;
@@ -1607,12 +1617,14 @@ void viaValidateState( GLcontext *ctx )
      * are incorrectly writen to the z buffer.  This is a pretty big
      * slowdown, it would be good to find out this wasn't necessary:
      */
+#if 0
     if (vmesa->viaScreen->deviceID == VIA_CLE266) {
        GLboolean fallback = (ctx->Color.AlphaEnabled && 
                             ctx->Color.AlphaFunc != GL_ALWAYS &&
                             ctx->Depth.Mask);
        FALLBACK( vmesa, VIA_FALLBACK_ALPHATEST, fallback );
     }
+#endif
 
     vmesa->newEmitState |= vmesa->newState;
     vmesa->newState = 0;