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>2014-04-18 15:40:30 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-04-18 16:40:19 +0400
commit2a9ef256b1e6cea833855d9517916b9656527672 (patch)
treedd91b03941b78eb8b4af33f8b72029441195c287 /intern/cycles/kernel/svm
parent2d7b53331c80e878d48e3c2a6bdc81fef9a1a6e0 (diff)
Cycles: SVM optimization for mix shaders, to skip more code when the mix weight
for one of the input shaders is zero. This gives about 5% speedup for koro_final.blend. In general this is important so you can design shaders that run faster for shadows, diffuse bounces, etc, for example by skipping procedural textures or even using a single fixed color.
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r--intern/cycles/kernel/svm/svm.h9
-rw-r--r--intern/cycles/kernel/svm/svm_types.h3
2 files changed, 9 insertions, 3 deletions
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index 96c7cefbcb2..49351d14443 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -232,8 +232,13 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, Shade
case NODE_ADD_CLOSURE:
svm_node_add_closure(sd, stack, node.y, node.z, &offset, &randb, &closure_weight);
break;
- case NODE_JUMP:
- offset = node.y;
+ case NODE_JUMP_IF_ZERO:
+ if(stack_load_float(stack, node.z) == 0.0f)
+ offset += node.y;
+ break;
+ case NODE_JUMP_IF_ONE:
+ if(stack_load_float(stack, node.z) == 1.0f)
+ offset += node.y;
break;
#ifdef __IMAGE_TEXTURES__
case NODE_TEX_IMAGE:
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index 4381bfe0996..866208106dc 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -36,7 +36,8 @@ typedef enum NodeType {
NODE_CLOSURE_SET_WEIGHT,
NODE_CLOSURE_WEIGHT,
NODE_MIX_CLOSURE,
- NODE_JUMP,
+ NODE_JUMP_IF_ZERO,
+ NODE_JUMP_IF_ONE,
NODE_TEX_IMAGE,
NODE_TEX_IMAGE_BOX,
NODE_TEX_SKY,