[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