Fix bug in vmx_combine_xor_ca()
authorSøren Sandmann Pedersen <sandmann@redhat.com>
Fri, 7 Aug 2009 14:54:16 +0000 (10:54 -0400)
committerSøren Sandmann Pedersen <sandmann@redhat.com>
Sat, 8 Aug 2009 22:50:18 +0000 (18:50 -0400)
The destination needs to be inverted before the alpha channel is
extracted; otherwise, the RGB channels of da will be 0xff.

pixman/pixman-vmx.c

index 7d947d1..5978a07 100644 (file)
@@ -1542,11 +1542,11 @@ vmx_combine_xor_ca (pixman_implementation_t *imp,
        uint32_t s = src[i];
        uint32_t d = dest[i];
        uint32_t sa = ALPHA_8 (s);
-       uint32_t da = ALPHA_8 (d);
+       uint32_t da = ALPHA_8 (~d);
        
        UN8x4_MUL_UN8x4 (s, a);
        UN8x4_MUL_UN8 (a, sa);
-       UN8x4_MUL_UN8x4_ADD_UN8x4_MUL_UN8 (d, ~a, s, ~da);
+       UN8x4_MUL_UN8x4_ADD_UN8x4_MUL_UN8 (d, ~a, s, da);
        dest[i] = d;
     }
 }