RGBA_Draw_Context *dc;
dc = calloc(1, sizeof(RGBA_Draw_Context));
+ dc->sli.h = 1;
return dc;
}
{
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;
+}
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);
+ }
}
}
}
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)
- {
- 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++;
- }
- 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)
+ tp = tmpbuf;
+ dp = data + (i * fg->glyph_out->bitmap.pitch);
+ for (bi = 0; bi < w; bi += 8)
{
- in_w += ext_x - dx;
- in_x = ext_x - dx;
- dx = ext_x;
+ 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++;
}
- if (in_w < w)
+ if ((dx < (ext_x + ext_w)) &&
+ (dy >= (ext_y)) &&
+ (dy < (ext_y + ext_h)))
{
- 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);
+ }
}
}
}
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++;
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;
}
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;
}
}
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;
}
}
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++;
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;
}
/* 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
{
}
#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)
{
/* 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");
}
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);
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);
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);
}
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,
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);
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),
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)
{
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;
}
}
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;
}
{
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;
}
}
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;
}
}
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;
{
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)
- {
- 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;
- 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++;
- }
-
- func(buf, NULL, dc->mul.col, dptr, w);
-
- pbuf = buf;
- dptr += dst_w; dst_clip_w = w;
- yp++; yapp++;
- xp = xpoints + dxx;
- xapp = xapoints + dxx;
- }
- }
- else
- {
-#ifdef DIRECT_SCALE
- if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
- (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
- (!dc->mul.use))
- {
- while (dst_clip_h--)
- {
- pbuf = dptr;
while (dst_clip_w--)
{
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++;
+ 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;
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(0xff, r >> 4, g >> 4, b >> 4);
+ *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4);
xp++; xapp++;
}
+ func(buf, NULL, dc->mul.col, dptr, w);
+ }
+#ifdef EVAS_SLI
+ ysli++;
+#endif
+ pbuf = buf;
+ dptr += dst_w; dst_clip_w = w;
+ yp++; yapp++;
+ xp = xpoints + dxx;
+ xapp = xapoints + dxx;
+ }
+ }
+ else
+ {
+#ifdef DIRECT_SCALE
+ if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+ (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+ (!dc->mul.use))
+ {
+ while (dst_clip_h--)
+ {
+ pbuf = dptr;
+#ifdef EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
+ {
+ while (dst_clip_w--)
+ {
+ 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++;
+ 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;
+ 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++;
+ }
+ }
+#ifdef EVAS_SLI
+ ysli++;
+#endif
+
dptr += dst_w; dst_clip_w = w;
yp++; yapp++;
xp = xpoints + dxx;
{
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++;
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;
{
while (dst_clip_h--)
{
- 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;
- 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)
- {
- 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 (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)
- {
- 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;
- }
- *pbuf++ = ARGB_JOIN(a >> 5, r >> 5, g >> 5, b >> 5);
- xp++; xapp++;
- }
-
- func(buf, NULL, dc->mul.col, dptr, w);
-
- pbuf = buf;
- dptr += dst_w; dst_clip_w = w;
- xp = xpoints + dxx;
- xapp = xapoints + dxx;
- yp++; yapp++;
- }
- }
- else
- {
-#ifdef DIRECT_SCALE
- if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
- (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
- (!dc->mul.use))
- {
- while (dst_clip_h--)
+#ifdef EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
{
Cy = *yapp >> 16;
yap = *yapp & 0xffff;
- pbuf = dptr;
while (dst_clip_w--)
{
Cx = *xapp >> 16;
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;
}
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;
{
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;
}
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;
{
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;
}
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;
}
- *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5);
+ *pbuf++ = ARGB_JOIN(a >> 5, r >> 5, g >> 5, b >> 5);
xp++; xapp++;
}
- dptr += dst_w; dst_clip_w = w;
- xp = xpoints + dxx;
- xapp = xapoints + dxx;
- yp++; yapp++;
+
+ 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;
+ xapp = xapoints + dxx;
+ yp++; yapp++;
}
- else
-#endif
+ }
+ else
+ {
+#ifdef DIRECT_SCALE
+ if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+ (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+ (!dc->mul.use))
{
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;
+ Cy = *yapp >> 16;
+ yap = *yapp & 0xffff;
- 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;
bx += (B_VAL(pix) * i) >> 9;
}
- r += (rx * Cy) >> 14;
- g += (gx * Cy) >> 14;
- b += (bx * Cy) >> 14;
+ r = (rx * yap) >> 14;
+ g = (gx * yap) >> 14;
+ b = (bx * yap) >> 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++;
}
- if (j > 0)
+ }
+#ifdef EVAS_SLI
+ ysli++;
+#endif
+ dptr += dst_w; dst_clip_w = w;
+ xp = xpoints + dxx;
+ xapp = xapoints + dxx;
+ yp++; yapp++;
+ }
+ }
+ else
+#endif
+ {
+ while (dst_clip_h--)
+ {
+#ifdef EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
+ {
+ 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;
+
rx = (R_VAL(pix) * xap) >> 9;
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
bx += (B_VAL(pix) * i) >> 9;
}
- r += (rx * j) >> 14;
- g += (gx * j) >> 14;
- b += (bx * j) >> 14;
+ r = (rx * yap) >> 14;
+ g = (gx * yap) >> 14;
+ b = (bx * yap) >> 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;
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;
{
while (dst_clip_h--)
{
- Cy = *yapp >> 16;
- yap = *yapp & 0xffff;
-
- while (dst_clip_w--)
- {
- 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;
- 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;
- 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++;
- }
-
- func(buf, NULL, dc->mul.col, dptr, w);
-
- pbuf = buf;
- dptr += dst_w; dst_clip_w = w;
- yp++; yapp++;
- xp = xpoints + dxx;
- xapp = xapoints + dxx;
- }
- }
- else
- {
-#ifdef DIRECT_SCALE
- if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
- (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
- (!dc->mul.use))
- {
- while (dst_clip_h--)
+#ifdef EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
{
Cy = *yapp >> 16;
yap = *yapp & 0xffff;
- pbuf = dptr;
while (dst_clip_w--)
{
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;
+ 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;
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(0xff, r >> 4, g >> 4, b >> 4);
+ *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4);
xp++; xapp++;
}
+
+ func(buf, NULL, dc->mul.col, dptr, w);
+ }
+#ifdef EVAS_SLI
+ ysli++;
+#endif
+ pbuf = buf;
+ dptr += dst_w; dst_clip_w = w;
+ yp++; yapp++;
+ xp = xpoints + dxx;
+ xapp = xapoints + dxx;
+ }
+ }
+ else
+ {
+#ifdef DIRECT_SCALE
+ if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+ (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+ (!dc->mul.use))
+ {
+ while (dst_clip_h--)
+ {
+#ifdef EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
+ {
+ Cy = *yapp >> 16;
+ yap = *yapp & 0xffff;
+
+ pbuf = dptr;
+ while (dst_clip_w--)
+ {
+ 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;
+ 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;
+ 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++;
+ }
+ }
+#ifdef EVAS_SLI
+ ysli++;
+#endif
dptr += dst_w; dst_clip_w = w;
yp++; yapp++;
xp = xpoints + dxx;
{
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)
- {
- 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)
+ while (dst_clip_w--)
{
- 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++;
{
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);
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;
}
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 EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
+ {
+ pbuf = buf; pbuf_end = buf + dst_clip_w;
+ sxx = sxx0;
#ifdef SCALE_USING_MMX
- pxor_r2r(mm0, mm0);
- MOV_A2R(ALPHA_255, mm5)
+ 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);
+ 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++;
+ 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;
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 EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
+ {
+ 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)
+ 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);
+ 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++;
+ 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;
{
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 EVAS_SLI
+ if (((ysli) % dc->sli.h) == dc->sli.y)
+#endif
+ {
+ 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)
+ 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);
- }
+ 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++;
+ 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:
# 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)
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
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