[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31979] branches/particles-2010/source/ blender/nodes/intern/simulation: simplified error handling, buffer functions now quit early when an error already happened.

Lukas Toenne lukas.toenne at googlemail.com
Fri Sep 17 15:03:24 CEST 2010


Revision: 31979
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31979
Author:   lukastoenne
Date:     2010-09-17 15:02:37 +0200 (Fri, 17 Sep 2010)

Log Message:
-----------
simplified error handling, buffer functions now quit early when an error already happened. could use a more sophisticated design in future.

Modified Paths:
--------------
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_math.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_set_data.c

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-17 09:27:31 UTC (rev 31978)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c	2010-09-17 13:02:37 UTC (rev 31979)
@@ -305,11 +305,14 @@
 
 SimBuffer sim_create_buffer(SimExecData *execdata, SimBufferMode mode, int datatype, int total)
 {
+	SimBuffer buf;
+	if (execdata->error)
+		return buf;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
 		size_t datasize = sim_get_data_size(datatype);
-		SimBuffer buf;
 		buf.datatype = datatype;
 		buf.stride = datasize;
 		
@@ -326,7 +329,6 @@
 	else {
 #endif
 		int datasize = sim_get_data_size(datatype);
-		SimBuffer buf;
 		buf.datatype = datatype;
 		buf.stride = datasize;
 		
@@ -348,11 +350,14 @@
 
 SimBuffer sim_create_buffer_copy(SimExecData *execdata, SimBufferMode mode, int datatype, int total, void *src)
 {
+	SimBuffer buf;
+	if (execdata->error)
+		return buf;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
 		size_t datasize = sim_get_data_size(datatype);
-		SimBuffer buf;
 		buf.datatype = datatype;
 		buf.stride = datasize;
 		
@@ -369,7 +374,6 @@
 	else {
 #endif
 		int datasize = sim_get_data_size(datatype);
-		SimBuffer buf;
 		buf.datatype = datatype;
 		buf.stride = datasize;
 		
@@ -393,11 +397,14 @@
 
 SimBuffer sim_create_host_buffer(SimExecData *execdata, SimBufferMode mode, int datatype, int total)
 {
+	SimBuffer buf;
+	if (execdata->error)
+		return buf;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
 		size_t datasize = sim_get_data_size(datatype);
-		SimBuffer buf;
 		buf.datatype = datatype;
 		buf.stride = datasize;
 		
@@ -414,7 +421,6 @@
 	else {
 #endif
 		int datasize = sim_get_data_size(datatype);
-		SimBuffer buf;
 		buf.datatype = datatype;
 		buf.stride = datasize;
 		
@@ -436,6 +442,9 @@
 
 void sim_release_buffer(SimExecData *execdata, SimBuffer *buffer)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -458,6 +467,9 @@
 
 void *sim_enqueue_map_buffer(SimExecData *execdata, SimBuffer *buffer, int blocking, SimMapMode mode, int start, int num, int num_wait_events, SimEvent *wait_events, SimEvent *event)
 {
+	if (execdata->error)
+		return NULL;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -493,6 +505,9 @@
 
 void sim_enqueue_unmap_buffer(SimExecData *execdata, SimBuffer *buffer, void *ptr, int num_wait_events, SimEvent *wait_events, SimEvent *event)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -522,6 +537,9 @@
 
 void sim_enqueue_read_buffer(SimExecData *execdata, SimBuffer *buffer, int blocking, int start, int num, void *dst, int num_wait_events, SimEvent *wait_events, SimEvent *event)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -554,6 +572,9 @@
 
 void sim_enqueue_write_buffer(SimExecData *execdata, SimBuffer *buffer, int blocking, int start, int num, void *src, int num_wait_events, SimEvent *wait_events, SimEvent *event)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -586,6 +607,9 @@
 
 void sim_enqueue_copy_buffer(SimExecData *execdata, SimBuffer *src, SimBuffer *dst, int start_src, int start_dst, int num, int num_wait_events, SimEvent *wait_events, SimEvent *event)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -627,6 +651,9 @@
 	cl_int res;
 	SimEvent event;
 	
+	if (execdata->error)
+		return;
+	
 	event = clCreateUserEvent(execdata->context, &res);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
@@ -639,6 +666,9 @@
 {
 	cl_int res;
 	
+	if (execdata->error)
+		return;
+	
 	res = clSetUserEventStatus(event, status);
 	if (res != CL_SUCCESS) {
 		execdata->error = 1;
@@ -649,10 +679,14 @@
 
 SimKernel sim_create_kernel(SimExecData *execdata, KernelFunction func, const char *cl_funcname)
 {
+	SimKernel kernel;
+	
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
-		SimKernel kernel;
 		
 		kernel.impl_cl = clCreateKernel(*execdata->program, cl_funcname, &res);
 		if (res != CL_SUCCESS) {
@@ -664,7 +698,6 @@
 	}
 	else {
 #endif
-		SimKernel kernel;
 		int i;
 		
 		kernel.impl = func;
@@ -679,6 +712,9 @@
 
 void sim_release_kernel(SimExecData *execdata, SimKernel *kernel)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res = clReleaseKernel(kernel->impl_cl);
@@ -704,6 +740,9 @@
 
 void sim_set_kernel_arg(SimExecData *execdata, SimKernel *kernel, int arg_index, size_t arg_size, const void *arg_value)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -727,6 +766,9 @@
 
 void sim_set_kernel_socket_data_arg(SimExecData *execdata, SimKernel *kernel, int arg_index, SimSocketStack *socket)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -750,6 +792,9 @@
 
 void sim_set_kernel_socket_size_arg(SimExecData *execdata, SimKernel *kernel, int arg_index, SimSocketStack *socket)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -773,6 +818,9 @@
 
 void sim_enqueue_kernel(struct SimExecData *execdata, SimKernel *kernel, size_t total, int num_wait_events, SimEvent *wait_events, SimEvent *event)
 {
+	if (execdata->error)
+		return;
+	
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
@@ -804,6 +852,9 @@
 
 int sim_node_prepare_output(struct SimExecData *execdata, struct SimSocketStack *out, struct SimDataContext *ctx)
 {
+	if (execdata->error)
+		return 0;
+	
 	out->context = *ctx;
 	
 	if (out->branches == 0)

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c	2010-09-17 09:27:31 UTC (rev 31978)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c	2010-09-17 13:02:37 UTC (rev 31979)
@@ -192,97 +192,94 @@
 
 		/* create intermediate host-memory buffer (see NVIDIA OpenCL best practices guide, section 3.1.1) */
 		hostbuffer = sim_create_host_buffer(execdata, SIM_READ_ONLY, out->type, ctx->size);
-		if (execdata->error) return;
 		/* map to host memory pointer */
 		buf = sim_enqueue_map_buffer(execdata, &hostbuffer, 1, SIM_MAP_WRITE, 0, ctx->size, node->totinputevents, node->inputevents, NULL);
-		if (execdata->error) return;
 		
-		/* iterate over collection and copy data */
-		RNA_property_collection_begin(&ctx->ptr, ctx->prop, &iter);
-		cur = buf;
-		switch (out->type) {
-		case SOCK_FLOAT:
-			while (iter.valid) {
-				*(float*)cur = RNA_property_float_get(&iter.ptr, prop);
-				cur = (char*)cur + datasize;
-				RNA_property_collection_next(&iter);
-			}
-			break;
+		if (!execdata->error) {
+			/* iterate over collection and copy data */
+			RNA_property_collection_begin(&ctx->ptr, ctx->prop, &iter);
+			cur = buf;
+			switch (out->type) {
+			case SOCK_FLOAT:
+				while (iter.valid) {
+					*(float*)cur = RNA_property_float_get(&iter.ptr, prop);
+					cur = (char*)cur + datasize;
+					RNA_property_collection_next(&iter);
+				}
+				break;
 		case SOCK_INT:
-			while (iter.valid) {
-				*(int*)cur = RNA_property_int_get(&iter.ptr, prop);
-				cur = (char*)cur + datasize;
-				RNA_property_collection_next(&iter);
-			}
-			break;
+				while (iter.valid) {
+					*(int*)cur = RNA_property_int_get(&iter.ptr, prop);
+					cur = (char*)cur + datasize;
+					RNA_property_collection_next(&iter);
+				}
+				break;
 		case SOCK_BOOL:
-			while (iter.valid) {
-				*(char*)cur = (char)RNA_property_boolean_get(&iter.ptr, prop);
-				cur = (char*)cur + datasize;
-				RNA_property_collection_next(&iter);
-			}
-			break;
+				while (iter.valid) {
+					*(char*)cur = (char)RNA_property_boolean_get(&iter.ptr, prop);
+					cur = (char*)cur + datasize;
+					RNA_property_collection_next(&iter);
+				}
+				break;
 		case SOCK_VECTOR:
-			while (iter.valid) {
-				RNA_property_float_get_array(&iter.ptr, prop, (float*)cur);
-				cur = (char*)cur + datasize;
-				RNA_property_collection_next(&iter);
-			}
-			break;
+				while (iter.valid) {
+					RNA_property_float_get_array(&iter.ptr, prop, (float*)cur);
+					cur = (char*)cur + datasize;
+					RNA_property_collection_next(&iter);
+				}
+				break;
 		case SOCK_RGBA:
-			while (iter.valid) {
-				RNA_property_float_get_array(&iter.ptr, prop, (float*)cur);
-				cur = (char*)cur + datasize;
-				RNA_property_collection_next(&iter);
-			}
-			break;
+				while (iter.valid) {
+					RNA_property_float_get_array(&iter.ptr, prop, (float*)cur);
+					cur = (char*)cur + datasize;
+					RNA_property_collection_next(&iter);
+				}
+				break;
 		case SOCK_STRING:
-			while (iter.valid) {
-				RNA_property_string_get(&iter.ptr, prop, (char*)cur);
-				cur = (char*)cur + datasize;
-				RNA_property_collection_next(&iter);
+				while (iter.valid) {
+					RNA_property_string_get(&iter.ptr, prop, (char*)cur);
+					cur = (char*)cur + datasize;
+					RNA_property_collection_next(&iter);
+				}
+				break;
 			}
-			break;
+			RNA_property_collection_end(&iter);
 		}
-		RNA_property_collection_end(&iter);
-		
+			
 		sim_enqueue_unmap_buffer(execdata, &hostbuffer, buf, 0, NULL, &copy_event);
-		if (execdata->error) return;
 		sim_enqueue_copy_buffer(execdata, &hostbuffer, &out->buffer, 0, 0, ctx->size, 1, &copy_event, &out->event);
-		if (execdata->error) return;
 		sim_release_buffer(execdata, &hostbuffer);
-		if (execdata->error) return;
 	}
 	else {
 		char buf[SIM_MAXDATASIZE];
 		
 		/* create output data buffer */
 		out->buffer = sim_create_buffer(execdata, SIM_READ_ONLY, out->type, 1);
-		if (execdata->error) return;
-		
-		switch (out->type) {
-		case SOCK_FLOAT:
-			*(float*)buf = RNA_property_float_get(&ctx->ptr, prop);
-			break;
-		case SOCK_INT:
-			*(int*)buf = RNA_property_int_get(&ctx->ptr, prop);
-			break;
-		case SOCK_BOOL:
-			*(char*)buf = (char)RNA_property_boolean_get(&ctx->ptr, prop);
-			break;
-		case SOCK_VECTOR:
-			RNA_property_float_get_array(&ctx->ptr, prop, (float*)buf);
-			break;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list