diff --git a/legacy/evas/src/lib/engines/common/evas_draw_main.c b/legacy/evas/src/lib/engines/common/evas_draw_main.c index 0516d61db0..e67ddd02b0 100644 --- a/legacy/evas/src/lib/engines/common/evas_draw_main.c +++ b/legacy/evas/src/lib/engines/common/evas_draw_main.c @@ -36,6 +36,7 @@ evas_common_draw_context_new(void) RGBA_Draw_Context *dc; dc = calloc(1, sizeof(RGBA_Draw_Context)); + dc->sli.h = 1; return dc; } @@ -543,3 +544,10 @@ evas_common_draw_context_set_render_op(RGBA_Draw_Context *dc , int op) { dc->render_op = op; } + +EAPI void +evas_common_draw_context_set_sli(RGBA_Draw_Context *dc, int y, int h) +{ + dc->sli.y = y; + dc->sli.h = h; +} diff --git a/legacy/evas/src/lib/engines/common/evas_font_draw.c b/legacy/evas/src/lib/engines/common/evas_font_draw.c index aae41df0e0..be3bb4980f 100644 --- a/legacy/evas/src/lib/engines/common/evas_font_draw.c +++ b/legacy/evas/src/lib/engines/common/evas_font_draw.c @@ -259,22 +259,27 @@ evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int in_w = 0; dx = chr_x; dy = y - (chr_y - i - y); - if ((dx < (ext_x + ext_w)) && - (dy >= (ext_y)) && - (dy < (ext_y + ext_h))) +#ifdef EVAS_SLI + if (((dy) % dc->sli.h) == dc->sli.y) +#endif { - if (dx + w > (ext_x + ext_w)) - in_w += (dx + w) - (ext_x + ext_w); - if (dx < ext_x) + if ((dx < (ext_x + ext_w)) && + (dy >= (ext_y)) && + (dy < (ext_y + ext_h))) { - in_w += ext_x - dx; - in_x = ext_x - dx; - dx = ext_x; - } - if (in_w < w) - { - func(NULL, data + (i * j) + in_x, dc->col.col, - im + (dy * im_w) + dx, w - in_w); + if (dx + w > (ext_x + ext_w)) + in_w += (dx + w) - (ext_x + ext_w); + if (dx < ext_x) + { + in_w += ext_x - dx; + in_x = ext_x - dx; + dx = ext_x; + } + if (in_w < w) + { + func(NULL, data + (i * j) + in_x, dc->col.col, + im + (dy * im_w) + dx, w - in_w); + } } } } @@ -295,36 +300,41 @@ evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int in_w = 0; dx = chr_x; dy = y - (chr_y - i - y); - tp = tmpbuf; - dp = data + (i * fg->glyph_out->bitmap.pitch); - for (bi = 0; bi < w; bi += 8) +#ifdef EVAS_SLI + if (((dy) % dc->sli.h) == dc->sli.y) +#endif { - bits = *dp; - if ((w - bi) < 8) end = w - bi; - else end = 8; - for (bj = 0; bj < end; bj++) + tp = tmpbuf; + dp = data + (i * fg->glyph_out->bitmap.pitch); + for (bi = 0; bi < w; bi += 8) { - *tp = bitrepl[(bits >> (7 - bj)) & 0x1]; - tp++; + bits = *dp; + if ((w - bi) < 8) end = w - bi; + else end = 8; + for (bj = 0; bj < end; bj++) + { + *tp = bitrepl[(bits >> (7 - bj)) & 0x1]; + tp++; + } + dp++; } - dp++; - } - if ((dx < (ext_x + ext_w)) && - (dy >= (ext_y)) && - (dy < (ext_y + ext_h))) - { - if (dx + w > (ext_x + ext_w)) - in_w += (dx + w) - (ext_x + ext_w); - if (dx < ext_x) + if ((dx < (ext_x + ext_w)) && + (dy >= (ext_y)) && + (dy < (ext_y + ext_h))) { - in_w += ext_x - dx; - in_x = ext_x - dx; - dx = ext_x; - } - if (in_w < w) - { - func(NULL, tmpbuf + in_x, dc->col.col, - im + (dy * im_w) + dx, w - in_w); + if (dx + w > (ext_x + ext_w)) + in_w += (dx + w) - (ext_x + ext_w); + if (dx < ext_x) + { + in_w += ext_x - dx; + in_x = ext_x - dx; + dx = ext_x; + } + if (in_w < w) + { + func(NULL, tmpbuf + in_x, dc->col.col, + im + (dy * im_w) + dx, w - in_w); + } } } } diff --git a/legacy/evas/src/lib/engines/common/evas_gradient_main.c b/legacy/evas/src/lib/engines/common/evas_gradient_main.c index 0f0c517238..8b0704c205 100644 --- a/legacy/evas/src/lib/engines/common/evas_gradient_main.c +++ b/legacy/evas/src/lib/engines/common/evas_gradient_main.c @@ -526,10 +526,15 @@ evas_common_gradient_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, buf = pdst; while (pdst < dst_end) { - gfunc(map, len, buf, mask, w, xoff, yoff, axx, axy, ayx, ayy, gdata); - if (!direct_copy) - bfunc(buf, mask, 0, pdst, w); - evas_common_cpu_end_opt(); +#ifdef EVAS_SLI + if (((yoff + y) % dc->sli.h) == dc->sli.y) +#endif + { + gfunc(map, len, buf, mask, w, xoff, yoff, axx, axy, ayx, ayy, gdata); + if (!direct_copy) + bfunc(buf, mask, 0, pdst, w); + evas_common_cpu_end_opt(); + } buf += buf_step; pdst += dst->image->w; yoff++; diff --git a/legacy/evas/src/lib/engines/common/evas_line_main.c b/legacy/evas/src/lib/engines/common/evas_line_main.c index c69d021575..5026bbd621 100644 --- a/legacy/evas/src/lib/engines/common/evas_line_main.c +++ b/legacy/evas/src/lib/engines/common/evas_line_main.c @@ -152,24 +152,29 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i if (dy == 0) { - if ((y0 >= ty) && (y0 <= by)) +#ifdef EVAS_SLI + if (((y0) % dc->sli.h) == dc->sli.y) +#endif { - if (dx < 0) + if ((y0 >= ty) && (y0 <= by)) { - int tmp = x1; + if (dx < 0) + { + int tmp = x1; + + x1 = x0; + x0 = tmp; + } - x1 = x0; - x0 = tmp; + if (x0 < lx) x0 = lx; + if (x1 > rx) x1 = rx; + + len = x1 - x0 + 1; + p = dst->image->data + (dstw * y0) + x0; + sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, len, dc->render_op); + if (sfunc) + sfunc(NULL, NULL, color, p, len); } - - if (x0 < lx) x0 = lx; - if (x1 > rx) x1 = rx; - - len = x1 - x0 + 1; - p = dst->image->data + (dstw * y0) + x0; - sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, len, dc->render_op); - if (sfunc) - sfunc(NULL, NULL, color, p, len); } return; } @@ -188,7 +193,12 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i p = dst->image->data + (dstw * y0) + x0; while (len--) { - pfunc(0, 255, color, p); +#ifdef EVAS_SLI + if (((y1 + 1 - len) % dc->sli.h) == dc->sli.y) +#endif + { + pfunc(0, 255, color, p); + } p += dstw; } } @@ -273,7 +283,12 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i while (len--) { - pfunc(0, 255, color, p); +#ifdef EVAS_SLI + if (((y1 + 1 - len) % dc->sli.h) == dc->sli.y) +#endif + { + pfunc(0, 255, color, p); + } p += dstw; } } @@ -486,8 +501,13 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, if ((py < 0) && (dely < 0)) return; if ((py > by) && (dely > 0)) return; } - if (IN_RANGE(px, py, clw, clh)) - pfunc(0, 255, color, p); +#ifdef EVAS_SLI + if (((py) % dc->sli.h) == dc->sli.y) +#endif + { + if (IN_RANGE(px, py, clw, clh)) + pfunc(0, 255, color, p); + } yy += dyy; px++; p++; @@ -514,8 +534,13 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, if ((px < 0) && (delx < 0)) return; if ((px > rx) && (delx > 0)) return; } - if (IN_RANGE(px, py, clw, clh)) - pfunc(0, 255, color, p); +#ifdef EVAS_SLI + if (((py) % dc->sli.h) == dc->sli.y) +#endif + { + if (IN_RANGE(px, py, clw, clh)) + pfunc(0, 255, color, p); + } xx += dxx; py++; p += dstw; diff --git a/legacy/evas/src/lib/engines/common/evas_pipe.c b/legacy/evas/src/lib/engines/common/evas_pipe.c index 88eecb7597..37e31dcaf8 100644 --- a/legacy/evas/src/lib/engines/common/evas_pipe.c +++ b/legacy/evas/src/lib/engines/common/evas_pipe.c @@ -62,13 +62,6 @@ evas_common_pipe_op_free(RGBA_Pipe_Op *op) } /* main api calls */ -EAPI void -evas_common_pipe_begin(RGBA_Image *im) -{ - /* FIXME: PTHREAD start any processing threads and lock - otherwise do - * nothing */ -} - #ifdef BUILD_PTHREAD typedef struct _Thinfo { @@ -118,6 +111,77 @@ evas_common_pipe_thread(void *data) } #endif +#ifdef BUILD_PTHREAD +static int thread_num = 0; +static Thinfo thinfo[TH_MAX]; +static pthread_barrier_t thbarrier[2]; +#endif + +EAPI void +evas_common_pipe_begin(RGBA_Image *im) +{ +#ifdef BUILD_PTHREAD + int i, y, h; + + if (thread_num == 0) + { + int cpunum; + + cpunum = evas_common_cpu_count(); + thread_num = cpunum; + pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1); + for (i = 0; i < thread_num; i++) + { + pthread_attr_t attr; + cpu_set_t cpu; + + pthread_attr_init(&attr); + CPU_ZERO(&cpu); + CPU_SET(i % cpunum, &cpu); + pthread_attr_setaffinity_np(&attr, sizeof(cpu), &cpu); + thinfo[i].thread_num = i; + thinfo[i].info = NULL; + thinfo[i].barrier = thbarrier; + /* setup initial locks */ + pthread_create(&(thinfo[i].thread_id), &attr, + evas_common_pipe_thread, &(thinfo[i])); + } + } + y = 0; + h = im->image->h / thread_num; + if (h < 1) h = 1; + for (i = 0; i < thread_num; i++) + { + RGBA_Pipe_Thread_Info *info; + +// if (y >= im->image->h) break; + info = calloc(1, sizeof(RGBA_Pipe_Thread_Info)); + info->im = im; +#ifdef EVAS_SLI + info->x = 0; + info->w = im->image->w; + info->y = i; + info->h = thread_num; +#else + info->x = 0; + info->y = y; + info->w = im->image->w; + if (i == (thread_num - 1)) + info->h = im->image->h - y; + else + info->h = h; + y += info->h; +#endif + thinfo[i].info = info; + /* send startsignal */ +// printf("START %i\n", i); + } + pthread_barrier_init(&(thbarrier[1]), NULL, thread_num + 1); + pthread_barrier_wait(&(thbarrier[0])); + pthread_barrier_destroy(&(thbarrier[0])); +#endif +} + EAPI void evas_common_pipe_flush(RGBA_Image *im) { @@ -130,60 +194,9 @@ evas_common_pipe_flush(RGBA_Image *im) /* FIXME: PTHREAD join all threads here (if not finished) or begin then join * otherwise just process pipe */ { - static int thread_num = 0; - static Thinfo thinfo[TH_MAX]; - static pthread_barrier_t barrier[2]; - - if (thread_num == 0) - { - thread_num = evas_common_cpu_count(); - pthread_barrier_init(&(barrier[0]), NULL, thread_num + 1); - for (i = 0; i < thread_num; i++) - { - pthread_attr_t attr; - cpu_set_t cpu; - - pthread_attr_init(&attr); - CPU_ZERO(&cpu); - CPU_SET(i, &cpu); - pthread_attr_setaffinity_np(&attr, sizeof(cpu), &cpu); - thinfo[i].thread_num = i; - thinfo[i].info = NULL; - thinfo[i].barrier = barrier; - /* setup initial locks */ - pthread_create(&(thinfo[i].thread_id), &attr, - evas_common_pipe_thread, &(thinfo[i])); - } - } - y = 0; - h = im->image->h / thread_num; - if (h < 1) h = 1; - for (i = 0; i < thread_num; i++) - { - RGBA_Pipe_Thread_Info *info; - -// if (y >= im->image->h) break; - info = calloc(1, sizeof(RGBA_Pipe_Thread_Info)); - info->im = im; - info->x = 0; - info->y = y; - info->w = im->image->w; - if (i == (thread_num - 1)) - info->h = im->image->h - y; - else - info->h = h; - y += info->h; - thinfo[i].info = info; - /* send startsignal */ -// printf("START %i\n", i); - } - pthread_barrier_init(&(barrier[1]), NULL, thread_num + 1); - pthread_barrier_wait(&(barrier[0])); - pthread_barrier_destroy(&(barrier[0])); - - pthread_barrier_init(&(barrier[0]), NULL, thread_num + 1); - pthread_barrier_wait(&(barrier[1])); - pthread_barrier_destroy(&(barrier[1])); + pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1); + pthread_barrier_wait(&(thbarrier[1])); + pthread_barrier_destroy(&(thbarrier[1])); // printf("DONE\n"); } @@ -238,7 +251,11 @@ evas_common_pipe_rectangle_draw_do(RGBA_Image *dst, RGBA_Pipe_Op *op, RGBA_Pipe_ RGBA_Draw_Context context; memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context)); +#ifdef EVAS_SLI + evas_common_draw_context_set_sli(&(context), info->y, info->h); +#else evas_common_draw_context_clip_clip(&(context), info->x, info->y, info->w, info->h); +#endif evas_common_rectangle_draw(dst, &(context), op->op.rect.x, op->op.rect.y, op->op.rect.w, op->op.rect.h); @@ -276,7 +293,11 @@ evas_common_pipe_line_draw_do(RGBA_Image *dst, RGBA_Pipe_Op *op, RGBA_Pipe_Threa RGBA_Draw_Context context; memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context)); +#ifdef EVAS_SLI + evas_common_draw_context_set_sli(&(context), info->y, info->h); +#else evas_common_draw_context_clip_clip(&(context), info->x, info->y, info->w, info->h); +#endif evas_common_line_draw(dst, &(context), op->op.line.x0, op->op.line.y0, op->op.line.x1, op->op.line.y1); @@ -327,7 +348,11 @@ evas_common_pipe_poly_draw_do(RGBA_Image *dst, RGBA_Pipe_Op *op, RGBA_Pipe_Threa RGBA_Draw_Context context; memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context)); +#ifdef EVAS_SLI + evas_common_draw_context_set_sli(&(context), info->y, info->h); +#else evas_common_draw_context_clip_clip(&(context), info->x, info->y, info->w, info->h); +#endif evas_common_polygon_draw(dst, &(context), op->op.poly.points); } @@ -379,7 +404,11 @@ evas_common_pipe_grad_draw_do(RGBA_Image *dst, RGBA_Pipe_Op *op, RGBA_Pipe_Threa RGBA_Draw_Context context; memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context)); +#ifdef EVAS_SLI + evas_common_draw_context_set_sli(&(context), info->y, info->h); +#else evas_common_draw_context_clip_clip(&(context), info->x, info->y, info->w, info->h); +#endif evas_common_gradient_draw(dst, &(context), op->op.grad.x, op->op.grad.y, op->op.grad.w, op->op.grad.h, @@ -429,7 +458,11 @@ evas_common_pipe_text_draw_do(RGBA_Image *dst, RGBA_Pipe_Op *op, RGBA_Pipe_Threa RGBA_Draw_Context context; memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context)); +#ifdef EVAS_SLI + evas_common_draw_context_set_sli(&(context), info->y, info->h); +#else evas_common_draw_context_clip_clip(&(context), info->x, info->y, info->w, info->h); +#endif evas_common_font_draw(dst, &(context), op->op.text.font, op->op.text.x, op->op.text.y, op->op.text.text); @@ -476,7 +509,11 @@ evas_common_pipe_image_draw_do(RGBA_Image *dst, RGBA_Pipe_Op *op, RGBA_Pipe_Thre RGBA_Draw_Context context; memcpy(&(context), &(op->context), sizeof(RGBA_Draw_Context)); +#ifdef EVAS_SLI + evas_common_draw_context_set_sli(&(context), info->y, info->h); +#else evas_common_draw_context_clip_clip(&(context), info->x, info->y, info->w, info->h); +#endif if (op->op.image.smooth) evas_common_scale_rgba_in_to_out_clip_smooth(op->op.image.src, dst, &(context), diff --git a/legacy/evas/src/lib/engines/common/evas_polygon_main.c b/legacy/evas/src/lib/engines/common/evas_polygon_main.c index 28ed324cc0..88903fb6b7 100644 --- a/legacy/evas/src/lib/engines/common/evas_polygon_main.c +++ b/legacy/evas/src/lib/engines/common/evas_polygon_main.c @@ -276,8 +276,13 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po DATA32 *ptr; span = (RGBA_Span *)l; - ptr = dst->image->data + (span->y * (dst->image->w)) + span->x; - func(NULL, NULL, dc->col.col, ptr, span->w); +#ifdef EVAS_SLI + if (((span->y) % dc->sli.h) == dc->sli.y) +#endif + { + ptr = dst->image->data + (span->y * (dst->image->w)) + span->x; + func(NULL, NULL, dc->col.col, ptr, span->w); + } } while (spans) { diff --git a/legacy/evas/src/lib/engines/common/evas_rectangle_main.c b/legacy/evas/src/lib/engines/common/evas_rectangle_main.c index 455648c34d..f9fae5ad73 100644 --- a/legacy/evas/src/lib/engines/common/evas_rectangle_main.c +++ b/legacy/evas/src/lib/engines/common/evas_rectangle_main.c @@ -67,7 +67,12 @@ rectangle_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, in ptr = dst->image->data + (y * dst->image->w) + x; for (yy = 0; yy < h; yy++) { - func(NULL, NULL, dc->col.col, ptr, w); +#ifdef EVAS_SLI + if (((yy + y) % dc->sli.h) == dc->sli.y) +#endif + { + func(NULL, NULL, dc->col.col, ptr, w); + } ptr += dst->image->w; } } diff --git a/legacy/evas/src/lib/engines/common/evas_scale_sample.c b/legacy/evas/src/lib/engines/common/evas_scale_sample.c index c864e5d760..54d255f31c 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_sample.c +++ b/legacy/evas/src/lib/engines/common/evas_scale_sample.c @@ -247,7 +247,12 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, for (y = 0; y < dst_clip_h; y++) { /* * blend here [clip_w *] ptr -> dst_ptr * */ - func(ptr, NULL, dc->mul.col, dst_ptr, dst_clip_w); +#ifdef EVAS_SLI + if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) +#endif + { + func(ptr, NULL, dc->mul.col, dst_ptr, dst_clip_w); + } ptr += src_w; dst_ptr += dst_w; } @@ -269,13 +274,18 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, { for (y = 0; y < dst_clip_h; y++) { - dst_ptr = dptr; - for (x = 0; x < dst_clip_w; x++) - { - ptr = row_ptr[y] + lin_ptr[x]; - *dst_ptr = *ptr; - dst_ptr++; - } +#ifdef EVAS_SLI + if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) +#endif + { + dst_ptr = dptr; + for (x = 0; x < dst_clip_w; x++) + { + ptr = row_ptr[y] + lin_ptr[x]; + *dst_ptr = *ptr; + dst_ptr++; + } + } dptr += dst_w; } } @@ -288,15 +298,20 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, for (y = 0; y < dst_clip_h; y++) { - dst_ptr = buf; - for (x = 0; x < dst_clip_w; x++) - { - ptr = row_ptr[y] + lin_ptr[x]; - *dst_ptr = *ptr; - dst_ptr++; - } - /* * blend here [clip_w *] buf -> dptr * */ - func(buf, NULL, dc->mul.col, dptr, dst_clip_w); +#ifdef EVAS_SLI + if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) +#endif + { + dst_ptr = buf; + for (x = 0; x < dst_clip_w; x++) + { + ptr = row_ptr[y] + lin_ptr[x]; + *dst_ptr = *ptr; + dst_ptr++; + } + /* * blend here [clip_w *] buf -> dptr * */ + func(buf, NULL, dc->mul.col, dptr, dst_clip_w); + } dptr += dst_w; } } diff --git a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c index 464ea176f4..58570ba46f 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c +++ b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c @@ -5,6 +5,9 @@ int *xp, xap, yap, pos; int dyy, dxx; int w = dst_clip_w; +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif dptr = dst_ptr; pos = (src_region_y * src_w) + src_region_x; @@ -21,66 +24,73 @@ { while (dst_clip_h--) { - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - Cx = *xapp >> 16; - xap = *xapp & 0xffff; - pix = *yp + *xp + pos; - - a = (A_VAL(pix) * xap) >> 10; - r = (R_VAL(pix) * xap) >> 10; - g = (G_VAL(pix) * xap) >> 10; - b = (B_VAL(pix) * xap) >> 10; - for (j = (1 << 14) - xap; j > Cx; j -= Cx) + while (dst_clip_w--) { - pix++; - a += (A_VAL(pix) * Cx) >> 10; - r += (R_VAL(pix) * Cx) >> 10; - g += (G_VAL(pix) * Cx) >> 10; - b += (B_VAL(pix) * Cx) >> 10; - } - if (j > 0) - { - pix++; - a += (A_VAL(pix) * j) >> 10; - r += (R_VAL(pix) * j) >> 10; - g += (G_VAL(pix) * j) >> 10; - b += (B_VAL(pix) * j) >> 10; - } - if ((yap = *yapp) > 0) - { - pix = *yp + *xp + src_w + pos; - aa = (A_VAL(pix) * xap) >> 10; - rr = (R_VAL(pix) * xap) >> 10; - gg = (G_VAL(pix) * xap) >> 10; - bb = (B_VAL(pix) * xap) >> 10; + Cx = *xapp >> 16; + xap = *xapp & 0xffff; + pix = *yp + *xp + pos; + + a = (A_VAL(pix) * xap) >> 10; + r = (R_VAL(pix) * xap) >> 10; + g = (G_VAL(pix) * xap) >> 10; + b = (B_VAL(pix) * xap) >> 10; for (j = (1 << 14) - xap; j > Cx; j -= Cx) { pix++; - aa += (A_VAL(pix) * Cx) >> 10; - rr += (R_VAL(pix) * Cx) >> 10; - gg += (G_VAL(pix) * Cx) >> 10; - bb += (B_VAL(pix) * Cx) >> 10; - } + a += (A_VAL(pix) * Cx) >> 10; + r += (R_VAL(pix) * Cx) >> 10; + g += (G_VAL(pix) * Cx) >> 10; + b += (B_VAL(pix) * Cx) >> 10; + } if (j > 0) { pix++; - aa += (A_VAL(pix) * j) >> 10; - rr += (R_VAL(pix) * j) >> 10; - gg += (G_VAL(pix) * j) >> 10; - bb += (B_VAL(pix) * j) >> 10; + a += (A_VAL(pix) * j) >> 10; + r += (R_VAL(pix) * j) >> 10; + g += (G_VAL(pix) * j) >> 10; + b += (B_VAL(pix) * j) >> 10; } - a += ((aa - a) * yap) >> 8; - r += ((rr - r) * yap) >> 8; - g += ((gg - g) * yap) >> 8; - b += ((bb - b) * yap) >> 8; + if ((yap = *yapp) > 0) + { + pix = *yp + *xp + src_w + pos; + aa = (A_VAL(pix) * xap) >> 10; + rr = (R_VAL(pix) * xap) >> 10; + gg = (G_VAL(pix) * xap) >> 10; + bb = (B_VAL(pix) * xap) >> 10; + for (j = (1 << 14) - xap; j > Cx; j -= Cx) + { + pix++; + aa += (A_VAL(pix) * Cx) >> 10; + rr += (R_VAL(pix) * Cx) >> 10; + gg += (G_VAL(pix) * Cx) >> 10; + bb += (B_VAL(pix) * Cx) >> 10; + } + if (j > 0) + { + pix++; + aa += (A_VAL(pix) * j) >> 10; + rr += (R_VAL(pix) * j) >> 10; + gg += (G_VAL(pix) * j) >> 10; + bb += (B_VAL(pix) * j) >> 10; + } + a += ((aa - a) * yap) >> 8; + r += ((rr - r) * yap) >> 8; + g += ((gg - g) * yap) >> 8; + b += ((bb - b) * yap) >> 8; + } + *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4); - xp++; xapp++; + + func(buf, NULL, dc->mul.col, dptr, w); } - - func(buf, NULL, dc->mul.col, dptr, w); - +#ifdef EVAS_SLI + ysli++; +#endif pbuf = buf; dptr += dst_w; dst_clip_w = w; yp++; yapp++; @@ -98,56 +108,64 @@ while (dst_clip_h--) { pbuf = dptr; - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - Cx = *xapp >> 16; - xap = *xapp & 0xffff; - pix = *yp + *xp + pos; - - r = (R_VAL(pix) * xap) >> 10; - g = (G_VAL(pix) * xap) >> 10; - b = (B_VAL(pix) * xap) >> 10; - for (j = (1 << 14) - xap; j > Cx; j -= Cx) + while (dst_clip_w--) { - pix++; - r += (R_VAL(pix) * Cx) >> 10; - g += (G_VAL(pix) * Cx) >> 10; - b += (B_VAL(pix) * Cx) >> 10; - } - if (j > 0) - { - pix++; - r += (R_VAL(pix) * j) >> 10; - g += (G_VAL(pix) * j) >> 10; - b += (B_VAL(pix) * j) >> 10; - } - if ((yap = *yapp) > 0) - { - pix = *yp + *xp + src_w + pos; - rr = (R_VAL(pix) * xap) >> 10; - gg = (G_VAL(pix) * xap) >> 10; - bb = (B_VAL(pix) * xap) >> 10; + Cx = *xapp >> 16; + xap = *xapp & 0xffff; + pix = *yp + *xp + pos; + + r = (R_VAL(pix) * xap) >> 10; + g = (G_VAL(pix) * xap) >> 10; + b = (B_VAL(pix) * xap) >> 10; for (j = (1 << 14) - xap; j > Cx; j -= Cx) { pix++; - rr += (R_VAL(pix) * Cx) >> 10; - gg += (G_VAL(pix) * Cx) >> 10; - bb += (B_VAL(pix) * Cx) >> 10; + r += (R_VAL(pix) * Cx) >> 10; + g += (G_VAL(pix) * Cx) >> 10; + b += (B_VAL(pix) * Cx) >> 10; } if (j > 0) { pix++; - rr += (R_VAL(pix) * j) >> 10; - gg += (G_VAL(pix) * j) >> 10; - bb += (B_VAL(pix) * j) >> 10; + r += (R_VAL(pix) * j) >> 10; + g += (G_VAL(pix) * j) >> 10; + b += (B_VAL(pix) * j) >> 10; } - r += ((rr - r) * yap) >> 8; - g += ((gg - g) * yap) >> 8; - b += ((bb - b) * yap) >> 8; + if ((yap = *yapp) > 0) + { + pix = *yp + *xp + src_w + pos; + rr = (R_VAL(pix) * xap) >> 10; + gg = (G_VAL(pix) * xap) >> 10; + bb = (B_VAL(pix) * xap) >> 10; + for (j = (1 << 14) - xap; j > Cx; j -= Cx) + { + pix++; + rr += (R_VAL(pix) * Cx) >> 10; + gg += (G_VAL(pix) * Cx) >> 10; + bb += (B_VAL(pix) * Cx) >> 10; + } + if (j > 0) + { + pix++; + rr += (R_VAL(pix) * j) >> 10; + gg += (G_VAL(pix) * j) >> 10; + bb += (B_VAL(pix) * j) >> 10; + } + r += ((rr - r) * yap) >> 8; + g += ((gg - g) * yap) >> 8; + b += ((bb - b) * yap) >> 8; + } + *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); - xp++; xapp++; } +#ifdef EVAS_SLI + ysli++; +#endif dptr += dst_w; dst_clip_w = w; yp++; yapp++; @@ -160,59 +178,67 @@ { while (dst_clip_h--) { - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - Cx = *xapp >> 16; - xap = *xapp & 0xffff; - pix = *yp + *xp + pos; - - r = (R_VAL(pix) * xap) >> 10; - g = (G_VAL(pix) * xap) >> 10; - b = (B_VAL(pix) * xap) >> 10; - for (j = (1 << 14) - xap; j > Cx; j -= Cx) + while (dst_clip_w--) { - pix++; - r += (R_VAL(pix) * Cx) >> 10; - g += (G_VAL(pix) * Cx) >> 10; - b += (B_VAL(pix) * Cx) >> 10; - } - if (j > 0) - { - pix++; - r += (R_VAL(pix) * j) >> 10; - g += (G_VAL(pix) * j) >> 10; - b += (B_VAL(pix) * j) >> 10; - } - if ((yap = *yapp) > 0) - { - pix = *yp + *xp + src_w + pos; - rr = (R_VAL(pix) * xap) >> 10; - gg = (G_VAL(pix) * xap) >> 10; - bb = (B_VAL(pix) * xap) >> 10; + Cx = *xapp >> 16; + xap = *xapp & 0xffff; + pix = *yp + *xp + pos; + + r = (R_VAL(pix) * xap) >> 10; + g = (G_VAL(pix) * xap) >> 10; + b = (B_VAL(pix) * xap) >> 10; for (j = (1 << 14) - xap; j > Cx; j -= Cx) { pix++; - rr += (R_VAL(pix) * Cx) >> 10; - gg += (G_VAL(pix) * Cx) >> 10; - bb += (B_VAL(pix) * Cx) >> 10; + r += (R_VAL(pix) * Cx) >> 10; + g += (G_VAL(pix) * Cx) >> 10; + b += (B_VAL(pix) * Cx) >> 10; } if (j > 0) { pix++; - rr += (R_VAL(pix) * j) >> 10; - gg += (G_VAL(pix) * j) >> 10; - bb += (B_VAL(pix) * j) >> 10; + r += (R_VAL(pix) * j) >> 10; + g += (G_VAL(pix) * j) >> 10; + b += (B_VAL(pix) * j) >> 10; } - r += ((rr - r) * yap) >> 8; - g += ((gg - g) * yap) >> 8; - b += ((bb - b) * yap) >> 8; + if ((yap = *yapp) > 0) + { + pix = *yp + *xp + src_w + pos; + rr = (R_VAL(pix) * xap) >> 10; + gg = (G_VAL(pix) * xap) >> 10; + bb = (B_VAL(pix) * xap) >> 10; + for (j = (1 << 14) - xap; j > Cx; j -= Cx) + { + pix++; + rr += (R_VAL(pix) * Cx) >> 10; + gg += (G_VAL(pix) * Cx) >> 10; + bb += (B_VAL(pix) * Cx) >> 10; + } + if (j > 0) + { + pix++; + rr += (R_VAL(pix) * j) >> 10; + gg += (G_VAL(pix) * j) >> 10; + bb += (B_VAL(pix) * j) >> 10; + } + r += ((rr - r) * yap) >> 8; + g += ((gg - g) * yap) >> 8; + b += ((bb - b) * yap) >> 8; + } + *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); - xp++; xapp++; + + func(buf, NULL, dc->mul.col, dptr, w); } +#ifdef EVAS_SLI + ysli++; +#endif - func(buf, NULL, dc->mul.col, dptr, w); - pbuf = buf; dptr += dst_w; dst_clip_w = w; yp++; yapp++; diff --git a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c index d31c9a46df..5686917667 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c +++ b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c @@ -4,6 +4,9 @@ int a, r, g, b, rx, gx, bx, ax; int xap, yap, pos; int dyy, dxx; +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif DATA32 **yp; int *xp; @@ -26,48 +29,22 @@ { while (dst_clip_h--) { - Cy = *yapp >> 16; - yap = *yapp & 0xffff; - - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - Cx = *xapp >> 16; - xap = *xapp & 0xffff; - - sptr = *yp + *xp + pos; - pix = sptr; - sptr += src_w; - - ax = (A_VAL(pix) * xap) >> 9; - rx = (R_VAL(pix) * xap) >> 9; - gx = (G_VAL(pix) * xap) >> 9; - bx = (B_VAL(pix) * xap) >> 9; - pix++; - for (i = (1 << 14) - xap; i > Cx; i -= Cx) - { - ax += (A_VAL(pix) * Cx) >> 9; - rx += (R_VAL(pix) * Cx) >> 9; - gx += (G_VAL(pix) * Cx) >> 9; - bx += (B_VAL(pix) * Cx) >> 9; - pix++; - } - if (i > 0) - { - ax += (A_VAL(pix) * i) >> 9; - rx += (R_VAL(pix) * i) >> 9; - gx += (G_VAL(pix) * i) >> 9; - bx += (B_VAL(pix) * i) >> 9; - } - - a = (ax * yap) >> 14; - r = (rx * yap) >> 14; - g = (gx * yap) >> 14; - b = (bx * yap) >> 14; - - for (j = (1 << 14) - yap; j > Cy; j -= Cy) + Cy = *yapp >> 16; + yap = *yapp & 0xffff; + + while (dst_clip_w--) { + Cx = *xapp >> 16; + xap = *xapp & 0xffff; + + sptr = *yp + *xp + pos; pix = sptr; sptr += src_w; + ax = (A_VAL(pix) * xap) >> 9; rx = (R_VAL(pix) * xap) >> 9; gx = (G_VAL(pix) * xap) >> 9; @@ -88,48 +65,81 @@ gx += (G_VAL(pix) * i) >> 9; bx += (B_VAL(pix) * i) >> 9; } - - a += (ax * Cy) >> 14; - r += (rx * Cy) >> 14; - g += (gx * Cy) >> 14; - b += (bx * Cy) >> 14; - } - if (j > 0) - { - pix = sptr; - sptr += src_w; - ax = (A_VAL(pix) * xap) >> 9; - rx = (R_VAL(pix) * xap) >> 9; - gx = (G_VAL(pix) * xap) >> 9; - bx = (B_VAL(pix) * xap) >> 9; - pix++; - for (i = (1 << 14) - xap; i > Cx; i -= Cx) + + a = (ax * yap) >> 14; + r = (rx * yap) >> 14; + g = (gx * yap) >> 14; + b = (bx * yap) >> 14; + + for (j = (1 << 14) - yap; j > Cy; j -= Cy) { - ax += (A_VAL(pix) * Cx) >> 9; - rx += (R_VAL(pix) * Cx) >> 9; - gx += (G_VAL(pix) * Cx) >> 9; - bx += (B_VAL(pix) * Cx) >> 9; + pix = sptr; + sptr += src_w; + ax = (A_VAL(pix) * xap) >> 9; + rx = (R_VAL(pix) * xap) >> 9; + gx = (G_VAL(pix) * xap) >> 9; + bx = (B_VAL(pix) * xap) >> 9; pix++; + for (i = (1 << 14) - xap; i > Cx; i -= Cx) + { + ax += (A_VAL(pix) * Cx) >> 9; + rx += (R_VAL(pix) * Cx) >> 9; + gx += (G_VAL(pix) * Cx) >> 9; + bx += (B_VAL(pix) * Cx) >> 9; + pix++; + } + if (i > 0) + { + ax += (A_VAL(pix) * i) >> 9; + rx += (R_VAL(pix) * i) >> 9; + gx += (G_VAL(pix) * i) >> 9; + bx += (B_VAL(pix) * i) >> 9; + } + + a += (ax * Cy) >> 14; + r += (rx * Cy) >> 14; + g += (gx * Cy) >> 14; + b += (bx * Cy) >> 14; } - if (i > 0) + if (j > 0) { - ax += (A_VAL(pix) * i) >> 9; - rx += (R_VAL(pix) * i) >> 9; - gx += (G_VAL(pix) * i) >> 9; - bx += (B_VAL(pix) * i) >> 9; + pix = sptr; + sptr += src_w; + ax = (A_VAL(pix) * xap) >> 9; + rx = (R_VAL(pix) * xap) >> 9; + gx = (G_VAL(pix) * xap) >> 9; + bx = (B_VAL(pix) * xap) >> 9; + pix++; + for (i = (1 << 14) - xap; i > Cx; i -= Cx) + { + ax += (A_VAL(pix) * Cx) >> 9; + rx += (R_VAL(pix) * Cx) >> 9; + gx += (G_VAL(pix) * Cx) >> 9; + bx += (B_VAL(pix) * Cx) >> 9; + pix++; + } + if (i > 0) + { + ax += (A_VAL(pix) * i) >> 9; + rx += (R_VAL(pix) * i) >> 9; + gx += (G_VAL(pix) * i) >> 9; + bx += (B_VAL(pix) * i) >> 9; + } + + a += (ax * j) >> 14; + r += (rx * j) >> 14; + g += (gx * j) >> 14; + b += (bx * j) >> 14; } - - a += (ax * j) >> 14; - r += (rx * j) >> 14; - g += (gx * j) >> 14; - b += (bx * j) >> 14; + *pbuf++ = ARGB_JOIN(a >> 5, r >> 5, g >> 5, b >> 5); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(a >> 5, r >> 5, g >> 5, b >> 5); - xp++; xapp++; + + func(buf, NULL, dc->mul.col, dptr, w); } - - func(buf, NULL, dc->mul.col, dptr, w); - +#ifdef EVAS_SLI + ysli++; +#endif pbuf = buf; dptr += dst_w; dst_clip_w = w; xp = xpoints + dxx; @@ -146,45 +156,23 @@ { while (dst_clip_h--) { - Cy = *yapp >> 16; - yap = *yapp & 0xffff; - - pbuf = dptr; - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - Cx = *xapp >> 16; - xap = *xapp & 0xffff; + Cy = *yapp >> 16; + yap = *yapp & 0xffff; - sptr = *yp + *xp + pos; - pix = sptr; - sptr += src_w; - - rx = (R_VAL(pix) * xap) >> 9; - gx = (G_VAL(pix) * xap) >> 9; - bx = (B_VAL(pix) * xap) >> 9; - pix++; - for (i = (1 << 14) - xap; i > Cx; i -= Cx) - { - rx += (R_VAL(pix) * Cx) >> 9; - gx += (G_VAL(pix) * Cx) >> 9; - bx += (B_VAL(pix) * Cx) >> 9; - pix++; - } - if (i > 0) - { - rx += (R_VAL(pix) * i) >> 9; - gx += (G_VAL(pix) * i) >> 9; - bx += (B_VAL(pix) * i) >> 9; - } - - r = (rx * yap) >> 14; - g = (gx * yap) >> 14; - b = (bx * yap) >> 14; - - for (j = (1 << 14) - yap; j > Cy; j -= Cy) + pbuf = dptr; + while (dst_clip_w--) { + Cx = *xapp >> 16; + xap = *xapp & 0xffff; + + sptr = *yp + *xp + pos; pix = sptr; sptr += src_w; + rx = (R_VAL(pix) * xap) >> 9; gx = (G_VAL(pix) * xap) >> 9; bx = (B_VAL(pix) * xap) >> 9; @@ -203,39 +191,69 @@ bx += (B_VAL(pix) * i) >> 9; } - r += (rx * Cy) >> 14; - g += (gx * Cy) >> 14; - b += (bx * Cy) >> 14; - } - if (j > 0) - { - pix = sptr; - sptr += src_w; - rx = (R_VAL(pix) * xap) >> 9; - gx = (G_VAL(pix) * xap) >> 9; - bx = (B_VAL(pix) * xap) >> 9; - pix++; - for (i = (1 << 14) - xap; i > Cx; i -= Cx) - { - rx += (R_VAL(pix) * Cx) >> 9; - gx += (G_VAL(pix) * Cx) >> 9; - bx += (B_VAL(pix) * Cx) >> 9; - pix++; - } - if (i > 0) - { - rx += (R_VAL(pix) * i) >> 9; - gx += (G_VAL(pix) * i) >> 9; - bx += (B_VAL(pix) * i) >> 9; - } + r = (rx * yap) >> 14; + g = (gx * yap) >> 14; + b = (bx * yap) >> 14; - r += (rx * j) >> 14; - g += (gx * j) >> 14; - b += (bx * j) >> 14; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) + { + pix = sptr; + sptr += src_w; + rx = (R_VAL(pix) * xap) >> 9; + gx = (G_VAL(pix) * xap) >> 9; + bx = (B_VAL(pix) * xap) >> 9; + pix++; + for (i = (1 << 14) - xap; i > Cx; i -= Cx) + { + rx += (R_VAL(pix) * Cx) >> 9; + gx += (G_VAL(pix) * Cx) >> 9; + bx += (B_VAL(pix) * Cx) >> 9; + pix++; + } + if (i > 0) + { + rx += (R_VAL(pix) * i) >> 9; + gx += (G_VAL(pix) * i) >> 9; + bx += (B_VAL(pix) * i) >> 9; + } + + r += (rx * Cy) >> 14; + g += (gx * Cy) >> 14; + b += (bx * Cy) >> 14; + } + if (j > 0) + { + pix = sptr; + sptr += src_w; + rx = (R_VAL(pix) * xap) >> 9; + gx = (G_VAL(pix) * xap) >> 9; + bx = (B_VAL(pix) * xap) >> 9; + pix++; + for (i = (1 << 14) - xap; i > Cx; i -= Cx) + { + rx += (R_VAL(pix) * Cx) >> 9; + gx += (G_VAL(pix) * Cx) >> 9; + bx += (B_VAL(pix) * Cx) >> 9; + pix++; + } + if (i > 0) + { + rx += (R_VAL(pix) * i) >> 9; + gx += (G_VAL(pix) * i) >> 9; + bx += (B_VAL(pix) * i) >> 9; + } + + r += (rx * j) >> 14; + g += (gx * j) >> 14; + b += (bx * j) >> 14; + } + *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5); - xp++; xapp++; } +#ifdef EVAS_SLI + ysli++; +#endif dptr += dst_w; dst_clip_w = w; xp = xpoints + dxx; xapp = xapoints + dxx; @@ -247,44 +265,22 @@ { while (dst_clip_h--) { - Cy = *yapp >> 16; - yap = *yapp & 0xffff; - - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - Cx = *xapp >> 16; - xap = *xapp & 0xffff; + Cy = *yapp >> 16; + yap = *yapp & 0xffff; - sptr = *yp + *xp + pos; - pix = sptr; - sptr += src_w; - - rx = (R_VAL(pix) * xap) >> 9; - gx = (G_VAL(pix) * xap) >> 9; - bx = (B_VAL(pix) * xap) >> 9; - pix++; - for (i = (1 << 14) - xap; i > Cx; i -= Cx) - { - rx += (R_VAL(pix) * Cx) >> 9; - gx += (G_VAL(pix) * Cx) >> 9; - bx += (B_VAL(pix) * Cx) >> 9; - pix++; - } - if (i > 0) - { - rx += (R_VAL(pix) * i) >> 9; - gx += (G_VAL(pix) * i) >> 9; - bx += (B_VAL(pix) * i) >> 9; - } - - r = (rx * yap) >> 14; - g = (gx * yap) >> 14; - b = (bx * yap) >> 14; - - for (j = (1 << 14) - yap; j > Cy; j -= Cy) + while (dst_clip_w--) { + Cx = *xapp >> 16; + xap = *xapp & 0xffff; + + sptr = *yp + *xp + pos; pix = sptr; sptr += src_w; + rx = (R_VAL(pix) * xap) >> 9; gx = (G_VAL(pix) * xap) >> 9; bx = (B_VAL(pix) * xap) >> 9; @@ -303,42 +299,71 @@ bx += (B_VAL(pix) * i) >> 9; } - r += (rx * Cy) >> 14; - g += (gx * Cy) >> 14; - b += (bx * Cy) >> 14; - } - if (j > 0) - { - pix = sptr; - sptr += src_w; - rx = (R_VAL(pix) * xap) >> 9; - gx = (G_VAL(pix) * xap) >> 9; - bx = (B_VAL(pix) * xap) >> 9; - pix++; - for (i = (1 << 14) - xap; i > Cx; i -= Cx) - { - rx += (R_VAL(pix) * Cx) >> 9; - gx += (G_VAL(pix) * Cx) >> 9; - bx += (B_VAL(pix) * Cx) >> 9; - pix++; - } - if (i > 0) - { - rx += (R_VAL(pix) * i) >> 9; - gx += (G_VAL(pix) * i) >> 9; - bx += (B_VAL(pix) * i) >> 9; - } + r = (rx * yap) >> 14; + g = (gx * yap) >> 14; + b = (bx * yap) >> 14; - r += (rx * j) >> 14; - g += (gx * j) >> 14; - b += (bx * j) >> 14; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) + { + pix = sptr; + sptr += src_w; + rx = (R_VAL(pix) * xap) >> 9; + gx = (G_VAL(pix) * xap) >> 9; + bx = (B_VAL(pix) * xap) >> 9; + pix++; + for (i = (1 << 14) - xap; i > Cx; i -= Cx) + { + rx += (R_VAL(pix) * Cx) >> 9; + gx += (G_VAL(pix) * Cx) >> 9; + bx += (B_VAL(pix) * Cx) >> 9; + pix++; + } + if (i > 0) + { + rx += (R_VAL(pix) * i) >> 9; + gx += (G_VAL(pix) * i) >> 9; + bx += (B_VAL(pix) * i) >> 9; + } + + r += (rx * Cy) >> 14; + g += (gx * Cy) >> 14; + b += (bx * Cy) >> 14; + } + if (j > 0) + { + pix = sptr; + sptr += src_w; + rx = (R_VAL(pix) * xap) >> 9; + gx = (G_VAL(pix) * xap) >> 9; + bx = (B_VAL(pix) * xap) >> 9; + pix++; + for (i = (1 << 14) - xap; i > Cx; i -= Cx) + { + rx += (R_VAL(pix) * Cx) >> 9; + gx += (G_VAL(pix) * Cx) >> 9; + bx += (B_VAL(pix) * Cx) >> 9; + pix++; + } + if (i > 0) + { + rx += (R_VAL(pix) * i) >> 9; + gx += (G_VAL(pix) * i) >> 9; + bx += (B_VAL(pix) * i) >> 9; + } + + r += (rx * j) >> 14; + g += (gx * j) >> 14; + b += (bx * j) >> 14; + } + *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5); - xp++; xapp++; + + func(buf, NULL, dc->mul.col, dptr, w); } - - func(buf, NULL, dc->mul.col, dptr, w); - +#ifdef EVAS_SLI + ysli++; +#endif pbuf = buf; dptr += dst_w; dst_clip_w = w; xp = xpoints + dxx; diff --git a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c index 007df66dc2..b16f90216e 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c +++ b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c @@ -5,7 +5,10 @@ int *xp, xap, yap, pos; int dyy, dxx; int w = dst_clip_w; - +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif + dptr = dst_ptr; pos = (src_region_y * src_w) + src_region_x; dyy = dst_clip_y - dst_region_y; @@ -21,67 +24,74 @@ { while (dst_clip_h--) { - Cy = *yapp >> 16; - yap = *yapp & 0xffff; - - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - pix = *yp + *xp + pos; - - a = (A_VAL(pix) * yap) >> 10; - r = (R_VAL(pix) * yap) >> 10; - g = (G_VAL(pix) * yap) >> 10; - b = (B_VAL(pix) * yap) >> 10; - for (j = (1 << 14) - yap; j > Cy; j -= Cy) + Cy = *yapp >> 16; + yap = *yapp & 0xffff; + + while (dst_clip_w--) { - pix += src_w; - a += (A_VAL(pix) * Cy) >> 10; - r += (R_VAL(pix) * Cy) >> 10; - g += (G_VAL(pix) * Cy) >> 10; - b += (B_VAL(pix) * Cy) >> 10; - } - if (j > 0) - { - pix += src_w; - a += (A_VAL(pix) * j) >> 10; - r += (R_VAL(pix) * j) >> 10; - g += (G_VAL(pix) * j) >> 10; - b += (B_VAL(pix) * j) >> 10; - } - if ((xap = *xapp) > 0) - { - pix = *yp + *xp + 1 + pos; - aa = (A_VAL(pix) * yap) >> 10; - rr = (R_VAL(pix) * yap) >> 10; - gg = (G_VAL(pix) * yap) >> 10; - bb = (B_VAL(pix) * yap) >> 10; + pix = *yp + *xp + pos; + + a = (A_VAL(pix) * yap) >> 10; + r = (R_VAL(pix) * yap) >> 10; + g = (G_VAL(pix) * yap) >> 10; + b = (B_VAL(pix) * yap) >> 10; for (j = (1 << 14) - yap; j > Cy; j -= Cy) { pix += src_w; - aa += (A_VAL(pix) * Cy) >> 10; - rr += (R_VAL(pix) * Cy) >> 10; - gg += (G_VAL(pix) * Cy) >> 10; - bb += (B_VAL(pix) * Cy) >> 10; + a += (A_VAL(pix) * Cy) >> 10; + r += (R_VAL(pix) * Cy) >> 10; + g += (G_VAL(pix) * Cy) >> 10; + b += (B_VAL(pix) * Cy) >> 10; } if (j > 0) { pix += src_w; - aa += (A_VAL(pix) * j) >> 10; - rr += (R_VAL(pix) * j) >> 10; - gg += (G_VAL(pix) * j) >> 10; - bb += (B_VAL(pix) * j) >> 10; + a += (A_VAL(pix) * j) >> 10; + r += (R_VAL(pix) * j) >> 10; + g += (G_VAL(pix) * j) >> 10; + b += (B_VAL(pix) * j) >> 10; } - a += ((aa - a) * xap) >> 8; - r += ((rr - r) * xap) >> 8; - g += ((gg - g) * xap) >> 8; - b += ((bb - b) * xap) >> 8; + if ((xap = *xapp) > 0) + { + pix = *yp + *xp + 1 + pos; + aa = (A_VAL(pix) * yap) >> 10; + rr = (R_VAL(pix) * yap) >> 10; + gg = (G_VAL(pix) * yap) >> 10; + bb = (B_VAL(pix) * yap) >> 10; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) + { + pix += src_w; + aa += (A_VAL(pix) * Cy) >> 10; + rr += (R_VAL(pix) * Cy) >> 10; + gg += (G_VAL(pix) * Cy) >> 10; + bb += (B_VAL(pix) * Cy) >> 10; + } + if (j > 0) + { + pix += src_w; + aa += (A_VAL(pix) * j) >> 10; + rr += (R_VAL(pix) * j) >> 10; + gg += (G_VAL(pix) * j) >> 10; + bb += (B_VAL(pix) * j) >> 10; + } + a += ((aa - a) * xap) >> 8; + r += ((rr - r) * xap) >> 8; + g += ((gg - g) * xap) >> 8; + b += ((bb - b) * xap) >> 8; + } + *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4); - xp++; xapp++; - } - - func(buf, NULL, dc->mul.col, dptr, w); - + + func(buf, NULL, dc->mul.col, dptr, w); + } +#ifdef EVAS_SLI + ysli++; +#endif pbuf = buf; dptr += dst_w; dst_clip_w = w; yp++; yapp++; @@ -98,58 +108,66 @@ { while (dst_clip_h--) { - Cy = *yapp >> 16; - yap = *yapp & 0xffff; - - pbuf = dptr; - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - pix = *yp + *xp + pos; + Cy = *yapp >> 16; + yap = *yapp & 0xffff; - r = (R_VAL(pix) * yap) >> 10; - g = (G_VAL(pix) * yap) >> 10; - b = (B_VAL(pix) * yap) >> 10; - for (j = (1 << 14) - yap; j > Cy; j -= Cy) + pbuf = dptr; + while (dst_clip_w--) { - pix += src_w; - r += (R_VAL(pix) * Cy) >> 10; - g += (G_VAL(pix) * Cy) >> 10; - b += (B_VAL(pix) * Cy) >> 10; - } - if (j > 0) - { - pix += src_w; - r += (R_VAL(pix) * j) >> 10; - g += (G_VAL(pix) * j) >> 10; - b += (B_VAL(pix) * j) >> 10; - } - if ((xap = *xapp) > 0) - { - pix = *yp + *xp + 1 + pos; - rr = (R_VAL(pix) * yap) >> 10; - gg = (G_VAL(pix) * yap) >> 10; - bb = (B_VAL(pix) * yap) >> 10; + pix = *yp + *xp + pos; + + r = (R_VAL(pix) * yap) >> 10; + g = (G_VAL(pix) * yap) >> 10; + b = (B_VAL(pix) * yap) >> 10; for (j = (1 << 14) - yap; j > Cy; j -= Cy) { pix += src_w; - rr += (R_VAL(pix) * Cy) >> 10; - gg += (G_VAL(pix) * Cy) >> 10; - bb += (B_VAL(pix) * Cy) >> 10; + r += (R_VAL(pix) * Cy) >> 10; + g += (G_VAL(pix) * Cy) >> 10; + b += (B_VAL(pix) * Cy) >> 10; } if (j > 0) { pix += src_w; - rr += (R_VAL(pix) * j) >> 10; - gg += (G_VAL(pix) * j) >> 10; - bb += (B_VAL(pix) * j) >> 10; + r += (R_VAL(pix) * j) >> 10; + g += (G_VAL(pix) * j) >> 10; + b += (B_VAL(pix) * j) >> 10; } - r += ((rr - r) * xap) >> 8; - g += ((gg - g) * xap) >> 8; - b += ((bb - b) * xap) >> 8; + if ((xap = *xapp) > 0) + { + pix = *yp + *xp + 1 + pos; + rr = (R_VAL(pix) * yap) >> 10; + gg = (G_VAL(pix) * yap) >> 10; + bb = (B_VAL(pix) * yap) >> 10; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) + { + pix += src_w; + rr += (R_VAL(pix) * Cy) >> 10; + gg += (G_VAL(pix) * Cy) >> 10; + bb += (B_VAL(pix) * Cy) >> 10; + } + if (j > 0) + { + pix += src_w; + rr += (R_VAL(pix) * j) >> 10; + gg += (G_VAL(pix) * j) >> 10; + bb += (B_VAL(pix) * j) >> 10; + } + r += ((rr - r) * xap) >> 8; + g += ((gg - g) * xap) >> 8; + b += ((bb - b) * xap) >> 8; + } + *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); - xp++; xapp++; } +#ifdef EVAS_SLI + ysli++; +#endif dptr += dst_w; dst_clip_w = w; yp++; yapp++; xp = xpoints + dxx; @@ -161,60 +179,67 @@ { while (dst_clip_h--) { - Cy = *yapp >> 16; - yap = *yapp & 0xffff; - - while (dst_clip_w--) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif { - pix = *yp + *xp + pos; + Cy = *yapp >> 16; + yap = *yapp & 0xffff; - r = (R_VAL(pix) * yap) >> 10; - g = (G_VAL(pix) * yap) >> 10; - b = (B_VAL(pix) * yap) >> 10; - for (j = (1 << 14) - yap; j > Cy; j -= Cy) + while (dst_clip_w--) { - pix += src_w; - r += (R_VAL(pix) * Cy) >> 10; - g += (G_VAL(pix) * Cy) >> 10; - b += (B_VAL(pix) * Cy) >> 10; - } - if (j > 0) - { - pix += src_w; - r += (R_VAL(pix) * j) >> 10; - g += (G_VAL(pix) * j) >> 10; - b += (B_VAL(pix) * j) >> 10; - } - if ((xap = *xapp) > 0) - { - pix = *yp + *xp + 1 + pos; - rr = (R_VAL(pix) * yap) >> 10; - gg = (G_VAL(pix) * yap) >> 10; - bb = (B_VAL(pix) * yap) >> 10; + pix = *yp + *xp + pos; + + r = (R_VAL(pix) * yap) >> 10; + g = (G_VAL(pix) * yap) >> 10; + b = (B_VAL(pix) * yap) >> 10; for (j = (1 << 14) - yap; j > Cy; j -= Cy) { pix += src_w; - rr += (R_VAL(pix) * Cy) >> 10; - gg += (G_VAL(pix) * Cy) >> 10; - bb += (B_VAL(pix) * Cy) >> 10; + r += (R_VAL(pix) * Cy) >> 10; + g += (G_VAL(pix) * Cy) >> 10; + b += (B_VAL(pix) * Cy) >> 10; } if (j > 0) { pix += src_w; - rr += (R_VAL(pix) * j) >> 10; - gg += (G_VAL(pix) * j) >> 10; - bb += (B_VAL(pix) * j) >> 10; + r += (R_VAL(pix) * j) >> 10; + g += (G_VAL(pix) * j) >> 10; + b += (B_VAL(pix) * j) >> 10; } - r += ((rr - r) * xap) >> 8; - g += ((gg - g) * xap) >> 8; - b += ((bb - b) * xap) >> 8; + if ((xap = *xapp) > 0) + { + pix = *yp + *xp + 1 + pos; + rr = (R_VAL(pix) * yap) >> 10; + gg = (G_VAL(pix) * yap) >> 10; + bb = (B_VAL(pix) * yap) >> 10; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) + { + pix += src_w; + rr += (R_VAL(pix) * Cy) >> 10; + gg += (G_VAL(pix) * Cy) >> 10; + bb += (B_VAL(pix) * Cy) >> 10; + } + if (j > 0) + { + pix += src_w; + rr += (R_VAL(pix) * j) >> 10; + gg += (G_VAL(pix) * j) >> 10; + bb += (B_VAL(pix) * j) >> 10; + } + r += ((rr - r) * xap) >> 8; + g += ((gg - g) * xap) >> 8; + b += ((bb - b) * xap) >> 8; + } + *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + xp++; xapp++; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); - xp++; xapp++; + + func(buf, NULL, dc->mul.col, dptr, w); } - - func(buf, NULL, dc->mul.col, dptr, w); - +#ifdef EVAS_SLI + ysli++; +#endif pbuf = buf; dptr += dst_w; dst_clip_w = w; yp++; yapp++; diff --git a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c index 5ef020dca3..01ca8f92a4 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c +++ b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c @@ -1,7 +1,10 @@ { DATA32 *ptr; RGBA_Gfx_Func func; - +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif + ptr = src->image->data + ((dst_clip_y - dst_region_y + src_region_y) * src_w) + (dst_clip_x - dst_region_x) + src_region_x; if (dc->mul.use) func = evas_common_gfx_func_composite_pixel_color_span_get(src, dc->mul.col, dst, dst_clip_w, dc->render_op); @@ -9,7 +12,15 @@ func = evas_common_gfx_func_composite_pixel_span_get(src, dst, dst_clip_w, dc->render_op); while (dst_clip_h--) { - func(ptr, NULL, dc->mul.col, dst_ptr, dst_clip_w); +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) +#endif + { + func(ptr, NULL, dc->mul.col, dst_ptr, dst_clip_w); + } +#ifdef EVAS_SLI + ysli++; +#endif ptr += src_w; dst_ptr += dst_w; } diff --git a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c index 8688af6d31..ac40ceb667 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c +++ b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c @@ -59,49 +59,59 @@ if (drh == srh) { int sxx0 = sxx; - +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif psrc = src->image->data + (src_w * (sry + cy)) + srx; while (pdst < pdst_end) { - pbuf = buf; pbuf_end = buf + dst_clip_w; - sxx = sxx0; -#ifdef SCALE_USING_MMX - pxor_r2r(mm0, mm0); - MOV_A2R(ALPHA_255, mm5) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) #endif - while (pbuf < pbuf_end) - { - DATA32 p0, p1; - int ax; - - sx = (sxx >> 16); - ax = 1 + ((sxx - (sx << 16)) >> 8); - p0 = p1 = *(psrc + sx); - if ((sx + 1) < srw) - p1 = *(psrc + sx + 1); + { + pbuf = buf; pbuf_end = buf + dst_clip_w; + sxx = sxx0; #ifdef SCALE_USING_MMX - MOV_P2R(p0, mm1, mm0) - if (p0 | p1) - { - MOV_A2R(ax, mm3) - MOV_P2R(p1, mm2, mm0) - INTERP_256_R2R(mm3, mm2, mm1, mm5) - } - MOV_R2P(mm1, *pbuf, mm0) - pbuf++; + pxor_r2r(mm0, mm0); + MOV_A2R(ALPHA_255, mm5) +#endif + while (pbuf < pbuf_end) + { + DATA32 p0, p1; + int ax; + + sx = (sxx >> 16); + ax = 1 + ((sxx - (sx << 16)) >> 8); + p0 = p1 = *(psrc + sx); + if ((sx + 1) < srw) + p1 = *(psrc + sx + 1); +#ifdef SCALE_USING_MMX + MOV_P2R(p0, mm1, mm0) + if (p0 | p1) + { + MOV_A2R(ax, mm3) + MOV_P2R(p1, mm2, mm0) + INTERP_256_R2R(mm3, mm2, mm1, mm5) + } + MOV_R2P(mm1, *pbuf, mm0) + pbuf++; #else - if (p0 | p1) - p0 = INTERP_256(ax, p1, p0); - *pbuf++ = p0; + if (p0 | p1) + p0 = INTERP_256(ax, p1, p0); + *pbuf++ = p0; #endif - sxx += dsxx; - } - /* * blend here [clip_w *] buf -> dptr * */ - if (!direct_scale) - func(buf, NULL, dc->mul.col, pdst, dst_clip_w); - pdst += dst_w; - psrc += src_w; - buf += buf_step; + sxx += dsxx; + } + /* * blend here [clip_w *] buf -> dptr * */ + if (!direct_scale) + func(buf, NULL, dc->mul.col, pdst, dst_clip_w); + } +#ifdef EVAS_SLI + ysli++; +#endif + pdst += dst_w; + psrc += src_w; + buf += buf_step; } goto done_scale_up; @@ -109,45 +119,56 @@ else if (drw == srw) { DATA32 *ps = src->image->data + (src_w * sry) + srx + cx; +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif while (pdst < pdst_end) { - int ay; - - sy = syy >> 16; - psrc = ps + (sy * src_w); - ay = 1 + ((syy - (sy << 16)) >> 8); -#ifdef SCALE_USING_MMX - pxor_r2r(mm0, mm0); - MOV_A2R(ALPHA_255, mm5) - MOV_A2R(ay, mm4) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) #endif - pbuf = buf; pbuf_end = buf + dst_clip_w; - while (pbuf < pbuf_end) - { - DATA32 p0 = *psrc, p2 = p0; - - if ((sy + 1) < srh) - p2 = *(psrc + src_w); + { + int ay; + + sy = syy >> 16; + psrc = ps + (sy * src_w); + ay = 1 + ((syy - (sy << 16)) >> 8); #ifdef SCALE_USING_MMX - MOV_P2R(p0, mm1, mm0) - if (p0 | p2) - { - MOV_P2R(p2, mm2, mm0) - INTERP_256_R2R(mm4, mm2, mm1, mm5) - } - MOV_R2P(mm1, *pbuf, mm0) - pbuf++; + pxor_r2r(mm0, mm0); + MOV_A2R(ALPHA_255, mm5) + MOV_A2R(ay, mm4) +#endif + pbuf = buf; pbuf_end = buf + dst_clip_w; + while (pbuf < pbuf_end) + { + DATA32 p0 = *psrc, p2 = p0; + + if ((sy + 1) < srh) + p2 = *(psrc + src_w); +#ifdef SCALE_USING_MMX + MOV_P2R(p0, mm1, mm0) + if (p0 | p2) + { + MOV_P2R(p2, mm2, mm0) + INTERP_256_R2R(mm4, mm2, mm1, mm5) + } + MOV_R2P(mm1, *pbuf, mm0) + pbuf++; #else - if (p0 | p2) - p0 = INTERP_256(ay, p2, p0); - *pbuf++ = p0; + if (p0 | p2) + p0 = INTERP_256(ay, p2, p0); + *pbuf++ = p0; #endif - psrc++; - } - /* * blend here [clip_w *] buf -> dptr * */ - if (!direct_scale) - func(buf, NULL, dc->mul.col, pdst, dst_clip_w); + psrc++; + } + /* * blend here [clip_w *] buf -> dptr * */ + if (!direct_scale) + func(buf, NULL, dc->mul.col, pdst, dst_clip_w); + } +#ifdef EVAS_SLI + ysli++; +#endif pdst += dst_w; syy += dsyy; buf += buf_step; @@ -158,73 +179,84 @@ { DATA32 *ps = src->image->data + (src_w * sry) + srx; int sxx0 = sxx; +#ifdef EVAS_SLI + int ysli = dst_clip_y; +#endif while (pdst < pdst_end) { - int ay; - - sy = syy >> 16; - psrc = ps + (sy * src_w); - ay = 1 + ((syy - (sy << 16)) >> 8); -#ifdef SCALE_USING_MMX - MOV_A2R(ay, mm4) - pxor_r2r(mm0, mm0); - MOV_A2R(ALPHA_255, mm5) +#ifdef EVAS_SLI + if (((ysli) % dc->sli.h) == dc->sli.y) #endif - pbuf = buf; pbuf_end = buf + dst_clip_w; - sxx = sxx0; - while (pbuf < pbuf_end) - { - int ax; - DATA32 *p, *q; - DATA32 p0, p1, p2, p3; - - sx = sxx >> 16; - ax = 1 + ((sxx - (sx << 16)) >> 8); - p = psrc + sx; q = p + src_w; - p0 = p1 = p2 = p3 = *p; - if ((sx + 1) < srw) - p1 = *(p + 1); - if ((sy + 1) < srh) - { - p2 = *q; p3 = p2; - if ((sx + 1) < srw) - p3 = *(q + 1); - } + { + int ay; + + sy = syy >> 16; + psrc = ps + (sy * src_w); + ay = 1 + ((syy - (sy << 16)) >> 8); #ifdef SCALE_USING_MMX - MOV_A2R(ax, mm6) - MOV_P2R(p0, mm1, mm0) - if (p0 | p1) - { - MOV_P2R(p1, mm2, mm0) - INTERP_256_R2R(mm6, mm2, mm1, mm5) - } - MOV_P2R(p2, mm2, mm0) - if (p2 | p3) - { - MOV_P2R(p3, mm3, mm0) - INTERP_256_R2R(mm6, mm3, mm2, mm5) - } - INTERP_256_R2R(mm4, mm2, mm1, mm5) - MOV_R2P(mm1, *pbuf, mm0) - pbuf++; + MOV_A2R(ay, mm4) + pxor_r2r(mm0, mm0); + MOV_A2R(ALPHA_255, mm5) +#endif + pbuf = buf; pbuf_end = buf + dst_clip_w; + sxx = sxx0; + while (pbuf < pbuf_end) + { + int ax; + DATA32 *p, *q; + DATA32 p0, p1, p2, p3; + + sx = sxx >> 16; + ax = 1 + ((sxx - (sx << 16)) >> 8); + p = psrc + sx; q = p + src_w; + p0 = p1 = p2 = p3 = *p; + if ((sx + 1) < srw) + p1 = *(p + 1); + if ((sy + 1) < srh) + { + p2 = *q; p3 = p2; + if ((sx + 1) < srw) + p3 = *(q + 1); + } +#ifdef SCALE_USING_MMX + MOV_A2R(ax, mm6) + MOV_P2R(p0, mm1, mm0) + if (p0 | p1) + { + MOV_P2R(p1, mm2, mm0) + INTERP_256_R2R(mm6, mm2, mm1, mm5) + } + MOV_P2R(p2, mm2, mm0) + if (p2 | p3) + { + MOV_P2R(p3, mm3, mm0) + INTERP_256_R2R(mm6, mm3, mm2, mm5) + } + INTERP_256_R2R(mm4, mm2, mm1, mm5) + MOV_R2P(mm1, *pbuf, mm0) + pbuf++; #else - if (p0 | p1) - p0 = INTERP_256(ax, p1, p0); - if (p2 | p3) - p2 = INTERP_256(ax, p3, p2); - if (p0 | p2) - p0 = INTERP_256(ay, p2, p0); - *pbuf++ = p0; + if (p0 | p1) + p0 = INTERP_256(ax, p1, p0); + if (p2 | p3) + p2 = INTERP_256(ax, p3, p2); + if (p0 | p2) + p0 = INTERP_256(ay, p2, p0); + *pbuf++ = p0; #endif - sxx += dsxx; - } - /* * blend here [clip_w *] buf -> dptr * */ - if (!direct_scale) - func(buf, NULL, dc->mul.col, pdst, dst_clip_w); - pdst += dst_w; - syy += dsyy; - buf += buf_step; + sxx += dsxx; + } + /* * blend here [clip_w *] buf -> dptr * */ + if (!direct_scale) + func(buf, NULL, dc->mul.col, pdst, dst_clip_w); + } +#ifdef EVAS_SLI + ysli++; +#endif + pdst += dst_w; + syy += dsyy; + buf += buf_step; } } done_scale_up: diff --git a/legacy/evas/src/lib/include/evas_common.h b/legacy/evas/src/lib/include/evas_common.h index bea7276310..89a1627bb3 100644 --- a/legacy/evas/src/lib/include/evas_common.h +++ b/legacy/evas/src/lib/include/evas_common.h @@ -22,7 +22,12 @@ # define LKU(x) pthread_mutex_unlock(&(x)); # define TH(x) pthread_t x # define THI(x) int x -# define TH_MAX 4 +# define TH_MAX 8 + +// even though in theory having every Nth rendered line done by a different +// thread might even out load across threads - it actually slows things down. +//#define EVAS_SLI 1 + #else # define LK(x) # define LKI(x) @@ -255,8 +260,11 @@ struct _RGBA_Draw_Context struct { int color_space; } interpolation; - unsigned char anti_alias : 1; + struct { + int y, h; + } sli; int render_op; + unsigned char anti_alias : 1; }; struct _RGBA_Surface @@ -978,9 +986,10 @@ EAPI Cutout_Rect *evas_common_draw_context_cutouts_split (Cutout_Rect EAPI Cutout_Rect *evas_common_draw_context_cutout_split (Cutout_Rect *in, Cutout_Rect *split); EAPI Cutout_Rect *evas_common_draw_context_cutout_merge (Cutout_Rect *in, Cutout_Rect *merge); EAPI void evas_common_draw_context_set_anti_alias (RGBA_Draw_Context *dc, unsigned char aa); -EAPI void evas_common_draw_context_set_color_interpolation (RGBA_Draw_Context *dc, int color_space); +EAPI void evas_common_draw_context_set_color_interpolation(RGBA_Draw_Context *dc, int color_space); EAPI void evas_common_draw_context_set_render_op (RGBA_Draw_Context *dc, int op); - +EAPI void evas_common_draw_context_set_sli (RGBA_Draw_Context *dc, int y, int h); + /****/ /* image rendering pipelines... new optional system - non-immediate and * threadable