[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