From 210f7f0f8e9850acbc78fb07023cf017d628c21c Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 2 Apr 2021 15:41:16 +0200 Subject: Compositor: stream operators for WorkPackages. Helps developers during debugging. --- source/blender/compositor/CMakeLists.txt | 1 + source/blender/compositor/COM_defines.h | 46 -- .../compositor/intern/COM_CompositorContext.h | 506 +++++++++++---------- source/blender/compositor/intern/COM_Enums.cc | 61 +++ source/blender/compositor/intern/COM_Enums.h | 76 ++++ .../blender/compositor/intern/COM_NodeOperation.h | 1 + .../blender/compositor/intern/COM_WorkPackage.cc | 14 + source/blender/compositor/intern/COM_WorkPackage.h | 6 +- .../compositor/operations/COM_QualityStepHelper.h | 2 +- 9 files changed, 414 insertions(+), 299 deletions(-) create mode 100644 source/blender/compositor/intern/COM_Enums.cc create mode 100644 source/blender/compositor/intern/COM_Enums.h (limited to 'source/blender/compositor') 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 #include -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 + +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 + 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 { -- cgit v1.2.3