[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32176] branches/particles-2010/source/ blender: Added access functions to socket buffer arguments for kernels.

Lukas Toenne lukas.toenne at googlemail.com
Tue Sep 28 14:38:49 CEST 2010


Revision: 32176
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32176
Author:   lukastoenne
Date:     2010-09-28 14:38:49 +0200 (Tue, 28 Sep 2010)

Log Message:
-----------
Added access functions to socket buffer arguments for kernels. The kernel struct now stores a set of function pointers for reading and writing items in the socket buffers, which are accessed by easy-to-use read/write functions from kernels.

Modified Paths:
--------------
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.h
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h
    branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_math.c

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-09-28 11:48:13 UTC (rev 32175)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-09-28 12:38:49 UTC (rev 32176)
@@ -113,16 +113,17 @@
 } bNodeSocket;
 
 /* sock->type */
-#define SOCK_VALUE		0
-#define SOCK_VECTOR		1
-#define SOCK_RGBA		2
+#define SOCK_VALUE			0
+#define SOCK_VECTOR			1
+#define SOCK_RGBA			2
 /* simulation sockets */
-#define SOCK_ANY		3
-#define SOCK_OP			4
-#define SOCK_BOOL		5
-#define SOCK_INT		6
-#define SOCK_FLOAT		7
-#define SOCK_STRING		8
+#define SOCK_ANY			3
+#define SOCK_OP				4
+#define SOCK_BOOL			5
+#define SOCK_INT			6
+#define SOCK_FLOAT			7
+#define SOCK_STRING			8
+#define MAX_SOCKET_TYPES	9	/* must be last! */
 
 /* sock->flag, first bit is select */
 	/* hidden is user defined, to hide unused */

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c	2010-09-28 11:48:13 UTC (rev 32175)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c	2010-09-28 12:38:49 UTC (rev 32176)
@@ -45,53 +45,6 @@
 
 #include "RNA_access.h"
 
-#ifdef WITH_OPENCL
-
-const char *cl_string_funcs = STRINGIFY(
-//size_t strlen(const char *str)
-//{
-//	const char *end= str;
-//	while (*end != '\0')
-//		++end;
-//	return (end - str);
-//}
-
-//char *strcpy(char *destination, const char *source)
-//{
-//	while (*source != '\0') {
-//		*destination = *source;
-//		++source;
-//		++destination;
-//	}
-//	*destination = '\0';
-//	return destination;
-//}
-);
-
-/* note: can't use stringify here because of precompiler definitions */
-const char *cl_socket_macros = 
-"#define CONVERT_FLOAT_FLOAT(x)		(x)\n"
-"#define CONVERT_FLOAT_INT(x)		(float)(x)\n"
-"#define CONVERT_FLOAT_BOOL(x)		(float)(x)\n"
-"#define CONVERT_INT_FLOAT(x)		(int)(x)\n"
-"#define CONVERT_INT_INT(x)			(x)\n"
-"#define CONVERT_INT_BOOL(x)		(int)(x)\n"
-"#define CONVERT_BOOL_FLOAT(x)		(char)((int)(x) % 2)\n"
-"#define CONVERT_BOOL_INT(x)		(char)((x) % 2)\n"
-"#define CONVERT_BOOL_BOOL(x)		(x)\n"
-"#define CONVERT_VECTOR_VECTOR(x)	(x)\n"
-"#define CONVERT_RGBA_RGBA(x)		(x)\n"
-"#define CONVERT_STRING_STRING(x)	(x)\n";
-
-const char *cl_socket_funcs = STRINGIFY(
-size_t get_socket_id(int size)
-{
-	return (get_global_id(0) % (size_t)size);
-}
-);
-
-#endif
-
 void sim_init_event(SimEvent *event)
 {
 	event->impl = MEM_callocN(sizeof(SimTaskEvent), "SimTaskEvent");

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.h
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.h	2010-09-28 11:48:13 UTC (rev 32175)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.h	2010-09-28 12:38:49 UTC (rev 32176)
@@ -59,11 +59,6 @@
 #include "SIM_util.h"
 
 
-/* common OpenCL helper functions */
-extern const char *cl_string_funcs;
-extern const char *cl_socket_funcs;
-extern const char *cl_socket_macros;
-
 struct SimExecData;
 
 typedef struct SimTaskEvent {

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c	2010-09-28 11:48:13 UTC (rev 32175)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c	2010-09-28 12:38:49 UTC (rev 32176)
@@ -46,6 +46,252 @@
 
 #include "RNA_access.h"
 
+
+#ifdef WITH_OPENCL
+
+const char *cl_string_funcs = STRINGIFY(
+//size_t strlen(const char *str)
+//{
+//	const char *end= str;
+//	while (*end != '\0')
+//		++end;
+//	return (end - str);
+//}
+
+//char *strcpy(char *destination, const char *source)
+//{
+//	while (*source != '\0') {
+//		*destination = *source;
+//		++source;
+//		++destination;
+//	}
+//	*destination = '\0';
+//	return destination;
+//}
+);
+
+/* note: can't use stringify here because of precompiler definitions */
+const char *cl_socket_macros = 
+"#define CONVERT_FLOAT_FLOAT(x)		(x)\n"
+"#define CONVERT_FLOAT_INT(x)		(float)(x)\n"
+"#define CONVERT_FLOAT_BOOL(x)		(float)(x)\n"
+"#define CONVERT_INT_FLOAT(x)		(int)(x)\n"
+"#define CONVERT_INT_INT(x)			(x)\n"
+"#define CONVERT_INT_BOOL(x)		(int)(x)\n"
+"#define CONVERT_BOOL_FLOAT(x)		(char)(x > 0.0f)\n"
+"#define CONVERT_BOOL_INT(x)		(char)(x > 0)\n"
+"#define CONVERT_BOOL_BOOL(x)		(x)\n"
+"#define CONVERT_VECTOR_VECTOR(x)	(x)\n"
+"#define CONVERT_RGBA_RGBA(x)		(x)\n"
+"#define CONVERT_STRING_STRING(x)	(x)\n";
+
+const char *cl_socket_funcs = STRINGIFY(
+size_t get_socket_id(int size)
+{
+	return (get_global_id(0) % (size_t)size);
+}
+);
+
+#endif
+
+static void read_float_from_float(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(float*)result = *(float*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg));
+}
+
+static void read_float_from_int(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(float*)result = (float)(*(int*)(*(char**)data_arg + SIM_ITEMSIZE_INT * (index % *(int*)size_arg)));
+}
+
+static void read_float_from_bool(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(float*)result = (float)(*(char*)(*(char**)data_arg + SIM_ITEMSIZE_BOOL * (index % *(int*)size_arg)));
+}
+
+static void read_int_from_float(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(int*)result = (int)(*(float*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg)));
+}
+
+static void read_int_from_int(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(int*)result = *(float*)(*(char**)data_arg + SIM_ITEMSIZE_INT * (index % *(int*)size_arg));
+}
+
+static void read_int_from_bool(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(int*)result = (int)(*(*(char**)data_arg + SIM_ITEMSIZE_BOOL * (index % *(int*)size_arg)));
+}
+
+static void read_bool_from_float(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(char*)result = (*(float*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg)) > 0.0f);
+}
+
+static void read_bool_from_int(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(char*)result = (*(int*)(*(char**)data_arg + SIM_ITEMSIZE_INT * (index % *(int*)size_arg)) > 0);
+}
+
+static void read_bool_from_bool(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(char*)result = *(char*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg));
+}
+
+static void read_vector_from_vector(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(float**)result = (float*)(*(char**)data_arg + SIM_ITEMSIZE_VECTOR * (index % *(int*)size_arg));
+}
+
+static void read_rgba_from_rgba(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(float**)result = (float*)(*(char**)data_arg + SIM_ITEMSIZE_RGBA * (index % *(int*)size_arg));
+}
+
+static void read_string_from_string(int index, void *data_arg, void *size_arg, void *result)
+{
+	*(char**)result = (char*)(*(char**)data_arg + SIM_ITEMSIZE_STRING * (index % *(int*)size_arg));
+}
+
+static SimBufferReadFunction find_read_function(int fromtype, int totype)
+{
+	switch (fromtype) {
+	case SOCK_FLOAT:
+		switch (totype) {
+		case SOCK_FLOAT:	return read_float_from_float;		break;
+		case SOCK_INT:		return read_int_from_float;		break;
+		case SOCK_BOOL:		return read_bool_from_float;		break;
+		}
+		break;
+	case SOCK_INT:
+		switch (totype) {
+		case SOCK_FLOAT:	return read_float_from_int;		break;
+		case SOCK_INT:		return read_int_from_int;		break;
+		case SOCK_BOOL:		return read_bool_from_int;		break;
+		}
+		break;
+	case SOCK_BOOL:
+		switch (totype) {
+		case SOCK_FLOAT:	return read_float_from_bool;		break;
+		case SOCK_INT:		return read_int_from_bool;		break;
+		case SOCK_BOOL:		return read_bool_from_bool;		break;
+		}
+		break;
+	case SOCK_VECTOR:
+		if (totype == SOCK_VECTOR)	return read_vector_from_vector;
+		break;
+	case SOCK_RGBA:
+		if (totype == SOCK_RGBA)	return read_rgba_from_rgba;
+		break;
+	case SOCK_STRING:
+		if (totype == SOCK_STRING)	return read_string_from_string;
+		break;
+	}
+	return NULL;
+}
+
+static void write_float_to_float(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(float*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg)) = *(float*)value;
+}
+
+static void write_float_to_int(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(int*)(*(char**)data_arg + SIM_ITEMSIZE_INT * (index % *(int*)size_arg)) = (int)(*(float*)value);
+}
+
+static void write_float_to_bool(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(char*)(*(char**)data_arg + SIM_ITEMSIZE_BOOL * (index % *(int*)size_arg)) = (*(float*)value > 0.0f);
+}
+
+static void write_int_to_float(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(float*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg)) = (float)(*(int*)value);
+}
+
+static void write_int_to_int(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(int*)(*(char**)data_arg + SIM_ITEMSIZE_INT * (index % *(int*)size_arg)) = *(int*)value;
+}
+
+static void write_int_to_bool(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(char*)(*(char**)data_arg + SIM_ITEMSIZE_BOOL * (index % *(int*)size_arg)) = (*(int*)value > 0);
+}
+
+static void write_bool_to_float(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(float*)(*(char**)data_arg + SIM_ITEMSIZE_FLOAT * (index % *(int*)size_arg)) = (float)(*(char*)value);
+}
+
+static void write_bool_to_int(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(int*)(*(char**)data_arg + SIM_ITEMSIZE_INT * (index % *(int*)size_arg)) = (int)(*(char*)value);
+}
+
+static void write_bool_to_bool(int index, void *data_arg, void *size_arg, void *value)
+{
+	*(char*)(*(char**)data_arg + SIM_ITEMSIZE_BOOL * (index % *(int*)size_arg)) = *(char*)value;
+}
+
+static void write_vector_to_vector(int index, void *data_arg, void *size_arg, void *value)
+{
+	copy_v3_v3((float*)(*(char**)data_arg + SIM_ITEMSIZE_VECTOR * (index % *(int*)size_arg)), *(float**)value);
+}
+
+static void write_rgba_to_rgba(int index, void *data_arg, void *size_arg, void *value)
+{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list