[Bf-blender-cvs] [a9cb3308150] master: Cleanup: minor refactoring in preparation of main and shadow path decoupling

Brecht Van Lommel noreply at git.blender.org
Mon Oct 18 19:03:54 CEST 2021


Commit: a9cb33081506f14ffb693e3b82742a940b6c80b2
Author: Brecht Van Lommel
Date:   Mon Oct 18 18:25:56 2021 +0200
Branches: master
https://developer.blender.org/rBa9cb33081506f14ffb693e3b82742a940b6c80b2

Cleanup: minor refactoring in preparation of main and shadow path decoupling

Ref D12889

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

M	intern/cycles/kernel/integrator/integrator_shade_surface.h
M	intern/cycles/kernel/kernel_accumulate.h
M	intern/cycles/kernel/kernel_bake.h
M	intern/cycles/kernel/kernel_shader.h

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

diff --git a/intern/cycles/kernel/integrator/integrator_shade_surface.h b/intern/cycles/kernel/integrator/integrator_shade_surface.h
index bbf613a669e..08580645984 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_surface.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_surface.h
@@ -56,7 +56,7 @@ ccl_device_forceinline bool integrate_surface_holdout(KernelGlobals kg,
     if (kernel_data.background.transparent) {
       const float3 throughput = INTEGRATOR_STATE(state, path, throughput);
       const float transparent = average(holdout_weight * throughput);
-      kernel_accum_transparent(kg, state, path_flag, transparent, render_buffer);
+      kernel_accum_holdout(kg, state, path_flag, transparent, render_buffer);
     }
     if (isequal_float3(holdout_weight, one_float3())) {
       return false;
@@ -385,6 +385,14 @@ ccl_device bool integrate_surface(KernelGlobals kg,
       /* Evaluate shader. */
       PROFILING_EVENT(PROFILING_SHADE_SURFACE_EVAL);
       shader_eval_surface<node_feature_mask>(kg, state, &sd, render_buffer, path_flag);
+
+      /* Initialize additional RNG for BSDFs. */
+      if (sd.flag & SD_BSDF_NEEDS_LCG) {
+        sd.lcg_state = lcg_state_init(INTEGRATOR_STATE(state, path, rng_hash),
+                                      INTEGRATOR_STATE(state, path, rng_offset),
+                                      INTEGRATOR_STATE(state, path, sample),
+                                      0xb4bc3953);
+      }
     }
 
 #ifdef __SUBSURFACE__
diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h
index d4bb1ef8685..5f32150d33c 100644
--- a/intern/cycles/kernel/kernel_accumulate.h
+++ b/intern/cycles/kernel/kernel_accumulate.h
@@ -473,10 +473,8 @@ ccl_device_inline void kernel_accum_transparent(KernelGlobals kg,
                                                 ConstIntegratorState state,
                                                 const uint32_t path_flag,
                                                 const float transparent,
-                                                ccl_global float *ccl_restrict render_buffer)
+                                                ccl_global float *ccl_restrict buffer)
 {
-  ccl_global float *buffer = kernel_accum_pixel_render_buffer(kg, state, render_buffer);
-
   if (kernel_data.film.light_pass_flag & PASSMASK(COMBINED)) {
     kernel_write_pass_float(buffer + kernel_data.film.pass_combined + 3, transparent);
   }
@@ -484,6 +482,17 @@ ccl_device_inline void kernel_accum_transparent(KernelGlobals kg,
   kernel_accum_shadow_catcher_transparent_only(kg, path_flag, transparent, buffer);
 }
 
+/* Write holdout to render buffer. */
+ccl_device_inline void kernel_accum_holdout(KernelGlobals kg,
+                                            ConstIntegratorState state,
+                                            const uint32_t path_flag,
+                                            const float transparent,
+                                            ccl_global float *ccl_restrict render_buffer)
+{
+  ccl_global float *buffer = kernel_accum_pixel_render_buffer(kg, state, render_buffer);
+  kernel_accum_transparent(kg, state, path_flag, transparent, buffer);
+}
+
 /* Write background contribution to render buffer.
  *
  * Includes transparency, matching kernel_accum_transparent. */
@@ -501,7 +510,7 @@ ccl_device_inline void kernel_accum_background(KernelGlobals kg,
   const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag);
 
   if (is_transparent_background_ray) {
-    kernel_accum_transparent(kg, state, path_flag, transparent, render_buffer);
+    kernel_accum_transparent(kg, state, path_flag, transparent, buffer);
   }
   else {
     const int sample = INTEGRATOR_STATE(state, path, sample);
diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index 25b8ca55ead..1473e9ba8bf 100644
--- a/intern/cycles/kernel/kernel_bake.h
+++ b/intern/cycles/kernel/kernel_bake.h
@@ -76,7 +76,8 @@ ccl_device void kernel_background_evaluate(KernelGlobals kg,
   /* Evaluate shader.
    * This is being evaluated for all BSDFs, so path flag does not contain a specific type. */
   const uint32_t path_flag = PATH_RAY_EMISSION;
-  shader_eval_surface<KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT>(
+  shader_eval_surface<KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT &
+                      ~(KERNEL_FEATURE_NODE_RAYTRACE | KERNEL_FEATURE_NODE_LIGHT_PATH)>(
       kg, INTEGRATOR_STATE_NULL, &sd, NULL, path_flag);
   float3 color = shader_background_eval(&sd);
 
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index 4eded9039bd..4a5a5309c61 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -625,16 +625,6 @@ ccl_device void shader_eval_surface(KernelGlobals kg,
     }
 #endif
   }
-
-  IF_KERNEL_NODES_FEATURE(BSDF)
-  {
-    if (sd->flag & SD_BSDF_NEEDS_LCG) {
-      sd->lcg_state = lcg_state_init(INTEGRATOR_STATE(state, path, rng_hash),
-                                     INTEGRATOR_STATE(state, path, rng_offset),
-                                     INTEGRATOR_STATE(state, path, sample),
-                                     0xb4bc3953);
-    }
-  }
 }
 
 /* Volume */



More information about the Bf-blender-cvs mailing list