summaryrefslogtreecommitdiffstats
path: root/patches/DirectFB-1.3.0/old-patches-for-reference/blit_blend_shortcut.patch
blob: b9ff9432398a63e7b9fd6f6f0de59fbb705e7362 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
diff -pur DirectFB-1.0.1/src/gfx/generic/generic.c DirectFB-1.0.1-hacked/src/gfx/generic/generic.c
--- DirectFB-1.0.1/src/gfx/generic/generic.c	2007-11-24 20:04:19.000000000 +0100
+++ DirectFB-1.0.1-hacked/src/gfx/generic/generic.c	2007-11-24 19:34:13.000000000 +0100
@@ -6988,12 +6990,27 @@ bool gAcquire( CardState *state, DFBAcce
                }
                break;
           case DFXL_BLIT:
+               /* TODO: other blend functions could benefit, too */
+               if (state->blittingflags == (DSBLIT_BLEND_ALPHACHANNEL|DSBLIT_BLEND_COLORALPHA) &&
+                   state->src_blend     == DSBF_SRCALPHA             &&
+                   state->dst_blend     == DSBF_INVSRCALPHA)
+               {
+                    if (!DFB_PIXELFORMAT_HAS_ALPHA(source->format)) {
+                         state->blittingflags &= ~DSBLIT_BLEND_ALPHACHANNEL;
+                    }
+                    if (state->color.r == 0xff && state->color.g == 0xff && state->color.b == 0xff) {
+                         state->blittingflags &= ~DSBLIT_COLORIZE;
+                    }
+               }
                if (state->blittingflags == DSBLIT_BLEND_ALPHACHANNEL &&
                    state->src_blend     == DSBF_SRCALPHA             &&
                    state->dst_blend     == DSBF_INVSRCALPHA)
                {
-                    if (gfxs->src_format == DSPF_ARGB &&
-                        Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[dst_pfi])
+                    if (!DFB_PIXELFORMAT_HAS_ALPHA(source->format)) {
+                         state->blittingflags = DSBLIT_NOFX;
+                    }
+                    else if (gfxs->src_format == DSPF_ARGB &&
+                             Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[dst_pfi])
                     {
                          *funcs++ = Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[dst_pfi];
                          break;