diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-03-27 01:44:30 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-03-27 01:45:18 +0300 |
commit | 273740006e19f19b702d8a0a5cfa1d5dc41eb1c8 (patch) | |
tree | ff86539f1a2bfe5f489ac8c8908447dbef177a4d | |
parent | 9317f9c05562671aaa0ac8e4d28aa1bb5e688a0b (diff) |
Fix T47668: Cycles OpenCL glass not rendering correctly on AMD.
Work around what appears to be a compiler bug.
-rw-r--r-- | intern/cycles/kernel/svm/svm_closure.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h index 3b8db6a2742..88397005b49 100644 --- a/intern/cycles/kernel/svm/svm_closure.h +++ b/intern/cycles/kernel/svm/svm_closure.h @@ -259,6 +259,8 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * break; } #endif + int num_closure = ccl_fetch(sd, num_closure); + /* index of refraction */ float eta = fmaxf(param2, 1e-5f); eta = (ccl_fetch(sd, flag) & SD_BACKFACING)? 1.0f/eta: eta; @@ -269,7 +271,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * float roughness = param1; /* reflection */ - ShaderClosure *sc = ccl_fetch_array(sd, closure, ccl_fetch(sd, num_closure)); + ShaderClosure *sc = ccl_fetch_array(sd, closure, num_closure); float3 weight = sc->weight; float sample_weight = sc->sample_weight; @@ -290,8 +292,8 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float * #endif /* refraction */ - if(ccl_fetch(sd, num_closure) < MAX_CLOSURE) { - sc = ccl_fetch_array(sd, closure, ccl_fetch(sd, num_closure)); + if(num_closure + 1 < MAX_CLOSURE) { + sc = ccl_fetch_array(sd, closure, num_closure + 1); sc->weight = weight; sc->sample_weight = sample_weight; |