[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