Moved highlight code to the workscheduler.

This commit is contained in:
Jeroen Bakker
2012-07-05 06:34:31 +00:00
parent 19011d44cf
commit 4e836ab476
3 changed files with 25 additions and 9 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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