[Bf-blender-cvs] [90ac23d0fc8] cycles-x: Cycles X: Log effective list of passes

Sergey Sharybin noreply at git.blender.org
Thu Jun 10 10:51:23 CEST 2021


Commit: 90ac23d0fc8b312cfe1e74a1652fee09cb77655a
Author: Sergey Sharybin
Date:   Wed Jun 9 15:00:47 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB90ac23d0fc8b312cfe1e74a1652fee09cb77655a

Cycles X: Log effective list of passes

Useful for debugging purposes.

Log level can be tweaked to become 3 if 2 is considered
too low for this type of info.

Differential Revision: https://developer.blender.org/D11554

===================================================================

M	intern/cycles/render/pass.cpp
M	intern/cycles/render/pass.h
M	intern/cycles/render/scene.cpp

===================================================================

diff --git a/intern/cycles/render/pass.cpp b/intern/cycles/render/pass.cpp
index cb1e0060284..c542ea7abae 100644
--- a/intern/cycles/render/pass.cpp
+++ b/intern/cycles/render/pass.cpp
@@ -35,6 +35,128 @@ static PassFlags pass_flags_combine(const PassFlags flags_a, const PassFlags fla
   return result;
 }
 
+/* Convcert bitmask of pass flags to a human-readable string. */
+static string pass_flags_to_string(const PassFlags pass_flags)
+{
+  string result;
+
+#define CHECK_AND_APPEND(flag_suffix) \
+  do { \
+    if ((pass_flags) & (PASS_FLAG_##flag_suffix)) { \
+      if (!result.empty()) { \
+        result += ", "; \
+      } \
+      result += #flag_suffix; \
+    } \
+  } while (false)
+
+  CHECK_AND_APPEND(UNALIGNED);
+  CHECK_AND_APPEND(AUTO);
+
+#undef CHECK_AND_APPEND
+
+  return result;
+}
+
+const char *pass_type_as_string(const PassType type)
+{
+  switch (type) {
+    case PASS_NONE:
+      return "NONE";
+
+    case PASS_COMBINED:
+      return "COMBINED";
+    case PASS_EMISSION:
+      return "EMISSION";
+    case PASS_BACKGROUND:
+      return "BACKGROUND";
+    case PASS_AO:
+      return "AO";
+    case PASS_SHADOW:
+      return "SHADOW";
+    case PASS_DIFFUSE_DIRECT:
+      return "DIFFUSE_DIRECT";
+    case PASS_DIFFUSE_INDIRECT:
+      return "DIFFUSE_INDIRECT";
+    case PASS_GLOSSY_DIRECT:
+      return "GLOSSY_DIRECT";
+    case PASS_GLOSSY_INDIRECT:
+      return "GLOSSY_INDIRECT";
+    case PASS_TRANSMISSION_DIRECT:
+      return "TRANSMISSION_DIRECT";
+    case PASS_TRANSMISSION_INDIRECT:
+      return "TRANSMISSION_INDIRECT";
+    case PASS_VOLUME_DIRECT:
+      return "VOLUME_DIRECT";
+    case PASS_VOLUME_INDIRECT:
+      return "VOLUME_INDIRECT";
+
+    case PASS_DEPTH:
+      return "DEPTH";
+    case PASS_NORMAL:
+      return "NORMAL";
+    case PASS_ROUGHNESS:
+      return "ROUGHNESS";
+    case PASS_UV:
+      return "UV";
+    case PASS_OBJECT_ID:
+      return "OBJECT_ID";
+    case PASS_MATERIAL_ID:
+      return "MATERIAL_ID";
+    case PASS_MOTION:
+      return "MOTION";
+    case PASS_MOTION_WEIGHT:
+      return "MOTION_WEIGHT";
+    case PASS_RENDER_TIME:
+      return "RENDER_TIME";
+    case PASS_CRYPTOMATTE:
+      return "CRYPTOMATTE";
+    case PASS_AOV_COLOR:
+      return "AOV_COLOR";
+    case PASS_AOV_VALUE:
+      return "AOV_VALUE";
+    case PASS_ADAPTIVE_AUX_BUFFER:
+      return "ADAPTIVE_AUX_BUFFER";
+    case PASS_SAMPLE_COUNT:
+      return "SAMPLE_COUNT";
+    case PASS_DIFFUSE_COLOR:
+      return "DIFFUSE_COLOR";
+    case PASS_GLOSSY_COLOR:
+      return "GLOSSY_COLOR";
+    case PASS_TRANSMISSION_COLOR:
+      return "TRANSMISSION_COLOR";
+    case PASS_MIST:
+      return "MIST";
+    case PASS_DENOISING_COLOR:
+      return "DENOISING_COLOR";
+    case PASS_DENOISING_NORMAL:
+      return "DENOISING_NORMAL";
+    case PASS_DENOISING_ALBEDO:
+      return "DENOISING_ALBEDO";
+    case PASS_SHADOW_CATCHER:
+      return "SHADOW_CATCHER";
+    case PASS_SHADOW_CATCHER_MATTE:
+      return "SHADOW_CATCHER_MATTE";
+
+    case PASS_BAKE_PRIMITIVE:
+      return "BAKE_PRIMITIVE";
+    case PASS_BAKE_DIFFERENTIAL:
+      return "BAKE_DIFFERENTIAL";
+
+    case PASS_CATEGORY_LIGHT_END:
+    case PASS_CATEGORY_DATA_END:
+    case PASS_CATEGORY_BAKE_END:
+    case PASS_NUM:
+      LOG(DFATAL) << "Invalid value for the pass type " << static_cast<int>(type)
+                  << " (value is reserved for an internal use only).";
+      return "UNKNOWN";
+  }
+
+  LOG(DFATAL) << "Unhandled pass type " << static_cast<int>(type) << ", not supposed to happen.";
+
+  return "UNKNOWN";
+}
+
 static bool compare_pass_order(const Pass &a, const Pass &b)
 {
   if (a.components == b.components)
@@ -469,4 +591,17 @@ int Pass::get_offset(const vector<Pass> &passes, const Pass &pass)
   return PASS_UNUSED;
 }
 
+std::ostream &operator<<(std::ostream &os, const Pass &pass)
+{
+  os << "type: " << pass_type_as_string(pass.type);
+  os << ", name: \"" << pass.name << "\"";
+
+  const string flags_as_string = pass_flags_to_string(pass.flags);
+  if (!flags_as_string.empty()) {
+    os << ", " << flags_as_string;
+  }
+
+  return os;
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/pass.h b/intern/cycles/render/pass.h
index 4df90f91e68..4c784ee4d0c 100644
--- a/intern/cycles/render/pass.h
+++ b/intern/cycles/render/pass.h
@@ -25,6 +25,8 @@
 
 CCL_NAMESPACE_BEGIN
 
+const char *pass_type_as_string(const PassType type);
+
 enum PassFlag {
   PASS_FLAG_NONE = 0,
 
@@ -94,4 +96,6 @@ class Pass : public Node {
   static int get_offset(const vector<Pass> &passes, const Pass &pass);
 };
 
+std::ostream &operator<<(std::ostream &os, const Pass &pass);
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp
index fac5d85524e..da1facac3d5 100644
--- a/intern/cycles/render/scene.cpp
+++ b/intern/cycles/render/scene.cpp
@@ -585,6 +585,13 @@ void Scene::update_passes()
   }
 
   film->tag_modified();
+
+  if (VLOG_IS_ON(2)) {
+    VLOG(2) << "Effective scene passes:";
+    for (const Pass &pass : passes) {
+      VLOG(2) << "- " << pass;
+    }
+  }
 }
 
 bool Scene::load_kernels(Progress &progress, bool lock_scene)



More information about the Bf-blender-cvs mailing list