Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2021-04-02 16:41:16 +0300
committerJeroen Bakker <jeroen@blender.org>2021-04-02 16:41:16 +0300
commit210f7f0f8e9850acbc78fb07023cf017d628c21c (patch)
tree4dadf131e529cd1c7f19e2c3e39e66391ff26c45 /source/blender/compositor
parenta0f705f18c49d98bdad55eeb8d52ba48c86f4fc9 (diff)
Compositor: stream operators for WorkPackages.
Helps developers during debugging.
Diffstat (limited to 'source/blender/compositor')
-rw-r--r--source/blender/compositor/CMakeLists.txt1
-rw-r--r--source/blender/compositor/COM_defines.h46
-rw-r--r--source/blender/compositor/intern/COM_CompositorContext.h506
-rw-r--r--source/blender/compositor/intern/COM_Enums.cc61
-rw-r--r--source/blender/compositor/intern/COM_Enums.h76
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.h1
-rw-r--r--source/blender/compositor/intern/COM_WorkPackage.cc14
-rw-r--r--source/blender/compositor/intern/COM_WorkPackage.h6
-rw-r--r--source/blender/compositor/operations/COM_QualityStepHelper.h2
9 files changed, 414 insertions, 299 deletions
diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt
index c8ee8af4542..872eb66e789 100644
--- a/source/blender/compositor/CMakeLists.txt
+++ b/source/blender/compositor/CMakeLists.txt
@@ -59,6 +59,7 @@ set(SRC
intern/COM_CompositorContext.h
intern/COM_Converter.cc
intern/COM_Converter.h
+ intern/COM_Enums.cc
intern/COM_Debug.cc
intern/COM_Debug.h
intern/COM_Device.cc
diff --git a/source/blender/compositor/COM_defines.h b/source/blender/compositor/COM_defines.h
index 5a5868f1909..c5ff2b3adc6 100644
--- a/source/blender/compositor/COM_defines.h
+++ b/source/blender/compositor/COM_defines.h
@@ -52,52 +52,6 @@ constexpr int COM_data_type_num_channels(const DataType datatype)
constexpr int COM_DATA_TYPE_VALUE_CHANNELS = COM_data_type_num_channels(DataType::Value);
constexpr int COM_DATA_TYPE_COLOR_CHANNELS = COM_data_type_num_channels(DataType::Color);
-/**
- * \brief Possible quality settings
- * \see CompositorContext.quality
- * \ingroup Execution
- */
-enum class CompositorQuality {
- /** \brief High quality setting */
- High = 0,
- /** \brief Medium quality setting */
- Medium = 1,
- /** \brief Low quality setting */
- Low = 2,
-};
-
-/**
- * \brief Possible priority settings
- * \ingroup Execution
- */
-enum class CompositorPriority {
- /** \brief High quality setting */
- High = 2,
- /** \brief Medium quality setting */
- Medium = 1,
- /** \brief Low quality setting */
- Low = 0,
-};
-
-/**
- * \brief the execution state of a chunk in an ExecutionGroup
- * \ingroup Execution
- */
-enum class eChunkExecutionState {
- /**
- * \brief chunk is not yet scheduled
- */
- NotScheduled = 0,
- /**
- * \brief chunk is scheduled, but not yet executed
- */
- Scheduled = 1,
- /**
- * \brief chunk is executed.
- */
- Executed = 2,
-};
-
// configurable items
// chunk size determination
diff --git a/source/blender/compositor/intern/COM_CompositorContext.h b/source/blender/compositor/intern/COM_CompositorContext.h
index c6468865fc8..9abbda2ccd6 100644
--- a/source/blender/compositor/intern/COM_CompositorContext.h
+++ b/source/blender/compositor/intern/COM_CompositorContext.h
@@ -19,265 +19,269 @@
#pragma once
#include "BLI_rect.h"
-#include "COM_defines.h"
+
+#include "COM_Enums.h"
+
#include "DNA_color_types.h"
#include "DNA_node_types.h"
#include "DNA_scene_types.h"
+
#include <string>
#include <vector>
-namespace blender::compositor {
-
-/**
- * \brief Overall context of the compositor
- */
-class CompositorContext {
- private:
- /**
- * \brief The rendering field describes if we are rendering (F12) or if we are editing (Node
- * editor) This field is initialized in ExecutionSystem and must only be read from that point on.
- * \see ExecutionSystem
- */
- bool m_rendering;
-
- /**
- * \brief The quality of the composite.
- * This field is initialized in ExecutionSystem and must only be read from that point on.
- * \see ExecutionSystem
- */
- CompositorQuality m_quality;
-
- Scene *m_scene;
-
- /**
- * \brief Reference to the render data that is being composited.
- * This field is initialized in ExecutionSystem and must only be read from that point on.
- * \see ExecutionSystem
- */
- RenderData *m_rd;
-
- /**
- * \brief reference to the bNodeTree
- * This field is initialized in ExecutionSystem and must only be read from that point on.
- * \see ExecutionSystem
- */
- bNodeTree *m_bnodetree;
-
- /**
- * \brief Preview image hash table
- * This field is initialized in ExecutionSystem and must only be read from that point on.
- */
- bNodeInstanceHash *m_previews;
-
- /**
- * \brief does this system have active opencl devices?
- */
- bool m_hasActiveOpenCLDevices;
-
- /**
- * \brief Skip slow nodes
- */
- bool m_fastCalculation;
-
- /* \brief color management settings */
- const ColorManagedViewSettings *m_viewSettings;
- const ColorManagedDisplaySettings *m_displaySettings;
-
- /**
- * \brief active rendering view name
- */
- const char *m_viewName;
-
- public:
- /**
- * \brief constructor initializes the context with default values.
- */
- CompositorContext();
-
- /**
- * \brief set the rendering field of the context
- */
- void setRendering(bool rendering)
- {
- this->m_rendering = rendering;
- }
-
- /**
- * \brief get the rendering field of the context
- */
- bool isRendering() const
- {
- return this->m_rendering;
- }
-
- /**
- * \brief set the scene of the context
- */
- void setRenderData(RenderData *rd)
- {
- this->m_rd = rd;
- }
-
- /**
- * \brief set the bnodetree of the context
- */
- void setbNodeTree(bNodeTree *bnodetree)
- {
- this->m_bnodetree = bnodetree;
- }
-
- /**
- * \brief get the bnodetree of the context
- */
- const bNodeTree *getbNodeTree() const
- {
- return this->m_bnodetree;
- }
-
- /**
- * \brief get the scene of the context
- */
- const RenderData *getRenderData() const
- {
- return this->m_rd;
- }
-
- void setScene(Scene *scene)
- {
- m_scene = scene;
- }
- Scene *getScene() const
- {
- return m_scene;
- }
-
- /**
- * \brief set the preview image hash table
- */
- void setPreviewHash(bNodeInstanceHash *previews)
- {
- this->m_previews = previews;
- }
-
- /**
- * \brief get the preview image hash table
- */
- bNodeInstanceHash *getPreviewHash() const
- {
- return this->m_previews;
- }
-
- /**
- * \brief set view settings of color color management
- */
- void setViewSettings(const ColorManagedViewSettings *viewSettings)
- {
- this->m_viewSettings = viewSettings;
- }
-
- /**
- * \brief get view settings of color color management
- */
- const ColorManagedViewSettings *getViewSettings() const
- {
- return this->m_viewSettings;
- }
-
- /**
- * \brief set display settings of color color management
- */
- void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings)
- {
- this->m_displaySettings = displaySettings;
- }
-
- /**
- * \brief get display settings of color color management
- */
- const ColorManagedDisplaySettings *getDisplaySettings() const
- {
- return this->m_displaySettings;
- }
-
- /**
- * \brief set the quality
- */
- void setQuality(CompositorQuality quality)
- {
- this->m_quality = quality;
- }
-
- /**
- * \brief get the quality
- */
- CompositorQuality getQuality() const
- {
- return this->m_quality;
- }
-
- /**
- * \brief get the current frame-number of the scene in this context
- */
- int getFramenumber() const;
-
- /**
- * \brief has this system active openclDevices?
- */
- bool getHasActiveOpenCLDevices() const
- {
- return this->m_hasActiveOpenCLDevices;
- }
-
- /**
- * \brief set has this system active openclDevices?
- */
- void setHasActiveOpenCLDevices(bool hasAvtiveOpenCLDevices)
- {
- this->m_hasActiveOpenCLDevices = hasAvtiveOpenCLDevices;
- }
-
- /**
- * \brief get the active rendering view
- */
- const char *getViewName() const
- {
- return this->m_viewName;
- }
-
- /**
- * \brief set the active rendering view
- */
- void setViewName(const char *viewName)
- {
- this->m_viewName = viewName;
- }
-
- int getChunksize() const
- {
- return this->getbNodeTree()->chunksize;
- }
-
- void setFastCalculation(bool fastCalculation)
- {
- this->m_fastCalculation = fastCalculation;
- }
- bool isFastCalculation() const
- {
- return this->m_fastCalculation;
- }
- bool isGroupnodeBufferEnabled() const
- {
- return (this->getbNodeTree()->flag & NTREE_COM_GROUPNODE_BUFFER) != 0;
- }
+ namespace blender::compositor
+{
/**
- * \brief Get the render percentage as a factor.
- * The compositor uses a factor i.o. a percentage.
+ * \brief Overall context of the compositor
*/
- float getRenderPercentageAsFactor() const
- {
- return m_rd->size * 0.01f;
- }
-};
+ class CompositorContext {
+ private:
+ /**
+ * \brief The rendering field describes if we are rendering (F12) or if we are editing (Node
+ * editor) This field is initialized in ExecutionSystem and must only be read from that point
+ * on. \see ExecutionSystem
+ */
+ bool m_rendering;
+
+ /**
+ * \brief The quality of the composite.
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * \see ExecutionSystem
+ */
+ CompositorQuality m_quality;
+
+ Scene *m_scene;
+
+ /**
+ * \brief Reference to the render data that is being composited.
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * \see ExecutionSystem
+ */
+ RenderData *m_rd;
+
+ /**
+ * \brief reference to the bNodeTree
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ * \see ExecutionSystem
+ */
+ bNodeTree *m_bnodetree;
+
+ /**
+ * \brief Preview image hash table
+ * This field is initialized in ExecutionSystem and must only be read from that point on.
+ */
+ bNodeInstanceHash *m_previews;
+
+ /**
+ * \brief does this system have active opencl devices?
+ */
+ bool m_hasActiveOpenCLDevices;
+
+ /**
+ * \brief Skip slow nodes
+ */
+ bool m_fastCalculation;
+
+ /* \brief color management settings */
+ const ColorManagedViewSettings *m_viewSettings;
+ const ColorManagedDisplaySettings *m_displaySettings;
+
+ /**
+ * \brief active rendering view name
+ */
+ const char *m_viewName;
+
+ public:
+ /**
+ * \brief constructor initializes the context with default values.
+ */
+ CompositorContext();
+
+ /**
+ * \brief set the rendering field of the context
+ */
+ void setRendering(bool rendering)
+ {
+ this->m_rendering = rendering;
+ }
+
+ /**
+ * \brief get the rendering field of the context
+ */
+ bool isRendering() const
+ {
+ return this->m_rendering;
+ }
+
+ /**
+ * \brief set the scene of the context
+ */
+ void setRenderData(RenderData *rd)
+ {
+ this->m_rd = rd;
+ }
+
+ /**
+ * \brief set the bnodetree of the context
+ */
+ void setbNodeTree(bNodeTree *bnodetree)
+ {
+ this->m_bnodetree = bnodetree;
+ }
+
+ /**
+ * \brief get the bnodetree of the context
+ */
+ const bNodeTree *getbNodeTree() const
+ {
+ return this->m_bnodetree;
+ }
+
+ /**
+ * \brief get the scene of the context
+ */
+ const RenderData *getRenderData() const
+ {
+ return this->m_rd;
+ }
+
+ void setScene(Scene *scene)
+ {
+ m_scene = scene;
+ }
+ Scene *getScene() const
+ {
+ return m_scene;
+ }
+
+ /**
+ * \brief set the preview image hash table
+ */
+ void setPreviewHash(bNodeInstanceHash *previews)
+ {
+ this->m_previews = previews;
+ }
+
+ /**
+ * \brief get the preview image hash table
+ */
+ bNodeInstanceHash *getPreviewHash() const
+ {
+ return this->m_previews;
+ }
+
+ /**
+ * \brief set view settings of color color management
+ */
+ void setViewSettings(const ColorManagedViewSettings *viewSettings)
+ {
+ this->m_viewSettings = viewSettings;
+ }
+
+ /**
+ * \brief get view settings of color color management
+ */
+ const ColorManagedViewSettings *getViewSettings() const
+ {
+ return this->m_viewSettings;
+ }
+
+ /**
+ * \brief set display settings of color color management
+ */
+ void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings)
+ {
+ this->m_displaySettings = displaySettings;
+ }
+
+ /**
+ * \brief get display settings of color color management
+ */
+ const ColorManagedDisplaySettings *getDisplaySettings() const
+ {
+ return this->m_displaySettings;
+ }
+
+ /**
+ * \brief set the quality
+ */
+ void setQuality(CompositorQuality quality)
+ {
+ this->m_quality = quality;
+ }
+
+ /**
+ * \brief get the quality
+ */
+ CompositorQuality getQuality() const
+ {
+ return this->m_quality;
+ }
+
+ /**
+ * \brief get the current frame-number of the scene in this context
+ */
+ int getFramenumber() const;
+
+ /**
+ * \brief has this system active openclDevices?
+ */
+ bool getHasActiveOpenCLDevices() const
+ {
+ return this->m_hasActiveOpenCLDevices;
+ }
+
+ /**
+ * \brief set has this system active openclDevices?
+ */
+ void setHasActiveOpenCLDevices(bool hasAvtiveOpenCLDevices)
+ {
+ this->m_hasActiveOpenCLDevices = hasAvtiveOpenCLDevices;
+ }
+
+ /**
+ * \brief get the active rendering view
+ */
+ const char *getViewName() const
+ {
+ return this->m_viewName;
+ }
+
+ /**
+ * \brief set the active rendering view
+ */
+ void setViewName(const char *viewName)
+ {
+ this->m_viewName = viewName;
+ }
+
+ int getChunksize() const
+ {
+ return this->getbNodeTree()->chunksize;
+ }
+
+ void setFastCalculation(bool fastCalculation)
+ {
+ this->m_fastCalculation = fastCalculation;
+ }
+ bool isFastCalculation() const
+ {
+ return this->m_fastCalculation;
+ }
+ bool isGroupnodeBufferEnabled() const
+ {
+ return (this->getbNodeTree()->flag & NTREE_COM_GROUPNODE_BUFFER) != 0;
+ }
+
+ /**
+ * \brief Get the render percentage as a factor.
+ * The compositor uses a factor i.o. a percentage.
+ */
+ float getRenderPercentageAsFactor() const
+ {
+ return m_rd->size * 0.01f;
+ }
+ };
} // namespace blender::compositor
diff --git a/source/blender/compositor/intern/COM_Enums.cc b/source/blender/compositor/intern/COM_Enums.cc
new file mode 100644
index 00000000000..2102e8afbfe
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Enums.cc
@@ -0,0 +1,61 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2021, Blender Foundation.
+ */
+
+#include "COM_Enums.h"
+
+namespace blender::compositor {
+
+std::ostream &operator<<(std::ostream &os, const CompositorPriority &priority)
+{
+ switch (priority) {
+ case CompositorPriority::High: {
+ os << "Priority::High";
+ break;
+ }
+ case CompositorPriority::Medium: {
+ os << "Priority::Medium";
+ break;
+ }
+ case CompositorPriority::Low: {
+ os << "Priority::Low";
+ break;
+ }
+ }
+ return os;
+}
+
+std::ostream &operator<<(std::ostream &os, const eChunkExecutionState &execution_state)
+{
+ switch (execution_state) {
+ case eChunkExecutionState::NotScheduled: {
+ os << "ExecutionState::NotScheduled";
+ break;
+ }
+ case eChunkExecutionState::Scheduled: {
+ os << "ExecutionState::Scheduled";
+ break;
+ }
+ case eChunkExecutionState::Executed: {
+ os << "ExecutionState::Executed";
+ break;
+ }
+ }
+ return os;
+}
+
+} // namespace blender::compositor
diff --git a/source/blender/compositor/intern/COM_Enums.h b/source/blender/compositor/intern/COM_Enums.h
new file mode 100644
index 00000000000..164fe7a3c27
--- /dev/null
+++ b/source/blender/compositor/intern/COM_Enums.h
@@ -0,0 +1,76 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Copyright 2021, Blender Foundation.
+ */
+
+#pragma once
+
+#include "COM_defines.h"
+
+#include <ostream>
+
+namespace blender::compositor {
+
+/**
+ * \brief Possible quality settings
+ * \see CompositorContext.quality
+ * \ingroup Execution
+ */
+enum class CompositorQuality {
+ /** \brief High quality setting */
+ High = 0,
+ /** \brief Medium quality setting */
+ Medium = 1,
+ /** \brief Low quality setting */
+ Low = 2,
+};
+
+/**
+ * \brief Possible priority settings
+ * \ingroup Execution
+ */
+enum class CompositorPriority {
+ /** \brief High quality setting */
+ High = 2,
+ /** \brief Medium quality setting */
+ Medium = 1,
+ /** \brief Low quality setting */
+ Low = 0,
+};
+
+/**
+ * \brief the execution state of a chunk in an ExecutionGroup
+ * \ingroup Execution
+ */
+enum class eChunkExecutionState {
+ /**
+ * \brief chunk is not yet scheduled
+ */
+ NotScheduled = 0,
+ /**
+ * \brief chunk is scheduled, but not yet executed
+ */
+ Scheduled = 1,
+ /**
+ * \brief chunk is executed.
+ */
+ Executed = 2,
+};
+
+std::ostream &operator<<(std::ostream &os, const CompositorPriority &priority);
+std::ostream &operator<<(std::ostream &os, const eChunkExecutionState &execution_state);
+
+} // namespace blender::compositor
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
index 41e5d8b69fc..7e388fba2b1 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.h
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -26,6 +26,7 @@
#include "BLI_math_vector.h"
#include "BLI_threads.h"
+#include "COM_Enums.h"
#include "COM_MemoryBuffer.h"
#include "COM_MemoryProxy.h"
#include "COM_MetaData.h"
diff --git a/source/blender/compositor/intern/COM_WorkPackage.cc b/source/blender/compositor/intern/COM_WorkPackage.cc
index c0bc274da8f..ea78c0d6333 100644
--- a/source/blender/compositor/intern/COM_WorkPackage.cc
+++ b/source/blender/compositor/intern/COM_WorkPackage.cc
@@ -18,6 +18,20 @@
#include "COM_WorkPackage.h"
+#include "COM_Enums.h"
+#include "COM_ExecutionGroup.h"
+
namespace blender::compositor {
+std::ostream &operator<<(std::ostream &os, const WorkPackage &work_package)
+{
+ os << "WorkPackage(execution_group=" << *work_package.execution_group;
+ os << ",chunk=" << work_package.chunk_number;
+ os << ",state=" << work_package.state;
+ os << ",rect=(" << work_package.rect.xmin << "," << work_package.rect.ymin << ")-("
+ << work_package.rect.xmax << "," << work_package.rect.ymax << ")";
+ os << ")";
+ return os;
+}
+
} // namespace blender::compositor
diff --git a/source/blender/compositor/intern/COM_WorkPackage.h b/source/blender/compositor/intern/COM_WorkPackage.h
index 4541a778711..b8e40dc7226 100644
--- a/source/blender/compositor/intern/COM_WorkPackage.h
+++ b/source/blender/compositor/intern/COM_WorkPackage.h
@@ -18,10 +18,12 @@
#pragma once
-#include "COM_defines.h"
+#include "COM_Enums.h"
#include "BLI_rect.h"
+#include <ostream>
+
namespace blender::compositor {
// Forward Declarations.
class ExecutionGroup;
@@ -53,4 +55,6 @@ struct WorkPackage {
#endif
};
+std::ostream &operator<<(std::ostream &os, const WorkPackage &WorkPackage);
+
} // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_QualityStepHelper.h b/source/blender/compositor/operations/COM_QualityStepHelper.h
index bc2eaa88e3d..79c761e6086 100644
--- a/source/blender/compositor/operations/COM_QualityStepHelper.h
+++ b/source/blender/compositor/operations/COM_QualityStepHelper.h
@@ -18,7 +18,7 @@
#pragma once
-#include "COM_defines.h"
+#include "COM_Enums.h"
namespace blender::compositor {