evas: remove EVAS_SLI code path, it was to slow and unused for years.
[framework/uifw/evas.git] / src / lib / engines / common / evas_scale_smooth_scaler_downx_downy.c
1 {
2    int Cx, Cy, i, j;
3    DATA32 *dptr, *sptr, *pix, *pbuf;
4    int a, r, g, b, rx, gx, bx, ax;
5    int xap, yap, pos;
6    //int dyy, dxx;
7    
8    DATA32  **yp; 
9    int *xp;
10    int w = dst_clip_w;
11
12    dptr = dst_ptr;
13    pos = (src_region_y * src_w) + src_region_x;
14    //dyy = dst_clip_y - dst_region_y;
15    //dxx = dst_clip_x - dst_region_x;
16
17    xp = xpoints;// + dxx;
18    yp = ypoints;// + dyy;
19    xapp = xapoints;// + dxx;
20    yapp = yapoints;// + dyy;
21    pbuf = buf;
22 /*#ifndef SCALE_USING_MMX */
23 /* for now there's no mmx down scaling - so C only */
24 #if 1
25    if (src->cache_entry.flags.alpha)
26      {
27         while (dst_clip_h--)
28           {
29             Cy = *yapp >> 16;
30             yap = *yapp & 0xffff;
31                   
32             while (dst_clip_w--)
33               {
34                 Cx = *xapp >> 16;
35                 xap = *xapp & 0xffff;
36                        
37                 sptr = *yp + *xp + pos;
38                 pix = sptr;
39                 sptr += src_w;
40                        
41                 ax = (A_VAL(pix) * xap) >> 9;
42                 rx = (R_VAL(pix) * xap) >> 9;
43                 gx = (G_VAL(pix) * xap) >> 9;
44                 bx = (B_VAL(pix) * xap) >> 9;
45                 pix++;
46                 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
47                   {
48                     ax += (A_VAL(pix) * Cx) >> 9;
49                     rx += (R_VAL(pix) * Cx) >> 9;
50                     gx += (G_VAL(pix) * Cx) >> 9;
51                     bx += (B_VAL(pix) * Cx) >> 9;
52                     pix++;
53                   }
54                 if (i > 0)
55                   {
56                     ax += (A_VAL(pix) * i) >> 9;
57                     rx += (R_VAL(pix) * i) >> 9;
58                     gx += (G_VAL(pix) * i) >> 9;
59                     bx += (B_VAL(pix) * i) >> 9;
60                   }
61                        
62                 a = (ax * yap) >> 14;
63                 r = (rx * yap) >> 14;
64                 g = (gx * yap) >> 14;
65                 b = (bx * yap) >> 14;
66                        
67                 for (j = (1 << 14) - yap; j > Cy; j -= Cy)
68                   {
69                     pix = sptr;
70                     sptr += src_w;
71                     ax = (A_VAL(pix) * xap) >> 9;
72                     rx = (R_VAL(pix) * xap) >> 9;
73                     gx = (G_VAL(pix) * xap) >> 9;
74                     bx = (B_VAL(pix) * xap) >> 9;
75                     pix++;
76                     for (i = (1 << 14) - xap; i > Cx; i -= Cx)
77                       {
78                         ax += (A_VAL(pix) * Cx) >> 9;
79                         rx += (R_VAL(pix) * Cx) >> 9;
80                         gx += (G_VAL(pix) * Cx) >> 9;
81                         bx += (B_VAL(pix) * Cx) >> 9;
82                         pix++;
83                       }
84                     if (i > 0)
85                       {
86                         ax += (A_VAL(pix) * i) >> 9;
87                         rx += (R_VAL(pix) * i) >> 9;
88                         gx += (G_VAL(pix) * i) >> 9;
89                         bx += (B_VAL(pix) * i) >> 9;
90                       }
91
92                     a += (ax * Cy) >> 14;
93                     r += (rx * Cy) >> 14;
94                     g += (gx * Cy) >> 14;
95                     b += (bx * Cy) >> 14;
96                   }
97                 if (j > 0)
98                   {
99                     pix = sptr;
100                     sptr += src_w;
101                     ax = (A_VAL(pix) * xap) >> 9;
102                     rx = (R_VAL(pix) * xap) >> 9;
103                     gx = (G_VAL(pix) * xap) >> 9;
104                     bx = (B_VAL(pix) * xap) >> 9;
105                     pix++;
106                     for (i = (1 << 14) - xap; i > Cx; i -= Cx)
107                       {
108                         ax += (A_VAL(pix) * Cx) >> 9;
109                         rx += (R_VAL(pix) * Cx) >> 9;
110                         gx += (G_VAL(pix) * Cx) >> 9;
111                         bx += (B_VAL(pix) * Cx) >> 9;
112                         pix++;
113                       }
114                     if (i > 0)
115                       {
116                         ax += (A_VAL(pix) * i) >> 9;
117                         rx += (R_VAL(pix) * i) >> 9;
118                         gx += (G_VAL(pix) * i) >> 9;
119                         bx += (B_VAL(pix) * i) >> 9;
120                       }
121                     
122                     a += (ax * j) >> 14;
123                     r += (rx * j) >> 14;
124                     g += (gx * j) >> 14;
125                     b += (bx * j) >> 14;
126                   }
127                 *pbuf++ = ARGB_JOIN(((a + (1 << 4)) >> 5), 
128                                     ((r + (1 << 4)) >> 5), 
129                                     ((g + (1 << 4)) >> 5), 
130                                     ((b + (1 << 4)) >> 5));
131                 xp++;  xapp++;
132               }
133             
134             func(buf, NULL, dc->mul.col, dptr, w);
135
136             pbuf = buf;
137             dptr += dst_w;   dst_clip_w = w;
138             xp = xpoints;// + dxx;
139             xapp = xapoints;// + dxx;
140             yp++;  yapp++;
141           }
142      }
143    else
144      {
145 #ifdef DIRECT_SCALE
146         if ((!src->cache_entry.flags.alpha) &&
147             (!dst->cache_entry.flags.alpha) &&
148             (!dc->mul.use))
149           {
150              while (dst_clip_h--)
151                {
152                  Cy = *yapp >> 16;
153                  yap = *yapp & 0xffff;
154                        
155                  pbuf = dptr;
156                  while (dst_clip_w--)
157                    {
158                      Cx = *xapp >> 16;
159                      xap = *xapp & 0xffff;
160                      
161                      sptr = *yp + *xp + pos;
162                      pix = sptr;
163                      sptr += src_w;
164                             
165                      rx = (R_VAL(pix) * xap) >> 9;
166                      gx = (G_VAL(pix) * xap) >> 9;
167                      bx = (B_VAL(pix) * xap) >> 9;
168                      pix++;
169                      for (i = (1 << 14) - xap; i > Cx; i -= Cx)
170                        {
171                          rx += (R_VAL(pix) * Cx) >> 9;
172                          gx += (G_VAL(pix) * Cx) >> 9;
173                          bx += (B_VAL(pix) * Cx) >> 9;
174                          pix++;
175                        }
176                      if (i > 0)
177                        {
178                          rx += (R_VAL(pix) * i) >> 9;
179                          gx += (G_VAL(pix) * i) >> 9;
180                          bx += (B_VAL(pix) * i) >> 9;
181                        }
182
183                      r = (rx * yap) >> 14;
184                      g = (gx * yap) >> 14;
185                      b = (bx * yap) >> 14;
186     
187                      for (j = (1 << 14) - yap; j > Cy; j -= Cy)
188                        {
189                          pix = sptr;
190                          sptr += src_w;
191                          rx = (R_VAL(pix) * xap) >> 9;
192                          gx = (G_VAL(pix) * xap) >> 9;
193                          bx = (B_VAL(pix) * xap) >> 9;
194                          pix++;
195                          for (i = (1 << 14) - xap; i > Cx; i -= Cx)
196                            {
197                              rx += (R_VAL(pix) * Cx) >> 9;
198                              gx += (G_VAL(pix) * Cx) >> 9;
199                              bx += (B_VAL(pix) * Cx) >> 9;
200                              pix++;
201                            }
202                          if (i > 0)
203                            {
204                              rx += (R_VAL(pix) * i) >> 9;
205                              gx += (G_VAL(pix) * i) >> 9;
206                              bx += (B_VAL(pix) * i) >> 9;
207                            }
208                          
209                          r += (rx * Cy) >> 14;
210                          g += (gx * Cy) >> 14;
211                          b += (bx * Cy) >> 14;
212                        }
213                      if (j > 0)
214                        {
215                          pix = sptr;
216                          sptr += src_w;
217                          rx = (R_VAL(pix) * xap) >> 9;
218                          gx = (G_VAL(pix) * xap) >> 9;
219                          bx = (B_VAL(pix) * xap) >> 9;
220                          pix++;
221                          for (i = (1 << 14) - xap; i > Cx; i -= Cx)
222                            {
223                              rx += (R_VAL(pix) * Cx) >> 9;
224                              gx += (G_VAL(pix) * Cx) >> 9;
225                              bx += (B_VAL(pix) * Cx) >> 9;
226                              pix++;
227                            }
228                          if (i > 0)
229                            {
230                              rx += (R_VAL(pix) * i) >> 9;
231                              gx += (G_VAL(pix) * i) >> 9;
232                              bx += (B_VAL(pix) * i) >> 9;
233                            }
234
235                          r += (rx * j) >> 14;
236                          g += (gx * j) >> 14;
237                          b += (bx * j) >> 14;
238                        }
239                      *pbuf++ = ARGB_JOIN(0xff, 
240                                          ((r + (1 << 4)) >> 5), 
241                                          ((g + (1 << 4)) >> 5), 
242                                          ((b + (1 << 4)) >> 5));
243                      xp++;  xapp++;
244                    }
245
246                  dptr += dst_w;   dst_clip_w = w;
247                  xp = xpoints;// + dxx;
248                  xapp = xapoints;// + dxx;
249                  yp++;  yapp++;
250                }
251           }
252         else
253 #endif    
254           {
255              while (dst_clip_h--)
256                {
257                  Cy = *yapp >> 16;
258                  yap = *yapp & 0xffff;
259                        
260                  while (dst_clip_w--)
261                    {
262                      Cx = *xapp >> 16;
263                      xap = *xapp & 0xffff;
264                             
265                      sptr = *yp + *xp + pos;
266                      pix = sptr;
267                      sptr += src_w;
268                             
269                      rx = (R_VAL(pix) * xap) >> 9;
270                      gx = (G_VAL(pix) * xap) >> 9;
271                      bx = (B_VAL(pix) * xap) >> 9;
272                      pix++;
273                      for (i = (1 << 14) - xap; i > Cx; i -= Cx)
274                        {
275                          rx += (R_VAL(pix) * Cx) >> 9;
276                          gx += (G_VAL(pix) * Cx) >> 9;
277                          bx += (B_VAL(pix) * Cx) >> 9;
278                          pix++;
279                        }
280                      if (i > 0)
281                        {
282                          rx += (R_VAL(pix) * i) >> 9;
283                          gx += (G_VAL(pix) * i) >> 9;
284                          bx += (B_VAL(pix) * i) >> 9;
285                        }
286
287                      r = (rx * yap) >> 14;
288                      g = (gx * yap) >> 14;
289                      b = (bx * yap) >> 14;
290                             
291                      for (j = (1 << 14) - yap; j > Cy; j -= Cy)
292                        {
293                          pix = sptr;
294                          sptr += src_w;
295                          rx = (R_VAL(pix) * xap) >> 9;
296                          gx = (G_VAL(pix) * xap) >> 9;
297                          bx = (B_VAL(pix) * xap) >> 9;
298                          pix++;
299                          for (i = (1 << 14) - xap; i > Cx; i -= Cx)
300                            {
301                              rx += (R_VAL(pix) * Cx) >> 9;
302                              gx += (G_VAL(pix) * Cx) >> 9;
303                              bx += (B_VAL(pix) * Cx) >> 9;
304                              pix++;
305                            }
306                          if (i > 0)
307                            {
308                              rx += (R_VAL(pix) * i) >> 9;
309                              gx += (G_VAL(pix) * i) >> 9;
310                              bx += (B_VAL(pix) * i) >> 9;
311                            }
312
313                          r += (rx * Cy) >> 14;
314                          g += (gx * Cy) >> 14;
315                          b += (bx * Cy) >> 14;
316                        }
317                      if (j > 0)
318                        {
319                          pix = sptr;
320                          sptr += src_w;
321                          rx = (R_VAL(pix) * xap) >> 9;
322                          gx = (G_VAL(pix) * xap) >> 9;
323                          bx = (B_VAL(pix) * xap) >> 9;
324                          pix++;
325                          for (i = (1 << 14) - xap; i > Cx; i -= Cx)
326                            {
327                              rx += (R_VAL(pix) * Cx) >> 9;
328                              gx += (G_VAL(pix) * Cx) >> 9;
329                              bx += (B_VAL(pix) * Cx) >> 9;
330                              pix++;
331                            }
332                          if (i > 0)
333                            {
334                              rx += (R_VAL(pix) * i) >> 9;
335                              gx += (G_VAL(pix) * i) >> 9;
336                              bx += (B_VAL(pix) * i) >> 9;
337                            }
338
339                          r += (rx * j) >> 14;
340                          g += (gx * j) >> 14;
341                          b += (bx * j) >> 14;
342                        }
343                      *pbuf++ = ARGB_JOIN(0xff, 
344                                          ((r + (1 << 4)) >> 5), 
345                                          ((g + (1 << 4)) >> 5), 
346                                          ((b + (1 << 4)) >> 5));
347                      xp++;  xapp++;
348                    }
349
350                  func(buf, NULL, dc->mul.col, dptr, w);
351
352                  pbuf = buf;
353                  dptr += dst_w;   dst_clip_w = w;
354                  xp = xpoints;// + dxx;
355                  xapp = xapoints;// + dxx;
356                  yp++;  yapp++;
357                }
358           }
359      }
360 #else
361    /* MMX scaling down would go here */
362 #endif
363 }