[Bf-blender-cvs] [b6dda972a3c] temp-compositor-single-threaded-operation: Reduce allocation.
Jeroen Bakker
noreply at git.blender.org
Fri Apr 2 14:58:28 CEST 2021
Commit: b6dda972a3ce9c3331b4deb27f40a56cb2c1f774
Author: Jeroen Bakker
Date: Fri Apr 2 14:50:41 2021 +0200
Branches: temp-compositor-single-threaded-operation
https://developer.blender.org/rBb6dda972a3ce9c3331b4deb27f40a56cb2c1f774
Reduce allocation.
A temp buffer was allocated and copied to another.
===================================================================
M source/blender/compositor/intern/COM_ExecutionSystem.cc
M source/blender/compositor/intern/COM_NodeOperation.cc
M source/blender/compositor/intern/COM_NodeOperation.h
M source/blender/compositor/intern/COM_NodeOperationBuilder.cc
M source/blender/compositor/intern/COM_SingleThreadedOperation.cc
M source/blender/compositor/intern/COM_SingleThreadedOperation.h
M source/blender/compositor/operations/COM_DenoiseOperation.cc
M source/blender/compositor/operations/COM_DenoiseOperation.h
M source/blender/compositor/operations/COM_GlareBaseOperation.cc
M source/blender/compositor/operations/COM_GlareBaseOperation.h
===================================================================
diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.cc b/source/blender/compositor/intern/COM_ExecutionSystem.cc
index 4203ff16930..cb2c05c5217 100644
--- a/source/blender/compositor/intern/COM_ExecutionSystem.cc
+++ b/source/blender/compositor/intern/COM_ExecutionSystem.cc
@@ -191,7 +191,6 @@ static void link_work_packages(blender::Vector<ExecutionGroup *> &groups)
group->getOutputOperation()->determineDependingAreaOfInterest(
&work_package.rect, read_operation, &area);
ExecutionGroup *parent = read_operation->getMemoryProxy()->getExecutor();
- std::cout << *group << "->" << *parent << "\n";
parent->link_child_work_packages(&work_package, &area);
}
}
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cc b/source/blender/compositor/intern/COM_NodeOperation.cc
index d91b9eac210..93ad2ba17ed 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.cc
+++ b/source/blender/compositor/intern/COM_NodeOperation.cc
@@ -259,6 +259,9 @@ std::ostream &operator<<(std::ostream &os, const NodeOperation &node_operation)
{
NodeOperationFlags flags = node_operation.get_flags();
os << "NodeOperation(";
+ if (!node_operation.get_name().empty()) {
+ os << "name=" << node_operation.get_name() << ",";
+ }
os << "flags={" << flags << "},";
if (flags.is_read_buffer_operation) {
const ReadBufferOperation *read_operation = (const ReadBufferOperation *)&node_operation;
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
index ac47d62d146..41e5d8b69fc 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.h
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -250,6 +250,7 @@ struct NodeOperationFlags {
*/
class NodeOperation {
private:
+ std::string m_name;
blender::Vector<NodeOperationInput> m_inputs;
blender::Vector<NodeOperationOutput> m_outputs;
@@ -295,6 +296,16 @@ class NodeOperation {
{
}
+ void set_name(const std::string name)
+ {
+ m_name = name;
+ }
+
+ const std::string get_name() const
+ {
+ return m_name;
+ }
+
const NodeOperationFlags get_flags() const
{
return flags;
diff --git a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
index 65cd83e5c4f..d15122684a0 100644
--- a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
+++ b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
@@ -125,6 +125,9 @@ void NodeOperationBuilder::convertToOperations(ExecutionSystem *system)
void NodeOperationBuilder::addOperation(NodeOperation *operation)
{
m_operations.append(operation);
+ if (m_current_node) {
+ operation->set_name(m_current_node->getbNode()->name);
+ }
}
void NodeOperationBuilder::mapInputSocket(NodeInput *node_socket,
diff --git a/source/blender/compositor/intern/COM_SingleThreadedOperation.cc b/source/blender/compositor/intern/COM_SingleThreadedOperation.cc
index 09601bdc3c5..7bce07f87cb 100644
--- a/source/blender/compositor/intern/COM_SingleThreadedOperation.cc
+++ b/source/blender/compositor/intern/COM_SingleThreadedOperation.cc
@@ -50,9 +50,8 @@ void SingleThreadedOperation::executeRegion(rcti *rect, unsigned int UNUSED(tile
return;
}
- MemoryBuffer buffer = createMemoryBuffer(rect);
MemoryBuffer *memory_buffer = getMemoryProxy()->getBuffer();
- memory_buffer->fill_from(buffer);
+ update_memory_buffer(*memory_buffer, rect);
unlockMutex();
executed = true;
diff --git a/source/blender/compositor/intern/COM_SingleThreadedOperation.h b/source/blender/compositor/intern/COM_SingleThreadedOperation.h
index db460a561d6..7cca768c55e 100644
--- a/source/blender/compositor/intern/COM_SingleThreadedOperation.h
+++ b/source/blender/compositor/intern/COM_SingleThreadedOperation.h
@@ -47,7 +47,7 @@ class SingleThreadedOperation : public WriteBufferOperation {
void executeRegion(rcti *rect, unsigned int tile_number) override;
- virtual MemoryBuffer createMemoryBuffer(rcti *rect) = 0;
+ virtual void update_memory_buffer(MemoryBuffer &memory_buffer, rcti *rect) = 0;
};
} // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_DenoiseOperation.cc b/source/blender/compositor/operations/COM_DenoiseOperation.cc
index eebf03fc550..12a03377919 100644
--- a/source/blender/compositor/operations/COM_DenoiseOperation.cc
+++ b/source/blender/compositor/operations/COM_DenoiseOperation.cc
@@ -51,20 +51,13 @@ void DenoiseOperation::deinitExecution()
SingleThreadedOperation::deinitExecution();
}
-MemoryBuffer DenoiseOperation::createMemoryBuffer(rcti *rect2)
+void DenoiseOperation::update_memory_buffer(MemoryBuffer &memory_buffer, rcti *rect2)
{
MemoryBuffer *tileColor = (MemoryBuffer *)this->m_inputProgramColor->initializeTileData(rect2);
MemoryBuffer *tileNormal = (MemoryBuffer *)this->m_inputProgramNormal->initializeTileData(rect2);
MemoryBuffer *tileAlbedo = (MemoryBuffer *)this->m_inputProgramAlbedo->initializeTileData(rect2);
- rcti rect;
- rect.xmin = 0;
- rect.ymin = 0;
- rect.xmax = getWidth();
- rect.ymax = getHeight();
- MemoryBuffer result(DataType::Color, rect);
- float *data = result.getBuffer();
- this->generateDenoise(data, tileColor, tileNormal, tileAlbedo, this->m_settings);
- return result;
+ this->generateDenoise(
+ memory_buffer.getBuffer(), tileColor, tileNormal, tileAlbedo, this->m_settings);
}
bool DenoiseOperation::determineDependingAreaOfInterest(rcti * /*input*/,
diff --git a/source/blender/compositor/operations/COM_DenoiseOperation.h b/source/blender/compositor/operations/COM_DenoiseOperation.h
index 7d468b3a53f..7e44752f0df 100644
--- a/source/blender/compositor/operations/COM_DenoiseOperation.h
+++ b/source/blender/compositor/operations/COM_DenoiseOperation.h
@@ -64,7 +64,7 @@ class DenoiseOperation : public SingleThreadedOperation {
MemoryBuffer *inputTileAlbedo,
NodeDenoise *settings);
- MemoryBuffer createMemoryBuffer(rcti *rect) override;
+ void update_memory_buffer(MemoryBuffer&memory_buffer, rcti *rect) override;
};
} // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_GlareBaseOperation.cc b/source/blender/compositor/operations/COM_GlareBaseOperation.cc
index a0ef4724107..7b27c38159a 100644
--- a/source/blender/compositor/operations/COM_GlareBaseOperation.cc
+++ b/source/blender/compositor/operations/COM_GlareBaseOperation.cc
@@ -38,18 +38,10 @@ void GlareBaseOperation::deinitExecution()
SingleThreadedOperation::deinitExecution();
}
-MemoryBuffer GlareBaseOperation::createMemoryBuffer(rcti *rect2)
+void GlareBaseOperation::update_memory_buffer(MemoryBuffer &memory_buffer, rcti *rect2)
{
MemoryBuffer *tile = (MemoryBuffer *)this->m_inputProgram->initializeTileData(rect2);
- rcti rect;
- rect.xmin = 0;
- rect.ymin = 0;
- rect.xmax = getWidth();
- rect.ymax = getHeight();
- MemoryBuffer result(DataType::Color, rect);
- float *data = result.getBuffer();
- this->generateGlare(data, tile, this->m_settings);
- return result;
+ this->generateGlare(memory_buffer.getBuffer(), tile, this->m_settings);
}
bool GlareBaseOperation::determineDependingAreaOfInterest(rcti * /*input*/,
diff --git a/source/blender/compositor/operations/COM_GlareBaseOperation.h b/source/blender/compositor/operations/COM_GlareBaseOperation.h
index cb485d8a90b..b40c27e4bb7 100644
--- a/source/blender/compositor/operations/COM_GlareBaseOperation.h
+++ b/source/blender/compositor/operations/COM_GlareBaseOperation.h
@@ -73,7 +73,7 @@ class GlareBaseOperation : public SingleThreadedOperation {
virtual void generateGlare(float *data, MemoryBuffer *inputTile, NodeGlare *settings) = 0;
- MemoryBuffer createMemoryBuffer(rcti *rect) override;
+ void update_memory_buffer(MemoryBuffer &memory_buffer, rcti *rect) override;
};
} // namespace blender::compositor
More information about the Bf-blender-cvs
mailing list