Author: post
Date: 2009-07-07 18:19:20 +0200 (Tue, 07 Jul 2009)
New Revision: 2573
Modified:
trunk/plugins/basic-render/basic-render.c
Log:
Made basicrenderer work with pixel size != 4, and fixed uninitialized register
used for clamping.
Modified: trunk/plugins/basic-render/basic-render.c
===================================================================
--- trunk/plugins/basic-render/basic-render.c 2009-07-07 15:52:57 UTC (rev
2572)
+++ trunk/plugins/basic-render/basic-render.c 2009-07-07 16:19:20 UTC (rev
2573)
@@ -95,6 +95,7 @@
gint height;
gushort *in;
gint in_rowstride;
+ gint in_pixelsize;
void *out;
gint out_rowstride;
} ThreadInfo;
@@ -660,8 +661,8 @@
*d16++ = t->basic_render->table16[b];
d16++;
- /* input is always aligned to 64 bits */
- srcoffset += 4;
+ /* Increment input */
+ srcoffset += t->in_pixelsize;
}
}
return NULL;
@@ -720,7 +721,7 @@
*d8++ = t->basic_render->table8[b];
/* input is always aligned to 64 bits */
- srcoffset += 4;
+ srcoffset += t->in_pixelsize;
}
}
@@ -762,6 +763,7 @@
"movaps 32(%0), %%xmm5\n\t"
"movaps (%1), %%xmm6\n\t" /* top */
"pxor %%mm7, %%mm7\n\t" /* 0x0 */
+ "xorps %%xmm7, %%xmm7\n\t" /* 0x0 */
:
: "r" (&mat[0]), "r" (&top[0]), "r" (t->basic_render->pre_mul)
: "memory"
@@ -821,7 +823,7 @@
d[destoffset++] = t->basic_render->table8[r];
d[destoffset++] = t->basic_render->table8[g];
d[destoffset++] = t->basic_render->table8[b];
- s += 4;
+ s += t->in_pixelsize;
}
}
asm volatile("emms\n\t");
@@ -864,6 +866,7 @@
"movaps 32(%0), %%xmm5\n\t"
"movaps (%1), %%xmm6\n\t" /* top */
"pxor %%mm7, %%mm7\n\t" /* 0x0 */
+ "xorps %%xmm7, %%xmm7\n\t" /* 0x0 */
:
: "r" (&mat[0]), "r" (&top[0]), "r" (t->basic_render->pre_mul)
: "memory"
@@ -922,7 +925,7 @@
buffer[destoffset++] = t->basic_render->table16[r];
buffer[destoffset++] = t->basic_render->table16[g];
buffer[destoffset++] = t->basic_render->table16[b];
- s += 4;
+ s += t->in_pixelsize;
}
cmsDoTransform(t->basic_render->lcms_transform8, buffer, d,
t->width);
}
@@ -973,6 +976,7 @@
t[i].height = MIN((input->h - y_offset), y_per_thread);
t[i].in = GET_PIXEL(input, 0, y_offset);
t[i].in_rowstride = input->rowstride;
+ t[i].in_pixelsize = input->pixelsize;
t[i].out = GET_PIXEL(output, 0, y_offset);
t[i].out_rowstride = output->rowstride;
@@ -1049,6 +1053,7 @@
t[i].height = MIN((input->h - y_offset), y_per_thread);
t[i].in = GET_PIXEL(input, x_offset, y_offset);
t[i].in_rowstride = input->rowstride;
+ t[i].in_pixelsize = input->pixelsize;
t[i].out = GET_PIXBUF_PIXEL(output, x_offset, y_offset);
t[i].out_rowstride = gdk_pixbuf_get_rowstride(output);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit