[Bf-blender-cvs] [2737400] master: Fix T47668: Cycles OpenCL glass not rendering correctly on AMD.

Brecht Van Lommel noreply at git.blender.org
Sat Mar 26 23:45:59 CET 2016


Commit: 273740006e19f19b702d8a0a5cfa1d5dc41eb1c8
Author: Brecht Van Lommel
Date:   Sat Mar 26 23:44:30 2016 +0100
Branches: master
https://developer.blender.org/rB273740006e19f19b702d8a0a5cfa1d5dc41eb1c8

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 3b8db6a..8839700 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;




More information about the Bf-blender-cvs mailing list