From 8491dba0c6bb96f9785e27429c72315ba9660511 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 8 Jan 2019 15:35:54 +0100 Subject: Fix T60300: Cycles SSS render hanging with AMD OpenCL. --- intern/cycles/kernel/split/kernel_subsurface_scatter.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'intern/cycles/kernel/split/kernel_subsurface_scatter.h') diff --git a/intern/cycles/kernel/split/kernel_subsurface_scatter.h b/intern/cycles/kernel/split/kernel_subsurface_scatter.h index c51246fbc90..08769fe303b 100644 --- a/intern/cycles/kernel/split/kernel_subsurface_scatter.h +++ b/intern/cycles/kernel/split/kernel_subsurface_scatter.h @@ -47,6 +47,11 @@ ccl_device_noinline bool kernel_split_branched_path_subsurface_indirect_light_it if(!CLOSURE_IS_BSSRDF(sc->type)) continue; + /* Closure memory will be overwritten, so read required variables now. */ + Bssrdf *bssrdf = (Bssrdf *)sc; + ClosureType bssrdf_type = sc->type; + float bssrdf_roughness = bssrdf->roughness; + /* set up random number generator */ if(branched_state->ss_next_sample == 0 && branched_state->next_hit == 0 && branched_state->next_closure == 0 && branched_state->next_sample == 0) @@ -110,10 +115,6 @@ ccl_device_noinline bool kernel_split_branched_path_subsurface_indirect_light_it *bssrdf_sd = *sd; /* note: copy happens each iteration of inner loop, this is * important as the indirect path will write into bssrdf_sd */ - Bssrdf *bssrdf = (Bssrdf *)sc; - ClosureType bssrdf_type = sc->type; - float bssrdf_roughness = bssrdf->roughness; - LocalIntersection ss_isect_private = *ss_isect; subsurface_scatter_multi_setup(kg, &ss_isect_private, -- cgit v1.2.3