diff options
author | Carlos Zubieta <czubieta.dev@gmail.com> | 2013-09-06 15:30:51 -0500 |
---|---|---|
committer | Téo Mazars <teo.mazars@ensimag.fr> | 2013-10-31 11:41:44 +0100 |
commit | e8565879d62b6068e7e97420c61c146ea6589685 (patch) | |
tree | 4ea79f76b7bffa2493bf714836d168659f1f4704 /opencl | |
parent | 56d4ffae24cf3e8d91712fecabbfc292e07bb263 (diff) |
Fixing random.cl path error and making it available for all the kernels
Diffstat (limited to 'opencl')
-rw-r--r-- | opencl/random.cl (renamed from opencl/random.h) | 4 | ||||
-rw-r--r-- | opencl/random.cl.h | 186 |
2 files changed, 188 insertions, 2 deletions
diff --git a/opencl/random.h b/opencl/random.cl index fa892460..86b4b3b6 100644 --- a/opencl/random.h +++ b/opencl/random.cl @@ -145,7 +145,7 @@ gegl_cl_random_float_range (__global const int *cl_random_data, seed, x, y, z, n); return f * (max - min) + min; } - +/* float4 gegl_cl_random_float4 (__global const int *cl_random_data, __global const long *cl_random_primes, @@ -181,4 +181,4 @@ gegl_cl_random_float4_range (__global const int *cl_random_data, seed, x, y, z, n); return f4 * (float4)((max - min) + min); } - +*/ diff --git a/opencl/random.cl.h b/opencl/random.cl.h new file mode 100644 index 00000000..d5b651d3 --- /dev/null +++ b/opencl/random.cl.h @@ -0,0 +1,186 @@ +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" +" \n" +"static inline int \n" +"_gegl_cl_random_int (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" int z, \n" +" int n) \n" +"{ \n" +" unsigned long idx = x * XPRIME + \n" +" y * YPRIME * XPRIME + \n" +" n * NPRIME * YPRIME * XPRIME; \n" +"#define ROUNDS 3 \n" +" /* 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 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" +"gegl_cl_random_int (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" int z, \n" +" int n) \n" +"{ \n" +" return _gegl_cl_random_int (cl_random_data, cl_random_primes, \n" +" seed, x, y, z, n); \n" +"} \n" +" \n" +"int \n" +"gegl_cl_random_int_range (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" int z, \n" +" int n, \n" +" 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" +" return (ret % (max-min)) + min; \n" +"} \n" +" \n" +"int4 \n" +"gegl_cl_random_int4 (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" int z, \n" +" int n) \n" +"{ \n" +" int r0 = _gegl_cl_random_int(cl_random_data, cl_random_primes, \n" +" seed, x, y, z, n); \n" +" int r1 = _gegl_cl_random_int(cl_random_data, cl_random_primes, \n" +" seed, x, y, z, n+1); \n" +" int r2 = _gegl_cl_random_int(cl_random_data, cl_random_primes, \n" +" seed, x, y, z, n+2); \n" +" int r3 = _gegl_cl_random_int(cl_random_data, cl_random_primes, \n" +" seed, x, y, z, n+3); \n" +" return (int4)(r0, r1, r2, r3); \n" +"} \n" +" \n" +"int4 \n" +"gegl_cl_random_int4_range (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" int z, \n" +" int n, \n" +" 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" +"} \n" +" \n" +"#define G_RAND_FLOAT_TRANSFORM 0.00001525902189669642175f \n" +" \n" +"float \n" +"gegl_cl_random_float (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" 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" +"} \n" +" \n" +"float \n" +"gegl_cl_random_float_range (__global const int *cl_random_data, \n" +" __global const long *cl_random_primes, \n" +" int seed, \n" +" int x, \n" +" int y, \n" +" int z, \n" +" int n, \n" +" float min, \n" +" float max) \n" +"{ \n" +" float f = gegl_cl_random_float (cl_random_data, cl_random_primes, \n" +" seed, x, y, z, n); \n" +" return f * (max - min) + min; \n" +"} \n" +; +/* +float4 +gegl_cl_random_float4 (__global const int *cl_random_data, + __global const long *cl_random_primes, + int seed, + int x, + int y, + int z, + int n) +{ + float r0 = gegl_cl_random_float(cl_random_data, cl_random_primes, + seed x, y, z, n); + float r1 = gegl_cl_random_float(cl_random_data, cl_random_primes, + seed x, y, z, n+1); + float r2 = gegl_cl_random_float(cl_random_data, cl_random_primes, + seed x, y, z, n+2); + float r3 = gegl_cl_random_float(cl_random_data, cl_random_primes, + seed x, y, z, n+3); + return (float4)(r0, r1, r2, r3); +} + +float4 +gegl_cl_random_float4_range (__global const int *cl_random_data, + __global const long *cl_random_primes, + int seed, + int x, + int y, + int z, + int n, + float min, + float max) +{ + float4 f = gegl_cl_random_float4 (cl_random_data, cl_random_primes, + seed, x, y, z, n); + return f4 * (float4)((max - min) + min); +} +*/ |