#define Lum(c) ((c[0] * 30 + c[1] * 59 + c[2] * 11) / 100)
#define Sat(c) (Max (c) - Min (c))
-#define PdfNonSeparableBlendMode(name) \
-static void \
-fbCombine ## name ## U (pixman_implementation_t *imp, pixman_op_t op, \
+#define PdfNonSeparableBlendMode(name) \
+static void \
+fbCombine ## name ## U (pixman_implementation_t *imp, pixman_op_t op, \
comp4_t *dest, const comp4_t *src, const comp4_t *mask, int width) \
-{ \
- int i; \
- for (i = 0; i < width; ++i) { \
- comp4_t s = combineMask (src, mask, i); \
- comp4_t d = *(dest + i); \
- comp1_t sa = Alpha(s); \
- comp1_t isa = ~sa; \
- comp1_t da = Alpha(d); \
- comp1_t ida = ~da; \
- comp4_t result; \
- comp4_t sc[3], dc[3], c[3]; \
- \
- result = d; \
- FbByteAddMul(result, isa, s, ida); \
- dc[0] = Red (d); \
- sc[0] = Red (s); \
- dc[1] = Green (d); \
- sc[1] = Green (s); \
- dc[2] = Blue (d); \
- sc[2] = Blue (s); \
- Blend ## name (c, dc, da, sc, sa); \
- \
- *(dest + i) = result + \
- (DivOne (sa * da) << A_SHIFT) + \
- (DivOne (c[0]) << R_SHIFT) + \
- (DivOne (c[1]) << G_SHIFT) + \
- (DivOne (c[2])); \
- } \
-} \
- \
-static void \
-fbCombine ## name ## C (pixman_implementation_t *imp, pixman_op_t op, \
- comp4_t *dest, const comp4_t *src, const comp4_t *mask, int width) \
-{ \
- int i; \
- for (i = 0; i < width; ++i) { \
- comp4_t m = *(mask + i); \
- comp4_t s = *(src + i); \
- comp4_t d = *(dest + i); \
- comp1_t sa = Alpha(s); \
- comp1_t da = Alpha(d); \
- comp1_t ida = ~da; \
- comp4_t result; \
- \
- if (m == 0) \
- continue; \
- \
- if (m == ~0) \
- { \
- comp4_t sc[3], dc[3], c[3]; \
- \
- result = d; \
- dc[0] = Red (d); \
- sc[0] = Red (s); \
- dc[1] = Green (d); \
- sc[1] = Green (s); \
- dc[2] = Blue (d); \
- sc[2] = Blue (s); \
- Blend ## name (c, dc, da, sc, sa); \
- result = \
- (DivOne (sa * da) << A_SHIFT) + \
- (DivOne (c[0]) << R_SHIFT) + \
- (DivOne (c[1]) << G_SHIFT) + \
- (DivOne (c[2])); \
- fbCombineMaskValueC (&result, &m); \
- fbCombineMaskC (&s, &m); \
- FbByteMul (s, ida); \
- m = ~m; \
- FbByteMulAddC(d, m, s); \
- result += d; \
- } else { \
- result = s; \
- fbCombineMaskValueC (&result, &m); \
- } \
- \
- *(dest + i) = result; \
- } \
-}
-
+{ \
+ int i; \
+ for (i = 0; i < width; ++i) { \
+ comp4_t s = combineMask (src, mask, i); \
+ comp4_t d = *(dest + i); \
+ comp1_t sa = Alpha(s); \
+ comp1_t isa = ~sa; \
+ comp1_t da = Alpha(d); \
+ comp1_t ida = ~da; \
+ comp4_t result; \
+ comp4_t sc[3], dc[3], c[3]; \
+ \
+ result = d; \
+ FbByteAddMul(result, isa, s, ida); \
+ dc[0] = Red (d); \
+ sc[0] = Red (s); \
+ dc[1] = Green (d); \
+ sc[1] = Green (s); \
+ dc[2] = Blue (d); \
+ sc[2] = Blue (s); \
+ Blend ## name (c, dc, da, sc, sa); \
+ \
+ *(dest + i) = result + \
+ (DivOne (sa * da) << A_SHIFT) + \
+ (DivOne (c[0]) << R_SHIFT) + \
+ (DivOne (c[1]) << G_SHIFT) + \
+ (DivOne (c[2])); \
+ } \
+}
static void
SetLum (comp4_t dest[3], comp4_t src[3], comp4_t sa, comp4_t lum)
imp->combine_width_ca[PIXMAN_OP_SOFT_LIGHT] = fbCombineSoftLightC;
imp->combine_width_ca[PIXMAN_OP_DIFFERENCE] = fbCombineDifferenceC;
imp->combine_width_ca[PIXMAN_OP_EXCLUSION] = fbCombineExclusionC;
- imp->combine_width_ca[PIXMAN_OP_HSL_HUE] = fbCombineHSLHueC;
- imp->combine_width_ca[PIXMAN_OP_HSL_SATURATION] = fbCombineHSLSaturationC;
- imp->combine_width_ca[PIXMAN_OP_HSL_COLOR] = fbCombineHSLColorC;
- imp->combine_width_ca[PIXMAN_OP_HSL_LUMINOSITY] = fbCombineHSLLuminosityC;
+ /* It is not clear that these make sense, so leave them out for now */
+ imp->combine_width_ca[PIXMAN_OP_HSL_HUE] = NULL;
+ imp->combine_width_ca[PIXMAN_OP_HSL_SATURATION] = NULL;
+ imp->combine_width_ca[PIXMAN_OP_HSL_COLOR] = NULL;
+ imp->combine_width_ca[PIXMAN_OP_HSL_LUMINOSITY] = NULL;
}