[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