[Bf-blender-cvs] [ccb866f9f68] cycles-x: Cleanup: make ShaderType a template parameter for SVM nodes

Brecht Van Lommel noreply at git.blender.org
Fri May 7 15:12:32 CEST 2021


Commit: ccb866f9f68b0e37c0ca4d159daaa5096675462f
Author: Brecht Van Lommel
Date:   Wed May 5 16:50:35 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBccb866f9f68b0e37c0ca4d159daaa5096675462f

Cleanup: make ShaderType a template parameter for SVM nodes

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

M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_closure.h

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

diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index 9ae19c3fa38..a1ae365b956 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -258,7 +258,7 @@ ccl_device_noinline void svm_eval_nodes(INTEGRATOR_STATE_CONST_ARGS,
         break;
       }
       case NODE_CLOSURE_BSDF:
-        svm_node_closure_bsdf<node_feature_mask>(kg, sd, stack, node, type, path_flag, &offset);
+        svm_node_closure_bsdf<node_feature_mask, type>(kg, sd, stack, node, path_flag, &offset);
         break;
       case NODE_CLOSURE_EMISSION:
         if (NODES_FEATURE(EMISSION)) {
@@ -414,12 +414,12 @@ ccl_device_noinline void svm_eval_nodes(INTEGRATOR_STATE_CONST_ARGS,
         break;
       case NODE_CLOSURE_VOLUME:
         if (NODES_FEATURE(VOLUME)) {
-          svm_node_closure_volume(kg, sd, stack, node, type);
+          svm_node_closure_volume<type>(kg, sd, stack, node);
         }
         break;
       case NODE_PRINCIPLED_VOLUME:
         if (NODES_FEATURE(VOLUME)) {
-          svm_node_principled_volume(kg, sd, stack, node, type, path_flag, &offset);
+          svm_node_principled_volume<type>(kg, sd, stack, node, path_flag, &offset);
         }
         break;
       case NODE_MATH:
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index a62616b3f85..27060f29a38 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -57,14 +57,9 @@ ccl_device void svm_node_glass_setup(
   }
 }
 
-template<uint node_feature_mask>
-ccl_device void svm_node_closure_bsdf(const KernelGlobals *kg,
-                                      ShaderData *sd,
-                                      float *stack,
-                                      uint4 node,
-                                      ShaderType shader_type,
-                                      int path_flag,
-                                      int *offset)
+template<uint node_feature_mask, ShaderType shader_type>
+ccl_device void svm_node_closure_bsdf(
+    const KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, int path_flag, int *offset)
 {
   uint type, param1_offset, param2_offset;
 
@@ -77,7 +72,7 @@ ccl_device void svm_node_closure_bsdf(const KernelGlobals *kg,
   uint4 data_node = read_node(kg, offset);
 
   /* Only compute BSDF for surfaces, transparent variable is shared with volume extinction. */
-  if (!NODES_FEATURE(BSDF) || mix_weight == 0.0f || shader_type != SHADER_TYPE_SURFACE) {
+  if ((!NODES_FEATURE(BSDF) || shader_type != SHADER_TYPE_SURFACE) || mix_weight == 0.0f) {
     if (type == CLOSURE_BSDF_PRINCIPLED_ID) {
       /* Read all principled BSDF extra data to get the right offset. */
       read_node(kg, offset);
@@ -910,8 +905,11 @@ ccl_device void svm_node_closure_bsdf(const KernelGlobals *kg,
   }
 }
 
-ccl_device void svm_node_closure_volume(
-    const KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, ShaderType shader_type)
+template<ShaderType shader_type>
+ccl_device void svm_node_closure_volume(const KernelGlobals *kg,
+                                        ShaderData *sd,
+                                        float *stack,
+                                        uint4 node)
 {
 #ifdef __VOLUME__
   /* Only sum extinction for volumes, variable is shared with surface transparency. */
@@ -962,13 +960,9 @@ ccl_device void svm_node_closure_volume(
 #endif
 }
 
-ccl_device void svm_node_principled_volume(const KernelGlobals *kg,
-                                           ShaderData *sd,
-                                           float *stack,
-                                           uint4 node,
-                                           ShaderType shader_type,
-                                           int path_flag,
-                                           int *offset)
+template<ShaderType shader_type>
+ccl_device void svm_node_principled_volume(
+    const KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, int path_flag, int *offset)
 {
 #ifdef __VOLUME__
   uint4 value_node = read_node(kg, offset);



More information about the Bf-blender-cvs mailing list