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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2016-03-27 01:44:30 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2016-03-27 01:45:18 +0300
commit273740006e19f19b702d8a0a5cfa1d5dc41eb1c8 (patch)
treeff86539f1a2bfe5f489ac8c8908447dbef177a4d /intern/cycles/kernel/svm/svm_closure.h
parent9317f9c05562671aaa0ac8e4d28aa1bb5e688a0b (diff)
Fix T47668: Cycles OpenCL glass not rendering correctly on AMD.
Work around what appears to be a compiler bug.
Diffstat (limited to 'intern/cycles/kernel/svm/svm_closure.h')
-rw-r--r--intern/cycles/kernel/svm/svm_closure.h8
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;