[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32998] branches/particles-2010/source/ blender/nodes/intern: Replaced the use of BLI random functions in the " Random" node by a straightforward pseudo-random number generation based on randomized arrays .

Lukas Toenne lukas.toenne at googlemail.com
Thu Nov 11 10:19:06 CET 2010


Revision: 32998
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32998
Author:   lukastoenne
Date:     2010-11-11 10:19:06 +0100 (Thu, 11 Nov 2010)

Log Message:
-----------
Replaced the use of BLI random functions in the "Random" node by a straightforward pseudo-random number generation based on randomized arrays. This is a thread-safe implementation (the arrays are constant), the disadvantage is that the static arrays (one for ints, one for floats) are rather large (65536 entries) and still have a much shorter period than "real" RNGs. An alternative would be using a separate RNG for each thread, but that requires passing thread info to kernel functions.

Modified Paths:
--------------
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_vectormath.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.h

Added Paths:
-----------
    branches/particles-2010/source/blender/nodes/intern/SIM_util_random.h

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c	2010-11-11 07:51:12 UTC (rev 32997)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c	2010-11-11 09:19:06 UTC (rev 32998)
@@ -104,19 +104,19 @@
 	}
 	return sim_kernel_source_end(source);
 }
-static void kernel_add_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_float(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = SIM_INPUT_FLOAT(0, global_id) + SIM_INPUT_FLOAT(1, global_id);
 }
-static void kernel_add_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_int(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_INT(0, global_id) = SIM_INPUT_INT(0, global_id) + SIM_INPUT_INT(1, global_id);
 }
-static void kernel_add_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	add_v3_v3v3(SIM_OUTPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(1, global_id));
 }
-static void kernel_add_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_add_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float *res=SIM_OUTPUT_RGBA(0, global_id);
 	const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -201,19 +201,19 @@
 	}
 	return sim_kernel_source_end(source);
 }
-static void kernel_subtract_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_float(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = SIM_INPUT_FLOAT(0, global_id) - SIM_INPUT_FLOAT(1, global_id);
 }
-static void kernel_subtract_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_int(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_INT(0, global_id) = SIM_INPUT_INT(0, global_id) - SIM_INPUT_INT(1, global_id);
 }
-static void kernel_subtract_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	sub_v3_v3v3(SIM_OUTPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(1, global_id));
 }
-static void kernel_subtract_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_subtract_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float *res=SIM_OUTPUT_RGBA(0, global_id);
 	const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -298,19 +298,19 @@
 	}
 	return sim_kernel_source_end(source);
 }
-static void kernel_multiply_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_float(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = SIM_INPUT_FLOAT(0, global_id) * SIM_INPUT_FLOAT(1, global_id);
 }
-static void kernel_multiply_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_int(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_INT(0, global_id) = SIM_INPUT_INT(0, global_id) * SIM_INPUT_INT(1, global_id);
 }
-static void kernel_multiply_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	mul_v3_v3v3(SIM_OUTPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(0, global_id), SIM_INPUT_VECTOR(1, global_id));
 }
-static void kernel_multiply_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_multiply_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float *res=SIM_OUTPUT_RGBA(0, global_id);
 	const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -400,15 +400,15 @@
 	}
 	return sim_kernel_source_end(source);
 }
-static void kernel_divide_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_float(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = (SIM_INPUT_FLOAT(1, global_id) != 0.0f ? SIM_INPUT_FLOAT(0, global_id) / SIM_INPUT_FLOAT(1, global_id) : 0.0f);
 }
-static void kernel_divide_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_int(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_INT(0, global_id) = (SIM_INPUT_INT(1, global_id) != 0 ? SIM_INPUT_INT(0, global_id) / SIM_INPUT_INT(1, global_id) : 0);
 }
-static void kernel_divide_vector(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_vector(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float *res=SIM_OUTPUT_VECTOR(0, global_id);
 	const float *a=SIM_INPUT_VECTOR(0, global_id);
@@ -417,7 +417,7 @@
 	res[1] = (b[1] != 0.0f ? a[1] / b[1] : 0.0f);
 	res[2] = (b[2] != 0.0f ? a[2] / b[2] : 0.0f);
 }
-static void kernel_divide_rgba(int global_id, void **args, SimNodeStack *node)
+static void kernel_divide_rgba(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float *res=SIM_OUTPUT_RGBA(0, global_id);
 	const float *a=SIM_INPUT_RGBA(0, global_id);
@@ -486,7 +486,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_sine(int global_id, void **args, SimNodeStack *node)
+static void kernel_sine(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = sin(SIM_INPUT_FLOAT(0, global_id));
 }
@@ -534,7 +534,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_cosine(int global_id, void **args, SimNodeStack *node)
+static void kernel_cosine(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = cos(SIM_INPUT_FLOAT(0, global_id));
 }
@@ -582,7 +582,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_tangent(int global_id, void **args, SimNodeStack *node)
+static void kernel_tangent(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = tan(SIM_INPUT_FLOAT(0, global_id));
 }
@@ -631,7 +631,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_arcsine(int global_id, void **args, SimNodeStack *node)
+static void kernel_arcsine(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float x = SIM_INPUT_FLOAT(0, global_id);
 	*SIM_OUTPUT_FLOAT(0, global_id) = (x <= 1.0f && x >= -1.0f ? asin(x) : 0.0f);
@@ -681,7 +681,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_arccosine(int global_id, void **args, SimNodeStack *node)
+static void kernel_arccosine(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float x = SIM_INPUT_FLOAT(0, global_id);
 	*SIM_OUTPUT_FLOAT(0, global_id) = (x <= 1.0f && x >= -1.0f ? acos(x) : 0.0f);
@@ -730,7 +730,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_arctangent(int global_id, void **args, SimNodeStack *node)
+static void kernel_arctangent(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_FLOAT(0, global_id) = atan(SIM_INPUT_FLOAT(0, global_id));
 }
@@ -783,7 +783,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_power(int global_id, void **args, SimNodeStack *node)
+static void kernel_power(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float x = SIM_INPUT_FLOAT(0, global_id);
 	*SIM_OUTPUT_FLOAT(0, global_id) = (x >= 0.0f ? pow(x, SIM_INPUT_FLOAT(1, global_id)) : 0.0f);
@@ -834,7 +834,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_logarithm(int global_id, void **args, SimNodeStack *node)
+static void kernel_logarithm(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float x = SIM_INPUT_FLOAT(0, global_id);
 	float y = SIM_INPUT_FLOAT(1, global_id);
@@ -902,13 +902,13 @@
 	}
 	return sim_kernel_source_end(source);
 }
-static void kernel_minimum_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_minimum_float(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float a = SIM_INPUT_FLOAT(0, global_id);
 	float b = SIM_INPUT_FLOAT(1, global_id);
 	*SIM_OUTPUT_FLOAT(0, global_id) = (a < b ? a : b);
 }
-static void kernel_minimum_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_minimum_int(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	int a = SIM_INPUT_INT(0, global_id);
 	int b = SIM_INPUT_INT(1, global_id);
@@ -982,13 +982,13 @@
 	}
 	return sim_kernel_source_end(source);
 }
-static void kernel_maximum_float(int global_id, void **args, SimNodeStack *node)
+static void kernel_maximum_float(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	float a = SIM_INPUT_FLOAT(0, global_id);
 	float b = SIM_INPUT_FLOAT(1, global_id);
 	*SIM_OUTPUT_FLOAT(0, global_id) = (a > b ? a : b);
 }
-static void kernel_maximum_int(int global_id, void **args, SimNodeStack *node)
+static void kernel_maximum_int(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	int a = SIM_INPUT_INT(0, global_id);
 	int b = SIM_INPUT_INT(1, global_id);
@@ -1048,7 +1048,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_round(int global_id, void **args, SimNodeStack *node)
+static void kernel_round(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_INT(0, global_id) = (int)(SIM_INPUT_FLOAT(0, global_id) + 0.5f);
 }
@@ -1096,7 +1096,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_lessthan(int global_id, void **args, SimNodeStack *node)
+static void kernel_lessthan(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_BOOL(0, global_id) = (SIM_INPUT_FLOAT(0, global_id) < SIM_INPUT_FLOAT(1, global_id));
 }
@@ -1144,7 +1144,7 @@
 		));
 	return sim_kernel_source_end(source);
 }
-static void kernel_greaterthan(int global_id, void **args, SimNodeStack *node)
+static void kernel_greaterthan(int global_id, void **UNUSED(args), SimNodeStack *node)
 {
 	*SIM_OUTPUT_BOOL(0, global_id) = (SIM_INPUT_FLOAT(0, global_id) > SIM_INPUT_FLOAT(1, global_id));
 }

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_random.c	2010-11-11 07:51:12 UTC (rev 32997)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list