Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2022-03-24 00:46:17 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-03-24 01:25:31 +0300
commit51380b9346a5115bbbaf064387509d96bdf21a43 (patch)
tree9ad9f1475c313cd559af72a7f9dbf3fa16dbff9d /intern/cycles/kernel
parentd84b4becd3bce34b75385155535b17d77f68578a (diff)
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.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r--intern/cycles/kernel/closure/bsdf_hair_principled.h2
-rw-r--r--intern/cycles/kernel/device/cpu/image.h50
2 files changed, 25 insertions, 27 deletions
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};