gegl r2518 - in trunk: . gegl/buffer
- From: ok svn gnome org
- To: svn-commits-list gnome org
- Subject: gegl r2518 - in trunk: . gegl/buffer
- Date: Tue, 1 Jul 2008 20:11:56 +0000 (UTC)
Author: ok
Date: Tue Jul 1 20:11:55 2008
New Revision: 2518
URL: http://svn.gnome.org/viewvc/gegl?rev=2518&view=rev
Log:
* gegl/buffer/gegl-sampler-cubic.c: (gegl_sampler_cubic_get): commited
reworked bits of patch from Geert Jordaens that adds gcc vector
extension based SSE code paths to cubic. Bug #540540
Modified:
trunk/ChangeLog
trunk/gegl/buffer/gegl-sampler-cubic.c
Modified: trunk/gegl/buffer/gegl-sampler-cubic.c
==============================================================================
--- trunk/gegl/buffer/gegl-sampler-cubic.c (original)
+++ trunk/gegl/buffer/gegl-sampler-cubic.c Tue Jul 1 20:11:55 2008
@@ -129,7 +129,14 @@
(64-3)*4, 4, 4, 4};
gfloat *sampler_bptr;
gfloat factor;
- gfloat newval[4];
+
+#ifdef HAS_G4FLOAT
+ g4float newval4 = g4float_zero;
+ gfloat *newval = &newval4;
+#else
+ gfloat newval[4] = {0.0, 0.0, 0.0, 0.0};
+#endif
+
gint u,v;
gint dx,dy;
gint i;
@@ -139,18 +146,37 @@
dy = (gint) y;
newval[0] = newval[1] = newval[2] = newval[3] = 0.;
sampler_bptr = gegl_sampler_get_ptr (self, dx, dy);
- for (v=dy+context_rect.y, i=0; v < dy+context_rect.y+context_rect.height ; v++)
- for (u=dx+context_rect.x ; u < dx+context_rect.x+context_rect.width ; u++, i++)
- {
- /*sampler_bptr = gegl_sampler_get_from_buffer (self, u, v);*/
- sampler_bptr += offsets[i];
- factor = cubicKernel (y - v, cubic->b, cubic->c) *
- cubicKernel (x - u, cubic->b, cubic->c);
- newval[0] += factor * sampler_bptr[0];
- newval[1] += factor * sampler_bptr[1];
- newval[2] += factor * sampler_bptr[2];
- newval[3] += factor * sampler_bptr[3];
- }
+
+#ifdef HAS_G4FLOAT
+ if (G_LIKELY (gegl_cpu_accel_get_support () & (GEGL_CPU_ACCEL_X86_SSE|
+ GEGL_CPU_ACCEL_X8&_MMX)))
+ {
+ for (v=dy+context_rect.y, i=0; v < dy+context_rect.y+context_rect.height ; v++)
+ for (u=dx+context_rect.x ; u < dx+context_rect.x+context_rect.width ; u++, i++)
+ {
+ sampler_bptr += offsets[i];
+ factor = cubicKernel (y - v, cubic->b, cubic->c) *
+ cubicKernel (x - u, cubic->b, cubic->c);
+ newval4 += g4float_mul(&sampler_bptr[0], factor);
+ }
+ }
+ else
+#endif
+ {
+ for (v=dy+context_rect.y, i=0; v < dy+context_rect.y+context_rect.height ; v++)
+ for (u=dx+context_rect.x ; u < dx+context_rect.x+context_rect.width ; u++, i++)
+ {
+ /*sampler_bptr = gegl_sampler_get_from_buffer (self, u, v);*/
+ sampler_bptr += offsets[i];
+ factor = cubicKernel (y - v, cubic->b, cubic->c) *
+ cubicKernel (x - u, cubic->b, cubic->c);
+
+ newval[0] += factor * sampler_bptr[0];
+ newval[1] += factor * sampler_bptr[1];
+ newval[2] += factor * sampler_bptr[2];
+ newval[3] += factor * sampler_bptr[3];
+ }
+ }
babl_process (babl_fish (self->interpolate_format, self->format),
newval, output, 1);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]