[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48831] trunk/blender/source/blender/ compositor: Compositor read buffers work directly on the memory buffer.
Jeroen Bakker
j.bakker at atmind.nl
Wed Jul 11 12:45:57 CEST 2012
Revision: 48831
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48831
Author: jbakker
Date: 2012-07-11 10:45:56 +0000 (Wed, 11 Jul 2012)
Log Message:
-----------
Compositor read buffers work directly on the memory buffer.
This way we can remove the memoryBuffers parameter in the executePixels,
and (de)initializeTileData methods
Modified Paths:
--------------
trunk/blender/source/blender/compositor/intern/COM_CPUDevice.cpp
trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp
trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h
trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.cpp
trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.h
trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h
trunk/blender/source/blender/compositor/operations/COM_OutputFileOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_OutputFileOperation.h
trunk/blender/source/blender/compositor/operations/COM_PreviewOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_PreviewOperation.h
trunk/blender/source/blender/compositor/operations/COM_ReadBufferOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_ReadBufferOperation.h
trunk/blender/source/blender/compositor/operations/COM_SplitViewerOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_SplitViewerOperation.h
trunk/blender/source/blender/compositor/operations/COM_ViewerOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_ViewerOperation.h
trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.h
Modified: trunk/blender/source/blender/compositor/intern/COM_CPUDevice.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_CPUDevice.cpp 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/intern/COM_CPUDevice.cpp 2012-07-11 10:45:56 UTC (rev 48831)
@@ -29,10 +29,9 @@
rcti rect;
executionGroup->determineChunkRect(&rect, chunkNumber);
- MemoryBuffer **inputBuffers = executionGroup->getInputBuffersCPU();
- executionGroup->getOutputNodeOperation()->executeRegion(&rect, chunkNumber, inputBuffers);
+ executionGroup->getOutputNodeOperation()->executeRegion(&rect, chunkNumber);
- executionGroup->finalizeChunkExecution(chunkNumber, inputBuffers);
+ executionGroup->finalizeChunkExecution(chunkNumber, NULL);
}
Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp 2012-07-11 10:45:56 UTC (rev 48831)
@@ -372,23 +372,6 @@
delete[] chunkOrder;
}
-MemoryBuffer **ExecutionGroup::getInputBuffersCPU()
-{
- vector<MemoryProxy *> memoryproxies;
- unsigned int index;
-
- this->determineDependingMemoryProxies(&memoryproxies);
- MemoryBuffer **memoryBuffers = new MemoryBuffer *[this->m_cachedMaxReadBufferOffset];
- for (index = 0; index < this->m_cachedMaxReadBufferOffset; index++) {
- memoryBuffers[index] = NULL;
- }
- for (index = 0; index < this->m_cachedReadOperations.size(); index++) {
- ReadBufferOperation *readOperation = (ReadBufferOperation *)this->m_cachedReadOperations[index];
- memoryBuffers[readOperation->getOffset()] = readOperation->getMemoryProxy()->getBuffer();
- }
- return memoryBuffers;
-}
-
MemoryBuffer **ExecutionGroup::getInputBuffersOpenCL(int chunkNumber)
{
rcti rect;
Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp 2012-07-11 10:45:56 UTC (rev 48831)
@@ -129,6 +129,13 @@
operation->setbNodeTree(this->m_context.getbNodeTree());
operation->initExecution();
}
+ for (index = 0; index < this->m_operations.size(); index++) {
+ NodeOperation *operation = this->m_operations[index];
+ if (operation->isReadBufferOperation()) {
+ ReadBufferOperation *readOperation = (ReadBufferOperation *)operation;
+ readOperation->updateMemoryBuffer();
+ }
+ }
for (index = 0; index < this->m_groups.size(); index++) {
ExecutionGroup *executionGroup = this->m_groups[index];
executionGroup->setChunksize(this->m_context.getChunksize());
Modified: trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h 2012-07-11 10:45:56 UTC (rev 48831)
@@ -134,7 +134,7 @@
* @param chunkNumber the chunkNumber to be calculated
* @param memoryBuffers all input MemoryBuffer's needed
*/
- virtual void executeRegion(rcti *rect, unsigned int chunkNumber, MemoryBuffer **memoryBuffers) {}
+ virtual void executeRegion(rcti *rect, unsigned int chunkNumber) {}
/**
* @brief when a chunk is executed by an OpenCLDevice, this method is called
Modified: trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.cpp 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.cpp 2012-07-11 10:45:56 UTC (rev 48831)
@@ -65,11 +65,16 @@
executionGroup->finalizeChunkExecution(chunkNumber, inputBuffers);
}
-
cl_mem OpenCLDevice::COM_clAttachMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, int offsetIndex, list<cl_mem> *cleanup, MemoryBuffer **inputMemoryBuffers, SocketReader *reader)
{
+ return COM_clAttachMemoryBufferToKernelParameter(kernel, parameterIndex, offsetIndex, cleanup, inputMemoryBuffers, (ReadBufferOperation*)reader);
+}
+
+cl_mem OpenCLDevice::COM_clAttachMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, int offsetIndex, list<cl_mem> *cleanup, MemoryBuffer **inputMemoryBuffers, ReadBufferOperation *reader)
+{
cl_int error;
- MemoryBuffer *result = (MemoryBuffer *)reader->initializeTileData(NULL, inputMemoryBuffers);
+
+ MemoryBuffer *result = (MemoryBuffer *)reader->getInputMemoryBuffer(inputMemoryBuffers);
const cl_image_format imageFormat = {
CL_RGBA,
Modified: trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.h 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/intern/COM_OpenCLDevice.h 2012-07-11 10:45:56 UTC (rev 48831)
@@ -28,6 +28,7 @@
#include "COM_Device.h"
#include "OCL_opencl.h"
#include "COM_WorkScheduler.h"
+#include "COM_ReadBufferOperation.h"
/**
* @brief device representing an GPU OpenCL device.
@@ -96,6 +97,7 @@
cl_command_queue getQueue(){ return this->m_queue; }
cl_mem COM_clAttachMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, int offsetIndex, list<cl_mem> *cleanup, MemoryBuffer **inputMemoryBuffers, SocketReader *reader);
+ cl_mem COM_clAttachMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, int offsetIndex, list<cl_mem> *cleanup, MemoryBuffer **inputMemoryBuffers, ReadBufferOperation *reader);
void COM_clAttachMemoryBufferOffsetToKernelParameter(cl_kernel kernel, int offsetIndex, MemoryBuffer *memoryBuffers);
void COM_clAttachOutputMemoryBufferToKernelParameter(cl_kernel kernel, int parameterIndex, cl_mem clOutputMemoryBuffer);
void COM_clAttachSizeToKernelParameter(cl_kernel kernel, int offsetIndex, NodeOperation* operation);
Modified: trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp 2012-07-11 10:45:56 UTC (rev 48831)
@@ -94,7 +94,7 @@
}
-void CompositorOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer **memoryBuffers)
+void CompositorOperation::executeRegion(rcti *rect, unsigned int tileNumber)
{
float color[8]; // 7 is enough
float *buffer = this->m_outputBuffer;
@@ -111,9 +111,9 @@
for (y = y1; y < y2 && (!breaked); y++) {
for (x = x1; x < x2 && (!breaked); x++) {
- this->m_imageInput->read(color, x, y, COM_PS_NEAREST, memoryBuffers);
+ this->m_imageInput->read(color, x, y, COM_PS_NEAREST, NULL);
if (this->m_alphaInput != NULL) {
- this->m_alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST, memoryBuffers);
+ this->m_alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST, NULL);
}
copy_v4_v4(buffer + offset, color);
offset += COM_NUMBER_OF_CHANNELS;
Modified: trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h 2012-07-11 10:45:56 UTC (rev 48831)
@@ -52,7 +52,7 @@
SocketReader *m_alphaInput;
public:
CompositorOperation();
- void executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer **memoryBuffers);
+ void executeRegion(rcti *rect, unsigned int tileNumber);
void setRenderData(const RenderData *rd) { this->m_rd = rd; }
bool isOutputOperation(bool rendering) const { return true; }
void initExecution();
Modified: trunk/blender/source/blender/compositor/operations/COM_OutputFileOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_OutputFileOperation.cpp 2012-07-11 10:41:26 UTC (rev 48830)
+++ trunk/blender/source/blender/compositor/operations/COM_OutputFileOperation.cpp 2012-07-11 10:45:56 UTC (rev 48831)
@@ -59,7 +59,7 @@
return NULL;
}
-static void write_buffer_rect(rcti *rect, MemoryBuffer **memoryBuffers, const bNodeTree *tree,
+static void write_buffer_rect(rcti *rect, const bNodeTree *tree,
SocketReader *reader, float *buffer, unsigned int width, DataType datatype)
{
float color[4];
@@ -77,7 +77,7 @@
for (y = y1; y < y2 && (!breaked); y++) {
for (x = x1; x < x2 && (!breaked); x++) {
- reader->read(color, x, y, COM_PS_NEAREST, memoryBuffers);
+ reader->read(color, x, y, COM_PS_NEAREST, NULL);
for (i = 0; i < size; ++i)
buffer[offset + i] = color[i];
@@ -113,9 +113,9 @@
this->m_outputBuffer = init_buffer(this->getWidth(), this->getHeight(), this->m_datatype);
}
-void OutputSingleLayerOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer **memoryBuffers)
+void OutputSingleLayerOperation::executeRegion(rcti *rect, unsigned int tileNumber)
{
- write_buffer_rect(rect, memoryBuffers, this->m_tree, this->m_imageInput, this->m_outputBuffer, this->getWidth(), this->m_datatype);
+ write_buffer_rect(rect, this->m_tree, this->m_imageInput, this->m_outputBuffer, this->getWidth(), this->m_datatype);
}
void OutputSingleLayerOperation::deinitExecution()
@@ -183,10 +183,10 @@
}
}
-void OutputOpenExrMultiLayerOperation::executeRegion(rcti *rect, unsigned int tileNumber, MemoryBuffer **memoryBuffers)
+void OutputOpenExrMultiLayerOperation::executeRegion(rcti *rect, unsigned int tileNumber)
{
for (unsigned int i = 0; i < this->m_layers.size(); ++i) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list