[Bf-blender-cvs] [9afba294fbc] soc-2019-cycles-procedural: Refactora and clean up Vector Math GPU code.

OmarSquircleArt noreply at git.blender.org
Fri Aug 2 14:05:55 CEST 2019


Commit: 9afba294fbce4c5cff53158a1899612fc061a2ca
Author: OmarSquircleArt
Date:   Fri Aug 2 14:06:48 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB9afba294fbce4c5cff53158a1899612fc061a2ca

Refactora and clean up Vector Math GPU code.

I don't think editing the GPUNodeStack is a good idea. This should be handled another way.

===================================================================

M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/nodes/shader/nodes/node_shader_vectMath.c

===================================================================

diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 19b511b65fd..89bd2f4eb47 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -479,120 +479,102 @@ void map_range(
   }
 }
 
-void vec_math_add(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_add(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = v1 + v2;
-  outval = 0.0;
+  outvec = a + b;
 }
 
-void vec_math_subtract(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_subtract(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = v1 - v2;
-  outval = 0.0;
+  outvec = a - b;
 }
 
-void vec_math_multiply(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_multiply(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = v1 * v2;
-  outval = 0.0;
+  outvec = a * b;
 }
 
-void vec_math_divide(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_divide(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = safe_divide(v1, v2);
-  outval = 0.0;
+  outvec = safe_divide(a, b);
 }
 
-void vec_math_cross(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_cross(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = cross(v1, v2);
-  outval = 0.0;
+  outvec = cross(a, b);
 }
 
-void vec_math_project(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_project(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  float lenSquared = dot(v2, v2);
-  outvec = (lenSquared != 0.0) ? (dot(v1, v2) / lenSquared) * v2 : vec3(0.0);
-  outval = 0.0;
+  float lenSquared = dot(b, b);
+  outvec = (lenSquared != 0.0) ? (dot(a, b) / lenSquared) * b : vec3(0.0);
 }
 
-void vec_math_reflect(vec3 i, vec3 n, out vec3 outvec, out float outval)
+void vec_math_reflect(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = reflect(i, normalize(n));
-  outval = 0.0;
+  outvec = reflect(a, normalize(b));
 }
 
-void vec_math_average(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_average(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = normalize(v1 + v2);
-  outval = 0.0;
+  outvec = normalize(a + b);
 }
 
-void vec_math_dot(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_dot(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = vec3(0.0);
-  outval = dot(v1, v2);
+  outval = dot(a, b);
 }
 
-void vec_math_distance(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_distance(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = vec3(0.0);
-  outval = distance(v1, v2);
+  outval = distance(a, b);
 }
 
-void vec_math_length(vec3 v, out vec3 outvec, out float outval)
+void vec_math_length(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = vec3(0.0);
-  outval = length(v);
+  outval = length(a);
 }
 
-void vec_math_scale(vec3 v, vec3 temp, float scale, out vec3 outvec, out float outval)
+void vec_math_scale(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = v * scale;
-  outval = 0.0;
+  outvec = a * scale;
 }
 
-void vec_math_normalize(vec3 v, out vec3 outvec, out float outval)
+void vec_math_normalize(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = normalize(v);
-  outval = 0.0;
+  outvec = normalize(a);
 }
 
-void vec_math_snap(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_snap(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec.x = (v2.x != 0.0) ? floor(v1.x / v2.x) * v2.x : 0.0;
-  outvec.y = (v2.y != 0.0) ? floor(v1.y / v2.y) * v2.y : 0.0;
-  outvec.z = (v2.z != 0.0) ? floor(v1.z / v2.z) * v2.z : 0.0;
-  outval = 0.0;
+  outvec.x = (b.x != 0.0) ? floor(a.x / b.x) * b.x : 0.0;
+  outvec.y = (b.y != 0.0) ? floor(a.y / b.y) * b.y : 0.0;
+  outvec.z = (b.z != 0.0) ? floor(a.z / b.z) * b.z : 0.0;
 }
 
-void vec_math_modulo(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_modulo(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = mod(v1, v2);
-  outval = 0.0;
+  outvec = mod(a, b);
 }
 
-void vec_math_absolute(vec3 v, out vec3 outvec, out float outval)
+void vec_math_absolute(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = abs(v);
-  outval = 0.0;
+  outvec = abs(a);
 }
 
-void vec_math_minimum(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_minimum(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = min(v1, v2);
-  outval = 0.0;
+  outvec = min(a, b);
 }
 
-void vec_math_maximum(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vec_math_maximum(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
-  outvec = max(v1, v2);
-  outval = 0.0;
+  outvec = max(a, b);
 }
 
-void vec_math_mix(float strength, vec3 v1, vec3 v2, out vec3 outvec)
+void vec_math_mix(float strength, vec3 a, vec3 b, out vec3 outvec)
 {
-  outvec = strength * v1 + (1 - strength) * v2;
+  outvec = strength * a + (1 - strength) * b;
 }
 
 void vec_math_negate(vec3 v, out vec3 outv)
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
index 11278fab9a3..85015b014cf 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
@@ -63,28 +63,7 @@ static int gpu_shader_vect_math(GPUMaterial *mat,
       [NODE_VECTOR_MATH_MAXIMUM] = "vec_math_maximum",
   };
 
-  switch (node->custom1) {
-    case NODE_VECTOR_MATH_LENGTH:
-    case NODE_VECTOR_MATH_NORMALIZE:
-    case NODE_VECTOR_MATH_ABSOLUTE: {
-      GPUNodeStack tmp_in[2];
-      memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
-      memcpy(&tmp_in[1], &in[3], sizeof(GPUNodeStack));
-      GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
-      break;
-    }
-    case NODE_VECTOR_MATH_SCALE: {
-      GPU_stack_link(mat, node, names[node->custom1], in, out);
-      break;
-    }
-    default: {
-      GPUNodeStack tmp_in[3];
-      memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
-      memcpy(&tmp_in[1], &in[1], sizeof(GPUNodeStack));
-      memcpy(&tmp_in[2], &in[3], sizeof(GPUNodeStack));
-      GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
-    }
-  }
+  GPU_stack_link(mat, node, names[node->custom1], in, out);
   return true;
 }



More information about the Bf-blender-cvs mailing list