[Bf-blender-cvs] [ee50bed139f] soc-2019-cycles-procedural: Add Ceiling operator to Vector Math node.

OmarSquircleArt noreply at git.blender.org
Sun Aug 4 17:59:20 CEST 2019


Commit: ee50bed139fcbe2f5caa4105836ed1e642e154d8
Author: OmarSquircleArt
Date:   Sun Aug 4 18:00:20 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rBee50bed139fcbe2f5caa4105836ed1e642e154d8

Add Ceiling operator to Vector Math node.

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

M	intern/cycles/kernel/shaders/node_vector_math.osl
M	intern/cycles/kernel/svm/svm_math_util.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/bake.cpp
M	intern/cycles/render/nodes.cpp
M	intern/cycles/subd/subd_dice.cpp
M	intern/cycles/subd/subd_split.cpp
M	intern/cycles/util/util_math_float3.h
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/shader/nodes/node_shader_vectMath.c

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

diff --git a/intern/cycles/kernel/shaders/node_vector_math.osl b/intern/cycles/kernel/shaders/node_vector_math.osl
index c8220724801..2c67cf6b880 100644
--- a/intern/cycles/kernel/shaders/node_vector_math.osl
+++ b/intern/cycles/kernel/shaders/node_vector_math.osl
@@ -90,6 +90,9 @@ shader node_vector_math(string type = "add",
   else if (type == "floor") {
     Vector = floor(A);
   }
+  else if (type == "ceil") {
+    Vector = ceil(A);
+  }
   else if (type == "modulo") {
     Vector = mod(A, B);
   }
diff --git a/intern/cycles/kernel/svm/svm_math_util.h b/intern/cycles/kernel/svm/svm_math_util.h
index ae78e0749ab..adbf46de6f7 100644
--- a/intern/cycles/kernel/svm/svm_math_util.h
+++ b/intern/cycles/kernel/svm/svm_math_util.h
@@ -64,6 +64,9 @@ ccl_device void svm_vector_math(
     case NODE_VECTOR_MATH_FLOOR:
       *vector = floor(a);
       break;
+    case NODE_VECTOR_MATH_CEIL:
+      *vector = ceil(a);
+      break;
     case NODE_VECTOR_MATH_MODULO:
       *vector = make_float3(safe_modulo(a.x, b.x), safe_modulo(a.y, b.y), safe_modulo(a.z, b.z));
       break;
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index 971c22988f2..f8f50105fe5 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -296,6 +296,7 @@ typedef enum NodeVectorMathType {
 
   NODE_VECTOR_MATH_SNAP,
   NODE_VECTOR_MATH_FLOOR,
+  NODE_VECTOR_MATH_CEIL,
   NODE_VECTOR_MATH_MODULO,
   NODE_VECTOR_MATH_ABSOLUTE,
   NODE_VECTOR_MATH_MINIMUM,
diff --git a/intern/cycles/render/bake.cpp b/intern/cycles/render/bake.cpp
index 73893921500..56bf1295446 100644
--- a/intern/cycles/render/bake.cpp
+++ b/intern/cycles/render/bake.cpp
@@ -124,7 +124,7 @@ BakeData *BakeManager::init(const int object, const size_t tri_offset, const siz
 void BakeManager::set_shader_limit(const size_t x, const size_t y)
 {
   m_shader_limit = x * y;
-  m_shader_limit = (size_t)pow(2, ceil(log(m_shader_limit) / log(2)));
+  m_shader_limit = (size_t)pow(2, ceilf(logf(m_shader_limit) / logf(2)));
 }
 
 bool BakeManager::bake(Device *device,
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 0925b3218fb..270a69c9cd9 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -5725,6 +5725,7 @@ NODE_DEFINE(VectorMathNode)
 
   type_enum.insert("snap", NODE_VECTOR_MATH_SNAP);
   type_enum.insert("floor", NODE_VECTOR_MATH_FLOOR);
+  type_enum.insert("ceil", NODE_VECTOR_MATH_CEIL);
   type_enum.insert("modulo", NODE_VECTOR_MATH_MODULO);
   type_enum.insert("absolute", NODE_VECTOR_MATH_ABSOLUTE);
   type_enum.insert("minimum", NODE_VECTOR_MATH_MINIMUM);
diff --git a/intern/cycles/subd/subd_dice.cpp b/intern/cycles/subd/subd_dice.cpp
index fb96be5065b..914b408911e 100644
--- a/intern/cycles/subd/subd_dice.cpp
+++ b/intern/cycles/subd/subd_dice.cpp
@@ -323,8 +323,8 @@ void QuadDice::dice(SubPatch &sub, EdgeFactors &ef)
   float S = 1.0f;
 #endif
 
-  Mu = max((int)ceil(S * Mu), 2);  // XXX handle 0 & 1?
-  Mv = max((int)ceil(S * Mv), 2);  // XXX handle 0 & 1?
+  Mu = max((int)ceilf(S * Mu), 2);  // XXX handle 0 & 1?
+  Mv = max((int)ceilf(S * Mv), 2);  // XXX handle 0 & 1?
 
   /* reserve space for new verts */
   int offset = params.mesh->verts.size();
diff --git a/intern/cycles/subd/subd_split.cpp b/intern/cycles/subd/subd_split.cpp
index 1c99ca80507..e5b85fcfd60 100644
--- a/intern/cycles/subd/subd_split.cpp
+++ b/intern/cycles/subd/subd_split.cpp
@@ -80,9 +80,9 @@ int DiagSplit::T(Patch *patch, float2 Pstart, float2 Pend)
     Plast = P;
   }
 
-  int tmin = (int)ceil(Lsum / params.dicing_rate);
-  int tmax = (int)ceil((params.test_steps - 1) * Lmax /
-                       params.dicing_rate);  // XXX paper says N instead of N-1, seems wrong?
+  int tmin = (int)ceilf(Lsum / params.dicing_rate);
+  int tmax = (int)ceilf((params.test_steps - 1) * Lmax /
+                        params.dicing_rate);  // XXX paper says N instead of N-1, seems wrong?
 
   if (tmax - tmin > params.split_threshold)
     return DSPLIT_NON_UNIFORM;
diff --git a/intern/cycles/util/util_math_float3.h b/intern/cycles/util/util_math_float3.h
index 088341c3de3..095134cc13e 100644
--- a/intern/cycles/util/util_math_float3.h
+++ b/intern/cycles/util/util_math_float3.h
@@ -60,6 +60,7 @@ ccl_device_inline float3 mix(const float3 &a, const float3 &b, float t);
 ccl_device_inline float3 rcp(const float3 &a);
 ccl_device_inline float3 sqrt(const float3 &a);
 ccl_device_inline float3 floor(const float3 &a);
+ccl_device_inline float3 ceil(const float3 &a);
 #endif /* !__KERNEL_OPENCL__ */
 
 ccl_device_inline float min3(float3 a);
@@ -302,6 +303,15 @@ ccl_device_inline float3 floor(const float3 &a)
 #  endif
 }
 
+ccl_device_inline float3 ceil(const float3 &a)
+{
+#  ifdef __KERNEL_SSE__
+  return float3(_mm_ceil_ps(a));
+#  else
+  return make_float3(ceilf(a.x), ceilf(a.y), ceilf(a.z));
+#  endif
+}
+
 ccl_device_inline float3 mix(const float3 &a, const float3 &b, float t)
 {
   return a + t * (b - a);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index c830e08c99f..07bca5737e5 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -552,6 +552,11 @@ void vec_math_floor(vec3 a, vec3 b, float scale, out vec3 outvec, out float outv
   outvec = floor(a);
 }
 
+void vec_math_ceil(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
+{
+  outvec = ceil(a);
+}
+
 void vec_math_modulo(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
   math_modulo(a.x, b.x, outvec.x);
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index d1c9ba02fb1..63a19aa6c65 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1223,10 +1223,11 @@ enum {
 
   NODE_VECTOR_MATH_SNAP = 12,
   NODE_VECTOR_MATH_FLOOR = 13,
-  NODE_VECTOR_MATH_MODULO = 14,
-  NODE_VECTOR_MATH_ABSOLUTE = 15,
-  NODE_VECTOR_MATH_MINIMUM = 16,
-  NODE_VECTOR_MATH_MAXIMUM = 17,
+  NODE_VECTOR_MATH_CEIL = 14,
+  NODE_VECTOR_MATH_MODULO = 15,
+  NODE_VECTOR_MATH_ABSOLUTE = 16,
+  NODE_VECTOR_MATH_MINIMUM = 17,
+  NODE_VECTOR_MATH_MAXIMUM = 18,
 };
 
 /* mix rgb node flags */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 48b3ddf3b26..60b35b5e35d 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -169,6 +169,7 @@ const EnumPropertyItem rna_enum_node_vec_math_items[] = {
     {0, "", ICON_NONE, NULL, NULL},
     {NODE_VECTOR_MATH_SNAP, "SNAP", 0, "Snap", "Round A to the nearest integer multiple of B"},
     {NODE_VECTOR_MATH_FLOOR, "FLOOR", 0, "Floor", "Entrywise floor"},
+    {NODE_VECTOR_MATH_CEIL, "CEIL", 0, "Ceil", "Entrywise ceil"},
     {NODE_VECTOR_MATH_MODULO, "MODULO", 0, "Modulo", "Entrywise modulo"},
     {NODE_VECTOR_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Entrywise absolute"},
     {NODE_VECTOR_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "Entrywise minimum"},
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
index ea1b56be15f..56ccb2e69a5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
@@ -57,6 +57,7 @@ static int gpu_shader_vect_math(GPUMaterial *mat,
 
       [NODE_VECTOR_MATH_SNAP] = "vec_math_snap",
       [NODE_VECTOR_MATH_FLOOR] = "vec_math_floor",
+      [NODE_VECTOR_MATH_CEIL] = "vec_math_ceil",
       [NODE_VECTOR_MATH_MODULO] = "vec_math_modulo",
       [NODE_VECTOR_MATH_ABSOLUTE] = "vec_math_absolute",
       [NODE_VECTOR_MATH_MINIMUM] = "vec_math_minimum",
@@ -77,6 +78,7 @@ static void node_shader_update_vec_math(bNodeTree *UNUSED(ntree), bNode *node)
 
   nodeSetSocketAvailability(sockB,
                             !ELEM(node->custom1,
+                                  NODE_VECTOR_MATH_CEIL,
                                   NODE_VECTOR_MATH_SCALE,
                                   NODE_VECTOR_MATH_FLOOR,
                                   NODE_VECTOR_MATH_LENGTH,



More information about the Bf-blender-cvs mailing list