[Bf-blender-cvs] [711c2d328aa] split-kernel-faster-building: Cycles: Split the indirect_background function
Mai Lavelle
noreply at git.blender.org
Tue Nov 14 07:54:15 CET 2017
Commit: 711c2d328aafd2918c30827c69d1d24c9d353f25
Author: Mai Lavelle
Date: Tue Nov 14 00:00:24 2017 -0500
Branches: split-kernel-faster-building
https://developer.blender.org/rB711c2d328aafd2918c30827c69d1d24c9d353f25
Cycles: Split the indirect_background function
===================================================================
M intern/cycles/kernel/kernel_emission.h
===================================================================
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index 65ed8edea9c..4b693a274b7 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -351,10 +351,11 @@ ccl_device_noinline bool indirect_lamp_emission(KernelGlobals *kg,
/* Indirect Background */
-ccl_device_noinline float3 indirect_background(KernelGlobals *kg,
+ccl_device_noinline bool indirect_background_setup(KernelGlobals *kg,
ShaderData *emission_sd,
ccl_addr_space PathState *state,
- ccl_addr_space Ray *ray)
+ ccl_addr_space Ray *ray,
+ ShaderEvalTask *eval_task)
{
#ifdef __BACKGROUND__
int shader = kernel_data.background.surface_shader;
@@ -367,7 +368,7 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg,
((shader & SHADER_EXCLUDE_TRANSMIT) && (state->flag & PATH_RAY_TRANSMIT)) ||
((shader & SHADER_EXCLUDE_CAMERA) && (state->flag & PATH_RAY_CAMERA)) ||
((shader & SHADER_EXCLUDE_SCATTER) && (state->flag & PATH_RAY_VOLUME_SCATTER)))
- return make_float3(0.0f, 0.0f, 0.0f);
+ return false;
}
/* evaluate background closure */
@@ -376,13 +377,25 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg,
shader_setup_from_background(kg, emission_sd, &priv_ray);
# else
shader_setup_from_background(kg, emission_sd, ray);
-# endif
+# endif /* __SPLIT_KERNEL__ */
path_state_modify_bounce(state, true);
- float3 L = shader_eval_background(kg, emission_sd, state, state->flag);
+ shader_eval_task_setup(kg, eval_task, emission_sd, SHADER_EVAL_INTENT_BACKGROUND, state->flag, 0);
+#endif /* __BACKGROUND__ */
+ return true;
+}
+
+ccl_device_noinline float3 indirect_background_finish(KernelGlobals *kg,
+ ShaderData *emission_sd,
+ ccl_addr_space PathState *state,
+ ccl_addr_space Ray *ray,
+ ShaderEvalTask *eval_task)
+{
+#ifdef __BACKGROUND__
+ float3 L = eval_task->eval_result;
path_state_modify_bounce(state, false);
-#ifdef __BACKGROUND_MIS__
+# ifdef __BACKGROUND_MIS__
/* check if background light exists or if we should skip pdf */
int res = kernel_data.integrator.pdf_background_res;
@@ -394,12 +407,29 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg,
return L*mis_weight;
}
-#endif
+# endif /* __BACKGROUND_MIS__ */
return L;
#else
return make_float3(0.8f, 0.8f, 0.8f);
-#endif
+#endif /* __BACKGROUND__ */
+}
+
+ccl_device_noinline float3 indirect_background(KernelGlobals *kg,
+ ShaderData *emission_sd,
+ ccl_addr_space PathState *state,
+ ccl_addr_space Ray *ray)
+{
+#ifdef __BACKGROUND__
+ MAKE_POINTER_TO_LOCAL_OBJ(ShaderEvalTask, shader_eval_task);
+ if(!indirect_background_setup(kg, emission_sd, state, ray, shader_eval_task)) {
+ return make_float3(0.0f, 0.0f, 0.0f);
+ }
+ shader_eval(kg, emission_sd, state, shader_eval_task);
+ return indirect_background_finish(kg, emission_sd, state, ray, shader_eval_task);
+#else
+ return make_float3(0.8f, 0.8f, 0.8f);
+#endif /* __BACKGROUND__ */
}
CCL_NAMESPACE_END
More information about the Bf-blender-cvs
mailing list