[Bf-blender-cvs] [063d941] cycles_kernel_split: Cycles kernel split: Avoid re-fetching closure from the array

Sergey Sharybin noreply at git.blender.org
Fri May 8 14:43:27 CEST 2015


Commit: 063d941f364591bf776aff29e4840bbaf8b09e38
Author: Sergey Sharybin
Date:   Fri May 8 17:41:42 2015 +0500
Branches: cycles_kernel_split
https://developer.blender.org/rB063d941f364591bf776aff29e4840bbaf8b09e38

Cycles kernel split: Avoid re-fetching closure from the array

In the megakernel it's enough to simply increase pointer, which is in practice
generates more efficient code.

At this point AVX2 kernel gives the same assembly code in debug mode as master
branch.

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

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 d10df8a..d8da3b3 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -425,6 +425,11 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 #endif
 
 #ifdef __SUBSURFACE__
+#ifndef __SPLIT_KERNEL__
+#  define sc_next(sc) sc++
+#  else
+#  define sc_next(sc) sc = sc_fetch(sd_fetch(num_closure))
+#  endif
 		case CLOSURE_BSSRDF_CUBIC_ID:
 		case CLOSURE_BSSRDF_GAUSSIAN_ID: {
 			ShaderClosure *sc = sc_fetch(sd_fetch(num_closure));
@@ -460,7 +465,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 					sd_fetch(flag) |= bssrdf_setup(sc, (ClosureType)type);
 
 					sd_fetch(num_closure)++;
-					sc = sc_fetch(sd_fetch(num_closure));
+					sc_next(sc);
 				}
 
 				if(fabsf(weight.y) > 0.0f) {
@@ -477,7 +482,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 					sd_fetch(flag) |= bssrdf_setup(sc, (ClosureType)type);
 
 					sd_fetch(num_closure)++;
-					sc = sc_fetch(sd_fetch(num_closure));
+					sc_next(sc);
 				}
 
 				if(fabsf(weight.z) > 0.0f) {
@@ -494,12 +499,13 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 					sd_fetch(flag) |= bssrdf_setup(sc, (ClosureType)type);
 
 					sd_fetch(num_closure)++;
-					sc = sc_fetch(sd_fetch(num_closure));
+					sc_next(sc);
 				}
 			}
 
 			break;
 		}
+#  undef sc_next
 #endif
 		default:
 			break;




More information about the Bf-blender-cvs mailing list