diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-03-24 03:27:38 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-03-24 18:49:46 +0300 |
commit | 2bec6f1f06dff400d3b5abd08064ef05312a29bf (patch) | |
tree | fa29587da36fa7b9bb549d7779f7728d79fa42db /intern/cycles/kernel/svm | |
parent | f8a4fb43fba508958c4f0eb350e87149d464ac55 (diff) |
Cycles: work around OpenCL performance regression after AOVs and vector rotate
We appear to be hitting some limit where adding any amount of code causes a
significant performance regression, no matter what it does. To work around
that a new node level was added.
Ref T71479
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r-- | intern/cycles/kernel/svm/svm.h | 35 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 3 |
2 files changed, 21 insertions, 17 deletions
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h index 2ce4456250f..0b2cbad4ff8 100644 --- a/intern/cycles/kernel/svm/svm.h +++ b/intern/cycles/kernel/svm/svm.h @@ -459,17 +459,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, case NODE_IES: svm_node_ies(kg, sd, stack, node, &offset); break; - case NODE_AOV_START: - if (!svm_node_aov_check(state, buffer)) { - return; - } - break; - case NODE_AOV_COLOR: - svm_node_aov_color(kg, sd, stack, node, buffer); - break; - case NODE_AOV_VALUE: - svm_node_aov_value(kg, sd, stack, node, buffer); - break; #endif /* NODES_GROUP(NODE_GROUP_LEVEL_2) */ #if NODES_GROUP(NODE_GROUP_LEVEL_3) @@ -522,11 +511,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, case NODE_CLAMP: svm_node_clamp(kg, sd, stack, node.y, node.z, node.w, &offset); break; -# if NODES_FEATURE(NODE_FEATURE_VOLUME) - case NODE_TEX_VOXEL: - svm_node_tex_voxel(kg, sd, stack, node, &offset); - break; -# endif /* NODES_FEATURE(NODE_FEATURE_VOLUME) */ # ifdef __SHADER_RAYTRACE__ case NODE_BEVEL: svm_node_bevel(kg, sd, state, stack, node); @@ -536,6 +520,25 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, break; # endif /* __SHADER_RAYTRACE__ */ #endif /* NODES_GROUP(NODE_GROUP_LEVEL_3) */ + +#if NODES_GROUP(NODE_GROUP_LEVEL_4) +# if NODES_FEATURE(NODE_FEATURE_VOLUME) + case NODE_TEX_VOXEL: + svm_node_tex_voxel(kg, sd, stack, node, &offset); + break; +# endif /* NODES_FEATURE(NODE_FEATURE_VOLUME) */ + case NODE_AOV_START: + if (!svm_node_aov_check(state, buffer)) { + return; + } + break; + case NODE_AOV_COLOR: + svm_node_aov_color(kg, sd, stack, node, buffer); + break; + case NODE_AOV_VALUE: + svm_node_aov_value(kg, sd, stack, node, buffer); + break; +#endif /* NODES_GROUP(NODE_GROUP_LEVEL_4) */ case NODE_END: return; default: diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index 38f12ebdf48..86e5a52174a 100644 --- a/intern/cycles/kernel/svm/svm_types.h +++ b/intern/cycles/kernel/svm/svm_types.h @@ -42,7 +42,8 @@ CCL_NAMESPACE_BEGIN #define NODE_GROUP_LEVEL_1 1 #define NODE_GROUP_LEVEL_2 2 #define NODE_GROUP_LEVEL_3 3 -#define NODE_GROUP_LEVEL_MAX NODE_GROUP_LEVEL_3 +#define NODE_GROUP_LEVEL_4 4 +#define NODE_GROUP_LEVEL_MAX NODE_GROUP_LEVEL_4 #define NODE_FEATURE_VOLUME (1 << 0) #define NODE_FEATURE_HAIR (1 << 1) |