[Bf-blender-cvs] [51380b9346a] master: Fix Cycles Metal build error and GCC warning after recent changes

Brecht Van Lommel noreply at git.blender.org
Wed Mar 23 23:26:50 CET 2022


Commit: 51380b9346a5115bbbaf064387509d96bdf21a43
Author: Brecht Van Lommel
Date:   Wed Mar 23 22:46:17 2022 +0100
Branches: master
https://developer.blender.org/rB51380b9346a5115bbbaf064387509d96bdf21a43

Fix Cycles Metal build error and GCC warning after recent changes

Function overloading of make_float4() doesn't work since it's a macro, just
don't do this minor cleanup then.

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

M	intern/cycles/kernel/closure/bsdf_hair_principled.h
M	intern/cycles/kernel/device/cpu/image.h
M	intern/cycles/util/math_float4.h
M	intern/cycles/util/types_float4.h
M	intern/cycles/util/types_float4_impl.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index fb65d744a0c..33706213403 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -220,7 +220,7 @@ ccl_device_inline void hair_attenuation(KernelGlobals kg,
                                         ccl_private float4 *Ap)
 {
   /* Primary specular (R). */
-  Ap[0] = make_float4(f);
+  Ap[0] = make_float4(f, f, f, f);
 
   /* Transmission (TT). */
   float3 col = sqr(1.0f - f) * T;
diff --git a/intern/cycles/kernel/device/cpu/image.h b/intern/cycles/kernel/device/cpu/image.h
index ebddc1989bd..3b714a3e580 100644
--- a/intern/cycles/kernel/device/cpu/image.h
+++ b/intern/cycles/kernel/device/cpu/image.h
@@ -31,20 +31,18 @@ ccl_device_inline float frac(float x, int *ix)
   return x - (float)i;
 }
 
-template<typename ZeroT> ccl_always_inline ZeroT zero();
-
-template<> ccl_always_inline float zero<float>()
-{
-  return 0.0f;
-}
-
-template<> ccl_always_inline float4 zero<float4>()
-{
-  return zero_float4();
-}
-
 template<typename TexT, typename OutT = float4> struct TextureInterpolator {
 
+  static ccl_always_inline OutT zero()
+  {
+    if constexpr (std::is_same<OutT, float4>::value) {
+      return zero_float4();
+    }
+    else {
+      return 0.0f;
+    }
+  }
+
   static ccl_always_inline float4 read(float4 r)
   {
     return r;
@@ -99,7 +97,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
   static ccl_always_inline OutT read_clip(const TexT *data, int x, int y, int width, int height)
   {
     if (x < 0 || x >= width || y < 0 || y >= height) {
-      return zero<OutT>();
+      return zero();
     }
     return read(data[y * width + x]);
   }
@@ -118,7 +116,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
   read_clip(const TexT *data, int x, int y, int z, int width, int height, int depth)
   {
     if (x < 0 || x >= width || y < 0 || y >= height || z < 0 || z >= depth) {
-      return zero<OutT>();
+      return zero();
     }
     return read(data[x + y * width + z * width * height]);
   }
@@ -221,7 +219,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
       case EXTENSION_CLIP:
         /* No samples are inside the clip region. */
         if (ix < 0 || ix >= width || iy < 0 || iy >= height) {
-          return zero<OutT>();
+          return zero();
         }
         break;
       case EXTENSION_EXTEND:
@@ -230,7 +228,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
         break;
       default:
         kernel_assert(0);
-        return zero<OutT>();
+        return zero();
     }
 
     const TexT *data = (const TexT *)info.data;
@@ -259,7 +257,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
       case EXTENSION_CLIP:
         /* No linear samples are inside the clip region. */
         if (ix < -1 || ix >= width || iy < -1 || iy >= height) {
-          return zero<OutT>();
+          return zero();
         }
         nix = ix + 1;
         niy = iy + 1;
@@ -272,7 +270,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
         break;
       default:
         kernel_assert(0);
-        return zero<OutT>();
+        return zero();
     }
 
     const TexT *data = (const TexT *)info.data;
@@ -311,7 +309,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
       case EXTENSION_CLIP:
         /* No cubic samples are inside the clip region. */
         if (ix < -2 || ix > width || iy < -2 || iy > height) {
-          return zero<OutT>();
+          return zero();
         }
 
         pix = ix - 1;
@@ -335,7 +333,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
         break;
       default:
         kernel_assert(0);
-        return zero<OutT>();
+        return zero();
     }
 
     const TexT *data = (const TexT *)info.data;
@@ -397,7 +395,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
       case EXTENSION_CLIP:
         /* No samples are inside the clip region. */
         if (ix < 0 || ix >= width || iy < 0 || iy >= height || iz < 0 || iz >= depth) {
-          return zero<OutT>();
+          return zero();
         }
         break;
       case EXTENSION_EXTEND:
@@ -407,7 +405,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
         break;
       default:
         kernel_assert(0);
-        return zero<OutT>();
+        return zero();
     }
 
     const TexT *data = (const TexT *)info.data;
@@ -444,7 +442,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
       case EXTENSION_CLIP:
         /* No linear samples are inside the clip region. */
         if (ix < -1 || ix >= width || iy < -1 || iy >= height || iz < -1 || iz >= depth) {
-          return zero<OutT>();
+          return zero();
         }
 
         nix = ix + 1;
@@ -484,7 +482,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
         break;
       default:
         kernel_assert(0);
-        return zero<OutT>();
+        return zero();
     }
 
     return trilinear_lookup((const TexT *)info.data,
@@ -553,7 +551,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
       case EXTENSION_CLIP: {
         /* No cubic samples are inside the clip region. */
         if (ix < -2 || ix > width || iy < -2 || iy > height || iz < -2 || iz > depth) {
-          return zero<OutT>();
+          return zero();
         }
 
         pix = ix - 1;
@@ -599,7 +597,7 @@ template<typename TexT, typename OutT = float4> struct TextureInterpolator {
         break;
       default:
         kernel_assert(0);
-        return zero<OutT>();
+        return zero();
     }
     const int xc[4] = {pix, ix, nix, nnix};
     const int yc[4] = {piy, iy, niy, nniy};
diff --git a/intern/cycles/util/math_float4.h b/intern/cycles/util/math_float4.h
index 5d4da7dd30f..ae9dfe75a9c 100644
--- a/intern/cycles/util/math_float4.h
+++ b/intern/cycles/util/math_float4.h
@@ -90,13 +90,13 @@ ccl_device_inline float4 zero_float4()
 #ifdef __KERNEL_SSE__
   return float4(_mm_setzero_ps());
 #else
-  return make_float4(0.0f);
+  return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
 #endif
 }
 
 ccl_device_inline float4 one_float4()
 {
-  return make_float4(1.0f);
+  return make_float4(1.0f, 1.0f, 1.0f, 1.0f);
 }
 
 #if !defined(__KERNEL_METAL__)
@@ -149,7 +149,7 @@ ccl_device_inline float4 operator/(const float4 &a, const float4 &b)
 
 ccl_device_inline float4 operator+(const float4 &a, const float f)
 {
-  return a + make_float4(f);
+  return a + make_float4(f, f, f, f);
 }
 
 ccl_device_inline float4 operator+(const float4 &a, const float4 &b)
@@ -163,7 +163,7 @@ ccl_device_inline float4 operator+(const float4 &a, const float4 &b)
 
 ccl_device_inline float4 operator-(const float4 &a, const float f)
 {
-  return a - make_float4(f);
+  return a - make_float4(f, f, f, f);
 }
 
 ccl_device_inline float4 operator-(const float4 &a, const float4 &b)
@@ -317,7 +317,7 @@ ccl_device_inline float4 reduce_add(const float4 &a)
 #    endif
 #  else
   float sum = (a.x + a.y) + (a.z + a.w);
-  return make_float4(sum);
+  return make_float4(sum, sum, sum, sum);
 #  endif
 }
 
diff --git a/intern/cycles/util/types_float4.h b/intern/cycles/util/types_float4.h
index 0e84dfa3d64..68ba787dac0 100644
--- a/intern/cycles/util/types_float4.h
+++ b/intern/cycles/util/types_float4.h
@@ -45,7 +45,6 @@ ccl_device_inline float4 make_float4(const int4 &i);
 ccl_device_inline void print_float4(const char *label, const float4 &a);
 #endif /* __KERNEL_GPU__ */
 
-ccl_device_inline float4 make_float4(float f);
 CCL_NAMESPACE_END
 
 #endif /* __UTIL_TYPES_FLOAT4_H__ */
diff --git a/intern/cycles/util/types_float4_impl.h b/intern/cycles/util/types_float4_impl.h
index aa923eb038d..de2e7cb7061 100644
--- a/intern/cycles/util/types_float4_impl.h
+++ b/intern/cycles/util/types_float4_impl.h
@@ -89,11 +89,6 @@ ccl_device_inline void print_float4(const char *label, const float4 &a)
 {
   printf("%s: %.8f %.8f %.8f %.8f\n", label, (double)a.x, (double)a.y, (double)a.z, (double)a.w);
 }
-#else
-ccl_device_inline float4 make_float4(float f)
-{
-  return make_float4(f, f, f, f);
-}
 #endif /* __KERNEL_GPU__ */
 
 CCL_NAMESPACE_END



More information about the Bf-blender-cvs mailing list