[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31845] branches/particles-2010/source/ blender: Fixed RNA type saving/loading for GetData/ SetData nodes by storing the identifier string and restoring the pointer from that .

Lukas Toenne lukas.toenne at googlemail.com
Thu Sep 9 17:40:55 CEST 2010


Revision: 31845
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31845
Author:   lukastoenne
Date:     2010-09-09 17:40:55 +0200 (Thu, 09 Sep 2010)

Log Message:
-----------
Fixed RNA type saving/loading for GetData/SetData nodes by storing the identifier string and restoring the pointer from that. Need to do the same for properties associated to their sockets.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/BKE_opencl.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/blenkernel/intern/opencl.c
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/blenloader/intern/writefile.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_if.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_program.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.h
    branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-09-09 14:22:03 UTC (rev 31844)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-09-09 15:40:55 UTC (rev 31845)
@@ -115,6 +115,9 @@
 
 	/* called when the node is updated (e.g. linked) in the editor. */
 	void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node);
+	void (*initsocketfunc)(struct bNodeSocket *sock);
+	void (*copysocketstoragefunc)(struct bNodeSocket *from, struct bNodeSocket *to);
+	void (*freesocketstoragefunc)(struct bNodeSocket *sock);
 
 	/* simulation nodes */
 	const char *cl_source;
@@ -571,7 +574,7 @@
 int simnode_setdata_property_valid(struct bNode *node, struct PropertyRNA *prop);
 void simnode_setdata_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
 
-int simnode_convert_rna_property(struct PropertyRNA *prop);
+void simnode_rna_property_convert(struct PropertyRNA *prop, int *r_type, float r_default[4], float *r_min, float *r_max);
 
 /**/
 

Modified: branches/particles-2010/source/blender/blenkernel/BKE_opencl.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_opencl.h	2010-09-09 14:22:03 UTC (rev 31844)
+++ branches/particles-2010/source/blender/blenkernel/BKE_opencl.h	2010-09-09 15:40:55 UTC (rev 31845)
@@ -1,5 +1,6 @@
 #ifndef BKE_OPENCL_H
 #define BKE_OPENCL_H
+
 #ifdef WITH_OPENCL
 
 #if defined(__APPLE__) || defined(__MACOSX)
@@ -8,8 +9,6 @@
 #include <CL/opencl.h>
 #endif
 
-#define OPENCL_STRINGIFY(A) #A
-
 int BKE_opencl_init();
 void BKE_opencl_deinit();
 
@@ -30,7 +29,8 @@
   */
 char *BKE_opencl_message(cl_int err);
 
-void BKE_opencl_preferred(cl_context *context, cl_device_id *device, cl_command_queue *queue);
+cl_context BKE_opencl_preferred_context();
+cl_device_id BKE_opencl_preferred_device();
 
 cl_program BKE_opencl_build_source(cl_context context, const char* source, cl_int *resultcode);
 
@@ -58,6 +58,10 @@
 void BKE_opencl_performance_print(OpenCLPerformance *performance, const char* title);
 
 void BKE_opencl_meminfo_print(cl_mem mem);
+void BKE_opencl_contextinfo_print(cl_context ctx);
 
 #endif
+
+#define STRINGIFY(A) #A
+
 #endif

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-09-09 14:22:03 UTC (rev 31844)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-09-09 15:40:55 UTC (rev 31845)
@@ -147,7 +147,7 @@
 	if (type == SOCK_ANY)
 		sock->flag |= SOCK_ADAPT_TYPE;
 	sock->flag |= SOCK_ADAPT_CONTEXT;
-	sock->nodedata = NULL;
+	sock->storage = NULL;
 	
 	sock->to_index= 0;
 	sock->tonode= NULL;
@@ -167,12 +167,16 @@
 {
 	bNodeSocket *sock = make_socket(1, name, type, default_value, min, max);
 	BLI_addtail(&node->inputs, sock);
+	if (node->typeinfo->initsocketfunc)
+		node->typeinfo->initsocketfunc(sock);
 	return sock;
 }
 bNodeSocket *nodeAddOutputSocket(bNode *node, const char *name, int type, float *default_value, float min, float max)
 {
 	bNodeSocket *sock = make_socket(0, name, type, default_value, min, max);
 	BLI_addtail(&node->outputs, sock);
+	if (node->typeinfo->initsocketfunc)
+		node->typeinfo->initsocketfunc(sock);
 	return sock;
 }
 
@@ -180,12 +184,16 @@
 {
 	bNodeSocket *sock = make_socket(1, name, type, default_value, min, max);
 	BLI_insertlinkbefore(&node->inputs, next_sock, sock);
+	if (node->typeinfo->initsocketfunc)
+		node->typeinfo->initsocketfunc(sock);
 	return sock;
 }
 bNodeSocket *nodeInsertOutputSocket(bNode *node, bNodeSocket *next_sock, const char *name, int type, float *default_value, float min, float max)
 {
 	bNodeSocket *sock = make_socket(0, name, type, default_value, min, max);
 	BLI_insertlinkbefore(&node->outputs, next_sock, sock);
+	if (node->typeinfo->initsocketfunc)
+		node->typeinfo->initsocketfunc(sock);
 	return sock;
 }
 
@@ -193,6 +201,9 @@
 {
 	bNodeLink *link, *next;
 	
+	if (node->typeinfo->freesocketstoragefunc)
+		node->typeinfo->freesocketstoragefunc(sock);
+	
 	for(link= ntree->links.first; link; link= next) {
 		next= link->next;
 		if(link->tosock==sock) {
@@ -207,6 +218,9 @@
 {
 	bNodeLink *link, *next;
 	
+	if (node->typeinfo->freesocketstoragefunc)
+		node->typeinfo->freesocketstoragefunc(sock);
+	
 	for(link= ntree->links.first; link; link= next) {
 		next= link->next;
 		if(link->fromsock==sock) {
@@ -220,7 +234,15 @@
 void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node)
 {
 	bNodeLink *link, *next;
+	bNodeSocket *sock;
 	
+	if (node->typeinfo->freesocketstoragefunc) {
+		for (sock=node->inputs.first; sock; sock = sock->next)
+			node->typeinfo->freesocketstoragefunc(sock);
+		for (sock=node->outputs.first; sock; sock = sock->next)
+			node->typeinfo->freesocketstoragefunc(sock);
+	}
+	
 	for(link= ntree->links.first; link; link= next) {
 		next= link->next;
 		if(link->fromnode==node || link->tonode==node) {
@@ -877,18 +899,24 @@
 	oldsock= node->inputs.first;
 	for(sock= nnode->inputs.first; sock; sock= sock->next, oldsock= oldsock->next) {
 		oldsock->new_sock= sock;
+		sock->stack_index= 0;
+		sock->ns.data= NULL;
 		if(internal)
 			sock->own_index= 0;
+		
+		if (node->typeinfo->copysocketstoragefunc)
+			node->typeinfo->copysocketstoragefunc(oldsock, sock);
 	}
 	
 	BLI_duplicatelist(&nnode->outputs, &node->outputs);
 	oldsock= node->outputs.first;
 	for(sock= nnode->outputs.first; sock; sock= sock->next, oldsock= oldsock->next) {
+		oldsock->new_sock= sock;
 		if(internal)
 			sock->own_index= 0;
-		sock->stack_index= 0;
-		sock->ns.data= NULL;
-		oldsock->new_sock= sock;
+		
+		if (node->typeinfo->copysocketstoragefunc)
+			node->typeinfo->copysocketstoragefunc(oldsock, sock);
 	}
 	
 	/* don't increase node->id users, freenode doesn't decrement either */

Modified: branches/particles-2010/source/blender/blenkernel/intern/opencl.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/opencl.c	2010-09-09 14:22:03 UTC (rev 31844)
+++ branches/particles-2010/source/blender/blenkernel/intern/opencl.c	2010-09-09 15:40:55 UTC (rev 31845)
@@ -2,13 +2,16 @@
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
+
 #include "BKE_opencl.h"
+
+#include "MEM_guardedalloc.h"
+
 #ifdef WITH_OPENCL
 
-int OPENCL_ENABLED=0;
-cl_device_id preferred_device;
-cl_context preferred_context;
-cl_command_queue preferred_command_queue;
+static int OPENCL_ENABLED=0;
+static cl_device_id preferred_device;
+static cl_context preferred_context;
 
 char *BKE_opencl_message(cl_int err) {
     switch (err) {
@@ -62,6 +65,11 @@
     }
 } 
 
+static void error_callback(const char *errinfo, const void *private_info, size_t cb, void *user_data)
+{
+	printf("OpenCL error: %s\n", errinfo);
+}
+
 int BKE_opencl_init() {
 	cl_platform_id *platforms;
 	cl_device_id *devices;
@@ -87,51 +95,50 @@
 	
 	result = clGetPlatformIDs(0, NULL, &numPlatforms);
 	if (numPlatforms == 0)
-	{
-		return -1;
-	}
-	platforms = (cl_platform_id*)malloc(sizeof (cl_platform_id)*numPlatforms);
-	result = clGetPlatformIDs(numPlatforms, platforms, 0);
+		return 0;
+	
+	platforms = MEM_callocN(numPlatforms*sizeof(cl_platform_id), "OpenCL platforms");
+	result = clGetPlatformIDs(numPlatforms, platforms, NULL);
 	for (platformIndex = 0 ; platformIndex <numPlatforms ; platformIndex ++) {
 		cl_platform_id platform = platforms[platformIndex];
+		
 		clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &numDevices);
-		if (numDevices!=0) {
-			devices = (cl_device_id*)malloc(sizeof (cl_device_id)*numDevices);
-			clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, numDevices, devices, NULL);
-			for (deviceIndex = 0 ; deviceIndex <numDevices ; deviceIndex ++) {
-				cl_device_id device = devices[deviceIndex];
-				clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(deviceName), deviceName, NULL);
-				clGetDeviceInfo(device, CL_DEVICE_PROFILE, sizeof(deviceProfile), deviceProfile, NULL);
-				clGetDeviceInfo(device, CL_DEVICE_VERSION, sizeof(deviceVersion), deviceVersion, NULL);
-				clGetDeviceInfo(device, CL_DRIVER_VERSION, sizeof(deviceDriver), deviceDriver, NULL);
-//				clGetDeviceInfo(device, CL_DEVICE_VENDOR, sizeof(deviceVendor), deviceVendor, NULL);
-				clGetDeviceInfo(device, CL_DEVICE_VENDOR, sizeof(deviceVendor), deviceVendor, NULL);
-				clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(deviceMaxComputeUnits), &deviceMaxComputeUnits, NULL);
-				clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(deviceMemory), &deviceMemory, NULL);
-				printf("--- OpenCL device %d ---\nname    : %s\nprofile : %s\nversion : %s\nvendor  : %s\ndriver  : %s\ncomputes: %d\nmemory  : %ld\n\n", deviceIndex+1, deviceName, deviceProfile, deviceVersion, deviceVendor, deviceDriver, deviceMaxComputeUnits, deviceMemory);
-				
-				if (preferred_device == 0) {
-					preferred_device = device;
-					preferred_context = clCreateContext(NULL, 1, &preferred_device, NULL, NULL, &result);
-					if (result != CL_SUCCESS) {
-						printf("Error while creating opencl context %s\n", BKE_opencl_message(result));
-					}
-					preferred_command_queue = clCreateCommandQueue(preferred_context, preferred_device, 0, &result);
+		if (numDevices == 0)
+			continue;
+		
+		devices = MEM_callocN(numDevices*sizeof(cl_device_id), "OpenCL devices");
+		clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, numDevices, devices, NULL);
+		for (deviceIndex = 0 ; deviceIndex <numDevices ; deviceIndex ++) {
+			cl_device_id device = devices[deviceIndex];
+			
+			clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(deviceName), deviceName, NULL);
+			clGetDeviceInfo(device, CL_DEVICE_PROFILE, sizeof(deviceProfile), deviceProfile, NULL);
+			clGetDeviceInfo(device, CL_DEVICE_VERSION, sizeof(deviceVersion), deviceVersion, NULL);
+			clGetDeviceInfo(device, CL_DRIVER_VERSION, sizeof(deviceDriver), deviceDriver, NULL);
+			//				clGetDeviceInfo(device, CL_DEVICE_VENDOR, sizeof(deviceVendor), deviceVendor, NULL);
+			clGetDeviceInfo(device, CL_DEVICE_VENDOR, sizeof(deviceVendor), deviceVendor, NULL);
+			clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(deviceMaxComputeUnits), &deviceMaxComputeUnits, NULL);
+			clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(deviceMemory), &deviceMemory, NULL);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list