diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-18 15:40:30 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-18 16:40:19 +0400 |
commit | 2a9ef256b1e6cea833855d9517916b9656527672 (patch) | |
tree | dd91b03941b78eb8b4af33f8b72029441195c287 /intern/cycles/kernel/svm | |
parent | 2d7b53331c80e878d48e3c2a6bdc81fef9a1a6e0 (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.h | 9 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 3 |
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, |