Commit: fa429b3f0cda7b78e044071c3981f2284873731f
Author: Brecht Van Lommel
Date:   Sat Mar 26 23:44:30 2016 +0100
Branches: blender-v2.77-release
https://developer.blender.org/rBfa429b3f0cda7b78e044071c3981f2284873731f

Fix T47668: Cycles OpenCL glass not rendering correctly on AMD.

Work around what appears to be a compiler bug.

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

M       intern/cycles/kernel/svm/svm_closure.h

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

diff --git a/intern/cycles/kernel/svm/svm_closure.h 
b/intern/cycles/kernel/svm/svm_closure.h
index b24873d..af16b81 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;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to