[Bf-blender-cvs] [51f12668832] split-kernel-faster-building: Cycles: Split apart direct_emission around shader_eval
Mai Lavelle
noreply at git.blender.org
Sat Nov 11 12:48:30 CET 2017
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)
More information about the Bf-blender-cvs
mailing list