From 0c1b4c35cdf5e8d1c9f3a8dfb990813f914fda59 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 14 Jun 2014 12:28:49 +0200 Subject: [PATCH] Code cleanup: Avoid duplicate functions for vector combination/separation in SVM. Differential Revision: https://developer.blender.org/D597 --- intern/cycles/kernel/CMakeLists.txt | 3 +- intern/cycles/kernel/svm/svm.h | 17 +++----- intern/cycles/kernel/svm/svm_sepcomb_rgb.h | 42 ------------------- ...svm_sepcomb_xyz.h => svm_sepcomb_vector.h} | 6 ++- intern/cycles/kernel/svm/svm_types.h | 6 +-- intern/cycles/render/nodes.cpp | 24 +++++------ 6 files changed, 24 insertions(+), 74 deletions(-) delete mode 100644 intern/cycles/kernel/svm/svm_sepcomb_rgb.h rename intern/cycles/kernel/svm/{svm_sepcomb_xyz.h => svm_sepcomb_vector.h} (77%) diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index 9896a55cf02..6888dadc3b5 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -95,9 +95,8 @@ set(SRC_SVM_HEADERS svm/svm_noisetex.h svm/svm_normal.h svm/svm_ramp.h - svm/svm_sepcomb_rgb.h svm/svm_sepcomb_hsv.h - svm/svm_sepcomb_xyz.h + svm/svm_sepcomb_vector.h svm/svm_sky.h svm/svm_tex_coord.h svm/svm_texture.h diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h index acdc5183e18..d6663aae9db 100644 --- a/intern/cycles/kernel/svm/svm.h +++ b/intern/cycles/kernel/svm/svm.h @@ -167,9 +167,8 @@ CCL_NAMESPACE_END #include "svm_math.h" #include "svm_mix.h" #include "svm_ramp.h" -#include "svm_sepcomb_rgb.h" #include "svm_sepcomb_hsv.h" -#include "svm_sepcomb_xyz.h" +#include "svm_sepcomb_vector.h" #include "svm_musgrave.h" #include "svm_sky.h" #include "svm_tex_coord.h" @@ -328,17 +327,11 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, Shade case NODE_MIX: svm_node_mix(kg, sd, stack, node.y, node.z, node.w, &offset); break; - case NODE_SEPARATE_RGB: - svm_node_separate_rgb(sd, stack, node.y, node.z, node.w); + case NODE_SEPARATE_VECTOR: + svm_node_separate_vector(sd, stack, node.y, node.z, node.w); break; - case NODE_COMBINE_RGB: - svm_node_combine_rgb(sd, stack, node.y, node.z, node.w); - break; - case NODE_SEPARATE_XYZ: - svm_node_separate_xyz(sd, stack, node.y, node.z, node.w); - break; - case NODE_COMBINE_XYZ: - svm_node_combine_xyz(sd, stack, node.y, node.z, node.w); + case NODE_COMBINE_VECTOR: + svm_node_combine_vector(sd, stack, node.y, node.z, node.w); break; case NODE_SEPARATE_HSV: svm_node_separate_hsv(kg, sd, stack, node.y, node.z, node.w, &offset); diff --git a/intern/cycles/kernel/svm/svm_sepcomb_rgb.h b/intern/cycles/kernel/svm/svm_sepcomb_rgb.h deleted file mode 100644 index 34c4449ecdb..00000000000 --- a/intern/cycles/kernel/svm/svm_sepcomb_rgb.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2011-2013 Blender Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -CCL_NAMESPACE_BEGIN - -ccl_device void svm_node_combine_rgb(ShaderData *sd, float *stack, uint in_offset, uint color_index, uint out_offset) -{ - float color = stack_load_float(stack, in_offset); - - if (stack_valid(out_offset)) - stack_store_float(stack, out_offset+color_index, color); -} - -ccl_device void svm_node_separate_rgb(ShaderData *sd, float *stack, uint icolor_offset, uint color_index, uint out_offset) -{ - float3 color = stack_load_float3(stack, icolor_offset); - - if (stack_valid(out_offset)) { - if (color_index == 0) - stack_store_float(stack, out_offset, color.x); - else if (color_index == 1) - stack_store_float(stack, out_offset, color.y); - else - stack_store_float(stack, out_offset, color.z); - } -} - -CCL_NAMESPACE_END - diff --git a/intern/cycles/kernel/svm/svm_sepcomb_xyz.h b/intern/cycles/kernel/svm/svm_sepcomb_vector.h similarity index 77% rename from intern/cycles/kernel/svm/svm_sepcomb_xyz.h rename to intern/cycles/kernel/svm/svm_sepcomb_vector.h index f9f966451fd..c8e7e34f87d 100644 --- a/intern/cycles/kernel/svm/svm_sepcomb_xyz.h +++ b/intern/cycles/kernel/svm/svm_sepcomb_vector.h @@ -16,7 +16,9 @@ CCL_NAMESPACE_BEGIN -ccl_device void svm_node_combine_xyz(ShaderData *sd, float *stack, uint in_offset, uint vector_index, uint out_offset) +/* Vector combine / separate, used for the RGB and XYZ nodes */ + +ccl_device void svm_node_combine_vector(ShaderData *sd, float *stack, uint in_offset, uint vector_index, uint out_offset) { float vector = stack_load_float(stack, in_offset); @@ -24,7 +26,7 @@ ccl_device void svm_node_combine_xyz(ShaderData *sd, float *stack, uint in_offse stack_store_float(stack, out_offset+vector_index, vector); } -ccl_device void svm_node_separate_xyz(ShaderData *sd, float *stack, uint ivector_offset, uint vector_index, uint out_offset) +ccl_device void svm_node_separate_vector(ShaderData *sd, float *stack, uint ivector_offset, uint vector_index, uint out_offset) { float3 vector = stack_load_float3(stack, ivector_offset); diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index 29a0d264237..20c799e1805 100644 --- a/intern/cycles/kernel/svm/svm_types.h +++ b/intern/cycles/kernel/svm/svm_types.h @@ -78,10 +78,8 @@ typedef enum NodeType { NODE_CLOSURE_HOLDOUT, NODE_LAYER_WEIGHT, NODE_CLOSURE_VOLUME, - NODE_SEPARATE_RGB, - NODE_COMBINE_RGB, - NODE_SEPARATE_XYZ, - NODE_COMBINE_XYZ, + NODE_SEPARATE_VECTOR, + NODE_COMBINE_VECTOR, NODE_SEPARATE_HSV, NODE_COMBINE_HSV, NODE_HSV, diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index d49a719f4e7..a38de8a5cec 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -3042,13 +3042,13 @@ void CombineRGBNode::compile(SVMCompiler& compiler) compiler.stack_assign(color_out); compiler.stack_assign(red_in); - compiler.add_node(NODE_COMBINE_RGB, red_in->stack_offset, 0, color_out->stack_offset); + compiler.add_node(NODE_COMBINE_VECTOR, red_in->stack_offset, 0, color_out->stack_offset); compiler.stack_assign(green_in); - compiler.add_node(NODE_COMBINE_RGB, green_in->stack_offset, 1, color_out->stack_offset); + compiler.add_node(NODE_COMBINE_VECTOR, green_in->stack_offset, 1, color_out->stack_offset); compiler.stack_assign(blue_in); - compiler.add_node(NODE_COMBINE_RGB, blue_in->stack_offset, 2, color_out->stack_offset); + compiler.add_node(NODE_COMBINE_VECTOR, blue_in->stack_offset, 2, color_out->stack_offset); } void CombineRGBNode::compile(OSLCompiler& compiler) @@ -3076,13 +3076,13 @@ void CombineXYZNode::compile(SVMCompiler& compiler) compiler.stack_assign(vector_out); compiler.stack_assign(x_in); - compiler.add_node(NODE_COMBINE_XYZ, x_in->stack_offset, 0, vector_out->stack_offset); + compiler.add_node(NODE_COMBINE_VECTOR, x_in->stack_offset, 0, vector_out->stack_offset); compiler.stack_assign(y_in); - compiler.add_node(NODE_COMBINE_XYZ, y_in->stack_offset, 1, vector_out->stack_offset); + compiler.add_node(NODE_COMBINE_VECTOR, y_in->stack_offset, 1, vector_out->stack_offset); compiler.stack_assign(z_in); - compiler.add_node(NODE_COMBINE_XYZ, z_in->stack_offset, 2, vector_out->stack_offset); + compiler.add_node(NODE_COMBINE_VECTOR, z_in->stack_offset, 2, vector_out->stack_offset); } void CombineXYZNode::compile(OSLCompiler& compiler) @@ -3200,13 +3200,13 @@ void SeparateRGBNode::compile(SVMCompiler& compiler) compiler.stack_assign(color_in); compiler.stack_assign(red_out); - compiler.add_node(NODE_SEPARATE_RGB, color_in->stack_offset, 0, red_out->stack_offset); + compiler.add_node(NODE_SEPARATE_VECTOR, color_in->stack_offset, 0, red_out->stack_offset); compiler.stack_assign(green_out); - compiler.add_node(NODE_SEPARATE_RGB, color_in->stack_offset, 1, green_out->stack_offset); + compiler.add_node(NODE_SEPARATE_VECTOR, color_in->stack_offset, 1, green_out->stack_offset); compiler.stack_assign(blue_out); - compiler.add_node(NODE_SEPARATE_RGB, color_in->stack_offset, 2, blue_out->stack_offset); + compiler.add_node(NODE_SEPARATE_VECTOR, color_in->stack_offset, 2, blue_out->stack_offset); } void SeparateRGBNode::compile(OSLCompiler& compiler) @@ -3234,13 +3234,13 @@ void SeparateXYZNode::compile(SVMCompiler& compiler) compiler.stack_assign(vector_in); compiler.stack_assign(x_out); - compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 0, x_out->stack_offset); + compiler.add_node(NODE_SEPARATE_VECTOR, vector_in->stack_offset, 0, x_out->stack_offset); compiler.stack_assign(y_out); - compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 1, y_out->stack_offset); + compiler.add_node(NODE_SEPARATE_VECTOR, vector_in->stack_offset, 1, y_out->stack_offset); compiler.stack_assign(z_out); - compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 2, z_out->stack_offset); + compiler.add_node(NODE_SEPARATE_VECTOR, vector_in->stack_offset, 2, z_out->stack_offset); } void SeparateXYZNode::compile(OSLCompiler& compiler)