[Bf-blender-cvs] [94d4cde7a4a] soc-2019-cycles-procedural: Refactor and clean up Vector Math Cycles code.
OmarSquircleArt
noreply at git.blender.org
Fri Aug 2 15:45:29 CEST 2019
Commit: 94d4cde7a4a626f41549de8820e7c2efdc872bab
Author: OmarSquircleArt
Date: Fri Aug 2 15:46:04 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB94d4cde7a4a626f41549de8820e7c2efdc872bab
Refactor and clean up Vector Math Cycles code.
===================================================================
M intern/cycles/blender/blender_shader.cpp
M intern/cycles/kernel/shaders/node_vector_math.osl
M intern/cycles/kernel/svm/svm_math.h
M intern/cycles/kernel/svm/svm_math_util.h
M intern/cycles/kernel/svm/svm_types.h
M intern/cycles/render/constant_fold.cpp
M intern/cycles/render/constant_fold.h
M intern/cycles/render/nodes.cpp
M intern/cycles/render/nodes.h
M intern/cycles/test/render_graph_finalize_test.cpp
===================================================================
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index c3ac0bfdbf1..5678f08af51 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -312,7 +312,7 @@ static ShaderNode *add_node(Scene *scene,
else if (b_node.is_a(&RNA_ShaderNodeVectorMath)) {
BL::ShaderNodeVectorMath b_vector_math_node(b_node);
VectorMathNode *vmath = new VectorMathNode();
- vmath->type = (NodeVectorMath)b_vector_math_node.operation();
+ vmath->type = (NodeVectorMathType)b_vector_math_node.operation();
node = vmath;
}
else if (b_node.is_a(&RNA_ShaderNodeVectorTransform)) {
diff --git a/intern/cycles/kernel/shaders/node_vector_math.osl b/intern/cycles/kernel/shaders/node_vector_math.osl
index 4f04558c802..496cb22cf54 100644
--- a/intern/cycles/kernel/shaders/node_vector_math.osl
+++ b/intern/cycles/kernel/shaders/node_vector_math.osl
@@ -42,64 +42,67 @@ vector snap(vector a, vector b)
}
shader node_vector_math(string type = "add",
- vector Vector1 = vector(0.0, 0.0, 0.0),
- vector Vector2 = vector(0.0, 0.0, 0.0),
- float Factor = 1.0,
+ vector A = vector(0.0, 0.0, 0.0),
+ vector B = vector(0.0, 0.0, 0.0),
+ float Scale = 1.0,
output float Value = 0.0,
output vector Vector = vector(0.0, 0.0, 0.0))
{
if (type == "add") {
- Vector = Vector1 + Vector2;
+ Vector = A + B;
}
else if (type == "subtract") {
- Vector = Vector1 - Vector2;
+ Vector = A - B;
}
else if (type == "multiply") {
- Vector = Vector1 * Vector2;
+ Vector = A * B;
}
else if (type == "divide") {
- Vector = safe_divide(Vector1, Vector2);
+ Vector = safe_divide(A, B);
}
else if (type == "cross_product") {
- Vector = cross(Vector1, Vector2);
+ Vector = cross(A, B);
}
else if (type == "project") {
- Vector = project(Vector1, Vector2);
+ Vector = project(A, B);
}
else if (type == "reflect") {
- Vector = reflect(Vector1, Vector2);
+ Vector = reflect(A, B);
}
else if (type == "average") {
- Vector = normalize(Vector1 + Vector2);
+ Vector = normalize(A + B);
}
else if (type == "dot_product") {
- Value = dot(Vector1, Vector2);
+ Value = dot(A, B);
}
else if (type == "distance") {
- Value = distance(Vector1, Vector2);
+ Value = distance(A, B);
}
else if (type == "length") {
- Value = length(Vector1);
+ Value = length(A);
}
else if (type == "scale") {
- Vector = Vector1 * Factor;
+ Vector = A * Scale;
}
else if (type == "normalize") {
- Vector = normalize(Vector1);
+ Vector = normalize(A);
}
else if (type == "snap") {
- Vector = snap(Vector1, Vector2);
+ Vector = snap(A, B);
}
else if (type == "modulo") {
- Vector = mod(Vector1, Vector2);
+ Vector = mod(A, B);
}
else if (type == "absolute") {
- Vector = abs(Vector1);
+ Vector = abs(A);
}
else if (type == "minimum") {
- Vector = min(Vector1, Vector2);
+ Vector = min(A, B);
}
else if (type == "maximum") {
- Vector = max(Vector1, Vector2);
+ Vector = max(A, B);
+ }
+ else {
+ warning("%s", "Unknown vector math operator!");
}
}
diff --git a/intern/cycles/kernel/svm/svm_math.h b/intern/cycles/kernel/svm/svm_math.h
index f5f80da5357..e570f1840af 100644
--- a/intern/cycles/kernel/svm/svm_math.h
+++ b/intern/cycles/kernel/svm/svm_math.h
@@ -38,21 +38,19 @@ ccl_device void svm_node_math(KernelGlobals *kg,
ccl_device void svm_node_vector_math(KernelGlobals *kg,
ShaderData *sd,
float *stack,
- uint itype,
- uint v1_offset,
- uint v2_offset,
+ uint type,
+ uint a_offset,
+ uint b_offset,
int *offset)
{
uint4 node1 = read_node(kg, offset);
+ float3 a = stack_load_float3(stack, a_offset);
+ float3 b = stack_load_float3(stack, b_offset);
+ float scale = stack_load_float(stack, node1.y);
- NodeVectorMath type = (NodeVectorMath)itype;
- float3 v1 = stack_load_float3(stack, v1_offset);
- float3 v2 = stack_load_float3(stack, v2_offset);
- float fac = stack_load_float(stack, node1.y);
float f;
float3 v;
-
- svm_vector_math(&f, &v, type, v1, v2, fac);
+ svm_vector_math(&f, &v, (NodeVectorMathType)type, a, b, scale);
if (stack_valid(node1.z))
stack_store_float(stack, node1.z, f);
diff --git a/intern/cycles/kernel/svm/svm_math_util.h b/intern/cycles/kernel/svm/svm_math_util.h
index 17a40223f68..9ba1e31b1d7 100644
--- a/intern/cycles/kernel/svm/svm_math_util.h
+++ b/intern/cycles/kernel/svm/svm_math_util.h
@@ -17,88 +17,68 @@
CCL_NAMESPACE_BEGIN
ccl_device void svm_vector_math(
- float *Fac, float3 *Vector, NodeVectorMath type, float3 Vector1, float3 Vector2, float Factor)
+ float *value, float3 *vector, NodeVectorMathType type, float3 a, float3 b, float scale)
{
switch (type) {
case NODE_VECTOR_MATH_ADD:
- *Vector = Vector1 + Vector2;
- *Fac = 0.0f;
+ *vector = a + b;
break;
case NODE_VECTOR_MATH_SUBTRACT:
- *Vector = Vector1 - Vector2;
- *Fac = 0.0f;
+ *vector = a - b;
break;
case NODE_VECTOR_MATH_MULTIPLY:
- *Vector = Vector1 * Vector2;
- *Fac = 0.0f;
+ *vector = a * b;
break;
case NODE_VECTOR_MATH_DIVIDE:
- *Vector = safe_divide_float3_float3(Vector1, Vector2);
- *Fac = 0.0f;
+ *vector = safe_divide_float3_float3(a, b);
break;
case NODE_VECTOR_MATH_CROSS_PRODUCT:
- *Vector = cross(Vector1, Vector2);
- *Fac = 0.0f;
+ *vector = cross(a, b);
break;
case NODE_VECTOR_MATH_PROJECT:
- *Vector = project(Vector1, Vector2);
- *Fac = 0.0f;
+ *vector = project(a, b);
break;
case NODE_VECTOR_MATH_REFLECT:
- *Vector = reflect(Vector1, Vector2);
- *Fac = 0.0f;
+ *vector = reflect(a, b);
break;
case NODE_VECTOR_MATH_AVERAGE:
- *Vector = safe_normalize(Vector1 + Vector2);
- *Fac = 0.0f;
+ *vector = safe_normalize(a + b);
break;
case NODE_VECTOR_MATH_DOT_PRODUCT:
- *Vector = make_float3(0.0f, 0.0f, 0.0f);
- *Fac = dot(Vector1, Vector2);
+ *value = dot(a, b);
break;
case NODE_VECTOR_MATH_DISTANCE:
- *Vector = make_float3(0.0f, 0.0f, 0.0f);
- *Fac = len(Vector1 - Vector2);
+ *value = len(a - b);
break;
case NODE_VECTOR_MATH_LENGTH:
- *Vector = make_float3(0.0f, 0.0f, 0.0f);
- *Fac = len(Vector1);
+ *value = len(a);
break;
case NODE_VECTOR_MATH_SCALE:
- *Vector = Vector1 * Factor;
- *Fac = 0.0f;
+ *vector = a * scale;
break;
case NODE_VECTOR_MATH_NORMALIZE:
- *Vector = safe_normalize(Vector1);
- *Fac = 0.0f;
+ *vector = safe_normalize(a);
break;
case NODE_VECTOR_MATH_SNAP:
- *Vector = make_float3(floorf(safe_divide(Vector1.x, Vector2.x)) * Vector2.x,
- floorf(safe_divide(Vector1.y, Vector2.y)) * Vector2.y,
- floorf(safe_divide(Vector1.z, Vector2.z)) * Vector2.z);
- *Fac = 0.0f;
+ *vector = make_float3(floorf(safe_divide(a.x, b.x)) * b.x,
+ floorf(safe_divide(a.y, b.y)) * b.y,
+ floorf(safe_divide(a.z, b.z)) * b.z);
break;
case NODE_VECTOR_MATH_MODULO:
- *Vector = make_float3(safe_modulo(Vector1.x, Vector2.x),
- safe_modulo(Vector1.y, Vector2.y),
- safe_modulo(Vector1.z, Vector2.z));
- *Fac = 0.0f;
+ *vector = make_float3(safe_modulo(a.x, b.x), safe_modulo(a.y, b.y), safe_modulo(a.z, b.z));
break;
case NODE_VECTOR_MATH_ABSOLUTE:
- *Vector = fabs(Vector1);
- *Fac = 0.0f;
+ *vector = fabs(a);
break;
case NODE_VECTOR_MATH_MINIMUM:
- *Vector = min(Vector1, Vector2);
- *Fac = 0.0f;
+ *vector = min(a, b);
break;
case NODE_VECTOR_MATH_MAXIMUM:
- *Vector = max(Vector1, Vector2);
- *Fac = 0.0f;
+ *vector = max(a, b);
break;
default:
- *Vector = make_float3(0.0f, 0.0f, 0.0f);
- *Fac = 0.0f;
+ *vector = make_float3(0.0f, 0.0f, 0.0f);
+ *value = 0.0f;
}
}
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index 69a4a8b599f..a4bedc8ad16 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -278,7 +278,7 @@ typedef enum NodeMathType {
NODE_MATH_SQRT,
} NodeMathType;
-typedef enum NodeVectorMath {
+typedef enum NodeVectorMathType {
NODE_VECTOR_MATH_ADD,
NODE_VECTOR_MATH_SUBTRACT,
NODE_VECTOR_MATH_AVERAGE,
@@ -301,7 +301,7 @@ typedef enum NodeVectorMath {
NODE_VECTOR_MATH_ABSOLUTE,
NODE_VECTOR_MATH_MINIMUM,
NODE_VECTOR_MATH_MAXIMUM,
-} NodeVectorMath;
+} NodeVectorMathType;
typedef enum NodeMappingType {
NODE_MAPPING_TYPE_POINT,
diff --git a/intern/cycles/render/constant_fold.cpp b/intern/cycles/render/constant_fold.cpp
index 217849dba85..fad290c567d 100644
--- a/intern/cycles/render/constant_fold.cpp
+++ b/intern/cycles/render/constant_fold.cpp
@@ -359,69 +359,69 @@ void ConstantFolder::fold_math(NodeMathType type) const
}
}
-void ConstantFolder::fold_vector_math(NodeVectorMath type) const
+void ConstantFolder::fold_vector_math(NodeVectorMathType type) const
{
- ShaderInput *vector1_in = node->input("Vector1");
- ShaderInput *vector2_in = node->input("Vector2");
- ShaderInput *factor_in = node->input("Factor");
+ ShaderInput *a_in = node->input("A");
+ ShaderInput *b_in = node->input("B");
+ ShaderInput *scale_in = node->input("Scale");
switch (type) {
case NODE_VECTOR_MATH_ADD:
/* X + 0 == 0 + X == X */
- if (is_zero(vector1
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list