Commit: 51f1266883239a5b8697ec25c282694ef589190d
Author: Mai Lavelle
Date:   Sat Nov 11 05:56:23 2017 -0500
Branches: split-kernel-faster-building
https://developer.blender.org/rB51f1266883239a5b8697ec25c282694ef589190d

Cycles: Split apart direct_emission around shader_eval

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

M       intern/cycles/kernel/kernel_emission.h

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

diff --git a/intern/cycles/kernel/kernel_emission.h 
b/intern/cycles/kernel/kernel_emission.h
index ff60c5e93ac..65ed8edea9c 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -124,15 +124,12 @@ ccl_device_noinline float3 
direct_emissive_eval(KernelGlobals *kg,
        return direct_emissive_eval_finish(kg, emission_sd, ls, state, I, 
shader_eval_task);
 }
 
-ccl_device_noinline bool direct_emission(KernelGlobals *kg,
+ccl_device bool direct_emission_setup(KernelGlobals *kg,
                                          ShaderData *sd,
                                          ShaderData *emission_sd,
                                          LightSample *ls,
                                          ccl_addr_space PathState *state,
-                                         Ray *ray,
-                                         BsdfEval *eval,
-                                         bool *is_lamp,
-                                         float rand_terminate)
+                                         ShaderEvalTask *eval_task)
 {
        if(ls->pdf == 0.0f)
                return false;
@@ -141,15 +138,23 @@ ccl_device_noinline bool direct_emission(KernelGlobals 
*kg,
        differential3 dD = differential3_zero();
 
        /* evaluate closure */
+       direct_emissive_eval_setup(kg, emission_sd, ls, state, -ls->D, dD, 
ls->t, sd->time, eval_task);
+       return true;
+}
 
-       float3 light_eval = direct_emissive_eval(kg,
-                                                emission_sd,
-                                                ls,
-                                                state,
-                                                -ls->D,
-                                                dD,
-                                                ls->t,
-                                                sd->time);
+ccl_device bool direct_emission_finish(KernelGlobals *kg,
+                                         ShaderData *sd,
+                                         ShaderData *emission_sd,
+                                         LightSample *ls,
+                                         ccl_addr_space PathState *state,
+                                         Ray *ray,
+                                         BsdfEval *eval,
+                                         bool *is_lamp,
+                                         float rand_terminate,
+                                         ShaderEvalTask *eval_task)
+{
+       /* evaluate closure */
+       float3 light_eval = direct_emissive_eval_finish(kg, emission_sd, ls, 
state, -ls->D, eval_task);
 
        if(is_zero(light_eval))
                return false;
@@ -238,6 +243,24 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg,
        return true;
 }
 
+ccl_device_noinline bool direct_emission(KernelGlobals *kg,
+                                         ShaderData *sd,
+                                         ShaderData *emission_sd,
+                                         LightSample *ls,
+                                         ccl_addr_space PathState *state,
+                                         Ray *ray,
+                                         BsdfEval *eval,
+                                         bool *is_lamp,
+                                         float rand_terminate)
+{
+       MAKE_POINTER_TO_LOCAL_OBJ(ShaderEvalTask, shader_eval_task);
+       if(!direct_emission_setup(kg, sd, emission_sd, ls, state, 
shader_eval_task)) {
+               return false;
+       }
+       shader_eval(kg, emission_sd, state, shader_eval_task);
+       return direct_emission_finish(kg, sd, emission_sd, ls, state, ray, 
eval, is_lamp, rand_terminate, shader_eval_task);
+}
+
 /* Indirect Primitive Emission */
 
 ccl_device_noinline float3 indirect_primitive_emission(KernelGlobals *kg, 
ShaderData *sd, float t, int path_flag, float bsdf_pdf)

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

Reply via email to