[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