[gegl] operations,opencl: fix edge-laplace
- From: Téo Mazars <teom src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] operations,opencl: fix edge-laplace
- Date: Mon, 14 Oct 2013 06:42:21 +0000 (UTC)
commit 05669339c67e7c6cfb0f2ad7f7f509ddaffdcbc7
Author: Téo Mazars <teo mazars ensimag fr>
Date: Mon Oct 14 08:39:04 2013 +0200
operations,opencl: fix edge-laplace
- reoder floating point operations
- use ABYSS_CLAMP for the input buffer
- use EPSILON for the critical comparison to 0.0f
- update the LAPLACE_RADIUS constant
it's still weak though.
opencl/edge-laplace.cl | 10 ++++++----
opencl/edge-laplace.cl.h | 10 ++++++----
operations/common/edge-laplace.c | 2 +-
3 files changed, 13 insertions(+), 9 deletions(-)
---
diff --git a/opencl/edge-laplace.cl b/opencl/edge-laplace.cl
index 2259a5f..fccceb5 100644
--- a/opencl/edge-laplace.cl
+++ b/opencl/edge-laplace.cl
@@ -1,4 +1,6 @@
-#define LAPLACE_RADIUS 1
+#define LAPLACE_RADIUS 2
+#define EPSILON 1e-5f
+
void minmax(float x1, float x2, float x3,
float x4, float x5,
float *min_result,
@@ -99,9 +101,9 @@ kernel void pre_edgelaplace (global float4 *in,
fmax((maxval - pix_mm[c]),(pix_mm[c] - minval));
gradient[c] =
(pix_fl[c] + pix_fm[c] + pix_fr[c] +
- pix_ml[c] + pix_mr[c] + pix_bl[c] +
- pix_bm[c] + pix_br[c] - 8.0f * pix_mm[c]) >
- 0.0f ? gradient[c] : -1.0f * gradient[c];
+ pix_bm[c] - 8.0f * pix_mm[c]+ pix_br[c]
+ pix_ml[c] + pix_mr[c] + pix_bl[c] +) <
+ EPSILON ? -1.0f * gradient[c] : gradient[c];
}
gradient[3] = pix_mm[3];
diff --git a/opencl/edge-laplace.cl.h b/opencl/edge-laplace.cl.h
index bd12a34..d227c26 100644
--- a/opencl/edge-laplace.cl.h
+++ b/opencl/edge-laplace.cl.h
@@ -1,5 +1,7 @@
static const char* edge_laplace_cl_source =
-"#define LAPLACE_RADIUS 1 \n"
+"#define LAPLACE_RADIUS 2 \n"
+"#define EPSILON 1e-5f \n"
+" \n"
"void minmax(float x1, float x2, float x3, \n"
" float x4, float x5, \n"
" float *min_result, \n"
@@ -100,9 +102,9 @@ static const char* edge_laplace_cl_source =
" fmax((maxval - pix_mm[c]),(pix_mm[c] - minval)); \n"
" gradient[c] = \n"
" (pix_fl[c] + pix_fm[c] + pix_fr[c] + \n"
-" pix_ml[c] + pix_mr[c] + pix_bl[c] + \n"
-" pix_bm[c] + pix_br[c] - 8.0f * pix_mm[c]) > \n"
-" 0.0f ? gradient[c] : -1.0f * gradient[c]; \n"
+" pix_bm[c] - 8.0f * pix_mm[c]+ pix_br[c] \n"
+" pix_ml[c] + pix_mr[c] + pix_bl[c] +) < \n"
+" EPSILON ? -1.0f * gradient[c] : gradient[c]; \n"
" } \n"
" gradient[3] = pix_mm[3]; \n"
" \n"
diff --git a/operations/common/edge-laplace.c b/operations/common/edge-laplace.c
index 62b0e8a..f73f8b8 100644
--- a/operations/common/edge-laplace.c
+++ b/operations/common/edge-laplace.c
@@ -356,7 +356,7 @@ cl_process (GeglOperation *operation,
op_area->right,
op_area->top,
op_area->bottom,
- GEGL_ABYSS_NONE);
+ GEGL_ABYSS_CLAMP);
gint aux = gegl_buffer_cl_iterator_add_2 (i,
NULL,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]