Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-01-30 16:40:37 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-02-08 16:00:48 +0300
commitb16fd220184a9172073440ed35e0eae0a15635d0 (patch)
tree0a1e1721b68be520b6b0380be911d2228174a431 /intern/cycles/kernel/kernel_shadow.h
parentda31a8283228eef0e83d4aa76d71ff57527cbab6 (diff)
Cycles: Fix regression with transparent shadows in volume
Diffstat (limited to 'intern/cycles/kernel/kernel_shadow.h')
-rw-r--r--intern/cycles/kernel/kernel_shadow.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/intern/cycles/kernel/kernel_shadow.h b/intern/cycles/kernel/kernel_shadow.h
index 73c5dbd1d2a..06a77a208cb 100644
--- a/intern/cycles/kernel/kernel_shadow.h
+++ b/intern/cycles/kernel/kernel_shadow.h
@@ -23,16 +23,23 @@ ccl_device_forceinline bool shadow_handle_transparent_isect(
KernelGlobals *kg,
ShaderData *shadow_sd,
ccl_addr_space PathState *state,
+# ifdef __VOLUME__
+ struct PathState *volume_state,
+# endif
Intersection *isect,
Ray *ray,
float3 *throughput)
{
#ifdef __VOLUME__
/* Attenuation between last surface and next surface. */
- if(state->volume_stack[0].shader != SHADER_NONE) {
+ if(volume_state->volume_stack[0].shader != SHADER_NONE) {
Ray segment_ray = *ray;
segment_ray.t = isect->t;
- kernel_volume_shadow(kg, shadow_sd, state, &segment_ray, throughput);
+ kernel_volume_shadow(kg,
+ shadow_sd,
+ volume_state,
+ &segment_ray,
+ throughput);
}
#endif
/* Setup shader data at surface. */
@@ -56,7 +63,7 @@ ccl_device_forceinline bool shadow_handle_transparent_isect(
}
#ifdef __VOLUME__
/* Exit/enter volume. */
- kernel_volume_stack_enter_exit(kg, shadow_sd, state->volume_stack);
+ kernel_volume_stack_enter_exit(kg, shadow_sd, volume_state->volume_stack);
#endif
return false;
}
@@ -163,6 +170,9 @@ ccl_device bool shadow_blocked_transparent_all_loop(KernelGlobals *kg,
if(shadow_handle_transparent_isect(kg,
shadow_sd,
state,
+#ifdef __VOLUME__
+ &ps,
+#endif
isect,
ray,
&throughput))
@@ -288,6 +298,9 @@ ccl_device bool shadow_blocked_transparent_stepped_loop(
if(shadow_handle_transparent_isect(kg,
shadow_sd,
state,
+#ifdef __VOLUME__
+ &ps,
+#endif
isect,
ray,
&throughput))