[gegl/soc-2013-opecl-ops] Changed data types in cl-random producing differences with gegl-random



commit 26fefe9d09a6c0ddb286c8b0c33a466090da0e82
Author: Carlos Zubieta <czubieta dev gmail com>
Date:   Mon Sep 9 18:16:45 2013 -0500

    Changed data types in cl-random producing differences with gegl-random

 opencl/random.cl   |   36 ++++++++++++++----------
 opencl/random.cl.h |   74 ++++++++++++++++++++++++++++------------------------
 2 files changed, 61 insertions(+), 49 deletions(-)
---
diff --git a/opencl/random.cl b/opencl/random.cl
index 86b4b3b..4b77774 100644
--- a/opencl/random.cl
+++ b/opencl/random.cl
@@ -22,9 +22,9 @@
 #define NPRIME     101111
 
 #define RANDOM_DATA_SIZE (15083+15091+15101)
-#define PRIME_SIZE 533
+#define PRIME_SIZE 533u
 
-static inline int
+static inline uint
 _gegl_cl_random_int (__global const int  *cl_random_data,
                      __global const long *cl_random_primes,
                      int                 seed,
@@ -40,16 +40,16 @@ _gegl_cl_random_int (__global const int  *cl_random_data,
     /* 3 rounds gives a reasonably high cycle for */
     /*   our synthesized larger random set. */
   unsigned long seed_idx = seed % (PRIME_SIZE - 1 - ROUNDS);
-  int prime0 = convert_int(cl_random_primes[seed_idx]),
-      prime1 = convert_int(cl_random_primes[seed_idx+1]),
-      prime2 = convert_int(cl_random_primes[seed_idx+2]);
+  int prime0 = cl_random_primes[seed_idx],
+      prime1 = cl_random_primes[seed_idx+1],
+      prime2 = cl_random_primes[seed_idx+2];
   int r0 = cl_random_data[idx % prime0],
       r1 = cl_random_data[prime0 + (idx % (prime1))],
       r2 = cl_random_data[prime0 + prime1 + (idx % (prime2))];
   return r0 ^ r1 ^ r2;
 }
 
-int
+uint
 gegl_cl_random_int (__global const int  *cl_random_data,
                     __global const long *cl_random_primes,
                     int                 seed,
@@ -73,8 +73,8 @@ gegl_cl_random_int_range (__global const int  *cl_random_data,
                           int                 min,
                           int                 max)
 {
-  int ret = _gegl_cl_random_int (cl_random_data, cl_random_primes,
-                                 seed, x, y, z, n);
+  uint ret = _gegl_cl_random_int (cl_random_data, cl_random_primes,
+                                  seed, x, y, z, n);
   return (ret % (max-min)) + min;
 }
 
@@ -109,12 +109,18 @@ gegl_cl_random_int4_range (__global const int  *cl_random_data,
                            int                 min,
                            int                 max)
 {
-  int4 ret = gegl_cl_random_int4 (cl_random_data, cl_random_primes,
-                                  seed, x, y, z, n);
-  return (ret % (max-min)) + min;
+  int r0 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,
+                                    seed, x, y, z, n, min, max);
+  int r1 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,
+                                    seed, x, y, z, n+1, min, max);
+  int r2 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,
+                                    seed, x, y, z, n+2, min, max);
+  int r3 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,
+                                    seed, x, y, z, n+3, min, max);
+  return (int4)(r0,r1,r2,r3);
 }
 
-#define G_RAND_FLOAT_TRANSFORM  0.00001525902189669642175f
+#define G_RAND_FLOAT_TRANSFORM  0.00001525902189669642175
 
 float
 gegl_cl_random_float (__global const int  *cl_random_data,
@@ -125,9 +131,9 @@ gegl_cl_random_float (__global const int  *cl_random_data,
                       int                 z,
                       int                 n)
 {
-  int u = _gegl_cl_random_int (cl_random_data, cl_random_primes,
-                               seed, x, y, z, n);
-  return convert_float(u & 0xffff) * G_RAND_FLOAT_TRANSFORM;
+  uint u = _gegl_cl_random_int (cl_random_data, cl_random_primes,
+                                seed, x, y, z, n);
+  return (u & 0xffff) * G_RAND_FLOAT_TRANSFORM;
 }
 
 float
diff --git a/opencl/random.cl.h b/opencl/random.cl.h
index d5b651d..1a5b946 100644
--- a/opencl/random.cl.h
+++ b/opencl/random.cl.h
@@ -1,31 +1,31 @@
+/* This file is part of GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2013 Carlos Zubieta (czubieta dev gmail com)
+ */
+
+/* XXX: this file should be kept in sync with gegl-random. */
 static const char* cl_random_source =
-"/* This file is part of GEGL                                                  \n"
-" *                                                                            \n"
-" * GEGL is free software; you can redistribute it and/or                      \n"
-" * modify it under the terms of the GNU Lesser General Public                 \n"
-" * License as published by the Free Software Foundation; either               \n"
-" * version 3 of the License, or (at your option) any later version.           \n"
-" *                                                                            \n"
-" * GEGL is distributed in the hope that it will be useful,                    \n"
-" * but WITHOUT ANY WARRANTY; without even the implied warranty of             \n"
-" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU          \n"
-" * Lesser General Public License for more details.                            \n"
-" *                                                                            \n"
-" * You should have received a copy of the GNU Lesser General Public           \n"
-" * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.       \n"
-" *                                                                            \n"
-" * Copyright 2013 Carlos Zubieta (czubieta dev gmail com)                     \n"
-" */                                                                           \n"
-"                                                                              \n"
-"/* XXX: this file should be kept in sync with gegl-random. */                 \n"
 "#define XPRIME     103423                                                     \n"
 "#define YPRIME     101359                                                     \n"
 "#define NPRIME     101111                                                     \n"
 "                                                                              \n"
 "#define RANDOM_DATA_SIZE (15083+15091+15101)                                  \n"
-"#define PRIME_SIZE 533                                                        \n"
+"#define PRIME_SIZE 533u                                                       \n"
 "                                                                              \n"
-"static inline int                                                             \n"
+"static inline uint                                                            \n"
 "_gegl_cl_random_int (__global const int  *cl_random_data,                     \n"
 "                     __global const long *cl_random_primes,                   \n"
 "                     int                 seed,                                \n"
@@ -41,16 +41,16 @@ static const char* cl_random_source =
 "    /* 3 rounds gives a reasonably high cycle for */                          \n"
 "    /*   our synthesized larger random set. */                                \n"
 "  unsigned long seed_idx = seed % (PRIME_SIZE - 1 - ROUNDS);                  \n"
-"  int prime0 = convert_int(cl_random_primes[seed_idx]),                       \n"
-"      prime1 = convert_int(cl_random_primes[seed_idx+1]),                     \n"
-"      prime2 = convert_int(cl_random_primes[seed_idx+2]);                     \n"
+"  int prime0 = cl_random_primes[seed_idx],                                    \n"
+"      prime1 = cl_random_primes[seed_idx+1],                                  \n"
+"      prime2 = cl_random_primes[seed_idx+2];                                  \n"
 "  int r0 = cl_random_data[idx % prime0],                                      \n"
 "      r1 = cl_random_data[prime0 + (idx % (prime1))],                         \n"
 "      r2 = cl_random_data[prime0 + prime1 + (idx % (prime2))];                \n"
 "  return r0 ^ r1 ^ r2;                                                        \n"
 "}                                                                             \n"
 "                                                                              \n"
-"int                                                                           \n"
+"uint                                                                          \n"
 "gegl_cl_random_int (__global const int  *cl_random_data,                      \n"
 "                    __global const long *cl_random_primes,                    \n"
 "                    int                 seed,                                 \n"
@@ -74,8 +74,8 @@ static const char* cl_random_source =
 "                          int                 min,                            \n"
 "                          int                 max)                            \n"
 "{                                                                             \n"
-"  int ret = _gegl_cl_random_int (cl_random_data, cl_random_primes,            \n"
-"                                 seed, x, y, z, n);                           \n"
+"  uint ret = _gegl_cl_random_int (cl_random_data, cl_random_primes,           \n"
+"                                  seed, x, y, z, n);                          \n"
 "  return (ret % (max-min)) + min;                                             \n"
 "}                                                                             \n"
 "                                                                              \n"
@@ -110,12 +110,18 @@ static const char* cl_random_source =
 "                           int                 min,                           \n"
 "                           int                 max)                           \n"
 "{                                                                             \n"
-"  int4 ret = gegl_cl_random_int4 (cl_random_data, cl_random_primes,           \n"
-"                                  seed, x, y, z, n);                          \n"
-"  return (ret % (max-min)) + min;                                             \n"
+"  int r0 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,         \n"
+"                                    seed, x, y, z, n, min, max);              \n"
+"  int r1 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,         \n"
+"                                    seed, x, y, z, n+1, min, max);            \n"
+"  int r2 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,         \n"
+"                                    seed, x, y, z, n+2, min, max);            \n"
+"  int r3 = gegl_cl_random_int_range(cl_random_data, cl_random_primes,         \n"
+"                                    seed, x, y, z, n+3, min, max);            \n"
+"  return (int4)(r0,r1,r2,r3);                                                 \n"
 "}                                                                             \n"
 "                                                                              \n"
-"#define G_RAND_FLOAT_TRANSFORM  0.00001525902189669642175f                    \n"
+"#define G_RAND_FLOAT_TRANSFORM  0.00001525902189669642175                     \n"
 "                                                                              \n"
 "float                                                                         \n"
 "gegl_cl_random_float (__global const int  *cl_random_data,                    \n"
@@ -126,9 +132,9 @@ static const char* cl_random_source =
 "                      int                 z,                                  \n"
 "                      int                 n)                                  \n"
 "{                                                                             \n"
-"  int u = _gegl_cl_random_int (cl_random_data, cl_random_primes,              \n"
-"                               seed, x, y, z, n);                             \n"
-"  return convert_float(u & 0xffff) * G_RAND_FLOAT_TRANSFORM;                  \n"
+"  uint u = _gegl_cl_random_int (cl_random_data, cl_random_primes,             \n"
+"                                seed, x, y, z, n);                            \n"
+"  return (u & 0xffff) * G_RAND_FLOAT_TRANSFORM;                               \n"
 "}                                                                             \n"
 "                                                                              \n"
 "float                                                                         \n"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]