[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31910] branches/particles-2010/source/ blender: fixed event lists for enqueued nodes and reenabled buffer functions and get /set data nodes.

Lukas Toenne lukas.toenne at googlemail.com
Mon Sep 13 14:13:29 CEST 2010


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

Log Message:
-----------
fixed event lists for enqueued nodes and reenabled buffer functions and get/set data nodes.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    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_get_data.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-09-13 11:25:48 UTC (rev 31909)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-09-13 12:13:28 UTC (rev 31910)
@@ -1217,6 +1217,7 @@
 void nodeFreeNode(bNodeTree *ntree, bNode *node)
 {
 	bNodeTreeTypeInfo *treetype= ntreeGetTypeInfo(ntree->type);
+	bNodeSocket *sock, *nextsock;
 	
 	nodeUnlinkNode(ntree, node);
 	BLI_remlink(&ntree->nodes, node);
@@ -1225,9 +1226,21 @@
 	
 	if (treetype->freeNodeCache)
 		treetype->freeNodeCache(ntree, node);
-	BLI_freelistN(&node->inputs);
-	BLI_freelistN(&node->outputs);
-	
+	for (sock=node->inputs.first; sock; sock = nextsock) {
+		if (node->typeinfo->freesocketstoragefunc && sock->storage)
+			node->typeinfo->freesocketstoragefunc(sock);
+		
+		nextsock = sock->next;
+		MEM_freeN(sock);
+	}
+	for (sock=node->outputs.first; sock; sock = nextsock) {
+		if (node->typeinfo->freesocketstoragefunc && sock->storage)
+			node->typeinfo->freesocketstoragefunc(sock);
+		
+		nextsock = sock->next;
+		MEM_freeN(sock);
+	}
+
 	nodeFreePreview(node);
 
 	if(node->typeinfo && node->typeinfo->freestoragefunc) {

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-13 11:25:48 UTC (rev 31909)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c	2010-09-13 12:13:28 UTC (rev 31910)
@@ -210,7 +210,6 @@
 		return 1;
 }
 
-#if 0
 #ifdef WITH_OPENCL
 
 int sim_buffer_valid(struct SimBuffer *buffer)
@@ -300,7 +299,7 @@
 	void *mapped;
 	
 	mapped = clEnqueueMapBuffer(execdata->queue, buffer->data, (blocking ? CL_TRUE : CL_FALSE), mode,
-								start * buffer->stride, num * buffer->stride, num_wait_events, wait_events, event, &res);
+								start * buffer->stride, num * buffer->stride, num_wait_events, (num_wait_events==0 ? NULL : wait_events), event, &res);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
 		sprintf(execdata->error_string, "Error mapping OpenCL buffer: %s", BKE_opencl_message(res));
@@ -313,7 +312,7 @@
 {
 	cl_int res;
 	
-	res = clEnqueueUnmapMemObject(execdata->queue, buffer->data, ptr, num_wait_events, wait_events, event);
+	res = clEnqueueUnmapMemObject(execdata->queue, buffer->data, ptr, num_wait_events, (num_wait_events==0 ? NULL : wait_events), event);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
 		sprintf(execdata->error_string, "Error unmapping OpenCL buffer: %s", BKE_opencl_message(res));
@@ -326,7 +325,7 @@
 	
 	res = clEnqueueReadBuffer(execdata->queue, buffer->data, (blocking ? CL_TRUE : CL_FALSE),
 							  start * buffer->stride, num * buffer->stride, dst,
-							  num_wait_events, wait_events, event);
+							  num_wait_events, (num_wait_events==0 ? NULL : wait_events), event);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
 		sprintf(execdata->error_string, "Error reading from OpenCL buffer: %s", BKE_opencl_message(res));
@@ -339,7 +338,7 @@
 	
 	res = clEnqueueWriteBuffer(execdata->queue, buffer->data, (blocking ? CL_TRUE : CL_FALSE),
 							   start * buffer->stride, num * buffer->stride, src,
-							   num_wait_events, wait_events, event);
+							   num_wait_events, (num_wait_events==0 ? NULL : wait_events), event);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
 		sprintf(execdata->error_string, "Error writing to OpenCL buffer: %s", BKE_opencl_message(res));
@@ -353,13 +352,39 @@
 	/* both buffers must have same data element size! */
 	assert(src->stride == dst->stride);
 	
-	res = clEnqueueCopyBuffer(execdata->queue, src->data, dst->data, start_src*src->stride, start_dst*dst->stride, num*src->stride, num_wait_events, wait_events, event);
+	res = clEnqueueCopyBuffer(execdata->queue, src->data, dst->data, start_src*src->stride, start_dst*dst->stride, num*src->stride, num_wait_events, (num_wait_events==0 ? NULL : wait_events), event);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
 		sprintf(execdata->error_string, "Error copying OpenCL buffer: %s", BKE_opencl_message(res));
 	}
 }
 
+#if 0 /* OpenCL 1.1 specs */
+SimEvent sim_create_user_event(struct SimExecData *execdata)
+{
+	cl_int res;
+	SimEvent event;
+	
+	event = clCreateUserEvent(execdata->context, &res);
+	if (res != CL_SUCCESS) {
+		execdata->error = 1;
+		sprintf(execdata->error_string, "Error creating OpenCL user event: %s", BKE_opencl_message(res));
+	}
+	return event;
+}
+
+void sim_set_user_event_status(SimEvent event, SimEventStatus status)
+{
+	cl_int res;
+	
+	res = clSetUserEventStatus(event, status);
+	if (res != CL_SUCCESS) {
+		execdata->error = 1;
+		sprintf(execdata->error_string, "Error setting OpenCL user event status: %s", BKE_opencl_message(res));
+	}
+}
+#endif
+
 #else
 
 int sim_buffer_valid(struct SimBuffer *buffer)
@@ -472,10 +497,20 @@
 	memcpy((char*)dst->data + start_dst * dst->stride, (char*)src->data + start_src * src->stride, num * src->stride);
 }
 
+#if 0
+SimEvent sim_create_user_event(struct SimExecData *execdata)
+{
+	SimEvent event;
+	return event;
+}
+
+void sim_set_user_event_status(SimEvent event, SimEventStatus status)
+{
+}
 #endif
+
 #endif
 
-#if 0
 int sim_node_prepare_output(struct SimExecData *execdata, struct SimSocketStack *out, struct SimDataContext *ctx)
 {
 	out->context = *ctx;
@@ -483,10 +518,9 @@
 	if (out->branches == 0)
 		return 0;
 	
-	out->buffer = sim_create_buffer(execdata, SBM_READ_WRITE, out->type, ctx->size);
+	out->buffer = sim_create_buffer(execdata, SIM_READ_WRITE, out->type, ctx->size);
 	return 1;
 }
-#endif
 
 int sim_node_get_max_context(struct SimSocketStack **instack, int totin, struct SimDataContext *r_max)
 {

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h	2010-09-13 11:25:48 UTC (rev 31909)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h	2010-09-13 12:13:28 UTC (rev 31910)
@@ -98,71 +98,59 @@
 
 #ifdef WITH_OPENCL
 
-//typedef enum SimBufferMode {
-//	SBM_READ_WRITE		= CL_MEM_READ_WRITE,
-//	SBM_READ_ONLY		= CL_MEM_READ_ONLY,
-//	SBM_WRITE_ONLY		= CL_MEM_WRITE_ONLY
-//} SimBufferMode;
+typedef enum SimBufferMode {
+	SIM_READ_WRITE		= CL_MEM_READ_WRITE,
+	SIM_READ_ONLY		= CL_MEM_READ_ONLY,
+	SIM_WRITE_ONLY		= CL_MEM_WRITE_ONLY
+} SimBufferMode;
 
-//typedef enum SimMapMode {
-//	SMM_MAP_READ		= CL_MAP_READ,
-//	SMM_MAP_WRITE		= CL_MAP_WRITE
-//} SimMapMode;
+typedef enum SimMapMode {
+	SIM_MAP_READ		= CL_MAP_READ,
+	SIM_MAP_WRITE		= CL_MAP_WRITE
+} SimMapMode;
 
-typedef struct SimBatch {
-	int start, total;		/* starting index and number of data items */
-	int job;				/* job generating this batch */
+typedef struct SimBuffer {
+	int datatype, stride;
 	
 	/* internals */
 	cl_mem data;
-} SimBatch;
+} SimBuffer;
 
-//typedef cl_event SimEvent;
+typedef enum SimEventStatus {
+	SIM_COMPLETE		= CL_COMPLETE
+} SimEventStatus;
 
+typedef cl_event SimEvent;
+
 #else
 
-//typedef enum SimBufferMode {
-//	SBM_READ_WRITE		= 1,
-//	SBM_READ_ONLY		= 2,
-//	SBM_WRITE_ONLY		= 3
-//} SimBufferMode;
+typedef enum SimBufferMode {
+	SIM_READ_WRITE		= 1,
+	SIM_READ_ONLY		= 2,
+	SIM_WRITE_ONLY		= 3
+} SimBufferMode;
 
-//typedef enum SimMapMode {
-//	SMM_MAP_READ		= 1,
-//	SMM_MAP_WRITE		= 2
-//} SimMapMode;
+typedef enum SimMapMode {
+	SIM_MAP_READ		= 1,
+	SIM_MAP_WRITE		= 2
+} SimMapMode;
 
-typedef struct SimBatch {
-	int start, total;		/* starting index and number of data items */
-	int job;				/* job generating this batch */
+typedef struct SimBuffer {
+	int datatype, stride;
 	
 	/* internals */
 	void *data;
-	SimBufferMode mode;
-} SimBatch;
+} SimBuffer;
 
-//typedef struct SimEvent {
-//	short state;
-//} SimEvent;
+typedef enum SimEventStatus {
+	SIM_COMPLETE		= 1
+} SimEventStatus;
 
+typedef struct SimEvent {
+} SimEvent;
+
 #endif
 
-typedef struct SimBuffer {
-	int datatype, stride;
-	SimBatch *batches;
-	int totbatches;
-} SimBuffer;
-
-typedef enum SimJobState {
-	SJ_WAITING,
-	SJ_EXECUTING,
-	SJ_FINISHED
-} SimJobState;
-
-typedef struct SimJob {
-	SimJobState state;
-} SimJob;
-
 struct SimNodeStack;
 typedef struct SimSocketStack {
 	bNodeSocket *base;
@@ -172,19 +160,32 @@
 	int branches;
 	
 	SimBuffer buffer;
-//	SimEvent event;
+	SimEvent event;
 } SimSocketStack;
 
+typedef enum SimNodeState {
+	SIM_WAITING		= 0,
+	SIM_EXECUTING,
+	SIM_FINISHED
+} SimNodeState;
+
 typedef struct SimNodeStack {
+	SimNodeState state;
+	short flags;
+	
 	bNode *base;
 	SimSocketStack **instack;
 	SimSocketStack *outstack;
 	int totin, totout;
 	int totbranches;
 	
-//	SimEvent *event_wait_list;		/* list of input events */
+	SimEvent *inputevents;		/* list of input events */
+	int totinputevents;
 } SimNodeStack;
 
+/* SimNodeStack flags */
+#define SIM_ENQUEUED			1
+
 typedef struct SimNodeOperator {
 	struct SimNodeOperator *next, *prev;
 	SimNodeStack *node;
@@ -218,20 +219,23 @@
 int sim_context_path_resolve(struct SimDataContext *self, const char *path, struct SimDataContext *r_ctx);
 int sim_context_maps_to(struct SimDataContext *ctx, struct SimDataContext *to);
 
-//int sim_buffer_valid(struct SimBuffer *buffer);
-//struct SimBuffer sim_create_buffer(struct SimExecData *execdata, SimBufferMode mode, int datatype, int total);
-//struct SimBuffer sim_create_buffer_copy(struct SimExecData *execdata, SimBufferMode mode, int datatype, int total, void *src);
-//struct SimBuffer sim_create_host_buffer(struct SimExecData *execdata, SimBufferMode mode, int datatype, int total);
-//void sim_release_buffer(struct SimExecData *execdata, struct SimBuffer *buffer);
-//void *sim_enqueue_map_buffer(struct SimExecData *execdata, struct SimBuffer *buffer, int blocking, SimMapMode mode, int start, int num, int num_wait_events, SimEvent *wait_events, SimEvent *event);
-//void sim_enqueue_unmap_buffer(struct SimExecData *execdata, struct SimBuffer *buffer, void *ptr, int num_wait_events, SimEvent *wait_events, SimEvent *event);
+int sim_buffer_valid(struct SimBuffer *buffer);
+struct SimBuffer sim_create_buffer(struct SimExecData *execdata, SimBufferMode mode, int datatype, int total);
+struct SimBuffer sim_create_buffer_copy(struct SimExecData *execdata, SimBufferMode mode, int datatype, int total, void *src);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list