[gegl] missing files in previous commit
- From: Victor Matheus de Araujo Oliveira <vmaolive src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] missing files in previous commit
- Date: Wed, 5 Jun 2013 01:58:19 +0000 (UTC)
commit 34f048852a9077015c67b9513d6d67a4517a9071
Author: Victor Oliveira <victormatheus gmail com>
Date: Tue Jun 4 22:57:39 2013 -0300
missing files in previous commit
opencl/edge-laplace.cl.h | 182 ++++++++++++++++++++++++++++++++++++++++++++++
opencl/edge-sobel.cl.h | 73 ++++++++++++++++++
2 files changed, 255 insertions(+), 0 deletions(-)
---
diff --git a/opencl/edge-laplace.cl.h b/opencl/edge-laplace.cl.h
new file mode 100644
index 0000000..bd12a34
--- /dev/null
+++ b/opencl/edge-laplace.cl.h
@@ -0,0 +1,182 @@
+static const char* edge_laplace_cl_source =
+"#define LAPLACE_RADIUS 1 \n"
+"void minmax(float x1, float x2, float x3, \n"
+" float x4, float x5, \n"
+" float *min_result, \n"
+" float *max_result) \n"
+"{ \n"
+" float min1, min2, max1, max2; \n"
+" \n"
+" if (x1 > x2) \n"
+" { \n"
+" max1 = x1; \n"
+" min1 = x2; \n"
+" } \n"
+" else \n"
+" { \n"
+" max1 = x2; \n"
+" min1 = x1; \n"
+" } \n"
+" \n"
+" if (x3 > x4) \n"
+" { \n"
+" max2 = x3; \n"
+" min2 = x4; \n"
+" } \n"
+" else \n"
+" { \n"
+" max2 = x4; \n"
+" min2 = x3; \n"
+" } \n"
+" \n"
+" if (min1 < min2) \n"
+" *min_result = fmin(min1, x5); \n"
+" else \n"
+" *min_result = fmin(min2, x5); \n"
+" if (max1 > max2) \n"
+" *max_result = fmax(max1, x5); \n"
+" else \n"
+" *max_result = fmax(max2, x5); \n"
+"} \n"
+" \n"
+"kernel void pre_edgelaplace (global float4 *in, \n"
+" global float4 *out) \n"
+"{ \n"
+" int gidx = get_global_id(0); \n"
+" int gidy = get_global_id(1); \n"
+" \n"
+" int src_width = get_global_size(0) + LAPLACE_RADIUS * 2; \n"
+" int src_height = get_global_size(1); \n"
+" \n"
+" int i = gidx + LAPLACE_RADIUS, j = gidy + LAPLACE_RADIUS; \n"
+" int gid1d = i + j * src_width; \n"
+" \n"
+" float pix_fl[4] = { \n"
+" in[gid1d - 1 - src_width].x, in[gid1d - 1 - src_width].y, \n"
+" in[gid1d - 1 - src_width].z, in[gid1d - 1 - src_width].w \n"
+" }; \n"
+" float pix_fm[4] = { \n"
+" in[gid1d - src_width].x, in[gid1d - src_width].y, \n"
+" in[gid1d - src_width].z, in[gid1d - src_width].w \n"
+" }; \n"
+" float pix_fr[4] = { \n"
+" in[gid1d + 1 - src_width].x, in[gid1d + 1 - src_width].y, \n"
+" in[gid1d + 1 - src_width].z, in[gid1d + 1 - src_width].w \n"
+" }; \n"
+" float pix_ml[4] = { \n"
+" in[gid1d - 1 ].x, in[gid1d - 1 ].y, \n"
+" in[gid1d - 1 ].z, in[gid1d - 1 ].w \n"
+" }; \n"
+" float pix_mm[4] = { \n"
+" in[gid1d ].x, in[gid1d ].y, \n"
+" in[gid1d ].z, in[gid1d ].w \n"
+" }; \n"
+" float pix_mr[4] = { \n"
+" in[gid1d + 1 ].x, in[gid1d + 1 ].y, \n"
+" in[gid1d + 1 ].z, in[gid1d + 1 ].w \n"
+" }; \n"
+" float pix_bl[4] = { \n"
+" in[gid1d - 1 + src_width].x, in[gid1d - 1 + src_width].y, \n"
+" in[gid1d - 1 + src_width].z, in[gid1d - 1 + src_width].w \n"
+" }; \n"
+" float pix_bm[4] = { \n"
+" in[gid1d + src_width].x, in[gid1d + src_width].y, \n"
+" in[gid1d + src_width].z, in[gid1d + src_width].w \n"
+" }; \n"
+" float pix_br[4] = { \n"
+" in[gid1d + 1 + src_width].x, in[gid1d + 1 + src_width].y, \n"
+" in[gid1d + 1 + src_width].z, in[gid1d + 1 + src_width].w \n"
+" }; \n"
+" \n"
+" int c; \n"
+" float minval, maxval; \n"
+" float gradient[4]; \n"
+" \n"
+" for (c = 0;c < 3; ++c) \n"
+" { \n"
+" minmax(pix_fm[c], pix_bm[c], pix_ml[c], pix_mr[c], \n"
+" pix_mm[c], &minval, &maxval); \n"
+" gradient[c] = 0.5f * \n"
+" 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"
+" } \n"
+" gradient[3] = pix_mm[3]; \n"
+" \n"
+" out[gid1d] = (float4) \n"
+" (gradient[0], gradient[1], gradient[2], gradient[3]); \n"
+"} \n"
+" \n"
+"kernel void knl_edgelaplace (global float4 *in, \n"
+" global float4 *out) \n"
+"{ \n"
+" int gidx = get_global_id(0); \n"
+" int gidy = get_global_id(1); \n"
+" \n"
+" int src_width = get_global_size(0) + LAPLACE_RADIUS * 2; \n"
+" int src_height = get_global_size(1); \n"
+" \n"
+" int i = gidx + LAPLACE_RADIUS, j = gidy + LAPLACE_RADIUS; \n"
+" int gid1d = i + j * src_width; \n"
+" \n"
+" float pix_fl[4] = { \n"
+" in[gid1d - 1 - src_width].x, in[gid1d - 1 - src_width].y, \n"
+" in[gid1d - 1 - src_width].z, in[gid1d - 1 - src_width].w \n"
+" }; \n"
+" float pix_fm[4] = { \n"
+" in[gid1d - src_width].x, in[gid1d - src_width].y, \n"
+" in[gid1d - src_width].z, in[gid1d - src_width].w \n"
+" }; \n"
+" float pix_fr[4] = { \n"
+" in[gid1d + 1 - src_width].x, in[gid1d + 1 - src_width].y, \n"
+" in[gid1d + 1 - src_width].z, in[gid1d + 1 - src_width].w \n"
+" }; \n"
+" float pix_ml[4] = { \n"
+" in[gid1d - 1 ].x, in[gid1d - 1 ].y, \n"
+" in[gid1d - 1 ].z, in[gid1d - 1 ].w \n"
+" }; \n"
+" float pix_mm[4] = { \n"
+" in[gid1d ].x, in[gid1d ].y, \n"
+" in[gid1d ].z, in[gid1d ].w \n"
+" }; \n"
+" float pix_mr[4] = { \n"
+" in[gid1d + 1 ].x, in[gid1d + 1 ].y, \n"
+" in[gid1d + 1 ].z, in[gid1d + 1 ].w \n"
+" }; \n"
+" float pix_bl[4] = { \n"
+" in[gid1d - 1 + src_width].x, in[gid1d - 1 + src_width].y, \n"
+" in[gid1d - 1 + src_width].z, in[gid1d - 1 + src_width].w \n"
+" }; \n"
+" float pix_bm[4] = { \n"
+" in[gid1d + src_width].x, in[gid1d + src_width].y, \n"
+" in[gid1d + src_width].z, in[gid1d + src_width].w \n"
+" }; \n"
+" float pix_br[4] = { \n"
+" in[gid1d + 1 + src_width].x, in[gid1d + 1 + src_width].y, \n"
+" in[gid1d + 1 + src_width].z, in[gid1d + 1 + src_width].w \n"
+" }; \n"
+" \n"
+" int c; \n"
+" float value[4]; \n"
+" \n"
+" for (c = 0;c < 3; ++c) \n"
+" { \n"
+" float current = pix_mm[c]; \n"
+" current = \n"
+" ((current > 0.0f) && \n"
+" (pix_fl[c] < 0.0f || pix_fm[c] < 0.0f || \n"
+" pix_fr[c] < 0.0f || pix_ml[c] < 0.0f || \n"
+" pix_mr[c] < 0.0f || pix_bl[c] < 0.0f || \n"
+" pix_bm[c] < 0.0f || pix_br[c] < 0.0f ) \n"
+" ) ? current : 0.0f; \n"
+" value[c] = current; \n"
+" } \n"
+" value[3] = pix_mm[3]; \n"
+" \n"
+" out[gidx + gidy * get_global_size(0)] = (float4) \n"
+" (value[0], value[1], value[2], value[3]); \n"
+"} \n"
+;
diff --git a/opencl/edge-sobel.cl.h b/opencl/edge-sobel.cl.h
new file mode 100644
index 0000000..6f1816b
--- /dev/null
+++ b/opencl/edge-sobel.cl.h
@@ -0,0 +1,73 @@
+static const char* edge_sobel_cl_source =
+"#define SOBEL_RADIUS 1 \n"
+"kernel void kernel_edgesobel(global float4 *in, \n"
+" global float4 *out, \n"
+" const int horizontal, \n"
+" const int vertical, \n"
+" const int keep_signal, \n"
+" const int has_alpha) \n"
+"{ \n"
+" int gidx = get_global_id(0); \n"
+" int gidy = get_global_id(1); \n"
+" \n"
+" float4 hor_grad = 0.0f; \n"
+" float4 ver_grad = 0.0f; \n"
+" float4 gradient = 0.0f; \n"
+" \n"
+" int dst_width = get_global_size(0); \n"
+" int src_width = dst_width + SOBEL_RADIUS * 2; \n"
+" \n"
+" int i = gidx + SOBEL_RADIUS, j = gidy + SOBEL_RADIUS; \n"
+" int gid1d = i + j * src_width; \n"
+" \n"
+" float4 pix_fl = in[gid1d - 1 - src_width]; \n"
+" float4 pix_fm = in[gid1d - src_width]; \n"
+" float4 pix_fr = in[gid1d + 1 - src_width]; \n"
+" float4 pix_ml = in[gid1d - 1 ]; \n"
+" float4 pix_mm = in[gid1d ]; \n"
+" float4 pix_mr = in[gid1d + 1 ]; \n"
+" float4 pix_bl = in[gid1d - 1 + src_width]; \n"
+" float4 pix_bm = in[gid1d + src_width]; \n"
+" float4 pix_br = in[gid1d + 1 + src_width]; \n"
+" \n"
+" if (horizontal) \n"
+" { \n"
+" hor_grad += \n"
+" - 1.0f * pix_fl + 1.0f * pix_fr \n"
+" - 2.0f * pix_ml + 2.0f * pix_mr \n"
+" - 1.0f * pix_bl + 1.0f * pix_br; \n"
+" } \n"
+" if (vertical) \n"
+" { \n"
+" ver_grad += \n"
+" - 1.0f * pix_fl - 2.0f * pix_fm \n"
+" - 1.0f * pix_fr + 1.0f * pix_bl \n"
+" + 2.0f * pix_bm + 1.0f * pix_br; \n"
+" } \n"
+" \n"
+" if (horizontal && vertical) \n"
+" { \n"
+" gradient = sqrt( \n"
+" hor_grad * hor_grad + \n"
+" ver_grad * ver_grad) / 1.41f; \n"
+" } \n"
+" else \n"
+" { \n"
+" if (keep_signal) \n"
+" gradient = hor_grad + ver_grad; \n"
+" else \n"
+" gradient = fabs(hor_grad + ver_grad); \n"
+" } \n"
+" \n"
+" if (has_alpha) \n"
+" { \n"
+" gradient.w = pix_mm.w; \n"
+" } \n"
+" else \n"
+" { \n"
+" gradient.w = 1.0f; \n"
+" } \n"
+" \n"
+" out[gidx + gidy * dst_width] = gradient; \n"
+"} \n"
+;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]