Commit: 031620aba22d153ed71c86f8378b3637444ece3e
Author: Thomas Dinges
Date:   Sun Aug 24 16:15:57 2014 +0200
Branches: master
https://developer.blender.org/rB031620aba22d153ed71c86f8378b3637444ece3e

Cycles: Avoid redundant call to volume_stack_is_heterogeneous() for Distance 
Sampling.

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

M       intern/cycles/kernel/kernel_path.h
M       intern/cycles/kernel/kernel_volume.h

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

diff --git a/intern/cycles/kernel/kernel_path.h 
b/intern/cycles/kernel/kernel_path.h
index dfca312..0c8b462 100644
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@ -149,7 +149,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, RNG 
*rng, Ray ray,
                                /* integrate along volume segment with distance 
sampling */
                                ShaderData volume_sd;
                                VolumeIntegrateResult result = 
kernel_volume_integrate(
-                                       kg, &state, &volume_sd, &volume_ray, L, 
&throughput, rng);
+                                       kg, &state, &volume_sd, &volume_ray, L, 
&throughput, rng, heterogeneous);
 
 #ifdef __VOLUME_SCATTER__
                                if(result == VOLUME_PATH_SCATTERED) {
@@ -536,7 +536,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, 
RNG *rng, int sample,
                                /* integrate along volume segment with distance 
sampling */
                                ShaderData volume_sd;
                                VolumeIntegrateResult result = 
kernel_volume_integrate(
-                                       kg, &state, &volume_sd, &volume_ray, 
&L, &throughput, rng);
+                                       kg, &state, &volume_sd, &volume_ray, 
&L, &throughput, rng, heterogeneous);
 
 #ifdef __VOLUME_SCATTER__
                                if(result == VOLUME_PATH_SCATTERED) {
@@ -815,10 +815,11 @@ ccl_device float4 
kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
                if(state.volume_stack[0].shader != SHADER_NONE) {
                        Ray volume_ray = ray;
                        volume_ray.t = (hit)? isect.t: FLT_MAX;
+                       
+                       bool heterogeneous = volume_stack_is_heterogeneous(kg, 
state.volume_stack);
 
 #ifdef __VOLUME_DECOUPLED__
                        /* decoupled ray marching only supported on CPU */
-                       bool heterogeneous = volume_stack_is_heterogeneous(kg, 
state.volume_stack);
 
                        /* cache steps along volume for repeated sampling */
                        VolumeSegment volume_segment;
@@ -901,7 +902,7 @@ ccl_device float4 
kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
                                path_state_branch(&ps, j, num_samples);
 
                                VolumeIntegrateResult result = 
kernel_volume_integrate(
-                                       kg, &ps, &volume_sd, &volume_ray, &L, 
&tp, rng);
+                                       kg, &ps, &volume_sd, &volume_ray, &L, 
&tp, rng, heterogeneous);
                                
 #ifdef __VOLUME_SCATTER__
                                if(result == VOLUME_PATH_SCATTERED) {
diff --git a/intern/cycles/kernel/kernel_volume.h 
b/intern/cycles/kernel/kernel_volume.h
index 402867f..ea02ede 100644
--- a/intern/cycles/kernel/kernel_volume.h
+++ b/intern/cycles/kernel/kernel_volume.h
@@ -560,13 +560,12 @@ ccl_device VolumeIntegrateResult 
kernel_volume_integrate_heterogeneous_distance(
  * between the endpoints. distance sampling is used to decide if we will
  * scatter or not. */
 ccl_device_noinline VolumeIntegrateResult 
kernel_volume_integrate(KernelGlobals *kg,
-       PathState *state, ShaderData *sd, Ray *ray, PathRadiance *L, float3 
*throughput, RNG *rng)
+       PathState *state, ShaderData *sd, Ray *ray, PathRadiance *L, float3 
*throughput, RNG *rng, bool heterogeneous)
 {
        /* workaround to fix correlation bug in T38710, can find better solution
         * in random number generator later, for now this is done here to not 
impact
         * performance of rendering without volumes */
        RNG tmp_rng = cmj_hash(*rng, state->rng_offset);
-       bool heterogeneous = volume_stack_is_heterogeneous(kg, 
state->volume_stack);
 
        shader_setup_from_volume(kg, sd, ray, state->bounce, 
state->transparent_bounce);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to