Commit: f298557d2035d77af35086961b137175c11201f8
Author: Mai Lavelle
Date:   Mon Nov 27 00:51:05 2017 -0500
Branches: split-kernel-faster-building
https://developer.blender.org/rBf298557d2035d77af35086961b137175c11201f8

Cycles: Split kernel_path_lamp_emission

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

M       intern/cycles/kernel/kernel_path.h

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

diff --git a/intern/cycles/kernel/kernel_path.h 
b/intern/cycles/kernel/kernel_path.h
index bfa7942e138..a2547ceddd6 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -96,14 +96,13 @@ ccl_device_forceinline bool kernel_path_scene_intersect(
        return hit;
 }
 
-ccl_device_forceinline void kernel_path_lamp_emission(
+ccl_device_forceinline ShaderEvalIntent kernel_path_lamp_emission_setup(
        KernelGlobals *kg,
        ccl_addr_space PathState *state,
        Ray *ray,
-       float3 throughput,
        ccl_addr_space Intersection *isect,
        ShaderData *emission_sd,
-       PathRadiance *L)
+       LightSample *ls)
 {
 #ifdef __LAMP_MIS__
        if(kernel_data.integrator.use_lamp_mis && !(state->flag & 
PATH_RAY_CAMERA)) {
@@ -119,11 +118,57 @@ ccl_device_forceinline void kernel_path_lamp_emission(
                light_ray.dP = ray->dP;
 
                /* intersect with lamp */
-               float3 emission;
+               return indirect_lamp_emission_setup(kg, emission_sd, state, 
&light_ray, ls);
+       }
+#endif  /* __LAMP_MIS__ */
+       return SHADER_EVAL_INTENT_SKIP;
+}
+
+ccl_device_forceinline void kernel_path_lamp_emission_finish(
+       KernelGlobals *kg,
+       ccl_addr_space PathState *state,
+       Ray *ray,
+       float3 throughput,
+       ccl_addr_space Intersection *isect,
+       ShaderData *emission_sd,
+       PathRadiance *L,
+       LightSample *ls)
+{
+#ifdef __LAMP_MIS__
+       /* ray starting from previous non-transparent bounce */
+       Ray light_ray;
 
-               if(indirect_lamp_emission(kg, emission_sd, state, &light_ray, 
&emission))
-                       path_radiance_accum_emission(L, state, throughput, 
emission);
+       light_ray.P = ray->P - state->ray_t*ray->D;
+       state->ray_t += isect->t;
+       light_ray.D = ray->D;
+       light_ray.t = state->ray_t;
+       light_ray.time = ray->time;
+       light_ray.dD = ray->dD;
+       light_ray.dP = ray->dP;
+
+       float3 emission = indirect_lamp_emission_finish(kg, emission_sd, state, 
&light_ray, ls);
+
+       path_radiance_accum_emission(L, state, throughput, emission);
+#endif  /* __LAMP_MIS__ */
+}
+
+ccl_device_forceinline void kernel_path_lamp_emission(
+       KernelGlobals *kg,
+       ccl_addr_space PathState *state,
+       Ray *ray,
+       float3 throughput,
+       ccl_addr_space Intersection *isect,
+       ShaderData *emission_sd,
+       PathRadiance *L)
+{
+#ifdef __LAMP_MIS__
+       LightSample ls;
+       ShaderEvalIntent intent = kernel_path_lamp_emission_setup(kg, state, 
ray, isect, emission_sd, &ls);
+       if(!intent) {
+               return;
        }
+       shader_eval(kg, emission_sd, state, intent);
+       kernel_path_lamp_emission_finish(kg, state, ray, throughput, isect, 
emission_sd, L, &ls);
 #endif  /* __LAMP_MIS__ */
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to