diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2012-07-05 10:34:31 +0400 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2012-07-05 10:34:31 +0400 |
commit | 4e836ab476decd0b0c0acadd00f5bb078c82b5ed (patch) | |
tree | 3e4655a53aa61d902d5c2f71092be2fbd04967d6 | |
parent | 19011d44cf81cac91dd7e2615e6dd09175ecd7e9 (diff) |
Moved highlight code to the workscheduler.
3 files changed, 25 insertions, 9 deletions
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.cpp b/source/blender/compositor/intern/COM_WorkScheduler.cpp index c49ac24e018..120b4d6d0f2 100644 --- a/source/blender/compositor/intern/COM_WorkScheduler.cpp +++ b/source/blender/compositor/intern/COM_WorkScheduler.cpp @@ -30,6 +30,7 @@ #include "COM_OpenCLDevice.h" #include "COM_OpenCLKernels.cl.h" #include "OCL_opencl.h" +#include "COM_WriteBufferOperation.h" #include "PIL_time.h" #include "BLI_threads.h" @@ -65,6 +66,25 @@ static bool g_openclActive = false; #endif #endif +#define HIGHLIGHT(wp) \ +{ \ + ExecutionGroup* group = wp->getExecutionGroup(); \ + if (group->isComplex()) { \ + NodeOperation* operation = group->getOutputNodeOperation(); \ + if (operation->isWriteBufferOperation()) {\ + WriteBufferOperation *writeOperation = (WriteBufferOperation*)operation;\ + NodeOperation *complexOperation = writeOperation->getInput(); \ + bNode *node = complexOperation->getbNode(); \ + if (node) { \ + if (node->original) { \ + node->original->highlight = 1;\ + } else {\ + node->highlight = 1; \ + }\ + } \ + } \ + } \ +} #if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE void *WorkScheduler::thread_execute_cpu(void *data) @@ -73,6 +93,7 @@ void *WorkScheduler::thread_execute_cpu(void *data) WorkPackage *work; while ((work = (WorkPackage *)BLI_thread_queue_pop(g_cpuqueue))) { + HIGHLIGHT(work); device->execute(work); delete work; } @@ -86,6 +107,7 @@ void *WorkScheduler::thread_execute_gpu(void *data) WorkPackage *work; while ((work = (WorkPackage *)BLI_thread_queue_pop(g_gpuqueue))) { + HIGHLIGHT(work); device->execute(work); delete work; } diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp index 191b21b9217..8decb73615b 100644 --- a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp +++ b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp @@ -63,9 +63,6 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber, Me MemoryBuffer *memoryBuffer = this->m_memoryProxy->getBuffer(); float *buffer = memoryBuffer->getBuffer(); if (this->m_input->isComplex()) { - bNode* bnode = this->m_input->getbNode(); - if (bnode && bnode->original) bnode->original->highlight++; - void *data = this->m_input->initializeTileData(rect, memoryBuffers); int x1 = rect->xmin; int y1 = rect->ymin; @@ -90,7 +87,6 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int tileNumber, Me this->m_input->deinitializeTileData(rect, memoryBuffers, data); data = NULL; } - if (bnode && bnode->original) bnode->original->highlight++; } else { int x1 = rect->xmin; @@ -143,8 +139,6 @@ void WriteBufferOperation::executeOpenCLRegion(OpenCLDevice* device, rcti *rect, list<cl_mem> *clMemToCleanUp = new list<cl_mem>(); clMemToCleanUp->push_back(clOutputBuffer); list<cl_kernel> *clKernelsToCleanUp = new list<cl_kernel>(); - bNode* bnode = this->m_input->getbNode(); - if (bnode && bnode->original) bnode->original->highlight++; this->m_input->executeOpenCL(device, outputBuffer, clOutputBuffer, inputMemoryBuffers, clMemToCleanUp, clKernelsToCleanUp); @@ -163,10 +157,7 @@ void WriteBufferOperation::executeOpenCLRegion(OpenCLDevice* device, rcti *rect, this->getMemoryProxy()->getBuffer()->copyContentFrom(outputBuffer); - if (bnode && bnode->original) bnode->original->highlight++; // STEP 4 - - while (clMemToCleanUp->size() > 0) { cl_mem mem = clMemToCleanUp->front(); error = clReleaseMemObject(mem); diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.h b/source/blender/compositor/operations/COM_WriteBufferOperation.h index 24bfdecd124..d77814a9dc4 100644 --- a/source/blender/compositor/operations/COM_WriteBufferOperation.h +++ b/source/blender/compositor/operations/COM_WriteBufferOperation.h @@ -46,6 +46,9 @@ public: void deinitExecution(); void executeOpenCLRegion(OpenCLDevice* device, rcti *rect, unsigned int chunkNumber, MemoryBuffer **memoryBuffers, MemoryBuffer *outputBuffer); void readResolutionFromInputSocket(); + inline NodeOperation *getInput() { + return m_input; + } }; #endif |